summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/invidious/comments.cr57
1 files changed, 36 insertions, 21 deletions
diff --git a/src/invidious/comments.cr b/src/invidious/comments.cr
index 3a4328a5..a5617796 100644
--- a/src/invidious/comments.cr
+++ b/src/invidious/comments.cr
@@ -70,8 +70,24 @@ def fetch_youtube_comments(id, cursor, format, locale, thin_mode, region, sort_b
client_config = YoutubeAPI::ClientConfig.new(region: region)
response = YoutubeAPI.next(continuation: ctoken, client_config: client_config)
+ contents = nil
- if response["continuationContents"]?
+ if response["onResponseReceivedEndpoints"]?
+ onResponseReceivedEndpoints = response["onResponseReceivedEndpoints"]
+ header = nil
+ onResponseReceivedEndpoints.as_a.each do |item|
+ if item["reloadContinuationItemsCommand"]?
+ case item["reloadContinuationItemsCommand"]["slot"]
+ when "RELOAD_CONTINUATION_SLOT_HEADER"
+ header = item["reloadContinuationItemsCommand"]["continuationItems"][0]
+ when "RELOAD_CONTINUATION_SLOT_BODY"
+ contents = item["reloadContinuationItemsCommand"]["continuationItems"]
+ end
+ elsif item["appendContinuationItemsAction"]?
+ contents = item["appendContinuationItemsAction"]["continuationItems"]
+ end
+ end
+ elsif response["continuationContents"]?
response = response["continuationContents"]
if response["commentRepliesContinuation"]?
body = response["commentRepliesContinuation"]
@@ -83,22 +99,6 @@ def fetch_youtube_comments(id, cursor, format, locale, thin_mode, region, sort_b
if body["continuations"]?
moreRepliesContinuation = body["continuations"][0]["nextContinuationData"]["continuation"].as_s
end
- elsif response["onResponseReceivedEndpoints"]?
- onResponseReceivedEndpoints = response["onResponseReceivedEndpoints"]
- onResponseReceivedEndpoints.as_a.each do |item|
- case item["reloadContinuationItemsCommand"]["slot"]
- when "RELOAD_CONTINUATION_SLOT_HEADER"
- header = item["reloadContinuationItemsCommand"]["continuationItems"][0]
- when "RELOAD_CONTINUATION_SLOT_BODY"
- contents = item["reloadContinuationItemsCommand"]["continuationItems"]
- contents.as_a.reject! do |item|
- if item["continuationItemRenderer"]?
- moreRepliesContinuation = item["continuationItemRenderer"]["continuationEndpoint"]["continuationCommand"]["token"].as_s
- true
- end
- end
- end
- end
else
raise InfoException.new("Could not fetch comments")
end
@@ -111,6 +111,14 @@ def fetch_youtube_comments(id, cursor, format, locale, thin_mode, region, sort_b
end
end
+ continuationItemRenderer = nil
+ contents.as_a.reject! do |item|
+ if item["continuationItemRenderer"]?
+ continuationItemRenderer = item["continuationItemRenderer"]
+ true
+ end
+ end
+
response = JSON.build do |json|
json.object do
if header
@@ -126,7 +134,7 @@ def fetch_youtube_comments(id, cursor, format, locale, thin_mode, region, sort_b
json.array do
contents.as_a.each do |node|
json.object do
- if !response["commentRepliesContinuation"]?
+ if node["commentThreadRenderer"]?
node = node["commentThreadRenderer"]
end
@@ -134,7 +142,7 @@ def fetch_youtube_comments(id, cursor, format, locale, thin_mode, region, sort_b
node_replies = node["replies"]["commentRepliesRenderer"]
end
- if !response["commentRepliesContinuation"]?
+ if node["comment"]?
node_comment = node["comment"]["commentRenderer"]
else
node_comment = node["commentRenderer"]
@@ -224,8 +232,15 @@ def fetch_youtube_comments(id, cursor, format, locale, thin_mode, region, sort_b
end
end
- if moreRepliesContinuation
- json.field "continuation", moreRepliesContinuation
+ if continuationItemRenderer
+ if continuationItemRenderer["continuationEndpoint"]?
+ continuationEndpoint = continuationItemRenderer["continuationEndpoint"]
+ elsif continuationItemRenderer["button"]?
+ continuationEndpoint = continuationItemRenderer["button"]["buttonRenderer"]["command"]
+ end
+ if continuationEndpoint
+ json.field "continuation", continuationEndpoint["continuationCommand"]["token"].as_s
+ end
end
end
end