import Innertube from "./innertube"; import constants from "./constants"; // Pointer object, give a key and it will return with a method function useRender (video, renderer) { switch(renderer) { case "videoWithContextRenderer": return videoWithContextRenderer(video) case "gridVideoRenderer": return gridVideoRenderer(video) case "compactAutoplayRenderer": return compactAutoplayRenderer(video) default: return undefined } } function gridVideoRenderer(video) { return { id: video.videoId, title: video.title?.runs[0].text, thumbnail: Innertube.getThumbnail(video.videoId, "max"), channel: video.shortBylineText?.runs[0] ? video.shortBylineText.runs[0].text : video.longBylineText?.runs[0].text, channelId: (video.shortBylineText?.runs[0] ? video.shortBylineText.runs[0] : video.longBylineText?.runs[0]).navigationEndpoint?.browseEndpoint?.browseId, channelURL: `${constants.YT_URL}/${(video.shortBylineText?.runs[0] ? video.shortBylineText.runs[0] : video.longBylineText?.runs[0]).navigationEndpoint?.browseEndpoint?.canonicalBaseUrl}`, channelThumbnail: video.channelThumbnail?.thumbnails[0], metadata: { published: video.publishedTimeText?.runs[0].text, views: video.shortViewCountText?.runs[0].text, length: video.lengthText?.runs[0].text, overlayStyle: video.thumbnailOverlays?.map(overlay => overlay.thumbnailOverlayTimeStatusRenderer?.style), overlay: video.thumbnailOverlays?.map(overlay => overlay.thumbnailOverlayTimeStatusRenderer?.text.runs[0].text), }, }; } function videoWithContextRenderer(video) { return { id: video.videoId, title: video.headline?.runs[0].text, thumbnail: Innertube.getThumbnail(video.videoId, "max"), channel: video.shortBylineText?.runs[0].text, channelURL: video.channelThumbnail?.channelThumbnailWithLinkRenderer?.navigationEndpoint?.browseEndpoint?.canonicalBaseUrl, channelId: video.channelThumbnail?.channelThumbnailWithLinkRenderer?.navigationEndpoint?.browseEndpoint?.browseId, channelThumbnail: video.channelThumbnail?.channelThumbnailWithLinkRenderer?.thumbnail.thumbnails[0].url, metadata: { views: video.shortViewCountText?.runs[0].text, length: video.lengthText?.runs[0].text, overlayStyle: video.thumbnailOverlays?.map(overlay => overlay.thumbnailOverlayTimeStatusRenderer?.style), overlay: video.thumbnailOverlays?.map(overlay => overlay.thumbnailOverlayTimeStatusRenderer?.text.runs[0].text), isWatched: video.isWatched, }, } } function compactAutoplayRenderer(video) { video = video.contents let item; if (video) item = video[0] if (item) return useRender(item[Object.keys(item)[0]], Object.keys(item)[0]) else return undefined } export default useRender