You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.0 KiB
79 lines
2.0 KiB
import { Quality } from "@interfaces/api";
|
|
import { VideoResult } from "@interfaces/api/search";
|
|
import VideoTrending from "@interfaces/api/trending";
|
|
import VideoAPI from "@interfaces/api/video";
|
|
import Video from "@interfaces/video";
|
|
|
|
export const apiToVideo = (item: VideoTrending | VideoResult): Video => {
|
|
return {
|
|
title: item.title,
|
|
description: {
|
|
text: item.description,
|
|
html: item.descriptionHtml
|
|
},
|
|
id: item.videoId,
|
|
author: {
|
|
name: item.author,
|
|
id: item.authorId,
|
|
url: item.authorUrl
|
|
},
|
|
length: item.lengthSeconds,
|
|
published: {
|
|
time: new Date(item.published),
|
|
text: item.publishedText
|
|
},
|
|
views: item.viewCount,
|
|
live: item.liveNow,
|
|
premium: item.premium,
|
|
upcoming: item.isUpcoming,
|
|
premiereTimestamp: item.premiereTimestamp,
|
|
thumbnail: item.videoThumbnails.find(
|
|
(thumbnail) => thumbnail.quality == Quality.Maxresdefault
|
|
)?.url as string
|
|
};
|
|
};
|
|
|
|
export const videoToVideo = (item: VideoAPI): Video => {
|
|
return {
|
|
title: item.title,
|
|
views: item.viewCount,
|
|
likes: item.likeCount,
|
|
dislikes: item.dislikeCount,
|
|
id: item.videoId,
|
|
description: { html: item.descriptionHtml, text: item.description },
|
|
length: item.lengthSeconds,
|
|
live: item.liveNow,
|
|
premiered: item.premiereTimestamp
|
|
? new Date(item.premiereTimestamp)
|
|
: undefined,
|
|
premium: item.premium,
|
|
published: {
|
|
time: new Date(item.published),
|
|
text: item.publishedText
|
|
},
|
|
rating: item.rating,
|
|
genre: {
|
|
type: item.genre,
|
|
url: item.genreUrl
|
|
},
|
|
keywords: item.keywords,
|
|
familyFriendly: item.isFamilyFriendly,
|
|
subscriptions: item.subCountText,
|
|
thumbnail: item.videoThumbnails.find(
|
|
(thumbnail) => thumbnail.quality == "maxresdefault"
|
|
)?.url as string,
|
|
author: {
|
|
id: item.authorId,
|
|
name: item.author,
|
|
url: item.authorUrl,
|
|
thumbnail: item.authorThumbnails.find(
|
|
(thumbnail) => thumbnail.width == 100
|
|
)?.url as string
|
|
},
|
|
adaptiveFormats: item.adaptiveFormats,
|
|
recommendedVideos: item.recommendedVideos,
|
|
formatStreams: item.formatStreams,
|
|
captions: item.captions
|
|
};
|
|
};
|