* starting database redesign * set season and episode numbers * use datetimes in db (utc); update movie metadata * get movie cards from new table * copy show/episode metadata * remove old movie metadata type * rename new movie metadata type * code cleanup * start to remove old television classes * remove old television tables from database * fix playout building * fix collection views * fix show/season views * clean up movie metadata table * fix scanner tests * add libraries ui * code cleanup * fix movie scanning/metadata * add library scan button to ui * delete library path from ui * temp disable movie scanning * remove orphan media items and prevent duplicate paths * attach artwork to metadata * fix split show/season display * fix television artwork * store year distinct from release date * fix collections ui * code cleanup * add library paths from ui * fix adding to collections from ui * fix schedule items loading * schedule editing works again * remove some todos * more cleanup * fix unit tests * fix episode sorting * fix deleting show library paths * remove unused class * fix playout list in ui * fix log viewer * start to use version/file instead of statistics * clean up old columns * fix playout display (time zone) * fix playback * fix channel guide time zone * cascade more deletes * fix compiler warnings * fix adding new seasons * use artwork for channel logo * clean cache folder on startup (move channel logos, delete everything else) * log database migration * update homepage docs for libraries * fix adding new channel with logo * fix episode numbers in epg
123 lines
5.1 KiB
Plaintext
123 lines
5.1 KiB
Plaintext
@page "/media/tv/seasons/{SeasonId:int}"
|
|
@using ErsatzTV.Application.Television
|
|
@using ErsatzTV.Application.Television.Queries
|
|
@using ErsatzTV.Application.MediaCards
|
|
@using ErsatzTV.Application.MediaCards.Queries
|
|
@using ErsatzTV.Application.MediaCollections
|
|
@using ErsatzTV.Application.MediaCollections.Commands
|
|
@using ErsatzTV.Application.ProgramSchedules
|
|
@using ErsatzTV.Application.ProgramSchedules.Commands
|
|
@inject IMediator Mediator
|
|
@inject IDialogService Dialog
|
|
@inject NavigationManager NavigationManager
|
|
|
|
<MudContainer MaxWidth="MaxWidth.Large">
|
|
<MudBreadcrumbs Items="_breadcrumbs" Class="mb-6"></MudBreadcrumbs>
|
|
<MudCard Class="mb-6">
|
|
<div style="display: flex; flex-direction: row;">
|
|
@if (!string.IsNullOrWhiteSpace(_season.Poster))
|
|
{
|
|
<MudPaper Style="flex-shrink: 0;">
|
|
<MudCardMedia Image="@($"/artwork/posters/{_season.Poster}")" Style="height: 440px; width: 304px;"/>
|
|
</MudPaper>
|
|
}
|
|
<MudCardContent Class="mx-3 my-3">
|
|
<div style="display: flex; flex-direction: column; height: 100%">
|
|
<MudText Typo="Typo.h3">@_season.Title</MudText>
|
|
<MudText Typo="Typo.subtitle1" Class="mb-6 mud-text-secondary">@_season.Year</MudText>
|
|
<MudText Style="flex-grow: 1">@_season.Plot</MudText>
|
|
<div class="mt-6">
|
|
<MudButton Variant="Variant.Filled"
|
|
Color="Color.Primary"
|
|
StartIcon="@Icons.Material.Filled.Add"
|
|
OnClick="@AddToCollection">
|
|
Add To Collection
|
|
</MudButton>
|
|
<MudButton Class="ml-3"
|
|
Variant="Variant.Filled"
|
|
Color="Color.Primary"
|
|
StartIcon="@Icons.Material.Filled.Schedule"
|
|
OnClick="@AddToSchedule">
|
|
Add To Schedule
|
|
</MudButton>
|
|
</div>
|
|
</div>
|
|
</MudCardContent>
|
|
</div>
|
|
</MudCard>
|
|
</MudContainer>
|
|
|
|
<MudContainer MaxWidth="MaxWidth.Large" Class="media-card-grid">
|
|
@foreach (TelevisionEpisodeCardViewModel card in _data.Cards)
|
|
{
|
|
<MediaCard Data="@card"
|
|
Placeholder="@card.Placeholder"
|
|
Link="@($"/media/tv/episodes/{card.EpisodeId}")"
|
|
DataRefreshed="@(() => RefreshData())"
|
|
ContainerClass="media-card-episode-container mx-2"
|
|
CardClass="media-card-episode"
|
|
ArtworkKind="@ArtworkKind.Thumbnail"/>
|
|
}
|
|
</MudContainer>
|
|
|
|
@code {
|
|
|
|
[Parameter]
|
|
public int SeasonId { get; set; }
|
|
|
|
private TelevisionSeasonViewModel _season;
|
|
|
|
private int _pageSize => 100;
|
|
private readonly int _pageNumber = 1;
|
|
|
|
private TelevisionEpisodeCardResultsViewModel _data;
|
|
|
|
private List<BreadcrumbItem> _breadcrumbs;
|
|
|
|
protected override Task OnParametersSetAsync() => RefreshData();
|
|
|
|
private async Task RefreshData()
|
|
{
|
|
await Mediator.Send(new GetTelevisionSeasonById(SeasonId))
|
|
.IfSomeAsync(vm => _season = vm);
|
|
|
|
_data = await Mediator.Send(new GetTelevisionEpisodeCards(SeasonId, _pageNumber, _pageSize));
|
|
|
|
_breadcrumbs = new List<BreadcrumbItem>
|
|
{
|
|
new("TV Shows", "/media/tv/shows"),
|
|
new($"{_season.Title} ({_season.Year})", $"/media/tv/shows/{_season.ShowId}"),
|
|
new(_season.Plot, null, true)
|
|
};
|
|
}
|
|
|
|
private async Task AddToCollection()
|
|
{
|
|
var parameters = new DialogParameters { { "EntityType", "season" }, { "EntityName", $"{_season.Title} - {_season.Plot}" } };
|
|
var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall };
|
|
|
|
IDialogReference dialog = Dialog.Show<AddToCollectionDialog>("Add To Collection", parameters, options);
|
|
DialogResult result = await dialog.Result;
|
|
if (!result.Cancelled && result.Data is MediaCollectionViewModel collection)
|
|
{
|
|
await Mediator.Send(new AddSeasonToCollection(collection.Id, SeasonId));
|
|
NavigationManager.NavigateTo($"/media/collections/{collection.Id}");
|
|
}
|
|
}
|
|
|
|
|
|
private async Task AddToSchedule()
|
|
{
|
|
var parameters = new DialogParameters { { "EntityType", "season" }, { "EntityName", $"{_season.Title} - {_season.Plot}" } };
|
|
var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall };
|
|
|
|
IDialogReference dialog = Dialog.Show<AddToScheduleDialog>("Add To Schedule", parameters, options);
|
|
DialogResult result = await dialog.Result;
|
|
if (!result.Cancelled && result.Data is ProgramScheduleViewModel schedule)
|
|
{
|
|
await Mediator.Send(new AddProgramScheduleItem(schedule.Id, StartType.Dynamic, null, PlayoutMode.One, ProgramScheduleItemCollectionType.TelevisionSeason, null, SeasonId, null, null, null));
|
|
NavigationManager.NavigateTo($"/schedules/{schedule.Id}/items");
|
|
}
|
|
}
|
|
|
|
} |