forked from midou/invidious
		
	Add 'premiereTimestamp' to /api/v1/videos
This commit is contained in:
		| @@ -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> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user