From fe057c78737458132248e39b7ee7572b67f26918 Mon Sep 17 00:00:00 2001 From: Samantaz Fox Date: Tue, 22 Feb 2022 17:42:41 +0100 Subject: [PATCH] Make a function that builds the download widget's HTML --- src/invidious.cr | 2 + src/invidious/frontend/watch_page.cr | 108 +++++++++++++++++++++++++++ src/invidious/routes/watch.cr | 8 ++ src/invidious/views/watch.ecr | 36 +-------- 4 files changed, 119 insertions(+), 35 deletions(-) create mode 100644 src/invidious/frontend/watch_page.cr diff --git a/src/invidious.cr b/src/invidious.cr index d4878759..d742cd59 100644 --- a/src/invidious.cr +++ b/src/invidious.cr @@ -29,6 +29,8 @@ require "protodec/utils" require "./invidious/database/*" require "./invidious/helpers/*" require "./invidious/yt_backend/*" +require "./invidious/frontend/*" + require "./invidious/*" require "./invidious/channels/*" require "./invidious/user/*" diff --git a/src/invidious/frontend/watch_page.cr b/src/invidious/frontend/watch_page.cr new file mode 100644 index 00000000..d3a50705 --- /dev/null +++ b/src/invidious/frontend/watch_page.cr @@ -0,0 +1,108 @@ +module Invidious::Frontend::WatchPage + extend self + + # A handy structure to pass many elements at + # once to the download widget function + struct VideoAssets + getter full_videos : Array(Hash(String, JSON::Any)) + getter video_streams : Array(Hash(String, JSON::Any)) + getter audio_streams : Array(Hash(String, JSON::Any)) + getter captions : Array(Caption) + + def initialize( + @full_videos, + @video_streams, + @audio_streams, + @captions + ) + end + end + + def download_widget(locale : String, video : Video, video_assets : VideoAssets) : String + if CONFIG.disabled?("downloads") + return "

#{translate(locale, "Download is disabled.")}

" + end + + return String.build(4000) do |str| + str << "" + str << '\n' + + str << "\t
\n" + + str << "\t\t\n" + + # TODO: remove inline style + str << "\t\t\n" + str << "\t
\n" + + str << "\t\n" + + str << "\n" + end + end +end diff --git a/src/invidious/routes/watch.cr b/src/invidious/routes/watch.cr index 42bc4219..c34ce715 100644 --- a/src/invidious/routes/watch.cr +++ b/src/invidious/routes/watch.cr @@ -189,6 +189,14 @@ module Invidious::Routes::Watch return env.redirect url end + # Structure used for the download widget + video_assets = Invidious::Frontend::WatchPage::VideoAssets.new( + full_videos: fmt_stream, + video_streams: video_streams, + audio_streams: audio_streams, + captions: video.captions + ) + templated "watch" end diff --git a/src/invidious/views/watch.ecr b/src/invidious/views/watch.ecr index 2e0aee99..0e4af3ab 100644 --- a/src/invidious/views/watch.ecr +++ b/src/invidious/views/watch.ecr @@ -168,41 +168,7 @@ we're going to need to do it here in order to allow for translations. <% end %> <% end %> - <% if CONFIG.dmca_content.includes?(video.id) || CONFIG.disabled?("downloads") %> -

<%= translate(locale, "Download is disabled.") %>

- <% else %> -
-
- - -
- - -
- <% end %> + <%= Invidious::Frontend::WatchPage.download_widget(locale, video, video_assets) %>

<%= number_with_separator(video.views) %>

<%= number_with_separator(video.likes) %>