diff --git a/assets/css/default.css b/assets/css/default.css index 00881253..0dbed610 100644 --- a/assets/css/default.css +++ b/assets/css/default.css @@ -797,3 +797,7 @@ h1, h2, h3, h4, h5, p, #download_widget { width: 100%; } + +#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 35ffa96e..848d36fb 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 26ad138f..31c09785 100644 --- a/assets/js/watch.js +++ b/assets/js/watch.js @@ -186,8 +186,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 a9f78165..3f314788 100644 --- a/locales/en-US.json +++ b/locales/en-US.json @@ -213,6 +213,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 a8f02056..fd3ca677 100644 --- a/src/invidious/videos.cr +++ b/src/invidious/videos.cr @@ -272,6 +272,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 77520dbe..eba977f6 100644 --- a/src/invidious/videos/parser.cr +++ b/src/invidious/videos/parser.cr @@ -378,6 +378,20 @@ def parse_video_info(video_id : String, player_response : Hash(String, JSON::Any .try &.as_s.split(" ", 2)[0] end + # 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 + # Return data if live_now @@ -422,6 +436,8 @@ def parse_video_info(video_id : String, player_response : Hash(String, JSON::Any "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 07474896..f4eb4203 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.is_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 %>
<%=translate(locale, "invidious_comments_disabled_text")%>
+<%=translate(locale, "youtube_comments_disabled_text")%>
+