diff options
| author | TheFrenchGhosty <47571719+TheFrenchGhosty@users.noreply.github.com> | 2021-09-06 10:54:03 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-06 10:54:03 +0200 |
| commit | 0044178d492913e80ec92441626174d3cff8223f (patch) | |
| tree | e044d1c9e9ca860480fa2664fe4e108d01a859c9 /src | |
| parent | 0e37e42abd6d637202a74768550c852157a04223 (diff) | |
| parent | 41ba19b615b95d3c881b44131f1c61479dd157b7 (diff) | |
| download | invidious-0044178d492913e80ec92441626174d3cff8223f.tar.gz invidious-0044178d492913e80ec92441626174d3cff8223f.tar.bz2 invidious-0044178d492913e80ec92441626174d3cff8223f.zip | |
Merge pull request #2382 from unixfox/fix-comment-replies
fix comment replies
Diffstat (limited to 'src')
| -rw-r--r-- | src/invidious/comments.cr | 57 |
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 |
