kopia lustrzana https://github.com/iv-org/invidious
Add 'premiereTimestamp' to /api/v1/videos
rodzic
f0658bbd09
commit
88b70973cc
|
@ -2899,6 +2899,11 @@ get "/api/v1/videos/:id" do |env|
|
|||
json.field "rating", video.info["avg_rating"].to_f32
|
||||
json.field "isListed", video.is_listed
|
||||
json.field "liveNow", video.live_now
|
||||
json.field "isUpcoming", video.is_upcoming
|
||||
|
||||
if video.is_upcoming
|
||||
json.field "premiereTimestamp", video.premiere_timestamp
|
||||
end
|
||||
|
||||
if video.player_response["streamingData"]?.try &.["hlsManifestUrl"]?
|
||||
host_url = make_host_url(config, Kemal.config)
|
||||
|
|
|
@ -118,10 +118,12 @@ def fetch_channel(ucid, db, pull_all_videos = true, locale = nil)
|
|||
author = entry.xpath_node("author/name").not_nil!.content
|
||||
ucid = entry.xpath_node("channelid").not_nil!.content
|
||||
|
||||
length_seconds = videos.select { |video| video.id == video_id }[0]?.try &.length_seconds
|
||||
channel_video = videos.select { |video| video.id == video_id }[0]?
|
||||
|
||||
length_seconds = channel_video.try &.length_seconds
|
||||
length_seconds ||= 0
|
||||
|
||||
live_now = videos.select { |video| video.id == video_id }[0]?.try &.live_now
|
||||
live_now = channel_video.try &.live_now
|
||||
live_now ||= false
|
||||
|
||||
video = ChannelVideo.new(video_id, title, published, Time.now, ucid, author, length_seconds, live_now)
|
||||
|
|
|
@ -257,7 +257,7 @@ def validate_response(challenge, token, user_id, operation, key, db, locale)
|
|||
|
||||
if nonce = db.query_one?("SELECT * FROM nonces WHERE nonce = $1", nonce, as: {String, Time})
|
||||
if nonce[1] > Time.now
|
||||
db.exec("UPDATE nonces SET expire = $1 WHERE nonce = $2", Time.new(1990, 1, 1), nonce[0])
|
||||
db.exec("UPDATE nonces SET expire = $1 WHERE nonce = $2", Time.new(1990, 1, 1), nonce[0])
|
||||
else
|
||||
raise translate(locale, "Invalid token")
|
||||
end
|
||||
|
|
|
@ -253,7 +253,7 @@ class Video
|
|||
def allow_ratings
|
||||
allow_ratings = player_response["videoDetails"].try &.["allowRatings"]?.try &.as_bool
|
||||
|
||||
if !allow_ratings
|
||||
if allow_ratings.nil?
|
||||
return true
|
||||
end
|
||||
|
||||
|
@ -263,7 +263,7 @@ class Video
|
|||
def live_now
|
||||
live_now = self.player_response["videoDetails"]?.try &.["isLive"]?.try &.as_bool
|
||||
|
||||
if !live_now
|
||||
if live_now.nil?
|
||||
return false
|
||||
end
|
||||
|
||||
|
@ -273,13 +273,38 @@ class Video
|
|||
def is_listed
|
||||
is_listed = player_response["videoDetails"].try &.["isCrawlable"]?.try &.as_bool
|
||||
|
||||
if !is_listed
|
||||
if is_listed.nil?
|
||||
return true
|
||||
end
|
||||
|
||||
return is_listed
|
||||
end
|
||||
|
||||
def is_upcoming
|
||||
is_upcoming = player_response["videoDetails"].try &.["isUpcoming"]?.try &.as_bool
|
||||
|
||||
if is_upcoming.nil?
|
||||
return false
|
||||
end
|
||||
|
||||
return is_upcoming
|
||||
end
|
||||
|
||||
def premiere_timestamp
|
||||
if self.is_upcoming
|
||||
premiere_timestamp = player_response["playabilityStatus"]?
|
||||
.try &.["liveStreamability"]?
|
||||
.try &.["liveStreamabilityRenderer"]?
|
||||
.try &.["offlineSlate"]?
|
||||
.try &.["liveStreamOfflineSlateRenderer"]?
|
||||
.try &.["scheduledStartTime"].as_s.to_i64
|
||||
|
||||
return premiere_timestamp
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
def keywords
|
||||
keywords = self.player_response["videoDetails"]?.try &.["keywords"]?.try &.as_a
|
||||
keywords ||= [] of String
|
||||
|
|
|
@ -39,7 +39,9 @@
|
|||
<% else %>
|
||||
<div class="thumbnail">
|
||||
<img class="thumbnail" src="/vi/<%= item.id %>/mqdefault.jpg"/>
|
||||
<% if item.length_seconds != 0 %>
|
||||
<p class="length"><%= recode_length_seconds(item.length_seconds) %></p>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
<p><%= item.title %></p>
|
||||
|
@ -55,7 +57,7 @@
|
|||
<img class="thumbnail" src="/vi/<%= item.id %>/mqdefault.jpg"/>
|
||||
<% if item.responds_to?(:live_now) && item.live_now %>
|
||||
<p class="length"><i class="icon ion-ios-play-circle"></i> <%= translate(locale, "LIVE") %></p>
|
||||
<% else %>
|
||||
<% elsif item.length_seconds != 0 %>
|
||||
<p class="length"><%= recode_length_seconds(item.length_seconds) %></p>
|
||||
<% end %>
|
||||
</div>
|
||||
|
@ -90,7 +92,7 @@
|
|||
<% end %>
|
||||
<% if item.responds_to?(:live_now) && item.live_now %>
|
||||
<p class="length"><i class="icon ion-ios-play-circle"></i> <%= translate(locale, "LIVE") %></p>
|
||||
<% else %>
|
||||
<% elsif item.length_seconds != 0 %>
|
||||
<p class="length"><%= recode_length_seconds(item.length_seconds) %></p>
|
||||
<% end %>
|
||||
</div>
|
||||
|
|
Ładowanie…
Reference in New Issue