Convert nil for AuthorFallback to empty strings

This commit is contained in:
syeopite 2021-09-28 08:19:55 -07:00
parent 6df85718e6
commit 43ea8fa706
No known key found for this signature in database
GPG Key ID: 6FA616E5A5294A82

View File

@ -16,7 +16,7 @@ private ITEM_PARSERS = {
Parsers::CategoryRendererParser, Parsers::CategoryRendererParser,
} }
record AuthorFallback, name : String? = nil, id : String? = nil record AuthorFallback, name : String, id : String
# Namespace for logic relating to parsing InnerTube data into various datastructs. # Namespace for logic relating to parsing InnerTube data into various datastructs.
# #
@ -50,8 +50,8 @@ private module Parsers
author = author_info["text"].as_s author = author_info["text"].as_s
author_id = HelperExtractors.get_browse_endpoint(author_info) author_id = HelperExtractors.get_browse_endpoint(author_info)
else else
author = author_fallback.name || "" author = author_fallback.name
author_id = author_fallback.id || "" author_id = author_fallback.id
end end
# For live videos (and possibly recently premiered videos) there is no published information. # For live videos (and possibly recently premiered videos) there is no published information.
@ -132,8 +132,8 @@ private module Parsers
end end
private def self.parse(item_contents, author_fallback) private def self.parse(item_contents, author_fallback)
author = extract_text(item_contents["title"]) || author_fallback.name || "" author = extract_text(item_contents["title"]) || author_fallback.name
author_id = item_contents["channelId"]?.try &.as_s || author_fallback.id || "" author_id = item_contents["channelId"]?.try &.as_s || author_fallback.id
author_thumbnail = HelperExtractors.get_thumbnails(item_contents) author_thumbnail = HelperExtractors.get_thumbnails(item_contents)
# When public subscriber count is disabled, the subscriberCountText isn't sent by InnerTube. # When public subscriber count is disabled, the subscriberCountText isn't sent by InnerTube.
@ -185,8 +185,8 @@ private module Parsers
SearchPlaylist.new({ SearchPlaylist.new({
title: title, title: title,
id: plid, id: plid,
author: author_fallback.name || "", author: author_fallback.name,
ucid: author_fallback.id || "", ucid: author_fallback.id,
video_count: video_count, video_count: video_count,
videos: [] of SearchPlaylistVideo, videos: [] of SearchPlaylistVideo,
thumbnail: playlist_thumbnail, thumbnail: playlist_thumbnail,
@ -516,9 +516,12 @@ end
# Parses an item from Youtube's JSON response into a more usable structure. # Parses an item from Youtube's JSON response into a more usable structure.
# The end result can either be a SearchVideo, SearchPlaylist or SearchChannel. # The end result can either be a SearchVideo, SearchPlaylist or SearchChannel.
def extract_item(item : JSON::Any, author_fallback : String? = nil, def extract_item(item : JSON::Any, author_fallback : String? = "",
author_id_fallback : String? = nil) author_id_fallback : String? = "")
author_fallback = AuthorFallback.new(author_fallback, author_id_fallback) # We "allow" nil values but secretly use empty strings instead. This is to save us the
# hassle of modifying every author_fallback and author_id_fallback arg usage
# which is more often than not nil.
author_fallback = AuthorFallback.new(author_fallback || "", author_id_fallback || "")
# Cycles through all of the item parsers and attempt to parse the raw YT JSON data. # Cycles through all of the item parsers and attempt to parse the raw YT JSON data.
# Each parser automatically validates the data given to see if the data is # Each parser automatically validates the data given to see if the data is