summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xconfig/migrate-scripts/migrate-db-52cb239.sh3
-rw-r--r--config/sql/channel_videos.sql1
-rw-r--r--src/invidious.cr5
-rw-r--r--src/invidious/channels.cr18
-rw-r--r--src/invidious/views/components/item.ecr4
5 files changed, 22 insertions, 9 deletions
diff --git a/config/migrate-scripts/migrate-db-52cb239.sh b/config/migrate-scripts/migrate-db-52cb239.sh
new file mode 100755
index 00000000..db8efeab
--- /dev/null
+++ b/config/migrate-scripts/migrate-db-52cb239.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+psql invidious kemal -c "ALTER TABLE channel_videos ADD COLUMN views bigint;"
diff --git a/config/sql/channel_videos.sql b/config/sql/channel_videos.sql
index ba354adf..cec57cd4 100644
--- a/config/sql/channel_videos.sql
+++ b/config/sql/channel_videos.sql
@@ -13,6 +13,7 @@ CREATE TABLE public.channel_videos
length_seconds integer,
live_now boolean,
premiere_timestamp timestamp with time zone,
+ views bigint,
CONSTRAINT channel_videos_id_key UNIQUE (id)
);
diff --git a/src/invidious.cr b/src/invidious.cr
index f487b0e9..dea32a39 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -2857,6 +2857,7 @@ post "/feed/webhook/:token" do |env|
length_seconds: video.length_seconds,
live_now: video.live_now,
premiere_timestamp: video.premiere_timestamp,
+ views: video.views,
)
users = PG_DB.query_all("UPDATE users SET notifications = notifications || $1 \
@@ -2866,10 +2867,10 @@ post "/feed/webhook/:token" do |env|
video_array = video.to_a
args = arg_array(video_array)
- PG_DB.exec("INSERT INTO channel_videos VALUES (#{args}) \
+ PG_DB.exec("INSERT INTO channel_videos (id, title, published, updated, ucid, author, length_seconds, live_now, premiere_timestamp) VALUES (#{args}) \
ON CONFLICT (id) DO UPDATE SET title = $2, published = $3, \
updated = $4, ucid = $5, author = $6, length_seconds = $7, \
- live_now = $8, premiere_timestamp = $9", video_array)
+ live_now = $8, premiere_timestamp = $9, views = $10", video_array)
users.each do |user|
payload = {
diff --git a/src/invidious/channels.cr b/src/invidious/channels.cr
index c8de9543..d0eb7dd3 100644
--- a/src/invidious/channels.cr
+++ b/src/invidious/channels.cr
@@ -24,6 +24,8 @@ struct ChannelVideo
json.field "authorUrl", "/channel/#{self.ucid}"
json.field "published", self.published.to_unix
json.field "publishedText", translate(locale, "`x` ago", recode_date(self.published, locale))
+
+ json.field "viewCount", self.views
end
end
@@ -47,6 +49,7 @@ struct ChannelVideo
length_seconds: {type: Int32, default: 0},
live_now: {type: Bool, default: false},
premiere_timestamp: {type: Time?, default: nil},
+ views: {type: Int64?, default: nil},
})
end
@@ -155,6 +158,8 @@ def fetch_channel(ucid, db, pull_all_videos = true, locale = nil)
updated = Time.parse_rfc3339(entry.xpath_node("updated").not_nil!.content)
author = entry.xpath_node("author/name").not_nil!.content
ucid = entry.xpath_node("channelid").not_nil!.content
+ views = entry.xpath_node("group/community/statistics").try &.["views"]?.try &.to_i64?
+ views ||= 0_i64
channel_video = videos.select { |video| video.id == video_id }[0]?
@@ -175,7 +180,8 @@ def fetch_channel(ucid, db, pull_all_videos = true, locale = nil)
author: author,
length_seconds: length_seconds,
live_now: live_now,
- premiere_timestamp: premiere_timestamp
+ premiere_timestamp: premiere_timestamp,
+ views: views,
)
users = db.query_all("UPDATE users SET notifications = notifications || $1 \
@@ -190,7 +196,7 @@ def fetch_channel(ucid, db, pull_all_videos = true, locale = nil)
db.exec("INSERT INTO channel_videos VALUES (#{args}) \
ON CONFLICT (id) DO UPDATE SET title = $2, published = $3, \
updated = $4, ucid = $5, author = $6, length_seconds = $7, \
- live_now = $8", video_array)
+ live_now = $8, views = $10", video_array)
users.each do |user|
payload = {
@@ -236,7 +242,8 @@ def fetch_channel(ucid, db, pull_all_videos = true, locale = nil)
author: video.author,
length_seconds: video.length_seconds,
live_now: video.live_now,
- premiere_timestamp: video.premiere_timestamp
+ premiere_timestamp: video.premiere_timestamp,
+ views: video.views
) }
videos.each do |video|
@@ -254,8 +261,9 @@ def fetch_channel(ucid, db, pull_all_videos = true, locale = nil)
# We don't update the 'premire_timestamp' here because channel pages don't include them
db.exec("INSERT INTO channel_videos VALUES (#{args}) \
- ON CONFLICT (id) DO UPDATE SET title = $2, updated = $4, \
- ucid = $5, author = $6, length_seconds = $7, live_now = $8", video_array)
+ ON CONFLICT (id) DO UPDATE SET title = $2, published = $3, \
+ updated = $4, ucid = $5, author = $6, length_seconds = $7, \
+ live_now = $8, views = $10", video_array)
# Update all users affected by insert
users.each do |user|
diff --git a/src/invidious/views/components/item.ecr b/src/invidious/views/components/item.ecr
index 5ec406cb..dc2acac9 100644
--- a/src/invidious/views/components/item.ecr
+++ b/src/invidious/views/components/item.ecr
@@ -81,7 +81,7 @@
<% end %>
<div class="pure-u-1-3" style="text-align:right">
- <%= item.responds_to?(:views) ? translate(locale, "`x` views", number_to_short_text(item.views)) : "" %>
+ <%= item.responds_to?(:views) && item.views ? translate(locale, "`x` views", number_to_short_text(item.views || 0)) : "" %>
</div>
</h5>
<% else %>
@@ -130,7 +130,7 @@
<% end %>
<div class="pure-u-1-3" style="text-align:right">
- <%= item.responds_to?(:views) ? translate(locale, "`x` views", number_to_short_text(item.views)) : "" %>
+ <%= item.responds_to?(:views) && item.views ? translate(locale, "`x` views", number_to_short_text(item.views || 0)) : "" %>
</div>
</h5>
<% end %>