[CHANGE] Added video info page

This commit is contained in:
max
2025-11-02 21:22:56 +01:00
parent bf957436f0
commit a849b7524d
5 changed files with 295 additions and 19 deletions

View File

@@ -0,0 +1,244 @@
@page "/Video/{VideoId}"
@using Manager.App.Services.System
@inject ISnackbar Snackbar
@inject ClientService ClientService
@inject CacheService Cache
<ForcedLoadingOverlay Visible="_loading"/>
@if (!_loading && _video != null)
{
<MudStack Spacing="2">
<MudCard>
@{
var thumbnailUrl = _video.Thumbnails.OrderByDescending(t => t.Width).FirstOrDefault()?.Url;
}
@if (!string.IsNullOrWhiteSpace(thumbnailUrl))
{
<MudCardMedia Image="@Cache.CreateCacheUrl(thumbnailUrl)" Height="500"/>
}
<MudCardContent>
<MudText Typo="Typo.h5">@_video.Title</MudText>
<MudText Typo="Typo.body2">@_video.Description</MudText>
</MudCardContent>
</MudCard>
<MudExpansionPanels MultiExpansion>
<MudExpansionPanel Text="Info" Expanded>
<MudStack Spacing="2" Row Wrap="Wrap.Wrap">
@* Info *@
<MudSimpleTable Bordered Dense Elevation="0" Outlined Square Hover>
<tbody>
<tr>
<td>Video ID:</td>
<td>@_video.VideoId</td>
</tr>
<tr>
<td>Title:</td>
<td>@_video.Title</td>
</tr>
<tr>
<td>Description:</td>
<td>@_video.Description</td>
</tr>
<tr>
<td>HashTags:</td>
<td>@foreach (var hashtag in _video.HashTags)
{
<MudChip T="string" Variant="Variant.Text" Color="Color.Info">@hashtag</MudChip>
}
</td>
</tr>
<tr>
<td>View count:</td>
<td>@_video.ViewCount</td>
</tr>
<tr>
<td>Like count:</td>
<td>@_video.LikeCount</td>
</tr>
<tr>
<td>Channel ID:</td>
<td>@_video.ChannelId</td>
</tr>
<tr>
<td>Author:</td>
<td>@_video.Author</td>
</tr>
<tr>
<td>Playability status:</td>
<td>@_video.PlayabilityStatus</td>
</tr>
<tr>
<td>Length seconds:</td>
<td>@_video.LengthSeconds</td>
</tr>
<tr>
<td>Keywords:</td>
<td>@foreach (var keyword in _video.Keywords)
{
<MudChip T="string" Variant="Variant.Text">@keyword</MudChip>
}
</td>
</tr>
<tr>
<td>Publish date:</td>
<td>@_video.PublishDate</td>
</tr>
<tr>
<td>Upload date:</td>
<td>@_video.UploadDate</td>
</tr>
<tr>
<td>Category:</td>
<td>@_video.Category</td>
</tr>
</tbody>
</MudSimpleTable>
@* Boolean values *@
<MudSimpleTable Bordered Dense Elevation="0" Outlined Square Hover>
<tbody>
<tr>
<td>Is owner viewing:</td>
<td>@_video.IsOwnerViewing</td>
</tr>
<tr>
<td>Allow rating:</td>
<td>@_video.AllowRating</td>
</tr>
<tr>
<td>Is crawlable:</td>
<td>@_video.IsCrawlable</td>
</tr>
<tr>
<td>Is private:</td>
<td>@_video.IsPrivate</td>
</tr>
<tr>
<td>Is unplugged corpus:</td>
<td>@_video.IsUnpluggedCorpus</td>
</tr>
<tr>
<td>Is live:</td>
<td>@_video.IsLive</td>
</tr>
<tr>
<td>Is family save:</td>
<td>@_video.IsFamilySave</td>
</tr>
<tr>
<td>Is unlisted:</td>
<td>@_video.IsUnlisted</td>
</tr>
<tr>
<td>Has Ypc metadata:</td>
<td>@_video.HasYpcMetadata</td>
</tr>
<tr>
<td>Is shorts eligible:</td>
<td>@_video.IsShortsEligible</td>
</tr>
</tbody>
</MudSimpleTable>
</MudStack>
</MudExpansionPanel>
<MudExpansionPanel Text="Streaming data">
@if (_video.StreamingData == null)
{
<MudAlert Severity="Severity.Info">No streaming data available!</MudAlert>
}
else
{
<MudStack Spacing="2" Row Wrap="Wrap.Wrap">
<MudStack>
<MudText Typo="Typo.h5">Adaptive Formats</MudText>
<MudTable Items="@_video.StreamingData.AdaptiveFormats">
<HeaderContent>
<MudTh>Id</MudTh>
<MudTh>Mime type</MudTh>
<MudTh>Bitrate</MudTh>
<MudTh>Resolution</MudTh>
<MudTh>Last modified (UNIX epoch)</MudTh>
<MudTh>Quality</MudTh>
<MudTh>FPS</MudTh>
</HeaderContent>
<RowTemplate>
<MudTd>@context.Itag</MudTd>
<MudTd>@context.MimeType</MudTd>
<MudTd>@context.Bitrate</MudTd>
<MudTd>@($"{context.Width}x{context.Height}")</MudTd>
<MudTd>@context.LastModified</MudTd>
<MudTd>@context.Quality</MudTd>
<MudTd>@context.Fps</MudTd>
</RowTemplate>
</MudTable>
</MudStack>
<MudStack>
<MudText Typo="Typo.h5">Formats</MudText>
<MudTable Items="@_video.StreamingData.Formats">
<HeaderContent>
<MudTh>Id</MudTh>
<MudTh>Mime type</MudTh>
<MudTh>Bitrate</MudTh>
<MudTh>Resolution</MudTh>
<MudTh>Last modified (UNIX epoch)</MudTh>
<MudTh>Quality</MudTh>
<MudTh>FPS</MudTh>
</HeaderContent>
<RowTemplate>
<MudTd>@context.Itag</MudTd>
<MudTd>@context.MimeType</MudTd>
<MudTd>@context.Bitrate</MudTd>
<MudTd>@($"{context.Width}x{context.Height}")</MudTd>
<MudTd>@context.LastModified</MudTd>
<MudTd>@context.Quality</MudTd>
<MudTd>@context.Fps</MudTd>
</RowTemplate>
</MudTable>
</MudStack>
</MudStack>
}
</MudExpansionPanel>
<MudExpansionPanel Text="Player config">
@if (_video.PlayerConfig == null)
{
<MudAlert Severity="Severity.Info">No player config available!</MudAlert>
}
else
{
<MudSimpleTable Bordered Dense Elevation="0" Outlined Square Hover>
<tbody>
<tr>
<td>Audio loudness DB:</td>
<td>@_video.PlayerConfig.AudioLoudnessDb</td>
</tr>
<tr>
<td>Audio perceptual loudness DB:</td>
<td>@_video.PlayerConfig.AudioPerceptualLoudnessDb</td>
</tr>
<tr>
<td>Audio enable per format loudness:</td>
<td>@_video.PlayerConfig.AudioLoudnessDb</td>
</tr>
<tr>
<td>Max bitrate:</td>
<td>@_video.PlayerConfig.MaxBitrate</td>
</tr>
<tr>
<td>Max read ahead time MS:</td>
<td>@_video.PlayerConfig.MaxReadAheadMediaTimeMs</td>
</tr>
<tr>
<td>Min read ahead time MS:</td>
<td>@_video.PlayerConfig.MinReadAheadMediaTimeMs</td>
</tr>
<tr>
<td>Read ahead growth rate MS:</td>
<td>@_video.PlayerConfig.ReadAheadGrowthRateMs</td>
</tr>
</tbody>
</MudSimpleTable>
}
</MudExpansionPanel>
</MudExpansionPanels>
</MudStack>
}