Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Courses to channel page and channel API #5158

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions locales/en-US.json
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,7 @@
"channel_tab_streams_label": "Livestreams",
"channel_tab_podcasts_label": "Podcasts",
"channel_tab_releases_label": "Releases",
"channel_tab_courses_label": "Courses",
"channel_tab_playlists_label": "Playlists",
"channel_tab_community_label": "Community",
"channel_tab_channels_label": "Channels",
Expand Down
9 changes: 9 additions & 0 deletions src/invidious/channels/playlists.cr
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,12 @@ def fetch_channel_releases(ucid, author, continuation)
end
return extract_items(initial_data, author, ucid)
end

def fetch_channel_courses(ucid, author, continuation)
if continuation
initial_data = YoutubeAPI.browse(continuation)
else
initial_data = YoutubeAPI.browse(ucid, params: "Egdjb3Vyc2Vz8gYFCgPCAQA%3D")
end
return extract_items(initial_data, author, ucid)
end
1 change: 1 addition & 0 deletions src/invidious/frontend/channel_page.cr
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ module Invidious::Frontend::ChannelPage
Streams
Podcasts
Releases
Courses
Playlists
Community
Channels
Expand Down
29 changes: 29 additions & 0 deletions src/invidious/routes/api/v1/channels.cr
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
22 changes: 21 additions & 1 deletion src/invidious/routes/channels.cr
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions src/invidious/routing.cr
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ module Invidious::Routing
get "/channel/:ucid/streams", Routes::Channels, :streams
get "/channel/:ucid/podcasts", Routes::Channels, :podcasts
get "/channel/:ucid/releases", Routes::Channels, :releases
get "/channel/:ucid/courses", Routes::Channels, :courses
get "/channel/:ucid/playlists", Routes::Channels, :playlists
get "/channel/:ucid/community", Routes::Channels, :community
get "/channel/:ucid/channels", Routes::Channels, :channels
Expand Down Expand Up @@ -249,6 +250,7 @@ module Invidious::Routing
get "/api/v1/channels/:ucid/streams", {{namespace}}::Channels, :streams
get "/api/v1/channels/:ucid/podcasts", {{namespace}}::Channels, :podcasts
get "/api/v1/channels/:ucid/releases", {{namespace}}::Channels, :releases
get "/api/v1/channels/:ucid/courses", {{namespace}}::Channels, :courses
get "/api/v1/channels/:ucid/playlists", {{namespace}}::Channels, :playlists
get "/api/v1/channels/:ucid/community", {{namespace}}::Channels, :community
get "/api/v1/channels/:ucid/channels", {{namespace}}::Channels, :channels
Expand Down
1 change: 1 addition & 0 deletions src/invidious/views/channel.ecr
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
when .channels? then "/channel/#{ucid}/channels"
when .podcasts? then "/channel/#{ucid}/podcasts"
when .releases? then "/channel/#{ucid}/releases"
when .courses? then "/channel/#{ucid}/courses"
else
"/channel/#{ucid}"
end
Expand Down
Loading