From a96d97c9d8df18c401de0535a9689d054cf4ea3d Mon Sep 17 00:00:00 2001 From: Cadence Ember Date: Sun, 18 Oct 2020 21:51:09 +1300 Subject: [PATCH] Proxy video thumbnails through selected instance --- api/channels.js | 3 ++- api/search.js | 6 ++++-- api/subscriptions.js | 3 ++- api/video.js | 13 +++++++------ pug/channel.pug | 2 +- pug/includes/video-list-item.pug | 5 +++-- pug/search.pug | 2 +- pug/subscriptions.pug | 2 +- pug/video.pug | 2 +- 9 files changed, 22 insertions(+), 16 deletions(-) diff --git a/api/channels.js b/api/channels.js index c1af36e..a520b21 100644 --- a/api/channels.js +++ b/api/channels.js @@ -11,7 +11,8 @@ module.exports = [ const settings = user.getSettingsOrDefaults() const data = await fetchChannel(id, settings.instance) const subscribed = user.isSubscribed(id) - return render(200, "pug/channel.pug", {data, subscribed}) + const instanceOrigin = settings.instance + return render(200, "pug/channel.pug", {data, subscribed, instanceOrigin}) } } ] diff --git a/api/search.js b/api/search.js index 11695db..0d9dc23 100644 --- a/api/search.js +++ b/api/search.js @@ -1,14 +1,16 @@ const fetch = require("node-fetch") const {render} = require("pinski/plugins") +const {getUser} = require("../utils/getuser") module.exports = [ { - route: "/(?:search|results)", methods: ["GET"], code: async ({url}) => { + route: "/(?:search|results)", methods: ["GET"], code: async ({req, url}) => { const query = url.searchParams.get("q") || url.searchParams.get("search_query") const fetchURL = new URL("http://localhost:3000/api/v1/search") fetchURL.searchParams.set("q", query) const results = await fetch(fetchURL.toString()).then(res => res.json()) - return render(200, "pug/search.pug", {query, results}) + const instanceOrigin = getUser(req).getSettingsOrDefaults().instance + return render(200, "pug/search.pug", {query, results, instanceOrigin}) } } ] diff --git a/api/subscriptions.js b/api/subscriptions.js index 80beaaa..d199728 100644 --- a/api/subscriptions.js +++ b/api/subscriptions.js @@ -33,7 +33,8 @@ module.exports = [ }) } } - return render(200, "pug/subscriptions.pug", {hasSubscriptions, videos, channels, refreshed, timeToPastText}) + const instanceOrigin = user.getSettingsOrDefaults().instance + return render(200, "pug/subscriptions.pug", {hasSubscriptions, videos, channels, refreshed, timeToPastText, instanceOrigin}) } } ] diff --git a/api/video.js b/api/video.js index c70736b..2f1f107 100644 --- a/api/video.js +++ b/api/video.js @@ -41,7 +41,8 @@ module.exports = [ const id = url.searchParams.get("v") const user = getUser(req) const settings = user.getSettingsOrDefaults() - const outURL = `${settings.instance}/api/v1/videos/${id}` + const instanceOrigin = settings.instance + const outURL = `${instanceOrigin}/api/v1/videos/${id}` try { const video = await fetch(outURL).then(res => res.json()) if (!video) throw new Error("The instance returned null.") @@ -57,23 +58,23 @@ module.exports = [ } } const subscribed = user.isSubscribed(video.authorId) - return render(200, "pug/video.pug", {video, subscribed}) + return render(200, "pug/video.pug", {video, subscribed, instanceOrigin}) } catch (e) { let message = pug.render("pre= error", {error: e.stack || e.toString()}) if (e instanceof fetch.FetchError) { const template = ` -p The selected instance, #[code= instance], did not respond correctly. +p The selected instance, #[code= instanceOrigin], did not respond correctly. p Requested URL: #[a(href=url)= url] ` - message = pug.render(template, {instance: settings.instance, url: outURL}) + message = pug.render(template, {instanceOrigin, url: outURL}) } else if (e instanceof InstanceError) { const template = ` p #[strong= error.message] if error.identifier p #[code= error.identifier] -p That error was generated by #[code= instance]. +p That error was generated by #[code= instanceOrigin]. ` - message = pug.render(template, {instance: settings.instance, error: e}) + message = pug.render(template, {instanceOrigin, error: e}) } return render(500, "pug/video.pug", {video: {videoId: id}, error: true, message}) } diff --git a/pug/channel.pug b/pug/channel.pug index f58ff0d..a82f297 100644 --- a/pug/channel.pug +++ b/pug/channel.pug @@ -29,4 +29,4 @@ block content .videos each video in data.latestVideos .channel-video - +video_list_item(video) + +video_list_item(video, instanceOrigin) diff --git a/pug/includes/video-list-item.pug b/pug/includes/video-list-item.pug index 7c669b9..7883a20 100644 --- a/pug/includes/video-list-item.pug +++ b/pug/includes/video-list-item.pug @@ -1,7 +1,8 @@ -mixin video_list_item(video) +mixin video_list_item(video, instanceOrigin) + - if (!instanceOrigin) instanceOrigin = "https://i.ytimg.com" - let link = `/watch?v=${video.videoId}` a(href=link tabindex="-1").thumbnail - img(src=`https://i.ytimg.com/vi/${video.videoId}/mqdefault.jpg` width=320 height=180 alt="").image + img(src=`${instanceOrigin}/vi/${video.videoId}/mqdefault.jpg` width=320 height=180 alt="").image if video.second__lengthText != undefined span.duration= video.second__lengthText .info diff --git a/pug/search.pug b/pug/search.pug index 7e2052a..159e91f 100644 --- a/pug/search.pug +++ b/pug/search.pug @@ -9,4 +9,4 @@ block content main.search-page each result in results .search-result - +video_list_item(result) + +video_list_item(result, instanceOrigin) diff --git a/pug/subscriptions.pug b/pug/subscriptions.pug index a033d32..5b65e7b 100644 --- a/pug/subscriptions.pug +++ b/pug/subscriptions.pug @@ -29,7 +29,7 @@ block content each video in videos .subscriptions-video - +video_list_item(video) + +video_list_item(video, instanceOrigin) else .no-subscriptions h2 You have no subscriptions. diff --git a/pug/video.pug b/pug/video.pug index 8555b20..f6e47fb 100644 --- a/pug/video.pug +++ b/pug/video.pug @@ -67,7 +67,7 @@ block content h2.related-header Related videos each r in video.recommendedVideos .related-video - +video_list_item(r) + +video_list_item(r, instanceOrigin) else //- error