Manually extract category refactor from 1b569bbc99

Also fixes some errors caused by cherry-picking
This commit is contained in:
syeopite 2021-06-28 23:11:04 -07:00
parent abca8f7a7c
commit be1a43a337
No known key found for this signature in database
GPG Key ID: 6FA616E5A5294A82
5 changed files with 11 additions and 41 deletions

View File

@ -6,6 +6,7 @@ require "spec"
require "yaml" require "yaml"
require "../src/invidious/helpers/*" require "../src/invidious/helpers/*"
require "../src/invidious/channels/*" require "../src/invidious/channels/*"
require "../src/invidious/videos"
require "../src/invidious/comments" require "../src/invidious/comments"
require "../src/invidious/playlists" require "../src/invidious/playlists"
require "../src/invidious/search" require "../src/invidious/search"

View File

@ -205,7 +205,6 @@ private class CategoryParser < ItemParser
def parse(item_contents, author_fallback) def parse(item_contents, author_fallback)
# Title extraction is a bit complicated. There are two possible routes for it # Title extraction is a bit complicated. There are two possible routes for it
# as well as times when the title attribute just isn't sent by YT. # as well as times when the title attribute just isn't sent by YT.
title_container = item_contents["title"]? || "" title_container = item_contents["title"]? || ""
if !title_container.is_a? String if !title_container.is_a? String
if title = title_container["simpleText"]? if title = title_container["simpleText"]?
@ -217,37 +216,7 @@ private class CategoryParser < ItemParser
title = "" title = ""
end end
auxiliary_data = {} of String => String url = item_contents["endpoint"]?.try &.["commandMetadata"]["webCommandMetadata"]["url"].as_s
browse_endpoint = item_contents["endpoint"]?.try &.["browseEndpoint"] || nil
browse_endpoint_data = ""
category_type = 0 # 0: Video, 1: Channels, 2: Playlist/feed, 3: trending
# There's no endpoint data for video and trending category
if !item_contents["endpoint"]?
if !item_contents["videoId"]?
category_type = 3
end
end
if !browse_endpoint.nil?
# Playlist/feed categories doesn't need the params value (nor is it even included in yt response)
# instead it uses the browseId parameter. So if there isn't a params value we can assume the
# category is a playlist/feed
if browse_endpoint["params"]?
# However, even though the channel category type returns the browse endpoint param
# we're not going to be using it in order to preserve compatablity with Youtube.
# and for an URL that looks cleaner
url = item_contents["endpoint"]["commandMetadata"]["webCommandMetadata"]["url"]
url = URI.parse(url.as_s)
auxiliary_data["view"] = url.query_params["view"]
auxiliary_data["shelf_id"] = url.query_params["shelf_id"]
category_type = 1
else
browse_endpoint_data = browse_endpoint["browseId"].as_s
category_type = 2
end
end
# Sometimes a category can have badges. # Sometimes a category can have badges.
badges = [] of Tuple(String, String) # (Badge style, label) badges = [] of Tuple(String, String) # (Badge style, label)
@ -282,7 +251,7 @@ private class CategoryParser < ItemParser
title: title, title: title,
contents: contents, contents: contents,
description_html: description_html, description_html: description_html,
browse_endpoint_data: browse_endpoint_data, url: url,
badges: badges, badges: badges,
}) })
end end

View File

@ -230,8 +230,8 @@ class Category
include DB::Serializable include DB::Serializable
property title : String property title : String
property contents : Array(SearchItem) property contents : Array(SearchItem) | Array(Video)
property browse_endpoint_data : String? property url : String?
property description_html : String property description_html : String
property badges : Array(Tuple(String, String))? property badges : Array(Tuple(String, String))?

View File

@ -247,5 +247,5 @@ def process_search_query(query, page, user, region)
end end
end end
{search_query, items_without_category.size, items_without_category, url_params} {search_query, items_without_category.size, items_without_category, operators}
end end

View File

@ -275,7 +275,7 @@ struct Video
end end
end end
def to_json(locale, json : JSON::Builder) def to_json(locale : Hash(String, JSON::Any), json : JSON::Builder)
json.object do json.object do
json.field "type", "video" json.field "type", "video"