diff --git a/assets/css/default.css b/assets/css/default.css index 726a4c377..271aec30d 100644 --- a/assets/css/default.css +++ b/assets/css/default.css @@ -418,7 +418,7 @@ p.channel-name { margin: 0; overflow-wrap: anywhere;} p.video-data { margin: 0; font-weight: bold; font-size: 80%; } .channel-profile > .channel-name, -.channel-profile > .channel-name-pronouns > .channel-name +.channel-profile > .channel-name-pronouns > .channel-name { overflow-wrap: anywhere; } @@ -909,4 +909,8 @@ h1, h2, h3, h4, h5, p, padding-left: 10px; display: inline-block; vertical-align: top; -} \ No newline at end of file +} + +#comments-turned-off-on-video-message > p, #comments-disabled-message > p { + text-align: center; +} diff --git a/assets/js/comments.js b/assets/js/comments.js index 35ffa96e5..848d36fb5 100644 --- a/assets/js/comments.js +++ b/assets/js/comments.js @@ -53,6 +53,10 @@ function show_youtube_replies(event) { } function get_youtube_comments() { + if (!video_data.comments_enabled) { + return; + }; + var comments = document.getElementById('comments'); var fallback = comments.innerHTML; diff --git a/assets/js/watch.js b/assets/js/watch.js index ee9c29e89..ad8a02d2e 100644 --- a/assets/js/watch.js +++ b/assets/js/watch.js @@ -190,8 +190,5 @@ addEventListener('load', function (e) { get_youtube_comments(); } else if (video_data.params.comments[1] === 'reddit') { get_reddit_comments(); - } else { - var comments = document.getElementById('comments'); - comments.innerHTML = ''; - } + } }); diff --git a/locales/en-US.json b/locales/en-US.json index d05c0d165..079b67743 100644 --- a/locales/en-US.json +++ b/locales/en-US.json @@ -222,6 +222,8 @@ "View Reddit comments": "View Reddit comments", "Hide replies": "Hide replies", "Show replies": "Show replies", + "youtube_comments_disabled_text": "Comments are turned off on this video", + "invidious_comments_disabled_text": "Comments are hidden as per configuration", "Incorrect password": "Incorrect password", "Wrong answer": "Wrong answer", "Erroneous CAPTCHA": "Erroneous CAPTCHA", diff --git a/src/invidious/videos.cr b/src/invidious/videos.cr index 99713d181..ba947b2b7 100644 --- a/src/invidious/videos.cr +++ b/src/invidious/videos.cr @@ -193,6 +193,11 @@ struct Video } end + # Returns true if comments are enabled on the video + def comments? + return info["commentsEnabled"].as_bool + end + # Macros defining getters/setters for various types of data private macro getset_string(name) diff --git a/src/invidious/videos/parser.cr b/src/invidious/videos/parser.cr index 914c59634..27501868e 100644 --- a/src/invidious/videos/parser.cr +++ b/src/invidious/videos/parser.cr @@ -295,6 +295,20 @@ module Invidious::Videos::Parser "likeButton", "toggleButtonRenderer" ) + # Comments enabled? + comments_enabled = true + + # When comments are enabled the primary results should contain either the comments-entry-point + # or comment-item-section section + if primary_results + section = primary_results.as_a.find { |s| s.dig?("itemSectionRenderer", "sectionIdentifier") == "comment-item-section" } + + # messageRenderer should say "Comments are turned off." + if section && section.dig?("itemSectionRenderer", "contents", 0, "messageRenderer") + comments_enabled = false + end + end + if likes_button likes_txt = likes_button.dig?("accessibilityText") # Note: The like count from `toggledText` is off by one, as it would @@ -441,6 +455,7 @@ module Invidious::Videos::Parser "authorThumbnail" => JSON::Any.new(author_thumbnail.try &.as_s || ""), "authorVerified" => JSON::Any.new(author_verified || false), "subCountText" => JSON::Any.new(subs_text || "-"), + "commentsEnabled" => JSON::Any.new(comments_enabled), } return params diff --git a/src/invidious/views/watch.ecr b/src/invidious/views/watch.ecr index 796c0c914..b61e82c85 100644 --- a/src/invidious/views/watch.ecr +++ b/src/invidious/views/watch.ecr @@ -63,6 +63,7 @@ we're going to need to do it here in order to allow for translations. "preferences" => preferences, "premiere_timestamp" => video.premiere_timestamp.try &.to_unix, "vr" => video.vr?, + "comments_enabled" => video.comments?, "projection_type" => video.projection_type, "local_disabled" => CONFIG.disabled?("local"), "support_reddit" => true, @@ -289,14 +290,26 @@ we're going to need to do it here in order to allow for translations. <% end %>
- <% if nojs %> - <%= comment_html %> + <% if (params.comments <=> ["", ""]) == 0 %> +
+

<%= I18n.translate(locale, "invidious_comments_disabled_text") %>

+
<% else %> - + <% if video.comments? %> + <% if nojs %> + <%= comment_html %> + <% else %> + + <% end %> + <% else %> +
+

<%= I18n.translate(locale, "youtube_comments_disabled_text") %>

+
+ <% end %> <% end %>