summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOmar Roth <omarroth@hotmail.com>2018-08-25 18:33:15 -0500
committerOmar Roth <omarroth@hotmail.com>2018-08-25 18:33:15 -0500
commit23aaf7f1b745b830e42b133a7d3f380eac2c30f9 (patch)
treec6318de7945b21ecf0c50c5245f7f35b812c8b42
parent41a04e7c67ad520e9315d01c2b79a689ec21e30c (diff)
downloadinvidious-23aaf7f1b745b830e42b133a7d3f380eac2c30f9.tar.gz
invidious-23aaf7f1b745b830e42b133a7d3f380eac2c30f9.tar.bz2
invidious-23aaf7f1b745b830e42b133a7d3f380eac2c30f9.zip
Add comments fallback
-rw-r--r--src/invidious.cr6
-rw-r--r--src/invidious/users.cr26
-rw-r--r--src/invidious/views/preferences.ecr17
-rw-r--r--src/invidious/views/watch.ecr232
4 files changed, 167 insertions, 114 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index 3c16650e..68514a44 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -761,8 +761,10 @@ post "/preferences" do |env|
volume = env.params.body["volume"]?.try &.as(String).to_i?
volume ||= 100
- comments = env.params.body["comments"]?
- comments ||= "youtube"
+ puts env.params.body
+ comments_0 = env.params.body["comments_0"]?.try &.as(String) || "youtube"
+ comments_1 = env.params.body["comments_1"]?.try &.as(String) || ""
+ comments = [comments_0, comments_1]
captions_0 = env.params.body["captions_0"]?.try &.as(String) || ""
captions_1 = env.params.body["captions_1"]?.try &.as(String) || ""
diff --git a/src/invidious/users.cr b/src/invidious/users.cr
index bdaaccb5..f8974693 100644
--- a/src/invidious/users.cr
+++ b/src/invidious/users.cr
@@ -32,7 +32,7 @@ DEFAULT_USER_PREFERENCES = Preferences.from_json({
"speed" => 1.0,
"quality" => "hd720",
"volume" => 100,
- "comments" => "youtube",
+ "comments" => ["youtube", ""],
"captions" => ["", "", ""],
"dark_mode" => false,
"thin_mode " => false,
@@ -43,6 +43,25 @@ DEFAULT_USER_PREFERENCES = Preferences.from_json({
}.to_json)
class Preferences
+ module StringToArray
+ def self.to_json(value : Array(String), json : JSON::Builder)
+ return value.to_json
+ end
+
+ def self.from_json(value : JSON::PullParser) : Array(String)
+ begin
+ result = [] of String
+ value.read_array do
+ result << value.read_string
+ end
+ rescue ex
+ result = [value.read_string, ""]
+ end
+
+ result
+ end
+ end
+
JSON.mapping({
video_loop: Bool,
autoplay: Bool,
@@ -50,8 +69,9 @@ class Preferences
quality: String,
volume: Int32,
comments: {
- type: String,
- default: "youtube",
+ type: Array(String),
+ default: ["youtube", ""],
+ converter: StringToArray,
},
captions: {
type: Array(String),
diff --git a/src/invidious/views/preferences.ecr b/src/invidious/views/preferences.ecr
index ce4ee64b..ffd3e69f 100644
--- a/src/invidious/views/preferences.ecr
+++ b/src/invidious/views/preferences.ecr
@@ -48,10 +48,19 @@ function update_value(element) {
</div>
<div class="pure-control-group">
- <label for="comments">Pull comments from: </label>
- <select name="comments" id="comments">
- <% {"youtube", "reddit"}.each do |option| %>
- <option <% if user.preferences.comments == option %> selected <% end %>><%= option %></option>
+ <label for="comments_0">Default comments: </label>
+ <select name="comments_0" id="comments_0">
+ <% {"", "youtube", "reddit"}.each do |option| %>
+ <option <% if user.preferences.comments[0] == option %> selected <% end %>><%= option %></option>
+ <% end %>
+ </select>
+ </div>
+
+ <div class="pure-control-group">
+ <label for="comments_1">Fallback comments: </label>
+ <select name="comments_1" id="comments_1">
+ <% {"", "youtube", "reddit"}.each do |option| %>
+ <option <% if user.preferences.comments[1] == option %> selected <% end %>><%= option %></option>
<% end %>
</select>
</div>
diff --git a/src/invidious/views/watch.ecr b/src/invidious/views/watch.ecr
index 1f854d2a..8294a617 100644
--- a/src/invidious/views/watch.ecr
+++ b/src/invidious/views/watch.ecr
@@ -30,6 +30,108 @@
<%= rendered "components/player" %>
</div>
+<div class="h-box">
+<h1>
+ <%= HTML.escape(video.title) %>
+ <% if listen %>
+ <a href="/watch?<%= env.params.query %>">
+ <i class="icon ion-ios-videocam"></i>
+ </a>
+ <% else %>
+ <a href="/watch?<%= env.params.query %>&listen=1">
+ <i class="icon ion-ios-volume-high"></i>
+ </a>
+ <% end %>
+</h1>
+<% if !reason.empty? %>
+<h3><%= reason %></h3>
+<% end %>
+</div>
+
+<div class="pure-g">
+ <div class="pure-u-1 pure-u-md-1-5">
+ <div class="h-box">
+ <p><a href="https://www.youtube.com/watch?v=<%= video.id %>">Watch video on YouTube</a></p>
+ <p><i class="icon ion-ios-eye"></i> <%= number_with_separator(video.views) %></p>
+ <p><i class="icon ion-ios-thumbs-up"></i> <%= number_with_separator(video.likes) %></p>
+ <p><i class="icon ion-ios-thumbs-down"></i> <%= number_with_separator(video.dislikes) %></p>
+ <p id="Genre">Genre: <%= video.genre %></p>
+ <p id="FamilyFriendly">Family Friendly? <%= video.is_family_friendly %></p>
+ <p id="Wilson">Wilson Score: <%= video.wilson_score.round(4) %></p>
+ <p id="Rating">Rating: <%= rating.round(4) %> / 5</p>
+ <p id="Engagement">Engagement: <%= engagement.round(2) %>%</p>
+ <% if video.allowed_regions.size != REGIONS.size %>
+ <p id="AllowedRegions">
+ <% if video.allowed_regions.size < REGIONS.size / 2 %>
+ Whitelisted regions: <%= video.allowed_regions.join(", ") %>
+ <% else %>
+ Blacklisted regions: <%= (REGIONS.to_a - video.allowed_regions).join(", ") %>
+ <% end %>
+ </p>
+ <% end %>
+ </div>
+ </div>
+
+ <div class="pure-u-1 pure-u-md-3-5">
+ <div class="h-box">
+ <p>
+ <a href="/channel/<%= video.ucid %>">
+ <h3><%= video.author %></h3>
+ </a>
+ </p>
+ <% if user %>
+ <% if subscriptions.includes? video.ucid %>
+ <p>
+ <a href="/subscription_ajax?action_remove_subscriptions=1&c=<%= video.ucid %>&referer=<%= env.get("current_page") %>">
+ <b>Unsubscribe from <%= video.author %></b>
+ </a>
+ </p>
+ <% else %>
+ <p>
+ <a href="/subscription_ajax?action_create_subscription_to_channel=1&c=<%= video.ucid %>&referer=<%= env.get("current_page") %>">
+ <b>Subscribe to <%= video.author %></b>
+ </a>
+ </p>
+ <% end %>
+ <% else %>
+ <p>
+ <a href="/login?referer=<%= env.get("current_page") %>">
+ <b>Login to subscribe to <%= video.author %></b>
+ </a>
+ </p>
+ <% end %>
+ <p>
+ <b>Shared <%= video.published.to_s("%B %-d, %Y") %></b>
+ </p>
+ <div>
+ <%= video.description %>
+ </div>
+ <hr>
+ <div id="comments">
+ <h3><center class="loading"><i class="icon ion-ios-refresh"></i></center></h3>
+ </div>
+ </div>
+ </div>
+ <div class="pure-u-1 pure-u-md-1-5">
+ <div class="h-box">
+ <% rvs.each do |rv| %>
+ <% if rv.has_key?("id") %>
+ <a href="/watch?v=<%= rv["id"] %>">
+ <% if preferences && preferences.thin_mode %>
+ <% else %>
+ <img style="width:100%;" src="<%= rv["iurlmq"] %>">
+ <% end %>
+ <p style="width:100%"><%= rv["title"] %></p>
+ <p>
+ <b style="width: 100%"><%= rv["author"] %></b>
+ </p>
+ </a>
+ <% end %>
+ <% end %>
+ </div>
+ </div>
+</div>
+
<script>
function toggle(target) {
body = target.parentNode.parentNode.children[1];
@@ -116,7 +218,12 @@ function get_reddit_comments() {
contentHtml: xhr.response.contentHtml
});
} else {
+ <% if preferences && preferences.comments[1] == "youtube" %>
get_youtube_comments();
+ <% else %>
+ comments = document.getElementById("comments");
+ comments.innerHTML = "";
+ <% end %>
}
};
@@ -152,8 +259,12 @@ function get_youtube_comments() {
commentCount: commaSeparateNumber(xhr.response.commentCount)
});
} else {
+ <% if preferences && preferences.comments[1] == "youtube" %>
+ get_youtube_comments();
+ <% else %>
comments = document.getElementById("comments");
comments.innerHTML = "";
+ <% end %>
}
};
@@ -181,112 +292,23 @@ String.prototype.supplant = function(o) {
});
};
-<% if preferences && preferences.comments == "reddit" %>
-get_reddit_comments();
-<% else %>
-get_youtube_comments();
-<% end %>
-
-</script>
-
-<div class="h-box">
-<h1>
- <%= HTML.escape(video.title) %>
- <% if listen %>
- <a href="/watch?<%= env.params.query %>">
- <i class="icon ion-ios-videocam"></i>
- </a>
+<% if preferences %>
+ <% if preferences.comments[0] == "youtube" %>
+ get_youtube_comments();
+ <% elsif preferences.comments[0] == "reddit" %>
+ get_reddit_comments();
<% else %>
- <a href="/watch?<%= env.params.query %>&listen=1">
- <i class="icon ion-ios-volume-high"></i>
- </a>
+ <% if preferences.comments[1] == "youtube" %>
+ get_youtube_comments();
+ <% elsif preferences.comments[1] == "reddit" %>
+ get_reddit_comments();
+ <% else %>
+ comments = document.getElementById("comments");
+ comments.innerHTML = "";
+ <% end %>
<% end %>
-</h1>
-<% if !reason.empty? %>
-<h3><%= reason %></h3>
+<% else %>
+get_youtube_comments();
<% end %>
-</div>
-<div class="pure-g">
- <div class="pure-u-1 pure-u-md-1-5">
- <div class="h-box">
- <p><a href="https://www.youtube.com/watch?v=<%= video.id %>">Watch video on YouTube</a></p>
- <p><i class="icon ion-ios-eye"></i> <%= number_with_separator(video.views) %></p>
- <p><i class="icon ion-ios-thumbs-up"></i> <%= number_with_separator(video.likes) %></p>
- <p><i class="icon ion-ios-thumbs-down"></i> <%= number_with_separator(video.dislikes) %></p>
- <p id="Genre">Genre: <%= video.genre %></p>
- <p id="FamilyFriendly">Family Friendly? <%= video.is_family_friendly %></p>
- <p id="Wilson">Wilson Score: <%= video.wilson_score.round(4) %></p>
- <p id="Rating">Rating: <%= rating.round(4) %> / 5</p>
- <p id="Engagement">Engagement: <%= engagement.round(2) %>%</p>
- <% if video.allowed_regions.size != REGIONS.size %>
- <p id="AllowedRegions">
- <% if video.allowed_regions.size < REGIONS.size / 2 %>
- Whitelisted regions: <%= video.allowed_regions.join(", ") %>
- <% else %>
- Blacklisted regions: <%= (REGIONS.to_a - video.allowed_regions).join(", ") %>
- <% end %>
- </p>
- <% end %>
- </div>
- </div>
-
- <div class="pure-u-1 pure-u-md-3-5">
- <div class="h-box">
- <p>
- <a href="/channel/<%= video.ucid %>">
- <h3><%= video.author %></h3>
- </a>
- </p>
- <% if user %>
- <% if subscriptions.includes? video.ucid %>
- <p>
- <a href="/subscription_ajax?action_remove_subscriptions=1&c=<%= video.ucid %>&referer=<%= env.get("current_page") %>">
- <b>Unsubscribe from <%= video.author %></b>
- </a>
- </p>
- <% else %>
- <p>
- <a href="/subscription_ajax?action_create_subscription_to_channel=1&c=<%= video.ucid %>&referer=<%= env.get("current_page") %>">
- <b>Subscribe to <%= video.author %></b>
- </a>
- </p>
- <% end %>
- <% else %>
- <p>
- <a href="/login?referer=<%= env.get("current_page") %>">
- <b>Login to subscribe to <%= video.author %></b>
- </a>
- </p>
- <% end %>
- <p>
- <b>Shared <%= video.published.to_s("%B %-d, %Y") %></b>
- </p>
- <div>
- <%= video.description %>
- </div>
- <hr>
- <div id="comments">
- <h3><center class="loading"><i class="icon ion-ios-refresh"></i></center></h3>
- </div>
- </div>
- </div>
- <div class="pure-u-1 pure-u-md-1-5">
- <div class="h-box">
- <% rvs.each do |rv| %>
- <% if rv.has_key?("id") %>
- <a href="/watch?v=<%= rv["id"] %>">
- <% if preferences && preferences.thin_mode %>
- <% else %>
- <img style="width:100%;" src="<%= rv["iurlmq"] %>">
- <% end %>
- <p style="width:100%"><%= rv["title"] %></p>
- <p>
- <b style="width: 100%"><%= rv["author"] %></b>
- </p>
- </a>
- <% end %>
- <% end %>
- </div>
- </div>
-</div>
+</script> \ No newline at end of file