apply review suggestions

This commit is contained in:
⛧-440729 [sophie] 2024-08-26 21:42:56 +02:00
parent 5d0149844f
commit 3850739d7f
No known key found for this signature in database
1 changed files with 24 additions and 12 deletions

View File

@ -35,14 +35,21 @@ class Invidious::Jobs::NotificationJob < Invidious::Jobs::BaseJob
PG.connect_listen(pg_url, "notifications") { |event| connections.each(&.send(event)) } PG.connect_listen(pg_url, "notifications") { |event| connections.each(&.send(event)) }
# hash of channels to their videos (id+published) that need notifying # hash of channels to their videos (id+published) that need notifying
to_notify = Hash(String, Set(VideoNotification)).new(->(hash : Hash(String, Set(VideoNotification)), key : String) { hash[key] = Set(VideoNotification).new }) to_notify = Hash(String, Set(VideoNotification)).new(
->(hash : Hash(String, Set(VideoNotification)), key : String) {
hash[key] = Set(VideoNotification).new
}
)
notify_mutex = Mutex.new()
# fiber to locally cache all incoming notifications (from pubsub webhooks and refresh channels job) # fiber to locally cache all incoming notifications (from pubsub webhooks and refresh channels job)
spawn do spawn do
begin begin
loop do loop do
notification = notification_channel.receive notification = notification_channel.receive
to_notify[notification.channel_id] << notification notify_mutex.synchronize do
to_notify[notification.channel_id] << notification
end
end end
end end
end end
@ -51,8 +58,11 @@ class Invidious::Jobs::NotificationJob < Invidious::Jobs::BaseJob
loop do loop do
begin begin
LOGGER.debug("NotificationJob: waking up") LOGGER.debug("NotificationJob: waking up")
cloned = to_notify.clone cloned = {} of String => Set(VideoNotification)
to_notify.clear notify_mutex.synchronize do
cloned = to_notify.clone
to_notify.clear
end
cloned.each do |channel_id, notifications| cloned.each do |channel_id, notifications|
if notifications.empty? if notifications.empty?
@ -63,14 +73,16 @@ class Invidious::Jobs::NotificationJob < Invidious::Jobs::BaseJob
if CONFIG.enable_user_notifications if CONFIG.enable_user_notifications
video_ids = notifications.map { |n| n.video_id } video_ids = notifications.map { |n| n.video_id }
Invidious::Database::Users.add_multiple_notifications(channel_id, video_ids) Invidious::Database::Users.add_multiple_notifications(channel_id, video_ids)
notifications.each do |n| PG_DB.using_connection do |conn|
# Deliver notifications to `/api/v1/auth/notifications` notifications.each do |n|
payload = { # Deliver notifications to `/api/v1/auth/notifications`
"topic" => n.channel_id, payload = {
"videoId" => n.video_id, "topic" => n.channel_id,
"published" => n.published.to_unix, "videoId" => n.video_id,
}.to_json "published" => n.published.to_unix,
PG_DB.exec("NOTIFY notifications, E'#{payload}'") }.to_json
conn.exec("NOTIFY notifications, E'#{payload}'")
end
end end
else else
Invidious::Database::Users.feed_needs_update(channel_id) Invidious::Database::Users.feed_needs_update(channel_id)