summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--assets/js/embed.js8
-rw-r--r--assets/js/watch.js12
-rw-r--r--src/invidious/helpers/jobs.cr18
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