From 7ca72c5b6f4e9decbacf13b105e158ec4d275819 Mon Sep 17 00:00:00 2001 From: Brahim Hadriche Date: Sun, 29 Oct 2023 15:54:53 -0400 Subject: [PATCH 1/3] channels sorted by last published video --- src/invidious/database/channels.cr | 19 +++++++++++++++++++ src/invidious/routes/api/v1/authenticated.cr | 7 ++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/invidious/database/channels.cr b/src/invidious/database/channels.cr index df44e485..8653959e 100644 --- a/src/invidious/database/channels.cr +++ b/src/invidious/database/channels.cr @@ -85,6 +85,25 @@ module Invidious::Database::Channels return PG_DB.query_all(request, ids, as: InvidiousChannel) end + + # Select channels sorted by last published video + def select_sorted(ids : Array(String)) : Array(InvidiousChannel)? + return [] of InvidiousChannel if ids.empty? + + request = <<-SQL + WITH max_published AS ( + SELECT ucid, MAX(published) AS last_published + FROM channel_videos + GROUP BY ucid + ) + SELECT channels.id, channels.author, channels.subscribed, channels.updated, channels.deleted FROM channels + LEFT JOIN max_published ON channels.id = max_published.ucid + WHERE channels.id = ANY($1) + ORDER BY max_published.last_published DESC NULLS LAST; + SQL + + return PG_DB.query_all(request, ids, as: InvidiousChannel) + end end # diff --git a/src/invidious/routes/api/v1/authenticated.cr b/src/invidious/routes/api/v1/authenticated.cr index a35d2f2b..58ab2003 100644 --- a/src/invidious/routes/api/v1/authenticated.cr +++ b/src/invidious/routes/api/v1/authenticated.cr @@ -153,7 +153,12 @@ module Invidious::Routes::API::V1::Authenticated env.response.content_type = "application/json" user = env.get("user").as(User) - subscriptions = Invidious::Database::Channels.select(user.subscriptions) + sorted = env.params.query["sorted"]?.try &.== "true" + if sorted + subscriptions = Invidious::Database::Channels.select_sorted(user.subscriptions) + else + subscriptions = Invidious::Database::Channels.select(user.subscriptions) + end JSON.build do |json| json.array do From 58f66761fb4b89c15de17697a42ee4b594480278 Mon Sep 17 00:00:00 2001 From: Brahim Hadriche Date: Sun, 29 Oct 2023 16:03:42 -0400 Subject: [PATCH 2/3] Format --- src/invidious/database/channels.cr | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/invidious/database/channels.cr b/src/invidious/database/channels.cr index 8653959e..21c1ee64 100644 --- a/src/invidious/database/channels.cr +++ b/src/invidious/database/channels.cr @@ -89,7 +89,7 @@ module Invidious::Database::Channels # Select channels sorted by last published video def select_sorted(ids : Array(String)) : Array(InvidiousChannel)? return [] of InvidiousChannel if ids.empty? - + request = <<-SQL WITH max_published AS ( SELECT ucid, MAX(published) AS last_published @@ -101,7 +101,7 @@ module Invidious::Database::Channels WHERE channels.id = ANY($1) ORDER BY max_published.last_published DESC NULLS LAST; SQL - + return PG_DB.query_all(request, ids, as: InvidiousChannel) end end From 3a84359e7d189e2636aa191d5c5269073401f286 Mon Sep 17 00:00:00 2001 From: Brahim Hadriche Date: Fri, 8 Dec 2023 07:38:32 -0500 Subject: [PATCH 3/3] Rename param --- src/invidious/routes/api/v1/authenticated.cr | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/invidious/routes/api/v1/authenticated.cr b/src/invidious/routes/api/v1/authenticated.cr index 58ab2003..9dc31240 100644 --- a/src/invidious/routes/api/v1/authenticated.cr +++ b/src/invidious/routes/api/v1/authenticated.cr @@ -153,8 +153,8 @@ module Invidious::Routes::API::V1::Authenticated env.response.content_type = "application/json" user = env.get("user").as(User) - sorted = env.params.query["sorted"]?.try &.== "true" - if sorted + sort = env.params.query["sort"]?.try &.== "last" + if sort subscriptions = Invidious::Database::Channels.select_sorted(user.subscriptions) else subscriptions = Invidious::Database::Channels.select(user.subscriptions)