diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/invidious/helpers/utils.cr | 26 | ||||
| -rw-r--r-- | src/invidious/routes/misc.cr | 7 | ||||
| -rw-r--r-- | src/invidious/views/search.ecr | 177 |
3 files changed, 111 insertions, 99 deletions
diff --git a/src/invidious/helpers/utils.cr b/src/invidious/helpers/utils.cr index 8c893310..cb94b44a 100644 --- a/src/invidious/helpers/utils.cr +++ b/src/invidious/helpers/utils.cr @@ -410,18 +410,18 @@ def convert_theme(theme) end end -def fetch_random_instance() - instance_list = HTTP::Client.get "https://api.invidious.io/instances.json" - instance_list = JSON.parse(instance_list.body) - - filtered_instance_list = [] of String - instance_list.as_a.each do |data| - if data[1]["type"] == "https" - if data[1]["monitor"] - health = data[1]["monitor"].as_h["dailyRatios"][0].as_h["ratio"] - filtered_instance_list << data[0].as_s if health.to_s.to_f > 90 - end - end +def fetch_random_instance + instance_list = HTTP::Client.get "https://api.invidious.io/instances.json" + instance_list = JSON.parse(instance_list.body) + + filtered_instance_list = [] of String + instance_list.as_a.each do |data| + if data[1]["type"] == "https" + if data[1]["monitor"] + health = data[1]["monitor"].as_h["dailyRatios"][0].as_h["ratio"] + filtered_instance_list << data[0].as_s if health.to_s.to_f > 90 + end end - return filtered_instance_list.sample(1)[0] + end + return filtered_instance_list.sample(1)[0] end diff --git a/src/invidious/routes/misc.cr b/src/invidious/routes/misc.cr index 857d0596..c14e0e54 100644 --- a/src/invidious/routes/misc.cr +++ b/src/invidious/routes/misc.cr @@ -37,8 +37,13 @@ class Invidious::Routes::Misc < Invidious::Routes::BaseRoute end def cross_instance_redirect(env) + instance_url = fetch_random_instance + if env.params.query["id"]? id = env.params.query["id"] - instance_url = fetch_random_instance env.redirect "https://#{instance_url}/watch?v=#{id}" + elsif env.params.query["q"]? + query, page = env.params.query["q"], env.params.query["page"] + env.redirect "https://#{instance_url}/search?q=#{query}&page=#{page}" + end end end diff --git a/src/invidious/views/search.ecr b/src/invidious/views/search.ecr index fefc9fbb..fdb9205c 100644 --- a/src/invidious/views/search.ecr +++ b/src/invidious/views/search.ecr @@ -2,92 +2,99 @@ <title><%= search_query.not_nil!.size > 30 ? HTML.escape(query.not_nil![0,30].rstrip(".") + "...") : HTML.escape(query.not_nil!) %> - Invidious</title> <% end %> -<details id="filters"> - <summary> - <h3 style="display:inline"> <%= translate(locale, "filter") %> </h3> - </summary> - <div id="filters" class="pure-g h-box"> - <div class="pure-u-1-3 pure-u-md-1-5"> - <b><%= translate(locale, "date") %></b> - <hr/> - <% ["hour", "today", "week", "month", "year"].each do |date| %> - <div class="pure-u-1 pure-md-1-5"> - <% if operator_hash.fetch("date", "all") == date %> - <b><%= translate(locale, date) %></b> - <% else %> - <a href="/search?q=<%= HTML.escape(query.not_nil!.gsub(/ ?date:[a-z]+/, "") + " date:" + date) %>&page=<%= page %>"> - <%= translate(locale, date) %> - </a> - <% end %> - </div> - <% end %> +<!-- Search redirection and filtering UI --> +<% if count == 0 %> + <h3 style="text-align: center"> + <%= translate(locale, "Broken?") %> <a href="/redirect?q=<%= HTML.escape(query.not_nil!) %>&page=<%= page + 1 %>"><%= translate(locale, "Switch Invidious Instance") %></a> + </h3> +<% else %> + <details id="filters"> + <summary> + <h3 style="display:inline"> <%= translate(locale, "filter") %> </h3> + </summary> + <div id="filters" class="pure-g h-box"> + <div class="pure-u-1-3 pure-u-md-1-5"> + <b><%= translate(locale, "date") %></b> + <hr/> + <% ["hour", "today", "week", "month", "year"].each do |date| %> + <div class="pure-u-1 pure-md-1-5"> + <% if operator_hash.fetch("date", "all") == date %> + <b><%= translate(locale, date) %></b> + <% else %> + <a href="/search?q=<%= HTML.escape(query.not_nil!.gsub(/ ?date:[a-z]+/, "") + " date:" + date) %>&page=<%= page %>"> + <%= translate(locale, date) %> + </a> + <% end %> + </div> + <% end %> + </div> + <div class="pure-u-1-3 pure-u-md-1-5"> + <b><%= translate(locale, "content_type") %></b> + <hr/> + <% ["video", "channel", "playlist", "movie", "show"].each do |content_type| %> + <div class="pure-u-1 pure-md-1-5"> + <% if operator_hash.fetch("content_type", "all") == content_type %> + <b><%= translate(locale, content_type) %></b> + <% else %> + <a href="/search?q=<%= HTML.escape(query.not_nil!.gsub(/ ?content_type:[a-z]+/, "") + " content_type:" + content_type) %>&page=<%= page %>"> + <%= translate(locale, content_type) %> + </a> + <% end %> + </div> + <% end %> + </div> + <div class="pure-u-1-3 pure-u-md-1-5"> + <b><%= translate(locale, "duration") %></b> + <hr/> + <% ["short", "long"].each do |duration| %> + <div class="pure-u-1 pure-md-1-5"> + <% if operator_hash.fetch("duration", "all") == duration %> + <b><%= translate(locale, duration) %></b> + <% else %> + <a href="/search?q=<%= HTML.escape(query.not_nil!.gsub(/ ?duration:[a-z]+/, "") + " duration:" + duration) %>&page=<%= page %>"> + <%= translate(locale, duration) %> + </a> + <% end %> + </div> + <% end %> + </div> + <div class="pure-u-1-3 pure-u-md-1-5"> + <b><%= translate(locale, "features") %></b> + <hr/> + <% ["hd", "subtitles", "creative_commons", "3d", "live", "purchased", "4k", "360", "location", "hdr"].each do |feature| %> + <div class="pure-u-1 pure-md-1-5"> + <% if operator_hash.fetch("features", "all").includes?(feature) %> + <b><%= translate(locale, feature) %></b> + <% elsif operator_hash.has_key?("features") %> + <a href="/search?q=<%= HTML.escape(query.not_nil!.gsub(/features:/, "features:" + feature + ",")) %>&page=<%= page %>"> + <%= translate(locale, feature) %> + </a> + <% else %> + <a href="/search?q=<%= HTML.escape(query.not_nil! + " features:" + feature) %>&page=<%= page %>"> + <%= translate(locale, feature) %> + </a> + <% end %> + </div> + <% end %> + </div> + <div class="pure-u-1-3 pure-u-md-1-5"> + <b><%= translate(locale, "sort") %></b> + <hr/> + <% ["relevance", "rating", "date", "views"].each do |sort| %> + <div class="pure-u-1 pure-md-1-5"> + <% if operator_hash.fetch("sort", "relevance") == sort %> + <b><%= translate(locale, sort) %></b> + <% else %> + <a href="/search?q=<%= HTML.escape(query.not_nil!.gsub(/ ?sort:[a-z]+/, "") + " sort:" + sort) %>&page=<%= page %>"> + <%= translate(locale, sort) %> + </a> + <% end %> + </div> + <% end %> + </div> </div> - <div class="pure-u-1-3 pure-u-md-1-5"> - <b><%= translate(locale, "content_type") %></b> - <hr/> - <% ["video", "channel", "playlist", "movie", "show"].each do |content_type| %> - <div class="pure-u-1 pure-md-1-5"> - <% if operator_hash.fetch("content_type", "all") == content_type %> - <b><%= translate(locale, content_type) %></b> - <% else %> - <a href="/search?q=<%= HTML.escape(query.not_nil!.gsub(/ ?content_type:[a-z]+/, "") + " content_type:" + content_type) %>&page=<%= page %>"> - <%= translate(locale, content_type) %> - </a> - <% end %> - </div> - <% end %> - </div> - <div class="pure-u-1-3 pure-u-md-1-5"> - <b><%= translate(locale, "duration") %></b> - <hr/> - <% ["short", "long"].each do |duration| %> - <div class="pure-u-1 pure-md-1-5"> - <% if operator_hash.fetch("duration", "all") == duration %> - <b><%= translate(locale, duration) %></b> - <% else %> - <a href="/search?q=<%= HTML.escape(query.not_nil!.gsub(/ ?duration:[a-z]+/, "") + " duration:" + duration) %>&page=<%= page %>"> - <%= translate(locale, duration) %> - </a> - <% end %> - </div> - <% end %> - </div> - <div class="pure-u-1-3 pure-u-md-1-5"> - <b><%= translate(locale, "features") %></b> - <hr/> - <% ["hd", "subtitles", "creative_commons", "3d", "live", "purchased", "4k", "360", "location", "hdr"].each do |feature| %> - <div class="pure-u-1 pure-md-1-5"> - <% if operator_hash.fetch("features", "all").includes?(feature) %> - <b><%= translate(locale, feature) %></b> - <% elsif operator_hash.has_key?("features") %> - <a href="/search?q=<%= HTML.escape(query.not_nil!.gsub(/features:/, "features:" + feature + ",")) %>&page=<%= page %>"> - <%= translate(locale, feature) %> - </a> - <% else %> - <a href="/search?q=<%= HTML.escape(query.not_nil! + " features:" + feature) %>&page=<%= page %>"> - <%= translate(locale, feature) %> - </a> - <% end %> - </div> - <% end %> - </div> - <div class="pure-u-1-3 pure-u-md-1-5"> - <b><%= translate(locale, "sort") %></b> - <hr/> - <% ["relevance", "rating", "date", "views"].each do |sort| %> - <div class="pure-u-1 pure-md-1-5"> - <% if operator_hash.fetch("sort", "relevance") == sort %> - <b><%= translate(locale, sort) %></b> - <% else %> - <a href="/search?q=<%= HTML.escape(query.not_nil!.gsub(/ ?sort:[a-z]+/, "") + " sort:" + sort) %>&page=<%= page %>"> - <%= translate(locale, sort) %> - </a> - <% end %> - </div> - <% end %> - </div> - </div> -</details> + </details> +<% end %> <hr/> |
