diff options
| -rw-r--r-- | assets/js/embed.js | 8 | ||||
| -rw-r--r-- | assets/js/watch.js | 12 | ||||
| -rw-r--r-- | src/invidious/helpers/jobs.cr | 18 |
3 files changed, 34 insertions, 4 deletions
diff --git a/assets/js/embed.js b/assets/js/embed.js index 3d56c4ff..cbf21a58 100644 --- a/assets/js/embed.js +++ b/assets/js/embed.js @@ -39,6 +39,10 @@ function get_playlist(plid, timeouts = 0) { url.searchParams.set('speed', video_data.params.speed); } + if (video_data.params.local !== video_data.preferences.local) { + url.searchParams.set('local', video_data.params.local); + } + url.searchParams.set('list', plid); location.assign(url.pathname + url.search); }); @@ -71,6 +75,10 @@ if (video_data.plid) { url.searchParams.set('speed', video_data.params.speed); } + if (video_data.params.local !== video_data.preferences.local) { + url.searchParams.set('local', video_data.params.local); + } + if (video_data.video_series.length !== 0) { url.searchParams.set('playlist', video_data.video_series.join(',')) } diff --git a/assets/js/watch.js b/assets/js/watch.js index d447f441..9b843920 100644 --- a/assets/js/watch.js +++ b/assets/js/watch.js @@ -90,6 +90,10 @@ function continue_autoplay(event) { url.searchParams.set('speed', video_data.params.speed); } + if (video_data.params.local !== video_data.preferences.local) { + url.searchParams.set('local', video_data.params.local); + } + url.searchParams.set('continue', '1'); location.assign(url.pathname + url.search); }); @@ -155,6 +159,10 @@ function get_playlist(plid, timeouts = 0) { url.searchParams.set('speed', video_data.params.speed); } + if (video_data.params.local !== video_data.preferences.local) { + url.searchParams.set('local', video_data.params.local); + } + url.searchParams.set('list', plid); location.assign(url.pathname + url.search); }); @@ -388,6 +396,10 @@ if (video_data.play_next) { url.searchParams.set('speed', video_data.params.speed); } + if (video_data.params.local !== video_data.preferences.local) { + url.searchParams.set('local', video_data.params.local); + } + url.searchParams.set('continue', '1'); location.assign(url.pathname + url.search); }); diff --git a/src/invidious/helpers/jobs.cr b/src/invidious/helpers/jobs.cr index 5383d8ba..f0be6e9d 100644 --- a/src/invidious/helpers/jobs.cr +++ b/src/invidious/helpers/jobs.cr @@ -45,13 +45,14 @@ end def refresh_feeds(db, logger, max_threads = 1, use_feed_events = false) max_channel = Channel(Int32).new - # TODO: Instead of Fiber.yield, use proper queuing to prevent overloading DB # Spawn thread to handle feed events if use_feed_events + queue = Deque(String).new(30) + spawn do - PG.connect_listen(PG_URL, "feeds") do |event| - spawn do - feed = JSON.parse(event.payload) + loop do + if event = queue.shift? + feed = JSON.parse(event) email = feed["email"].as_s action = feed["action"].as_s @@ -61,11 +62,20 @@ def refresh_feeds(db, logger, max_threads = 1, use_feed_events = false) when "refresh" db.exec("REFRESH MATERIALIZED VIEW #{view_name}") end + + # Delete any future events that we just processed + queue.delete(event) + else + sleep 1.second end Fiber.yield end end + + PG.connect_listen(PG_URL, "feeds") do |event| + queue << event.payload + end end spawn do |
