From 0a4e9e62526fbae2e0d139a9e53f8712f7e5d6a0 Mon Sep 17 00:00:00 2001 From: Omar Roth Date: Sun, 16 Sep 2018 22:14:51 -0500 Subject: [PATCH] Properly filter user's subscriptions in search --- src/invidious.cr | 11 +++++++++-- src/invidious/channels.cr | 7 +++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/invidious.cr b/src/invidious.cr index 36c104dc..a5a5a229 100644 --- a/src/invidious.cr +++ b/src/invidious.cr @@ -430,6 +430,13 @@ get "/search" do |env| page = env.params.query["page"]?.try &.to_i? page ||= 1 + user = env.get? "user" + if user + user = user.as(User) + ucids = user.subscriptions + end + ucids ||= [] of String + channel = nil date = "" duration = "" @@ -467,8 +474,8 @@ get "/search" do |env| to_tsvector(channel_videos.title) || to_tsvector(channel_videos.author) as document - FROM channel_videos - ) v_search WHERE v_search.document @@ plainto_tsquery($1) LIMIT 20 OFFSET $2;", search_query, (page - 1) * 20, as: ChannelVideo) + FROM channel_videos WHERE ucid IN (#{arg_array(ucids, 3)}) + ) v_search WHERE v_search.document @@ plainto_tsquery($1) LIMIT 20 OFFSET $2;", [search_query, (page - 1) * 20] + ucids, as: ChannelVideo) count = videos.size else search_params = build_search_params(sort: sort, date: date, content_type: "video", diff --git a/src/invidious/channels.cr b/src/invidious/channels.cr index 43b7edc1..8d451976 100644 --- a/src/invidious/channels.cr +++ b/src/invidious/channels.cr @@ -95,6 +95,8 @@ def fetch_channel(ucid, client, db, pull_all_videos = true) videos = extract_videos(nodeset) else videos = extract_videos(nodeset, ucid) + videos.each { |video| video.ucid = ucid } + videos.each { |video| video.author = author } end count = nodeset.size @@ -103,11 +105,12 @@ def fetch_channel(ucid, client, db, pull_all_videos = true) videos.each do |video| ids << video.id db.exec("UPDATE users SET notifications = notifications || $1 \ - WHERE updated < $2 AND $3 = ANY(subscriptions) AND $1 <> ALL(notifications)", video.id, video.published, ucid) + WHERE updated < $2 AND $3 = ANY(subscriptions) AND $1 <> ALL(notifications)", video.id, video.published, video.ucid) video_array = video.to_a args = arg_array(video_array) - db.exec("INSERT INTO channel_videos VALUES (#{args}) ON CONFLICT (id) DO UPDATE SET published = $3", video_array) + db.exec("INSERT INTO channel_videos VALUES (#{args}) ON CONFLICT (id) DO UPDATE SET title = $2, \ + published = $3, updated = $4, ucid = $5, author = $6", video_array) end if count < 30