mirror of
				https://github.com/iv-org/invidious.git
				synced 2025-10-31 04:32:02 +00:00 
			
		
		
		
	Restructure API routes to use more namespaces
This commit is contained in:
		| @@ -1,4 +1,4 @@ | ||||
| module Invidious::Routes::APIv1 | ||||
| module Invidious::Routes::APIv1::Channels | ||||
|   def self.home(env) | ||||
|     locale = LOCALES[env.get("preferences").as(Preferences).locale]? | ||||
|  | ||||
| @@ -240,4 +240,27 @@ module Invidious::Routes::APIv1 | ||||
|       return error_json(500, ex) | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def self.channel_search(env) | ||||
|     locale = LOCALES[env.get("preferences").as(Preferences).locale]? | ||||
|  | ||||
|     env.response.content_type = "application/json" | ||||
|  | ||||
|     ucid = env.params.url["ucid"] | ||||
|  | ||||
|     query = env.params.query["q"]? | ||||
|     query ||= "" | ||||
|  | ||||
|     page = env.params.query["page"]?.try &.to_i? | ||||
|     page ||= 1 | ||||
|  | ||||
|     count, search_results = channel_search(query, page, ucid) | ||||
|     JSON.build do |json| | ||||
|       json.array do | ||||
|         search_results.each do |item| | ||||
|           item.to_json(locale, json) | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| module Invidious::Routes::APIv1 | ||||
| module Invidious::Routes::APIv1::Feeds | ||||
|   def self.trending(env) | ||||
|     locale = LOCALES[env.get("preferences").as(Preferences).locale]? | ||||
|  | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| module Invidious::Routes::APIv1 | ||||
| module Invidious::Routes::APIv1::Misc | ||||
|   # Stats API endpoint for Invidious | ||||
|   def self.stats(env) | ||||
|     locale = LOCALES[env.get("preferences").as(Preferences).locale]? | ||||
|   | ||||
| @@ -1,21 +1,21 @@ | ||||
| # There is far too many API routes to define in invidious.cr | ||||
| # so we'll just do it here instead with a macro. | ||||
| macro define_v1_api_routes(base_url = "/api/v1") | ||||
|   Invidious::Routing.get "#{{{base_url}}}/stats", Invidious::Routes::APIv1, :stats | ||||
|   Invidious::Routing.get "#{{{base_url}}}/stats", Invidious::Routes::APIv1::Misc, :stats | ||||
|  | ||||
|   # Widgets | ||||
|   Invidious::Routing.get "#{{{base_url}}}/storyboards/:id", Invidious::Routes::APIv1, :storyboards | ||||
|   Invidious::Routing.get "#{{{base_url}}}/captions/:id", Invidious::Routes::APIv1, :captions | ||||
|   Invidious::Routing.get "#{{{base_url}}}/annotations/:id", Invidious::Routes::APIv1, :annotations | ||||
|   Invidious::Routing.get "#{{{base_url}}}/search/suggestions/:id", Invidious::Routes::APIv1, :search_suggestions | ||||
|   Invidious::Routing.get "#{{{base_url}}}/comments/:id", Invidious::Routes::APIv1, :comments | ||||
|   # Videos | ||||
|   Invidious::Routing.get "#{{{base_url}}}/videos/:id", Invidious::Routes::APIv1::Videos, :videos | ||||
|   Invidious::Routing.get "#{{{base_url}}}/storyboards/:id", Invidious::Routes::APIv1::Videos, :storyboards | ||||
|   Invidious::Routing.get "#{{{base_url}}}/captions/:id", Invidious::Routes::APIv1::Videos, :captions | ||||
|   Invidious::Routing.get "#{{{base_url}}}/annotations/:id", Invidious::Routes::APIv1::Videos, :annotations | ||||
|   Invidious::Routing.get "#{{{base_url}}}/comments/:id", Invidious::Routes::APIv1::Videos, :comments | ||||
|  | ||||
|   # Feeds | ||||
|   Invidious::Routing.get "#{{{base_url}}}/trending", Invidious::Routes::APIv1, :trending | ||||
|   Invidious::Routing.get "#{{{base_url}}}/popular", Invidious::Routes::APIv1, :popular | ||||
|   Invidious::Routing.get "#{{{base_url}}}/trending", Invidious::Routes::APIv1::Feeds, :trending | ||||
|   Invidious::Routing.get "#{{{base_url}}}/popular", Invidious::Routes::APIv1::Feeds, :popular | ||||
|  | ||||
|   # Channels | ||||
|   Invidious::Routing.get "#{{{base_url}}}/channels/:ucid", Invidious::Routes::APIv1, :home | ||||
|   Invidious::Routing.get "#{{{base_url}}}/channels/:ucid", Invidious::Routes::APIv1::Channels, :home | ||||
|   {% for route in { | ||||
|                     {"home", "home"}, | ||||
|                     {"videos", "videos"}, | ||||
| @@ -25,13 +25,11 @@ macro define_v1_api_routes(base_url = "/api/v1") | ||||
|                     {"search", "channel_search"}, | ||||
|                   } %} | ||||
|  | ||||
|   Invidious::Routing.get "#{{{base_url}}}/channels/#{{{route[0]}}}/:ucid", Invidious::Routes::APIv1, :{{route[1]}} | ||||
|   Invidious::Routing.get "#{{{base_url}}}/channels/:ucid/#{{{route[0]}}}", Invidious::Routes::APIv1, :{{route[1]}} | ||||
|   Invidious::Routing.get "#{{{base_url}}}/channels/#{{{route[0]}}}/:ucid", Invidious::Routes::APIv1::Channels, :{{route[1]}} | ||||
|   Invidious::Routing.get "#{{{base_url}}}/channels/:ucid/#{{{route[0]}}}", Invidious::Routes::APIv1::Channels, :{{route[1]}} | ||||
|   {% end %} | ||||
|  | ||||
|   # Search | ||||
|   Invidious::Routing.get "#{{{base_url}}}/search", Invidious::Routes::APIv1, :search | ||||
|   Invidious::Routing.get "#{{{base_url}}}/videos/:id", Invidious::Routes::APIv1, :videos | ||||
|   Invidious::Routing.get "#{{{base_url}}}/search", Invidious::Routes::APIv1, :search | ||||
|  | ||||
|   Invidious::Routing.get "#{{{base_url}}}/search", Invidious::Routes::APIv1::Search, :search | ||||
|   Invidious::Routing.get "#{{{base_url}}}/search/suggestions/:id", Invidious::Routes::APIv1::Search, :search_suggestions | ||||
| end | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| module Invidious::Routes::APIv1 | ||||
| module Invidious::Routes::APIv1::Search | ||||
|   def self.search(env) | ||||
|     locale = LOCALES[env.get("preferences").as(Preferences).locale]? | ||||
|     region = env.params.query["region"]? | ||||
| @@ -42,29 +42,6 @@ module Invidious::Routes::APIv1 | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def self.channel_search(env) | ||||
|     locale = LOCALES[env.get("preferences").as(Preferences).locale]? | ||||
|  | ||||
|     env.response.content_type = "application/json" | ||||
|  | ||||
|     ucid = env.params.url["ucid"] | ||||
|  | ||||
|     query = env.params.query["q"]? | ||||
|     query ||= "" | ||||
|  | ||||
|     page = env.params.query["page"]?.try &.to_i? | ||||
|     page ||= 1 | ||||
|  | ||||
|     count, search_results = channel_search(query, page, ucid) | ||||
|     JSON.build do |json| | ||||
|       json.array do | ||||
|         search_results.each do |item| | ||||
|           item.to_json(locale, json) | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def self.search_suggestions(env) | ||||
|     locale = LOCALES[env.get("preferences").as(Preferences).locale]? | ||||
|     region = env.params.query["region"]? | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| module Invidious::Routes::APIv1 | ||||
| module Invidious::Routes::APIv1::Videos | ||||
|   def self.videos(env) | ||||
|     locale = LOCALES[env.get("preferences").as(Preferences).locale]? | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 syeopite
					syeopite