From 643675490d45101b29411a94234a9cbde336c0ed Mon Sep 17 00:00:00 2001 From: syeopite Date: Wed, 26 Mar 2025 14:57:17 -0700 Subject: [PATCH] Add setting to hide member-only videos --- locales/en-US.json | 3 ++- src/invidious/config.cr | 1 + src/invidious/routes/preferences.cr | 5 +++++ src/invidious/user/preferences.cr | 2 ++ src/invidious/views/components/items_paginated.ecr | 3 +++ src/invidious/views/feeds/trending.ecr | 1 + src/invidious/views/user/preferences.ecr | 6 ++++++ 7 files changed, 20 insertions(+), 1 deletion(-) diff --git a/locales/en-US.json b/locales/en-US.json index 78ec0203..9a7ac3cf 100644 --- a/locales/en-US.json +++ b/locales/en-US.json @@ -502,5 +502,6 @@ "carousel_slide": "Slide {{current}} of {{total}}", "carousel_skip": "Skip the Carousel", "carousel_go_to": "Go to slide `x`", - "video_badges_members_only": "Members only" + "video_badges_members_only": "Members only", + "preferences_exclude_members_only_videos_label": "Hide channel member-only videos" } diff --git a/src/invidious/config.cr b/src/invidious/config.cr index 140b0daf..c1c00c5e 100644 --- a/src/invidious/config.cr +++ b/src/invidious/config.cr @@ -52,6 +52,7 @@ struct ConfigPreferences property vr_mode : Bool = true property show_nick : Bool = true property save_player_pos : Bool = false + property exclude_members_only_videos : Bool = false def to_tuple {% begin %} diff --git a/src/invidious/routes/preferences.cr b/src/invidious/routes/preferences.cr index 39ca77c0..87fc1c67 100644 --- a/src/invidious/routes/preferences.cr +++ b/src/invidious/routes/preferences.cr @@ -144,6 +144,10 @@ module Invidious::Routes::PreferencesRoute notifications_only ||= "off" notifications_only = notifications_only == "on" + exclude_members_only_videos = env.params.body["exclude_members_only_videos"]?.try &.as(String) + exclude_members_only_videos ||= "off" + exclude_members_only_videos = exclude_members_only_videos == "on" + # Convert to JSON and back again to take advantage of converters used for compatibility preferences = Preferences.from_json({ annotations: annotations, @@ -180,6 +184,7 @@ module Invidious::Routes::PreferencesRoute vr_mode: vr_mode, show_nick: show_nick, save_player_pos: save_player_pos, + exclude_members_only_videos: exclude_members_only_videos, }.to_json) if user = env.get? "user" diff --git a/src/invidious/user/preferences.cr b/src/invidious/user/preferences.cr index 0a8525f3..979c15d0 100644 --- a/src/invidious/user/preferences.cr +++ b/src/invidious/user/preferences.cr @@ -57,6 +57,8 @@ struct Preferences property volume : Int32 = CONFIG.default_user_preferences.volume property save_player_pos : Bool = CONFIG.default_user_preferences.save_player_pos + property exclude_members_only_videos : Bool = CONFIG.default_user_preferences.exclude_members_only_videos + module BoolToString def self.to_json(value : String, json : JSON::Builder) json.string value diff --git a/src/invidious/views/components/items_paginated.ecr b/src/invidious/views/components/items_paginated.ecr index f69df3fe..1863b7d4 100644 --- a/src/invidious/views/components/items_paginated.ecr +++ b/src/invidious/views/components/items_paginated.ecr @@ -1,7 +1,10 @@ <%= page_nav_html %> +<% exclude_members_only_videos = env.get("preferences").as(Preferences).exclude_members_only_videos %>
<%- items.each do |item| -%> + <% next if exclude_members_only_videos && item.responds_to?(:badges) && + item.is_a? SearchVideo && item.badges.members_only? %> <%= rendered "components/item" %> <%- end -%>
diff --git a/src/invidious/views/feeds/trending.ecr b/src/invidious/views/feeds/trending.ecr index 7dc416c6..002f3a72 100644 --- a/src/invidious/views/feeds/trending.ecr +++ b/src/invidious/views/feeds/trending.ecr @@ -42,6 +42,7 @@
<% trending.each do |item| %> + <% next %> <%= rendered "components/item" %> <% end %>
diff --git a/src/invidious/views/user/preferences.ecr b/src/invidious/views/user/preferences.ecr index cf8b5593..dd324879 100644 --- a/src/invidious/views/user/preferences.ecr +++ b/src/invidious/views/user/preferences.ecr @@ -194,6 +194,12 @@ <% end %> + +
+ + checked<% end %>> +
+ <% if env.get? "user" %>