summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOmar Roth <omarroth@hotmail.com>2018-08-25 20:05:51 -0500
committerOmar Roth <omarroth@hotmail.com>2018-08-25 20:05:51 -0500
commit7fd0f93d029b8bd69409256c39bb0ead7929aa3a (patch)
tree0866d3618901942ac133e019eb87d440b44dc5f3
parent23aaf7f1b745b830e42b133a7d3f380eac2c30f9 (diff)
downloadinvidious-7fd0f93d029b8bd69409256c39bb0ead7929aa3a.tar.gz
invidious-7fd0f93d029b8bd69409256c39bb0ead7929aa3a.tar.bz2
invidious-7fd0f93d029b8bd69409256c39bb0ead7929aa3a.zip
Add support for preferences as query params
-rw-r--r--src/invidious.cr57
-rw-r--r--src/invidious/videos.cr36
-rw-r--r--src/invidious/views/components/player.ecr30
-rw-r--r--src/invidious/views/watch.ecr2
4 files changed, 75 insertions, 50 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index 68514a44..d2b37705 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -215,8 +215,9 @@ get "/watch" do |env|
end
subscriptions ||= [] of String
- autoplay, video_loop, video_start, video_end, listen, raw, quality, controls = process_video_params(env.params.query, preferences)
- if listen
+ params = process_video_params(env.params.query, preferences)
+
+ if params[:listen]
env.params.query.delete_all("listen")
end
@@ -234,13 +235,17 @@ get "/watch" do |env|
audio_streams = video.audio_streams(adaptive_fmts)
captions = video.captions
- if preferences
- preferred_captions = captions.select { |caption| preferences.captions.includes? caption.name.simpleText }
- preferred_captions.sort_by! { |caption| preferences.captions.index(caption.name.simpleText).not_nil! }
- captions = captions - preferred_captions
- end
- preferred_captions ||= [] of Caption
+ preferred_captions = captions.select { |caption|
+ params[:preferred_captions].includes?(caption.name.simpleText) ||
+ params[:preferred_captions].includes?(caption.languageCode.split("-")[0])
+ }
+ preferred_captions.sort_by! { |caption|
+ (params[:preferred_captions].index(caption.languageCode) ||
+ params[:preferred_captions].index(caption.languageCode.split("-")[0])).not_nil!
+ }
+ captions = captions - preferred_captions
+
aspect_ratio = "16:9"
video.description = fill_links(video.description, "https", "www.youtube.com")
@@ -259,11 +264,11 @@ get "/watch" do |env|
# TODO: Find highest resolution thumbnail automatically
thumbnail = "https://i.ytimg.com/vi/#{video.id}/mqdefault.jpg"
- if raw
+ if params[:raw]
url = fmt_stream[0]["url"]
fmt_stream.each do |fmt|
- if fmt["label"].split(" - ")[0] == quality
+ if fmt["label"].split(" - ")[0] == params[:quality]
url = fmt["url"]
end
end
@@ -313,21 +318,7 @@ get "/embed/:id" do |env|
next env.redirect url
end
- autoplay, video_loop, video_start, video_end, listen, raw, quality, controls = process_video_params(env.params.query, nil)
- preferred_captions = [] of Caption
- preferences = Preferences.from_json({
- "video_loop" => video_loop,
- "autoplay" => autoplay,
- "speed" => 1.0,
- "quality" => quality,
- "volume" => 100,
- "max_results" => 0,
- "sort" => "",
- "latest_only" => false,
- "unseen_only" => false,
- "dark_mode" => false,
- }.to_json)
- aspect_ratio = nil
+ params = process_video_params(env.params.query, nil)
begin
video = get_video(id, PG_DB)
@@ -343,6 +334,18 @@ get "/embed/:id" do |env|
captions = video.captions
+ preferred_captions = captions.select { |caption|
+ params[:preferred_captions].includes?(caption.name.simpleText) ||
+ params[:preferred_captions].includes?(caption.languageCode.split("-")[0])
+ }
+ preferred_captions.sort_by! { |caption|
+ (params[:preferred_captions].index(caption.languageCode) ||
+ params[:preferred_captions].index(caption.languageCode.split("-")[0])).not_nil!
+ }
+ captions = captions - preferred_captions
+
+ aspect_ratio = nil
+
video.description = fill_links(video.description, "https", "www.youtube.com")
video.description = add_alt_links(video.description)
description = video.short_description
@@ -359,11 +362,11 @@ get "/embed/:id" do |env|
# TODO: Find highest resolution thumbnail automatically
thumbnail = "https://i.ytimg.com/vi/#{video.id}/mqdefault.jpg"
- if raw
+ if params[:raw]
url = fmt_stream[0]["url"]
fmt_stream.each do |fmt|
- if fmt["label"].split(" - ")[0] == quality
+ if fmt["label"].split(" - ")[0] == params[:quality]
url = fmt["url"]
end
end
diff --git a/src/invidious/videos.cr b/src/invidious/videos.cr
index ee9be2c1..c9e303d3 100644
--- a/src/invidious/videos.cr
+++ b/src/invidious/videos.cr
@@ -504,16 +504,29 @@ end
def process_video_params(query, preferences)
autoplay = query["autoplay"]?.try &.to_i?
+ preferred_captions = query["subtitles"]?.try &.split(",").map { |a| a.downcase }
+ quality = query["quality"]?
+ speed = query["speed"]?.try &.to_f?
video_loop = query["loop"]?.try &.to_i?
+ volume = query["volume"]?.try &.to_i?
if preferences
autoplay ||= preferences.autoplay.to_unsafe
+ preferred_captions ||= preferences.captions
+ quality ||= preferences.quality
+ speed ||= preferences.speed
video_loop ||= preferences.video_loop.to_unsafe
+ volume ||= preferences.volume
end
- autoplay ||= 0
- autoplay = autoplay == 1
+ autoplay ||= 0
+ preferred_captions ||= [] of String
+ quality ||= "hd720"
+ speed ||= 1
video_loop ||= 0
+ volume ||= 100
+
+ autoplay = autoplay == 1
video_loop = video_loop == 1
if query["t"]?
@@ -542,14 +555,25 @@ def process_video_params(query, preferences)
raw ||= 0
raw = raw == 1
- quality = query["quality"]?
- quality ||= "hd720"
-
controls = query["controls"]?.try &.to_i?
controls ||= 1
controls = controls == 1
- return autoplay, video_loop, video_start, video_end, listen, raw, quality, controls
+ params = {
+ autoplay: autoplay,
+ controls: controls,
+ listen: listen,
+ preferred_captions: preferred_captions,
+ quality: quality,
+ raw: raw,
+ speed: speed,
+ video_end: video_end,
+ video_loop: video_loop,
+ video_start: video_start,
+ volume: volume,
+ }
+
+ return params
end
def generate_thumbnails(json, id)
diff --git a/src/invidious/views/components/player.ecr b/src/invidious/views/components/player.ecr
index 30d9f724..38a4bbe1 100644
--- a/src/invidious/views/components/player.ecr
+++ b/src/invidious/views/components/player.ecr
@@ -1,19 +1,19 @@
<video style="width:100%" playsinline poster="<%= thumbnail %>" title="<%= HTML.escape(video.title) %>"
id="player" class="video-js"
- <% if autoplay %>autoplay<% end %>
- <% if video_loop %>loop<% end %>
- <% if controls %>controls<% end %>>
+ <% if params[:autoplay] %>autoplay<% end %>
+ <% if params[:video_loop] %>loop<% end %>
+ <% if params[:controls] %>controls<% end %>>
<% if hlsvp %>
<source src="<%= hlsvp %>" type="application/x-mpegURL">
<% else %>
- <% if listen %>
+ <% if params[:listen] %>
<% audio_streams.each_with_index do |fmt, i| %>
<source src="<%= fmt["url"] %>" type='<%= fmt["type"] %>' label="<%= fmt["bitrate"] %>k" selected="<%= i == 0 ? true : false %>">
<% end %>
<% else %>
<% fmt_stream.each_with_index do |fmt, i| %>
- <% if preferences %>
- <source src="<%= fmt["url"] %>" type='<%= fmt["type"] %>' label="<%= fmt["label"] %>" selected="<%= preferences.quality == fmt["label"].split(" - ")[0] %>">
+ <% if params[:quality] %>
+ <source src="<%= fmt["url"] %>" type='<%= fmt["type"] %>' label="<%= fmt["label"] %>" selected="<%= params[:quality] == fmt["label"].split(" - ")[0] %>">
<% else %>
<source src="<%= fmt["url"] %>" type='<%= fmt["type"] %>' label="<%= fmt["label"] %>" selected="<%= i == 0 ? true : false %>">
<% end %>
@@ -110,7 +110,7 @@ var player = videojs("player", options, function() {
player.share(shareOptions);
-<% if video_start > 0 || video_end > 0 %>
+<% if params[:video_start] > 0 || params[:video_end] > 0 %>
player.markers({
onMarkerReached: function(marker) {
if (marker.text === "End") {
@@ -122,19 +122,19 @@ player.markers({
}
},
markers: [
- { time: <%= video_start %>, text: "Start" },
- <% if video_end < 0 %>
+ { time: <%= params[:video_start] %>, text: "Start" },
+ <% if params[:video_end] < 0 %>
{ time: <%= video.info["length_seconds"].to_f - 0.5 %>, text: "End" }
<% else %>
- { time: <%= video_end %>, text: "End" }
+ { time: <%= params[:video_end] %>, text: "End" }
<% end %>
]
});
-player.currentTime(<%= video_start %>);
+player.currentTime(<%= params[:video_start] %>);
<% end %>
-<% if !listen %>
+<% if !params[:listen] %>
var currentSources = player.currentSources();
for (var i = 0; i < currentSources.length; i++) {
if (player.canPlayType(currentSources[i]["type"].split(";")[0]) === "") {
@@ -146,8 +146,6 @@ for (var i = 0; i < currentSources.length; i++) {
player.src(currentSources);
<% end %>
-<% if preferences %>
-player.volume(<%= preferences.volume.to_f / 100 %>);
-player.playbackRate(<%= preferences.speed %>);
-<% end %>
+player.volume(<%= params[:volume].to_f / 100 %>);
+player.playbackRate(<%= params[:speed] %>);
</script>
diff --git a/src/invidious/views/watch.ecr b/src/invidious/views/watch.ecr
index 8294a617..b90c46aa 100644
--- a/src/invidious/views/watch.ecr
+++ b/src/invidious/views/watch.ecr
@@ -33,7 +33,7 @@
<div class="h-box">
<h1>
<%= HTML.escape(video.title) %>
- <% if listen %>
+ <% if params[:listen] %>
<a href="/watch?<%= env.params.query %>">
<i class="icon ion-ios-videocam"></i>
</a>