summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/invidious/routes/search.cr2
-rw-r--r--src/invidious/search.cr11
2 files changed, 11 insertions, 2 deletions
diff --git a/src/invidious/routes/search.cr b/src/invidious/routes/search.cr
index c256d156..5e606adf 100644
--- a/src/invidious/routes/search.cr
+++ b/src/invidious/routes/search.cr
@@ -55,6 +55,8 @@ module Invidious::Routes::Search
begin
search_query, count, videos, operators = process_search_query(query, page, user, region: region)
+ rescue ex : ChannelSearchException
+ return error_template(404, "Unable to find channel with id of '#{HTML.escape(ex.channel)}'. Are you sure that's an actual channel id? It should look like 'UC4QobU6STFB0P71PMvOGN5A'.")
rescue ex
return error_template(500, ex)
end
diff --git a/src/invidious/search.cr b/src/invidious/search.cr
index 2095721c..0f6dc6eb 100644
--- a/src/invidious/search.cr
+++ b/src/invidious/search.cr
@@ -1,3 +1,10 @@
+class ChannelSearchException < InfoException
+ getter channel : String
+
+ def initialize(@channel)
+ end
+end
+
def channel_search(query, page, channel)
response = YT_POOL.client &.get("/channel/#{channel}")
@@ -5,8 +12,8 @@ def channel_search(query, page, channel)
response = YT_POOL.client &.get("/user/#{channel}")
response = YT_POOL.client &.get("/c/#{channel}") if response.status_code == 404
initial_data = extract_initial_data(response.body)
- ucid = initial_data["header"]["c4TabbedHeaderRenderer"]?.try &.["channelId"].as_s?
- raise InfoException.new("Impossible to extract channel ID from page") if !ucid
+ ucid = initial_data.dig?("header", "c4TabbedHeaderRenderer", "channelId").try(&.as_s?)
+ raise ChannelSearchException.new(channel) if !ucid
else
ucid = channel
end