summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2022-03-06 02:27:45 +0100
committerSamantaz Fox <coding@samantaz.fr>2022-03-29 20:31:23 +0200
commitfb2a331f79fcc42ac2c17ea349943ab2ba6ad0fe (patch)
tree31c2f61f0adfb571d5c69078c5018bd843488f19 /src
parentc888524523195382a5da171545441eaf0662ab01 (diff)
downloadinvidious-fb2a331f79fcc42ac2c17ea349943ab2ba6ad0fe.tar.gz
invidious-fb2a331f79fcc42ac2c17ea349943ab2ba6ad0fe.tar.bz2
invidious-fb2a331f79fcc42ac2c17ea349943ab2ba6ad0fe.zip
Add a function to parse search filters from invidious URL params
Diffstat (limited to 'src')
-rw-r--r--src/invidious/search/filters.cr36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/invidious/search/filters.cr b/src/invidious/search/filters.cr
index c5e91aae..d7154d21 100644
--- a/src/invidious/search/filters.cr
+++ b/src/invidious/search/filters.cr
@@ -192,6 +192,42 @@ module Invidious::Search
return {filters, channel, cleaned_query, subscriptions}
end
+ def self.from_iv_params(params : HTTP::Params) : Filters
+ # Temporary variables
+ filters = Filters.new
+
+ if type = params["type"]?
+ filters.type = Type.parse?(type) || Type::All
+ params.delete("type")
+ end
+
+ if date = params["date"]?
+ filters.date = Date.parse?(date) || Date::None
+ params.delete("date")
+ end
+
+ if duration = params["duration"]?
+ filters.duration = Duration.parse?(duration) || Duration::None
+ params.delete("duration")
+ end
+
+ features = params.fetch_all("features")
+ if !features.empty?
+ # Un-array input so it can be treated as a comma-separated list
+ features = features[0].split(',') if features.size == 1
+
+ filters.features = parse_features(features) || Features::None
+ params.delete_all("features")
+ end
+
+ if sort = params["sort"]?
+ filters.sort = Sort.parse?(sort) || Sort::Relevance
+ params.delete("sort")
+ end
+
+ return filters
+ end
+
# -------------------
# Youtube params
# -------------------