diff --git a/src/invidious/search.cr b/src/invidious/search.cr index 0bb7c69d..6cb61e7d 100644 --- a/src/invidious/search.cr +++ b/src/invidious/search.cr @@ -1,3 +1,6 @@ +class ChannelSearchException < InfoException +end + def channel_search(query, page, channel) response = YT_POOL.client &.get("/channel/#{channel}") @@ -6,7 +9,7 @@ def channel_search(query, page, channel) response = YT_POOL.client &.get("/c/#{channel}") if response.status_code == 404 initial_data = extract_initial_data(response.body) ucid = initial_data.dig?("header", "c4TabbedHeaderRenderer", "channelId").try(&.as_s?) - raise InfoException.new("Impossible to extract channel ID from page") if !ucid + raise ChannelSearchException.new("Impossible to extract channel ID from page") if !ucid else ucid = channel end @@ -210,7 +213,13 @@ def process_search_query(query, page, user, region) search_query = (query.split(" ") - operators).join(" ") if channel - count, items = channel_search(search_query, page, channel) + begin + count, items = channel_search(search_query, page, channel) + rescue ChannelSearchException + # most likely reason for this is that they provided an invalid channel id to the search + count = 0 + items = [] of ChannelVideo + end elsif subscriptions if view_name items = PG_DB.query_all("SELECT id,title,published,updated,ucid,author,length_seconds FROM (