mirror of
https://git.nadeko.net/Fijxu/invidious.git
synced 2026-03-11 00:31:24 +00:00
This is useless, as the items count can be directly acessed using the '.size' method, so use that instead when needed.
75 lines
2.5 KiB
Crystal
75 lines
2.5 KiB
Crystal
{% skip_file if flag?(:api_only) %}
|
|
|
|
module Invidious::Routes::Search
|
|
def self.opensearch(env)
|
|
locale = env.get("preferences").as(Preferences).locale
|
|
env.response.content_type = "application/opensearchdescription+xml"
|
|
|
|
XML.build(indent: " ", encoding: "UTF-8") do |xml|
|
|
xml.element("OpenSearchDescription", xmlns: "http://a9.com/-/spec/opensearch/1.1/") do
|
|
xml.element("ShortName") { xml.text "Invidious" }
|
|
xml.element("LongName") { xml.text "Invidious Search" }
|
|
xml.element("Description") { xml.text "Search for videos, channels, and playlists on Invidious" }
|
|
xml.element("InputEncoding") { xml.text "UTF-8" }
|
|
xml.element("Image", width: 48, height: 48, type: "image/x-icon") { xml.text "#{HOST_URL}/favicon.ico" }
|
|
xml.element("Url", type: "text/html", method: "get", template: "#{HOST_URL}/search?q={searchTerms}")
|
|
end
|
|
end
|
|
end
|
|
|
|
def self.results(env)
|
|
locale = env.get("preferences").as(Preferences).locale
|
|
|
|
query = env.params.query["search_query"]?
|
|
query ||= env.params.query["q"]?
|
|
|
|
page = env.params.query["page"]?
|
|
|
|
if query && !query.empty?
|
|
if page && !page.empty?
|
|
env.redirect "/search?q=" + URI.encode_www_form(query) + "&page=" + page
|
|
else
|
|
env.redirect "/search?q=" + URI.encode_www_form(query)
|
|
end
|
|
else
|
|
env.redirect "/search"
|
|
end
|
|
end
|
|
|
|
def self.search(env)
|
|
locale = env.get("preferences").as(Preferences).locale
|
|
region = env.params.query["region"]?
|
|
|
|
query = env.params.query["search_query"]?
|
|
query ||= env.params.query["q"]?
|
|
|
|
if !query || query.empty?
|
|
# Display the full page search box implemented in #1977
|
|
env.set "search", ""
|
|
templated "search_homepage", navbar_search: false
|
|
else
|
|
page = env.params.query["page"]?.try &.to_i?
|
|
page ||= 1
|
|
|
|
user = env.get? "user"
|
|
|
|
begin
|
|
search_query, 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
|
|
|
|
operator_hash = {} of String => String
|
|
operators.each do |operator|
|
|
key, value = operator.downcase.split(":")
|
|
operator_hash[key] = value
|
|
end
|
|
|
|
env.set "search", query
|
|
templated "search"
|
|
end
|
|
end
|
|
end
|