summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOmar Roth <omarroth@hotmail.com>2018-11-11 11:45:05 -0600
committerOmar Roth <omarroth@hotmail.com>2018-11-11 11:45:05 -0600
commit4b76b93610e64a63d61d1369fdef9af119852aab (patch)
tree77626044c330e35787fe99df96c0385d1b7be9a2 /src
parent1465cefa179acfa37f3d06275c95523bb7fac6e2 (diff)
downloadinvidious-4b76b93610e64a63d61d1369fdef9af119852aab.tar.gz
invidious-4b76b93610e64a63d61d1369fdef9af119852aab.tar.bz2
invidious-4b76b93610e64a63d61d1369fdef9af119852aab.zip
Add continuous playback
Diffstat (limited to 'src')
-rw-r--r--src/invidious.cr5
-rw-r--r--src/invidious/users.cr6
-rw-r--r--src/invidious/videos.cr5
-rw-r--r--src/invidious/views/preferences.ecr5
-rw-r--r--src/invidious/views/watch.ecr49
5 files changed, 69 insertions, 1 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index 04a7d264..82cf5f69 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -965,6 +965,10 @@ post "/preferences" do |env|
autoplay ||= "off"
autoplay = autoplay == "on"
+ continue = env.params.body["continue"]?.try &.as(String)
+ continue ||= "off"
+ continue = continue == "on"
+
listen = env.params.body["listen"]?.try &.as(String)
listen ||= "off"
listen = listen == "on"
@@ -1024,6 +1028,7 @@ post "/preferences" do |env|
preferences = {
"video_loop" => video_loop,
"autoplay" => autoplay,
+ "continue" => continue,
"listen" => listen,
"speed" => speed,
"quality" => quality,
diff --git a/src/invidious/users.cr b/src/invidious/users.cr
index f8c1c09a..113fa1c2 100644
--- a/src/invidious/users.cr
+++ b/src/invidious/users.cr
@@ -70,7 +70,11 @@ class Preferences
JSON.mapping({
video_loop: Bool,
autoplay: Bool,
- listen: {
+ continue: {
+ type: Bool,
+ default: false,
+ },
+ listen: {
type: Bool,
default: false,
},
diff --git a/src/invidious/videos.cr b/src/invidious/videos.cr
index a0fb7f22..1f81b3d5 100644
--- a/src/invidious/videos.cr
+++ b/src/invidious/videos.cr
@@ -730,6 +730,7 @@ end
def process_video_params(query, preferences)
autoplay = query["autoplay"]?.try &.to_i?
+ continue = query["continue"]?.try &.to_i?
listen = query["listen"]? && (query["listen"] == "true" || query["listen"] == "1").to_unsafe
preferred_captions = query["subtitles"]?.try &.split(",").map { |a| a.downcase }
quality = query["quality"]?
@@ -739,6 +740,7 @@ def process_video_params(query, preferences)
if preferences
autoplay ||= preferences.autoplay.to_unsafe
+ continue ||= preferences.continue.to_unsafe
listen ||= preferences.listen.to_unsafe
preferred_captions ||= preferences.captions
quality ||= preferences.quality
@@ -748,6 +750,7 @@ def process_video_params(query, preferences)
end
autoplay ||= 0
+ continue ||= 0
listen ||= 0
preferred_captions ||= [] of String
quality ||= "hd720"
@@ -756,6 +759,7 @@ def process_video_params(query, preferences)
volume ||= 100
autoplay = autoplay == 1
+ continue = continue == 1
listen = listen == 1
video_loop = video_loop == 1
@@ -786,6 +790,7 @@ def process_video_params(query, preferences)
params = {
autoplay: autoplay,
+ continue: continue,
controls: controls,
listen: listen,
preferred_captions: preferred_captions,
diff --git a/src/invidious/views/preferences.ecr b/src/invidious/views/preferences.ecr
index 72b1d609..f7da7540 100644
--- a/src/invidious/views/preferences.ecr
+++ b/src/invidious/views/preferences.ecr
@@ -24,6 +24,11 @@ function update_value(element) {
</div>
<div class="pure-control-group">
+ <label for="continue">Automatically play next video: </label>
+ <input name="continue" id="continue" type="checkbox" <% if user.preferences.continue %>checked<% end %>>
+ </div>
+
+ <div class="pure-control-group">
<label for="listen">Listen by default: </label>
<input name="listen" id="listen" type="checkbox" <% if user.preferences.listen %>checked<% end %>>
</div>
diff --git a/src/invidious/views/watch.ecr b/src/invidious/views/watch.ecr
index f9d98681..ba3692e2 100644
--- a/src/invidious/views/watch.ecr
+++ b/src/invidious/views/watch.ecr
@@ -140,6 +140,15 @@
<% if !preferences || preferences && preferences.related_videos %>
<div class="h-box">
+
+ <% if !plid && !rvs.empty? %>
+ <div class="pure-control-group">
+ <label for="continue">Autoplay next video: </label>
+ <input name="continue" onclick="continue_autoplay(this)" id="continue" type="checkbox" <% if params[:continue] %>checked<% end %>>
+ </div>
+ <hr>
+ <% end %>
+
<% rvs.each do |rv| %>
<% if rv.has_key?("id") %>
<a href="/watch?v=<%= rv["id"] %>">
@@ -163,6 +172,46 @@
</div>
<script>
+<% if !rvs.empty? && !plid && params[:continue] %>
+player.on('ended', function() {
+ window.location.replace("/watch?v="
+ + "<%= rvs[0]?.try &.["id"] %>"
+ + "&continue=1"
+ <% if params[:listen] %>
+ + "&listen=1"
+ <% end %>
+ <% if params[:autoplay] %>
+ + "&autoplay=1"
+ <% end %>
+ <% if params[:speed] %>
+ + "&speed=<%= params[:speed] %>"
+ <% end %>
+ );
+});
+<% end %>
+
+function continue_autoplay(target) {
+ if (target.checked) {
+ player.on('ended', function() {
+ window.location.replace("/watch?v="
+ + "<%= rvs[0]?.try &.["id"] %>"
+ + "&continue=1"
+ <% if params[:listen] %>
+ + "&listen=1"
+ <% end %>
+ <% if params[:autoplay] %>
+ + "&autoplay=1"
+ <% end %>
+ <% if params[:speed] %>
+ + "&speed=<%= params[:speed] %>"
+ <% end %>
+ );
+ });
+ } else {
+ player.off('ended');
+ }
+}
+
function number_with_separator(val) {
while (/(\d+)(\d{3})/.test(val.toString())) {
val = val.toString().replace(/(\d+)(\d{3})/, "$1" + "," + "$2");