Add 'liveNow' to subscription feed
This commit is contained in:
parent
661e07c8db
commit
f0658bbd09
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
psql invidious -c "ALTER TABLE channel_videos ADD COLUMN live_now bool;"
|
||||||
|
psql invidious -c "UPDATE channel_videos SET live_now = false;"
|
|
@ -2372,7 +2372,7 @@ post "/feed/webhook/:token" do |env|
|
||||||
updated = Time.parse_rfc3339(entry.xpath_node("updated").not_nil!.content)
|
updated = Time.parse_rfc3339(entry.xpath_node("updated").not_nil!.content)
|
||||||
|
|
||||||
video = get_video(id, PG_DB, proxies, region: nil)
|
video = get_video(id, PG_DB, proxies, region: nil)
|
||||||
video = ChannelVideo.new(id, video.title, published, updated, video.ucid, video.author, video.length_seconds)
|
video = ChannelVideo.new(id, video.title, published, updated, video.ucid, video.author, video.length_seconds, video.live_now)
|
||||||
|
|
||||||
PG_DB.exec("UPDATE users SET notifications = notifications || $1 \
|
PG_DB.exec("UPDATE users SET notifications = notifications || $1 \
|
||||||
WHERE updated < $2 AND $3 = ANY(subscriptions) AND $1 <> ALL(notifications)", video.id, video.published, video.ucid)
|
WHERE updated < $2 AND $3 = ANY(subscriptions) AND $1 <> ALL(notifications)", video.id, video.published, video.ucid)
|
||||||
|
@ -2382,7 +2382,7 @@ post "/feed/webhook/:token" do |env|
|
||||||
|
|
||||||
PG_DB.exec("INSERT INTO channel_videos VALUES (#{args}) \
|
PG_DB.exec("INSERT INTO channel_videos VALUES (#{args}) \
|
||||||
ON CONFLICT (id) DO UPDATE SET title = $2, published = $3, \
|
ON CONFLICT (id) DO UPDATE SET title = $2, published = $3, \
|
||||||
updated = $4, ucid = $5, author = $6, length_seconds = $7", video_array)
|
updated = $4, ucid = $5, author = $6, length_seconds = $7, live_now = $8", video_array)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -2895,16 +2895,10 @@ get "/api/v1/videos/:id" do |env|
|
||||||
json.field "subCountText", video.sub_count_text
|
json.field "subCountText", video.sub_count_text
|
||||||
|
|
||||||
json.field "lengthSeconds", video.info["length_seconds"].to_i
|
json.field "lengthSeconds", video.info["length_seconds"].to_i
|
||||||
if video.info["allow_ratings"]?
|
json.field "allowRatings", video.allow_ratings
|
||||||
json.field "allowRatings", video.info["allow_ratings"] == "1"
|
|
||||||
else
|
|
||||||
json.field "allowRatings", false
|
|
||||||
end
|
|
||||||
json.field "rating", video.info["avg_rating"].to_f32
|
json.field "rating", video.info["avg_rating"].to_f32
|
||||||
|
json.field "isListed", video.is_listed
|
||||||
if video.info["is_listed"]?
|
json.field "liveNow", video.live_now
|
||||||
json.field "isListed", video.info["is_listed"] == "1"
|
|
||||||
end
|
|
||||||
|
|
||||||
if video.player_response["streamingData"]?.try &.["hlsManifestUrl"]?
|
if video.player_response["streamingData"]?.try &.["hlsManifestUrl"]?
|
||||||
host_url = make_host_url(config, Kemal.config)
|
host_url = make_host_url(config, Kemal.config)
|
||||||
|
@ -4011,7 +4005,7 @@ get "/api/manifest/dash/id/:id" do |env|
|
||||||
halt env, status_code: 403
|
halt env, status_code: 403
|
||||||
end
|
end
|
||||||
|
|
||||||
if dashmpd = video.player_response["streamingData"]["dashManifestUrl"]?.try &.as_s
|
if dashmpd = video.player_response["streamingData"]?.try &.["dashManifestUrl"]?.try &.as_s
|
||||||
manifest = client.get(dashmpd).body
|
manifest = client.get(dashmpd).body
|
||||||
|
|
||||||
manifest = manifest.gsub(/<BaseURL>[^<]+<\/BaseURL>/) do |baseurl|
|
manifest = manifest.gsub(/<BaseURL>[^<]+<\/BaseURL>/) do |baseurl|
|
||||||
|
|
|
@ -17,6 +17,7 @@ class ChannelVideo
|
||||||
ucid: String,
|
ucid: String,
|
||||||
author: String,
|
author: String,
|
||||||
length_seconds: {type: Int32, default: 0},
|
length_seconds: {type: Int32, default: 0},
|
||||||
|
live_now: {type: Bool, default: false},
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -120,7 +121,10 @@ def fetch_channel(ucid, db, pull_all_videos = true, locale = nil)
|
||||||
length_seconds = videos.select { |video| video.id == video_id }[0]?.try &.length_seconds
|
length_seconds = videos.select { |video| video.id == video_id }[0]?.try &.length_seconds
|
||||||
length_seconds ||= 0
|
length_seconds ||= 0
|
||||||
|
|
||||||
video = ChannelVideo.new(video_id, title, published, Time.now, ucid, author, length_seconds)
|
live_now = videos.select { |video| video.id == video_id }[0]?.try &.live_now
|
||||||
|
live_now ||= false
|
||||||
|
|
||||||
|
video = ChannelVideo.new(video_id, title, published, Time.now, ucid, author, length_seconds, live_now)
|
||||||
|
|
||||||
db.exec("UPDATE users SET notifications = notifications || $1 \
|
db.exec("UPDATE users SET notifications = notifications || $1 \
|
||||||
WHERE updated < $2 AND $3 = ANY(subscriptions) AND $1 <> ALL(notifications)", video.id, video.published, ucid)
|
WHERE updated < $2 AND $3 = ANY(subscriptions) AND $1 <> ALL(notifications)", video.id, video.published, ucid)
|
||||||
|
@ -130,7 +134,7 @@ def fetch_channel(ucid, db, pull_all_videos = true, locale = nil)
|
||||||
|
|
||||||
db.exec("INSERT INTO channel_videos VALUES (#{args}) \
|
db.exec("INSERT INTO channel_videos VALUES (#{args}) \
|
||||||
ON CONFLICT (id) DO UPDATE SET title = $2, published = $3, \
|
ON CONFLICT (id) DO UPDATE SET title = $2, published = $3, \
|
||||||
updated = $4, ucid = $5, author = $6, length_seconds = $7", video_array)
|
updated = $4, ucid = $5, author = $6, length_seconds = $7, live_now = $8", video_array)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
page = 1
|
page = 1
|
||||||
|
@ -157,7 +161,7 @@ def fetch_channel(ucid, db, pull_all_videos = true, locale = nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
count = nodeset.size
|
count = nodeset.size
|
||||||
videos = videos.map { |video| ChannelVideo.new(video.id, video.title, video.published, Time.now, video.ucid, video.author, video.length_seconds) }
|
videos = videos.map { |video| ChannelVideo.new(video.id, video.title, video.published, Time.now, video.ucid, video.author, video.length_seconds, video.live_now) }
|
||||||
|
|
||||||
videos.each do |video|
|
videos.each do |video|
|
||||||
ids << video.id
|
ids << video.id
|
||||||
|
@ -171,7 +175,7 @@ def fetch_channel(ucid, db, pull_all_videos = true, locale = nil)
|
||||||
args = arg_array(video_array)
|
args = arg_array(video_array)
|
||||||
|
|
||||||
db.exec("INSERT INTO channel_videos VALUES (#{args}) ON CONFLICT (id) DO UPDATE SET title = $2, \
|
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", video_array)
|
published = $3, updated = $4, ucid = $5, author = $6, length_seconds = $7, live_now = $8", video_array)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -250,6 +250,36 @@ class Video
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def allow_ratings
|
||||||
|
allow_ratings = player_response["videoDetails"].try &.["allowRatings"]?.try &.as_bool
|
||||||
|
|
||||||
|
if !allow_ratings
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
return allow_ratings
|
||||||
|
end
|
||||||
|
|
||||||
|
def live_now
|
||||||
|
live_now = self.player_response["videoDetails"]?.try &.["isLive"]?.try &.as_bool
|
||||||
|
|
||||||
|
if !live_now
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
return live_now
|
||||||
|
end
|
||||||
|
|
||||||
|
def is_listed
|
||||||
|
is_listed = player_response["videoDetails"].try &.["isCrawlable"]?.try &.as_bool
|
||||||
|
|
||||||
|
if !is_listed
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
return is_listed
|
||||||
|
end
|
||||||
|
|
||||||
def keywords
|
def keywords
|
||||||
keywords = self.player_response["videoDetails"]?.try &.["keywords"]?.try &.as_a
|
keywords = self.player_response["videoDetails"]?.try &.["keywords"]?.try &.as_a
|
||||||
keywords ||= [] of String
|
keywords ||= [] of String
|
||||||
|
|
Loading…
Reference in New Issue