Channels: Add Courses to channel page and channel API (#5158)

Closes #5144
This commit is contained in:
syeopite
2025-02-26 14:08:44 -08:00
7 changed files with 64 additions and 1 deletions

View File

@@ -368,6 +368,35 @@ module Invidious::Routes::API::V1::Channels
end
end
def self.courses(env)
locale = env.get("preferences").as(Preferences).locale
env.response.content_type = "application/json"
ucid = env.params.url["ucid"]
continuation = env.params.query["continuation"]?
# Use the macro defined above
channel = nil # Make the compiler happy
get_channel()
items, next_continuation = fetch_channel_courses(channel.ucid, channel.author, continuation)
JSON.build do |json|
json.object do
json.field "playlists" do
json.array do
items.each do |item|
item.to_json(locale, json) if item.is_a?(SearchPlaylist)
end
end
end
json.field "continuation", next_continuation if next_continuation
end
end
end
def self.community(env)
locale = env.get("preferences").as(Preferences).locale

View File

@@ -197,6 +197,26 @@ module Invidious::Routes::Channels
templated "channel"
end
def self.courses(env)
data = self.fetch_basic_information(env)
return data if !data.is_a?(Tuple)
locale, user, subscriptions, continuation, ucid, channel = data
sort_by = ""
sort_options = [] of String
items, next_continuation = fetch_channel_courses(
channel.ucid, channel.author, continuation
)
items = items.select(SearchPlaylist)
items.each(&.author = "")
selected_tab = Frontend::ChannelPage::TabsAvailable::Courses
templated "channel"
end
def self.community(env)
data = self.fetch_basic_information(env)
if !data.is_a?(Tuple)
@@ -307,7 +327,7 @@ module Invidious::Routes::Channels
private KNOWN_TABS = {
"home", "videos", "shorts", "streams", "podcasts",
"releases", "playlists", "community", "channels", "about",
"releases", "courses", "playlists", "community", "channels", "about",
}
# Redirects brand url channels to a normal /channel/:ucid route