summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/invidious.cr102
-rw-r--r--src/invidious/comments.cr2
-rw-r--r--src/invidious/views/channel.ecr2
-rw-r--r--src/invidious/views/components/item.ecr15
-rw-r--r--src/invidious/views/history.ecr73
-rw-r--r--src/invidious/views/subscriptions.ecr22
-rw-r--r--src/invidious/views/watch.ecr2
7 files changed, 193 insertions, 25 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index 0d84081f..e7f28927 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -246,12 +246,10 @@ get "/watch" do |env|
user = env.get? "user"
if user
user = user.as(User)
- if !user.watched.includes? id
- PG_DB.exec("UPDATE users SET watched = watched || $1 WHERE id = $2", [id], user.id)
- end
preferences = user.preferences
subscriptions = user.subscriptions
+ watched = user.watched
end
subscriptions ||= [] of String
@@ -268,6 +266,10 @@ get "/watch" do |env|
next templated "error"
end
+ if watched && !watched.includes? id
+ PG_DB.exec("UPDATE users SET watched = watched || $1 WHERE $2 = id", [id], user.as(User).id)
+ end
+
if nojs
if preferences
source = preferences.comments[0]
@@ -963,7 +965,6 @@ end
get "/preferences" do |env|
user = env.get? "user"
-
referer = get_referer(env)
if user
@@ -976,7 +977,6 @@ end
post "/preferences" do |env|
user = env.get? "user"
-
referer = get_referer(env)
if user
@@ -1079,7 +1079,6 @@ end
get "/toggle_theme" do |env|
user = env.get? "user"
-
referer = get_referer(env)
if user
@@ -1098,13 +1097,66 @@ get "/toggle_theme" do |env|
env.redirect referer
end
+get "/mark_watched" do |env|
+ user = env.get? "user"
+ referer = get_referer(env, "/feed/subscriptions")
+
+ id = env.params.query["id"]?
+ if !id
+ halt env, status_code: 400
+ end
+
+ redirect = env.params.query["redirect"]?
+ redirect ||= "false"
+ redirect = redirect == "true"
+
+ if user
+ user = user.as(User)
+ if !user.watched.includes? id
+ PG_DB.exec("UPDATE users SET watched = watched || $1 WHERE $2 = id", [id], user.id)
+ end
+ end
+
+ if redirect
+ env.redirect referer
+ else
+ env.response.content_type = "application/json"
+ "{}"
+ end
+end
+
+get "/mark_unwatched" do |env|
+ user = env.get? "user"
+ referer = get_referer(env, "/feed/history")
+
+ id = env.params.query["id"]?
+ if !id
+ halt env, status_code: 400
+ end
+
+ redirect = env.params.query["redirect"]?
+ redirect ||= "false"
+ redirect = redirect == "true"
+
+ if user
+ user = user.as(User)
+ PG_DB.exec("UPDATE users SET watched = array_remove(watched, $1) WHERE id = $2", id, user.id)
+ end
+
+ if redirect
+ env.redirect referer
+ else
+ env.response.content_type = "application/json"
+ "{}"
+ end
+end
+
# /modify_notifications
# will "ding" all subscriptions.
# /modify_notifications?receive_all_updates=false&receive_no_updates=false
# will "unding" all subscriptions.
get "/modify_notifications" do |env|
user = env.get? "user"
-
referer = get_referer(env)
if user
@@ -1150,7 +1202,6 @@ end
get "/subscription_manager" do |env|
user = env.get? "user"
-
referer = get_referer(env, "/")
if !user
@@ -1235,7 +1286,6 @@ end
get "/data_control" do |env|
user = env.get? "user"
-
referer = get_referer(env)
if user
@@ -1249,7 +1299,6 @@ end
post "/data_control" do |env|
user = env.get? "user"
-
referer = get_referer(env)
if user
@@ -1385,7 +1434,6 @@ end
get "/subscription_ajax" do |env|
user = env.get? "user"
-
referer = get_referer(env)
if user
@@ -1547,6 +1595,7 @@ get "/feed/subscriptions" do |env|
if user
user = user.as(User)
preferences = user.preferences
+ env.set "show_watched", true
# Refresh account
headers = HTTP::Headers.new
@@ -1670,19 +1719,28 @@ get "/feed/subscriptions" do |env|
end
end
-# get "/feed/history" do |env|
-# user = env.get? "user"
-# referer = get_referer(env)
+get "/feed/history" do |env|
+ user = env.get? "user"
+ referer = get_referer(env)
+
+ page = env.params.query["page"]?.try &.to_i?
+ page ||= 1
+
+ if user
+ user = user.as(User)
-# if user
-# user = user.as(User)
-# watched = user.watched.reverse
+ limit = user.preferences.max_results
+ if user.watched[(page - 1)*limit]?
+ watched = user.watched.reverse[(page - 1)*limit, limit]
+ else
+ watched = [] of String
+ end
-# templated "history"
-# else
-# env.redirect referer
-# end
-# end
+ templated "history"
+ else
+ env.redirect referer
+ end
+end
get "/feed/channel/:ucid" do |env|
env.response.content_type = "text/xml"
diff --git a/src/invidious/comments.cr b/src/invidious/comments.cr
index 372e58ed..70d365a1 100644
--- a/src/invidious/comments.cr
+++ b/src/invidious/comments.cr
@@ -507,7 +507,7 @@ def content_to_comment_html(content)
length_seconds = watch_endpoint["startTimeSeconds"].as_i
video_id = watch_endpoint["videoId"].as_s
- text = %(<a href="javascript:void();" onclick="player.currentTime(#{length_seconds})">#{text}</a>)
+ text = %(<a href="javascript:void(0)" onclick="player.currentTime(#{length_seconds})">#{text}</a>)
elsif url = run["navigationEndpoint"]["commandMetadata"]?.try &.["webCommandMetadata"]["url"].as_s
text = %(<a href="#{url}">#{text}</a>)
end
diff --git a/src/invidious/views/channel.ecr b/src/invidious/views/channel.ecr
index 98899228..25cf191d 100644
--- a/src/invidious/views/channel.ecr
+++ b/src/invidious/views/channel.ecr
@@ -90,7 +90,7 @@
</div>
<script>
-document.getElementById("subscribe")["href"] = "javascript:void(0);"
+document.getElementById("subscribe")["href"] = "javascript:void(0)"
function subscribe() {
var url = "/subscription_ajax?action_create_subscription_to_channel=1&c=<%= ucid %>&referer=<%= env.get("current_page") %>";
diff --git a/src/invidious/views/components/item.ecr b/src/invidious/views/components/item.ecr
index 02aea742..5940ae8a 100644
--- a/src/invidious/views/components/item.ecr
+++ b/src/invidious/views/components/item.ecr
@@ -74,6 +74,21 @@
<% else %>
<div class="thumbnail">
<img class="thumbnail" src="/vi/<%= item.id %>/mqdefault.jpg"/>
+ <% if env.get? "show_watched" %>
+ <p class="watched">
+ <a onclick="mark_watched(this)"
+ data-id="<%= item.id %>"
+ onmouseenter='this["href"]="javascript:void(0)"'
+ href="/mark_watched?id=<%= item.id %>"'
+ >
+ <i onmouseenter='this.setAttribute("class", "icon ion-ios-eye-off")'
+ onmouseleave='this.setAttribute("class", "icon ion-ios-eye")'
+ class="icon ion-ios-eye"
+ >
+ </i>
+ </a>
+ </p>
+ <% end %>
<p class="length"><%= recode_length_seconds(item.length_seconds) %></p>
</div>
<% end %>
diff --git a/src/invidious/views/history.ecr b/src/invidious/views/history.ecr
new file mode 100644
index 00000000..34ba3289
--- /dev/null
+++ b/src/invidious/views/history.ecr
@@ -0,0 +1,73 @@
+<% content_for "header" do %>
+<title>History - Invidious</title>
+<% end %>
+
+<div class="pure-g">
+<% watched.each_slice(4) do |slice| %>
+ <% slice.each do |item| %>
+ <div class="pure-u-1 pure-u-md-1-4">
+ <div class="h-box">
+ <a style="width:100%;" href="/watch?v=<%= item %>">
+ <% if env.get?("user") && env.get("user").as(User).preferences.thin_mode %>
+ <% else %>
+ <div class="thumbnail">
+ <img class="thumbnail" src="/vi/<%= item %>/mqdefault.jpg"/>
+ <p class="watched">
+ <a onclick="mark_unwatched(this)"
+ data-id="<%= item %>"
+ onmouseenter='this["href"]="javascript:void(0)"'
+ href="/mark_unwatched?id=<%= item %>"'
+ >
+ <i onmouseenter='this.setAttribute("class", "icon ion-ios-eye")'
+ onmouseleave='this.setAttribute("class", "icon ion-ios-eye-off")'
+ class="icon ion-ios-eye-off"
+ >
+ </i>
+ </a>
+ </p>
+ </div>
+ <p></p>
+ <% end %>
+ </a>
+ </div>
+ </div>
+ <% end %>
+<% end %>
+</div>
+
+<script>
+function mark_unwatched(target) {
+ var tile = target.parentNode.parentNode.parentNode.parentNode;
+ tile.style.display = "none";
+
+ var url = "/mark_unwatched?redirect=false&id=" + target.getAttribute("data-id");
+ var xhr = new XMLHttpRequest();
+ xhr.responseType = "json";
+ xhr.timeout = 20000;
+ xhr.open("GET", url, true);
+ xhr.setRequestHeader("Redirect", "false");
+ xhr.send();
+
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState == 4) {
+ if (xhr.status != 200) {
+ tile.style.display = "";
+ }
+ }
+ }
+}
+</script>
+
+<div class="pure-g h-box">
+ <div class="pure-u-1 pure-u-md-1-5">
+ <% if page >= 2 %>
+ <a href="/feed/history?page=<%= page - 1 %>">Previous page</a>
+ <% end %>
+ </div>
+ <div class="pure-u-1 pure-u-md-3-5"></div>
+ <div style="text-align:right;" class="pure-u-1 pure-u-md-1-5">
+ <% if watched.size >= limit %>
+ <a href="/feed/history?page=<%= page + 1 %>">Next page</a>
+ <% end %>
+ </div>
+</div>
diff --git a/src/invidious/views/subscriptions.ecr b/src/invidious/views/subscriptions.ecr
index 6aa060ff..a5c0c924 100644
--- a/src/invidious/views/subscriptions.ecr
+++ b/src/invidious/views/subscriptions.ecr
@@ -43,6 +43,28 @@
<% end %>
</div>
+<script>
+function mark_watched(target) {
+ var tile = target.parentNode.parentNode.parentNode.parentNode;
+ tile.style.display = "none";
+
+ var url = "/mark_watched?redirect=false&id=" + target.getAttribute("data-id");
+ var xhr = new XMLHttpRequest();
+ xhr.responseType = "json";
+ xhr.timeout = 20000;
+ xhr.open("GET", url, true);
+ xhr.send();
+
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState == 4) {
+ if (xhr.status != 200) {
+ tile.style.display = "";
+ }
+ }
+ }
+}
+</script>
+
<div class="pure-g">
<div class="pure-u-1 pure-u-md-1-5">
<% if page >= 2 %>
diff --git a/src/invidious/views/watch.ecr b/src/invidious/views/watch.ecr
index 31437760..2f29b5b2 100644
--- a/src/invidious/views/watch.ecr
+++ b/src/invidious/views/watch.ecr
@@ -225,7 +225,7 @@ function number_with_separator(val) {
subscribe_button = document.getElementById("subscribe");
if (subscribe_button.getAttribute('onclick')) {
- subscribe_button["href"] = "javascript:void(0);";
+ subscribe_button["href"] = "javascript:void(0)";
}
function subscribe() {