Aggiunge replay YouTube temporaneo, pull registrazioni dai CPX e snapshot ingest in admin.
Così overflow Hetzner e VOD YouTube restano in archivio dopo lo spegnimento del nodo, e la colonna ingest non si svuota. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
<% node = session.stream_node %>
|
||||
<% if node %>
|
||||
<% slug = session.ingest_slug_display %>
|
||||
<% role = session.ingest_role_display %>
|
||||
<% if slug.present? %>
|
||||
<div class="admin-ingest">
|
||||
<code class="admin-ingest__slug"><%= node.slug %></code>
|
||||
<span class="badge <%= admin_session_ingest_badge_class(node) %>"><%= admin_session_ingest_role_label(node) %></span>
|
||||
<code class="admin-ingest__slug"><%= slug %></code>
|
||||
<% if role.present? %>
|
||||
<span class="badge <%= admin_session_ingest_badge_class(role) %>"><%= admin_session_ingest_role_label(role) %></span>
|
||||
<% end %>
|
||||
</div>
|
||||
<% else %>
|
||||
<span class="muted"><%= t("admin.sessions.ingest.none") %></span>
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
<span><%= t("admin.sessions.index.filters.platform") %></span>
|
||||
<%= select_tag :platform,
|
||||
options_for_select(
|
||||
[[t("admin.sessions.index.filters.any"), ""]] + StreamSession::PLATFORMS.map { |p| [p, p] },
|
||||
[[t("admin.sessions.index.filters.any"), ""]] + StreamSession::LIVE_PLATFORMS.map { |p| [p, p] },
|
||||
@filters[:platform]
|
||||
) %>
|
||||
</label>
|
||||
|
||||
@@ -162,12 +162,20 @@
|
||||
<div>
|
||||
<dt><%= t("admin.sessions.show.fields.node") %></dt>
|
||||
<dd>
|
||||
<% if @session.stream_node %>
|
||||
<code><%= @session.stream_node.slug %></code>
|
||||
<span class="badge <%= admin_session_ingest_badge_class(@session.stream_node) %>">
|
||||
<%= admin_session_ingest_role_label(@session.stream_node) %>
|
||||
</span>
|
||||
<span class="muted">(<%= @session.stream_node.provider %>)</span>
|
||||
<% slug = @session.ingest_slug_display %>
|
||||
<% role = @session.ingest_role_display %>
|
||||
<% if slug.present? %>
|
||||
<code><%= slug %></code>
|
||||
<% if role.present? %>
|
||||
<span class="badge <%= admin_session_ingest_badge_class(role) %>">
|
||||
<%= admin_session_ingest_role_label(role) %>
|
||||
</span>
|
||||
<% end %>
|
||||
<% if @session.stream_node %>
|
||||
<span class="muted">(<%= @session.stream_node.provider %>)</span>
|
||||
<% else %>
|
||||
<span class="muted"><%= t("admin.sessions.ingest.decommissioned") %></span>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<span class="muted"><%= t("admin.sessions.ingest.none") %></span>
|
||||
<% end %>
|
||||
|
||||
@@ -14,6 +14,33 @@
|
||||
<h2><%= t("replay.show.processing_title") %></h2>
|
||||
<p><%= t("replay.show.processing_body") %></p>
|
||||
</div>
|
||||
<% elsif @recording.ready? && @recording.replay_source == "youtube" && @recording.youtube_video_id.present? && !@recording.youtube_video_id.to_s.start_with?("mock_") %>
|
||||
<div class="live-player-wrap live-player-wrap--embed">
|
||||
<iframe src="https://www.youtube.com/embed/<%= @recording.youtube_video_id %>"
|
||||
title="<%= @recording.title_or_default %>"
|
||||
class="live-player-embed"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowfullscreen></iframe>
|
||||
<%= render "public/live/player_overlays",
|
||||
match: @match,
|
||||
session: @session,
|
||||
stream_closed: true,
|
||||
on_air: false,
|
||||
badge_label: t("replay.show.badge_label"),
|
||||
badge_class: "badge-ended" %>
|
||||
</div>
|
||||
<p class="replay-show__meta-line">
|
||||
<%= l_local(@recording.recorded_at_or_fallback) %>
|
||||
· <%= t("replay.show.meta_line_duration", value: @recording.duration_label) %>
|
||||
· <%= @recording.views_label %>
|
||||
<% if @recording.source_platform_label != "—" %>
|
||||
· <%= @recording.source_platform_label %>
|
||||
<% end %>
|
||||
</p>
|
||||
<p class="replay-show__meta-line">
|
||||
<%= t("replay.show.youtube_only_body") %>
|
||||
<%= link_to t("replay.show.youtube_link"), @recording.youtube_watch_url, target: "_blank", rel: "noopener" %>
|
||||
</p>
|
||||
<% elsif @recording.ready? && @recording.storage_key.present? %>
|
||||
<div class="live-player-wrap">
|
||||
<video id="replay-player" controls playsinline preload="metadata"
|
||||
@@ -43,9 +70,9 @@
|
||||
</p>
|
||||
|
||||
<% ent = @recording.team.entitlements %>
|
||||
<% if (ent.phone_download_enabled? && (logged_in? || @recording.unlisted?)) || @recording.youtube_watch_url %>
|
||||
<% if (ent.phone_download_enabled? && @recording.storage_key.present? && (logged_in? || @recording.unlisted?)) || @recording.youtube_watch_url %>
|
||||
<div class="replay-show__actions">
|
||||
<% if ent.phone_download_enabled? && (logged_in? || @recording.unlisted?) %>
|
||||
<% if ent.phone_download_enabled? && @recording.storage_key.present? && (logged_in? || @recording.unlisted?) %>
|
||||
<%= link_to t("replay.show.download_link"), public_replay_download_path(@session), class: "btn btn-primary" %>
|
||||
<% end %>
|
||||
<% if @recording.youtube_watch_url %>
|
||||
@@ -53,25 +80,6 @@
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% elsif @recording.ready? && @recording.youtube_watch_url.present? %>
|
||||
<div class="live-player-wrap live-player-wrap--embed">
|
||||
<iframe src="https://www.youtube.com/embed/<%= @recording.youtube_video_id %>"
|
||||
title="<%= @recording.title_or_default %>"
|
||||
class="live-player-embed"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowfullscreen></iframe>
|
||||
<%= render "public/live/player_overlays",
|
||||
match: @match,
|
||||
session: @session,
|
||||
stream_closed: true,
|
||||
on_air: false,
|
||||
badge_label: t("replay.show.badge_label"),
|
||||
badge_class: "badge-ended" %>
|
||||
</div>
|
||||
<p class="replay-show__meta-line">
|
||||
<%= t("replay.show.youtube_only_body") %>
|
||||
<%= link_to t("replay.show.youtube_link"), @recording.youtube_watch_url, target: "_blank", rel: "noopener" %>
|
||||
</p>
|
||||
<% elsif @recording.ready? %>
|
||||
<div class="stream-ended" role="status">
|
||||
<h2><%= t("replay.show.file_missing_title") %></h2>
|
||||
|
||||
@@ -158,16 +158,16 @@
|
||||
<% end %>
|
||||
<span class="visually-hidden"><%= privacy_label %></span>
|
||||
<% end %>
|
||||
<% if ent.phone_download_enabled? && rec.ready? %>
|
||||
<% if ent.phone_download_enabled? && rec.ready? && rec.storage_key.present? %>
|
||||
<%= link_to "MP4", public_replay_download_path(rec.stream_session_id), class: "replay-archive__action replay-archive__action--secondary", title: t("recordings.archive.download_mp4_title") %>
|
||||
<% end %>
|
||||
<% if ent.premium_full? && ent.youtube_enabled? && rec.ready? && rec.youtube_video_id.blank? %>
|
||||
<% if ent.premium_full? && ent.youtube_enabled? && rec.ready? && rec.storage_key.present? && rec.youtube_video_id.blank? %>
|
||||
<%= button_to "YT", paths.publish_youtube.call(rec), method: :post, class: "replay-archive__action replay-archive__action--secondary", title: t("recordings.archive.publish_youtube_title"), form: { class: "replay-archive__action-form" } %>
|
||||
<% elsif rec.youtube_watch_url %>
|
||||
<%= link_to "YT", rec.youtube_watch_url, class: "replay-archive__action replay-archive__action--secondary", target: "_blank", rel: "noopener", title: t("recordings.archive.open_youtube_title") %>
|
||||
<% end %>
|
||||
<% has_youtube = rec.youtube_video_id.present? && !rec.youtube_video_id.to_s.start_with?("mock_") %>
|
||||
<% has_site = rec.storage_key.present? || %w[ready processing failed].include?(rec.status) %>
|
||||
<% has_site = rec.available_in_archive? || %w[processing failed].include?(rec.status) %>
|
||||
<% delete_confirm = t("recordings.archive.delete_confirm") %>
|
||||
<%= button_to paths.destroy.call(rec), method: :delete,
|
||||
params: filter_params,
|
||||
|
||||
Reference in New Issue
Block a user