From ba49fbc259b4bc654328a018c2c7152294c7af71 Mon Sep 17 00:00:00 2001 From: Jason Dove Date: Sat, 27 Feb 2021 15:23:10 -0600 Subject: [PATCH] schedule editing works again --- ErsatzTV.Application/MediaItems/Mapper.cs | 14 +++- .../MediaItems/NamedMediaItemViewModel.cs | 4 + .../MediaSources/LocalMediaSourceViewModel.cs | 3 +- ErsatzTV.Application/MediaSources/Mapper.cs | 3 +- .../ProgramSchedules/Mapper.cs | 48 ++++++------ .../ProgramScheduleItemDurationViewModel.cs | 8 +- .../ProgramScheduleItemFloodViewModel.cs | 8 +- .../ProgramScheduleItemMultipleViewModel.cs | 8 +- .../ProgramScheduleItemOneViewModel.cs | 8 +- .../ProgramScheduleItemViewModel.cs | 12 +-- .../Queries/GetAllTelevisionSeasons.cs | 3 +- .../Queries/GetAllTelevisionSeasonsHandler.cs | 7 +- .../Queries/GetAllTelevisionShows.cs | 3 +- .../Queries/GetAllTelevisionShowsHandler.cs | 7 +- ErsatzTV/Pages/ScheduleItemsEditor.razor | 73 +++++++++---------- .../ProgramScheduleItemEditViewModel.cs | 37 +++------- 16 files changed, 121 insertions(+), 125 deletions(-) create mode 100644 ErsatzTV.Application/MediaItems/NamedMediaItemViewModel.cs diff --git a/ErsatzTV.Application/MediaItems/Mapper.cs b/ErsatzTV.Application/MediaItems/Mapper.cs index 1fe79a13b..edd133867 100644 --- a/ErsatzTV.Application/MediaItems/Mapper.cs +++ b/ErsatzTV.Application/MediaItems/Mapper.cs @@ -52,7 +52,7 @@ namespace ErsatzTV.Application.MediaItems mediaItem.Statistics.Duration.TotalHours >= 1 ? @"{0:h\:mm\:ss}" : @"{0:mm\:ss}", mediaItem.Statistics.Duration); - // TODO: fix this + // TODO: fix this when search is reimplemented private static string GetLibraryName(MediaItem item) => "Library Name"; @@ -61,5 +61,17 @@ namespace ErsatzTV.Application.MediaItems // LocalMediaSource lms => "Local Media Source", // _ => "unknown source" // }; + + public static NamedMediaItemViewModel ProjectToViewModel(Show show) => + new(show.Id, show.ShowMetadata.HeadOrNone().Map(sm => $"{sm?.Title} ({sm?.Year})").IfNone("???")); + + public static NamedMediaItemViewModel ProjectToViewModel(Season season) => + new(season.Id, $"{ShowTitle(season)} ({SeasonDescription(season)})"); + + private static string ShowTitle(Season season) => + season.Show.ShowMetadata.HeadOrNone().Map(sm => sm.Title).IfNone("???"); + + private static string SeasonDescription(Season season) => + season.SeasonNumber == 0 ? "Specials" : $"Season {season.SeasonNumber}"; } } diff --git a/ErsatzTV.Application/MediaItems/NamedMediaItemViewModel.cs b/ErsatzTV.Application/MediaItems/NamedMediaItemViewModel.cs new file mode 100644 index 000000000..8af3f337a --- /dev/null +++ b/ErsatzTV.Application/MediaItems/NamedMediaItemViewModel.cs @@ -0,0 +1,4 @@ +namespace ErsatzTV.Application.MediaItems +{ + public record NamedMediaItemViewModel(int MediaItemId, string Name); +} diff --git a/ErsatzTV.Application/MediaSources/LocalMediaSourceViewModel.cs b/ErsatzTV.Application/MediaSources/LocalMediaSourceViewModel.cs index 4330f2364..96111acf5 100644 --- a/ErsatzTV.Application/MediaSources/LocalMediaSourceViewModel.cs +++ b/ErsatzTV.Application/MediaSources/LocalMediaSourceViewModel.cs @@ -1,5 +1,4 @@ namespace ErsatzTV.Application.MediaSources { - public record LocalMediaSourceViewModel(int Id, string Name, string Folder) - : MediaSourceViewModel(Id, Name); + public record LocalMediaSourceViewModel(int Id) : MediaSourceViewModel(Id, "Local"); } diff --git a/ErsatzTV.Application/MediaSources/Mapper.cs b/ErsatzTV.Application/MediaSources/Mapper.cs index def00122f..e586c663b 100644 --- a/ErsatzTV.Application/MediaSources/Mapper.cs +++ b/ErsatzTV.Application/MediaSources/Mapper.cs @@ -8,8 +8,7 @@ namespace ErsatzTV.Application.MediaSources internal static MediaSourceViewModel ProjectToViewModel(MediaSource mediaSource) => mediaSource switch { - // TODO: address this... - LocalMediaSource lms => new LocalMediaSourceViewModel(lms.Id, "LMS Name", "LMS Folder"), + LocalMediaSource lms => new LocalMediaSourceViewModel(lms.Id), PlexMediaSource pms => Plex.Mapper.ProjectToViewModel(pms), _ => throw new NotSupportedException($"Unsupported media source {mediaSource.GetType().Name}") }; diff --git a/ErsatzTV.Application/ProgramSchedules/Mapper.cs b/ErsatzTV.Application/ProgramSchedules/Mapper.cs index 5149d46fb..6a9e01e15 100644 --- a/ErsatzTV.Application/ProgramSchedules/Mapper.cs +++ b/ErsatzTV.Application/ProgramSchedules/Mapper.cs @@ -21,12 +21,12 @@ namespace ErsatzTV.Application.ProgramSchedules duration.Collection != null ? MediaCollections.Mapper.ProjectToViewModel(duration.Collection) : null, - duration.MediaItem is Show show - ? Television.Mapper.ProjectToViewModel(show) - : null, - duration.MediaItem is Season season - ? Television.Mapper.ProjectToViewModel(season) - : null, + duration.MediaItem switch + { + Show show => MediaItems.Mapper.ProjectToViewModel(show), + Season season => MediaItems.Mapper.ProjectToViewModel(season), + _ => null + }, duration.PlayoutDuration, duration.OfflineTail), ProgramScheduleItemFlood flood => @@ -39,12 +39,12 @@ namespace ErsatzTV.Application.ProgramSchedules flood.Collection != null ? MediaCollections.Mapper.ProjectToViewModel(flood.Collection) : null, - flood.MediaItem is Show show - ? Television.Mapper.ProjectToViewModel(show) - : null, - flood.MediaItem is Season season - ? Television.Mapper.ProjectToViewModel(season) - : null), + flood.MediaItem switch + { + Show show => MediaItems.Mapper.ProjectToViewModel(show), + Season season => MediaItems.Mapper.ProjectToViewModel(season), + _ => null + }), ProgramScheduleItemMultiple multiple => new ProgramScheduleItemMultipleViewModel( multiple.Id, @@ -55,12 +55,12 @@ namespace ErsatzTV.Application.ProgramSchedules multiple.Collection != null ? MediaCollections.Mapper.ProjectToViewModel(multiple.Collection) : null, - multiple.MediaItem is Show show - ? Television.Mapper.ProjectToViewModel(show) - : null, - multiple.MediaItem is Season season - ? Television.Mapper.ProjectToViewModel(season) - : null, + multiple.MediaItem switch + { + Show show => MediaItems.Mapper.ProjectToViewModel(show), + Season season => MediaItems.Mapper.ProjectToViewModel(season), + _ => null + }, multiple.Count), ProgramScheduleItemOne one => new ProgramScheduleItemOneViewModel( @@ -72,12 +72,12 @@ namespace ErsatzTV.Application.ProgramSchedules one.Collection != null ? MediaCollections.Mapper.ProjectToViewModel(one.Collection) : null, - one.MediaItem is Show show - ? Television.Mapper.ProjectToViewModel(show) - : null, - one.MediaItem is Season season - ? Television.Mapper.ProjectToViewModel(season) - : null), + one.MediaItem switch + { + Show show => MediaItems.Mapper.ProjectToViewModel(show), + Season season => MediaItems.Mapper.ProjectToViewModel(season), + _ => null + }), _ => throw new NotSupportedException( $"Unsupported program schedule item type {programScheduleItem.GetType().Name}") }; diff --git a/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemDurationViewModel.cs b/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemDurationViewModel.cs index 67caeaf2e..e21fecb93 100644 --- a/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemDurationViewModel.cs +++ b/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemDurationViewModel.cs @@ -1,6 +1,6 @@ using System; using ErsatzTV.Application.MediaCollections; -using ErsatzTV.Application.Television; +using ErsatzTV.Application.MediaItems; using ErsatzTV.Core.Domain; namespace ErsatzTV.Application.ProgramSchedules @@ -14,8 +14,7 @@ namespace ErsatzTV.Application.ProgramSchedules TimeSpan? startTime, ProgramScheduleItemCollectionType collectionType, MediaCollectionViewModel collection, - TelevisionShowViewModel televisionShow, - TelevisionSeasonViewModel televisionSeason, + NamedMediaItemViewModel mediaItem, TimeSpan playoutDuration, bool offlineTail) : base( id, @@ -25,8 +24,7 @@ namespace ErsatzTV.Application.ProgramSchedules PlayoutMode.Duration, collectionType, collection, - televisionShow, - televisionSeason) + mediaItem) { PlayoutDuration = playoutDuration; OfflineTail = offlineTail; diff --git a/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemFloodViewModel.cs b/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemFloodViewModel.cs index f62c63f71..8698da9a0 100644 --- a/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemFloodViewModel.cs +++ b/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemFloodViewModel.cs @@ -1,6 +1,6 @@ using System; using ErsatzTV.Application.MediaCollections; -using ErsatzTV.Application.Television; +using ErsatzTV.Application.MediaItems; using ErsatzTV.Core.Domain; namespace ErsatzTV.Application.ProgramSchedules @@ -14,8 +14,7 @@ namespace ErsatzTV.Application.ProgramSchedules TimeSpan? startTime, ProgramScheduleItemCollectionType collectionType, MediaCollectionViewModel collection, - TelevisionShowViewModel televisionShow, - TelevisionSeasonViewModel televisionSeason) : base( + NamedMediaItemViewModel mediaItem) : base( id, index, startType, @@ -23,8 +22,7 @@ namespace ErsatzTV.Application.ProgramSchedules PlayoutMode.Flood, collectionType, collection, - televisionShow, - televisionSeason) + mediaItem) { } } diff --git a/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemMultipleViewModel.cs b/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemMultipleViewModel.cs index b8bc7a4a3..a7d161c5f 100644 --- a/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemMultipleViewModel.cs +++ b/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemMultipleViewModel.cs @@ -1,6 +1,6 @@ using System; using ErsatzTV.Application.MediaCollections; -using ErsatzTV.Application.Television; +using ErsatzTV.Application.MediaItems; using ErsatzTV.Core.Domain; namespace ErsatzTV.Application.ProgramSchedules @@ -14,8 +14,7 @@ namespace ErsatzTV.Application.ProgramSchedules TimeSpan? startTime, ProgramScheduleItemCollectionType collectionType, MediaCollectionViewModel collection, - TelevisionShowViewModel televisionShow, - TelevisionSeasonViewModel televisionSeason, + NamedMediaItemViewModel mediaItem, int count) : base( id, index, @@ -24,8 +23,7 @@ namespace ErsatzTV.Application.ProgramSchedules PlayoutMode.Multiple, collectionType, collection, - televisionShow, - televisionSeason) => + mediaItem) => Count = count; public int Count { get; } diff --git a/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemOneViewModel.cs b/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemOneViewModel.cs index a221c7577..011e47430 100644 --- a/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemOneViewModel.cs +++ b/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemOneViewModel.cs @@ -1,6 +1,6 @@ using System; using ErsatzTV.Application.MediaCollections; -using ErsatzTV.Application.Television; +using ErsatzTV.Application.MediaItems; using ErsatzTV.Core.Domain; namespace ErsatzTV.Application.ProgramSchedules @@ -14,8 +14,7 @@ namespace ErsatzTV.Application.ProgramSchedules TimeSpan? startTime, ProgramScheduleItemCollectionType collectionType, MediaCollectionViewModel collection, - TelevisionShowViewModel televisionShow, - TelevisionSeasonViewModel televisionSeason) : base( + NamedMediaItemViewModel mediaItem) : base( id, index, startType, @@ -23,8 +22,7 @@ namespace ErsatzTV.Application.ProgramSchedules PlayoutMode.One, collectionType, collection, - televisionShow, - televisionSeason) + mediaItem) { } } diff --git a/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemViewModel.cs b/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemViewModel.cs index 2dc6bf34a..367a7ee6f 100644 --- a/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemViewModel.cs +++ b/ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemViewModel.cs @@ -1,6 +1,6 @@ using System; using ErsatzTV.Application.MediaCollections; -using ErsatzTV.Application.Television; +using ErsatzTV.Application.MediaItems; using ErsatzTV.Core.Domain; namespace ErsatzTV.Application.ProgramSchedules @@ -13,15 +13,15 @@ namespace ErsatzTV.Application.ProgramSchedules PlayoutMode PlayoutMode, ProgramScheduleItemCollectionType CollectionType, MediaCollectionViewModel Collection, - TelevisionShowViewModel TelevisionShow, - TelevisionSeasonViewModel TelevisionSeason) + NamedMediaItemViewModel MediaItem) { public string Name => CollectionType switch { ProgramScheduleItemCollectionType.Collection => Collection?.Name, - ProgramScheduleItemCollectionType.TelevisionShow => $"{TelevisionShow?.Title} ({TelevisionShow?.Year})", - ProgramScheduleItemCollectionType.TelevisionSeason => - $"{TelevisionSeason?.Title} ({TelevisionSeason?.Plot})", + ProgramScheduleItemCollectionType + .TelevisionShow => MediaItem?.Name, // $"{TelevisionShow?.Title} ({TelevisionShow?.Year})", + ProgramScheduleItemCollectionType + .TelevisionSeason => MediaItem?.Name, // $"{TelevisionSeason?.Title} ({TelevisionSeason?.Plot})", _ => string.Empty }; } diff --git a/ErsatzTV.Application/Television/Queries/GetAllTelevisionSeasons.cs b/ErsatzTV.Application/Television/Queries/GetAllTelevisionSeasons.cs index 303c8aacd..07b5940d7 100644 --- a/ErsatzTV.Application/Television/Queries/GetAllTelevisionSeasons.cs +++ b/ErsatzTV.Application/Television/Queries/GetAllTelevisionSeasons.cs @@ -1,7 +1,8 @@ using System.Collections.Generic; +using ErsatzTV.Application.MediaItems; using MediatR; namespace ErsatzTV.Application.Television.Queries { - public record GetAllTelevisionSeasons : IRequest>; + public record GetAllTelevisionSeasons : IRequest>; } diff --git a/ErsatzTV.Application/Television/Queries/GetAllTelevisionSeasonsHandler.cs b/ErsatzTV.Application/Television/Queries/GetAllTelevisionSeasonsHandler.cs index 5c0668b32..8f490ec8f 100644 --- a/ErsatzTV.Application/Television/Queries/GetAllTelevisionSeasonsHandler.cs +++ b/ErsatzTV.Application/Television/Queries/GetAllTelevisionSeasonsHandler.cs @@ -2,22 +2,23 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; +using ErsatzTV.Application.MediaItems; using ErsatzTV.Core.Interfaces.Repositories; using LanguageExt; using MediatR; -using static ErsatzTV.Application.Television.Mapper; +using static ErsatzTV.Application.MediaItems.Mapper; namespace ErsatzTV.Application.Television.Queries { public class - GetAllTelevisionSeasonsHandler : IRequestHandler> + GetAllTelevisionSeasonsHandler : IRequestHandler> { private readonly ITelevisionRepository _televisionRepository; public GetAllTelevisionSeasonsHandler(ITelevisionRepository televisionRepository) => _televisionRepository = televisionRepository; - public Task> Handle( + public Task> Handle( GetAllTelevisionSeasons request, CancellationToken cancellationToken) => _televisionRepository.GetAllSeasons().Map(list => list.Map(ProjectToViewModel).ToList()); diff --git a/ErsatzTV.Application/Television/Queries/GetAllTelevisionShows.cs b/ErsatzTV.Application/Television/Queries/GetAllTelevisionShows.cs index 87f91eb15..aac8e200f 100644 --- a/ErsatzTV.Application/Television/Queries/GetAllTelevisionShows.cs +++ b/ErsatzTV.Application/Television/Queries/GetAllTelevisionShows.cs @@ -1,7 +1,8 @@ using System.Collections.Generic; +using ErsatzTV.Application.MediaItems; using MediatR; namespace ErsatzTV.Application.Television.Queries { - public record GetAllTelevisionShows : IRequest>; + public record GetAllTelevisionShows : IRequest>; } diff --git a/ErsatzTV.Application/Television/Queries/GetAllTelevisionShowsHandler.cs b/ErsatzTV.Application/Television/Queries/GetAllTelevisionShowsHandler.cs index 09c73e8a3..608befc30 100644 --- a/ErsatzTV.Application/Television/Queries/GetAllTelevisionShowsHandler.cs +++ b/ErsatzTV.Application/Television/Queries/GetAllTelevisionShowsHandler.cs @@ -2,21 +2,22 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; +using ErsatzTV.Application.MediaItems; using ErsatzTV.Core.Interfaces.Repositories; using LanguageExt; using MediatR; -using static ErsatzTV.Application.Television.Mapper; +using static ErsatzTV.Application.MediaItems.Mapper; namespace ErsatzTV.Application.Television.Queries { - public class GetAllTelevisionShowsHandler : IRequestHandler> + public class GetAllTelevisionShowsHandler : IRequestHandler> { private readonly ITelevisionRepository _televisionRepository; public GetAllTelevisionShowsHandler(ITelevisionRepository televisionRepository) => _televisionRepository = televisionRepository; - public Task> Handle( + public Task> Handle( GetAllTelevisionShows request, CancellationToken cancellationToken) => _televisionRepository.GetAllShows().Map(list => list.Map(ProjectToViewModel).ToList()); diff --git a/ErsatzTV/Pages/ScheduleItemsEditor.razor b/ErsatzTV/Pages/ScheduleItemsEditor.razor index fa96fd021..7811878d6 100644 --- a/ErsatzTV/Pages/ScheduleItemsEditor.razor +++ b/ErsatzTV/Pages/ScheduleItemsEditor.razor @@ -1,9 +1,10 @@ @page "/schedules/{Id:int}/items" @using ErsatzTV.Application.MediaCollections @using ErsatzTV.Application.MediaCollections.Queries +@using ErsatzTV.Application.MediaItems @using ErsatzTV.Application.ProgramSchedules +@using ErsatzTV.Application.ProgramSchedules.Commands @using ErsatzTV.Application.ProgramSchedules.Queries -@using ErsatzTV.Application.Television @using ErsatzTV.Application.Television.Queries @inject NavigationManager NavigationManager @inject ILogger Logger @@ -111,20 +112,20 @@ @if (_selectedItem.CollectionType == ProgramScheduleItemCollectionType.TelevisionShow) { + ToStringFunc="@(s => s?.Name)"/> } @if (_selectedItem.CollectionType == ProgramScheduleItemCollectionType.TelevisionSeason) { + ToStringFunc="@(s => s?.Name)"/> } @foreach (PlayoutMode playoutMode in Enum.GetValues()) @@ -150,8 +151,8 @@ private ProgramScheduleItemsEditViewModel _schedule; private List _mediaCollections; - private List _televisionShows; - private List _televisionSeasons; + private List _televisionShows; + private List _televisionSeasons; private ProgramScheduleItemEditViewModel _selectedItem; @@ -186,8 +187,7 @@ PlayoutMode = item.PlayoutMode, CollectionType = item.CollectionType, Collection = item.Collection, - TelevisionShow = item.TelevisionShow, - TelevisionSeason = item.TelevisionSeason + MediaItem = item.MediaItem }; switch (item) @@ -245,36 +245,35 @@ private Task> SearchMediaCollections(string value) => _mediaCollections.Filter(c => c.Name.Contains(value ?? string.Empty, StringComparison.OrdinalIgnoreCase)).AsTask(); - private Task> SearchTelevisionShows(string value) => - _televisionShows.Filter(s => s.Title.Contains(value ?? string.Empty, StringComparison.OrdinalIgnoreCase)).AsTask(); + private Task> SearchTelevisionShows(string value) => + _televisionShows.Filter(s => s.Name.Contains(value ?? string.Empty, StringComparison.OrdinalIgnoreCase)).AsTask(); - private Task> SearchTelevisionSeasons(string value) => - _televisionSeasons.Filter(s => s.Title.Contains(value ?? string.Empty, StringComparison.OrdinalIgnoreCase)).AsTask(); + private Task> SearchTelevisionSeasons(string value) => + _televisionSeasons.Filter(s => s.Name.Contains(value ?? string.Empty, StringComparison.OrdinalIgnoreCase)).AsTask(); private async Task SaveChanges() { - // TODO: fix this - // var items = _schedule.Items.Map(item => new ReplaceProgramScheduleItem( - // item.Index, - // item.StartType, - // item.StartTime, - // item.PlayoutMode, - // item.CollectionType, - // item.Collection?.Id, - // item.MediaItem?.Id, - // item.MultipleCount, - // item.PlayoutDuration, - // item.PlayoutMode == PlayoutMode.Duration ? item.OfflineTail.IfNone(false) : null)).ToList(); - // - // Seq errorMessages = await Mediator.Send(new ReplaceProgramScheduleItems(Id, items)).Map(e => e.LeftToSeq()); - // - // errorMessages.HeadOrNone().Match( - // error => - // { - // Snackbar.Add($"Unexpected error saving schedule: {error.Value}", Severity.Error); - // Logger.LogError("Unexpected error saving schedule: {Error}", error.Value); - // }, - // () => NavigationManager.NavigateTo("/schedules")); + var items = _schedule.Items.Map(item => new ReplaceProgramScheduleItem( + item.Index, + item.StartType, + item.StartTime, + item.PlayoutMode, + item.CollectionType, + item.Collection?.Id, + item.MediaItem?.MediaItemId, + item.MultipleCount, + item.PlayoutDuration, + item.PlayoutMode == PlayoutMode.Duration ? item.OfflineTail.IfNone(false) : null)).ToList(); + + Seq errorMessages = await Mediator.Send(new ReplaceProgramScheduleItems(Id, items)).Map(e => e.LeftToSeq()); + + errorMessages.HeadOrNone().Match( + error => + { + Snackbar.Add($"Unexpected error saving schedule: {error.Value}", Severity.Error); + Logger.LogError("Unexpected error saving schedule: {Error}", error.Value); + }, + () => NavigationManager.NavigateTo("/schedules")); } } \ No newline at end of file diff --git a/ErsatzTV/ViewModels/ProgramScheduleItemEditViewModel.cs b/ErsatzTV/ViewModels/ProgramScheduleItemEditViewModel.cs index 016955798..ac80aca4f 100644 --- a/ErsatzTV/ViewModels/ProgramScheduleItemEditViewModel.cs +++ b/ErsatzTV/ViewModels/ProgramScheduleItemEditViewModel.cs @@ -3,7 +3,7 @@ using System.ComponentModel; using System.Runtime.CompilerServices; using ErsatzTV.Annotations; using ErsatzTV.Application.MediaCollections; -using ErsatzTV.Application.Television; +using ErsatzTV.Application.MediaItems; using ErsatzTV.Core.Domain; namespace ErsatzTV.ViewModels @@ -33,40 +33,27 @@ namespace ErsatzTV.ViewModels get => _collectionType; set { - _collectionType = value; - - switch (CollectionType) + if (_collectionType != value) { - case ProgramScheduleItemCollectionType.Collection: - TelevisionShow = null; - TelevisionSeason = null; - break; - case ProgramScheduleItemCollectionType.TelevisionShow: - Collection = null; - TelevisionSeason = null; - break; - case ProgramScheduleItemCollectionType.TelevisionSeason: - Collection = null; - TelevisionShow = null; - break; - } + _collectionType = value; - OnPropertyChanged(nameof(Collection)); - OnPropertyChanged(nameof(TelevisionShow)); - OnPropertyChanged(nameof(TelevisionSeason)); + Collection = null; + MediaItem = null; + + OnPropertyChanged(nameof(Collection)); + OnPropertyChanged(nameof(MediaItem)); + } } } public MediaCollectionViewModel Collection { get; set; } - public TelevisionShowViewModel TelevisionShow { get; set; } - public TelevisionSeasonViewModel TelevisionSeason { get; set; } + public NamedMediaItemViewModel MediaItem { get; set; } public string CollectionName => CollectionType switch { ProgramScheduleItemCollectionType.Collection => Collection?.Name, - ProgramScheduleItemCollectionType.TelevisionShow => $"{TelevisionShow?.Title} ({TelevisionShow?.Year})", - ProgramScheduleItemCollectionType.TelevisionSeason => - $"{TelevisionSeason?.Title} ({TelevisionSeason?.Plot})", + ProgramScheduleItemCollectionType.TelevisionShow => MediaItem?.Name, + ProgramScheduleItemCollectionType.TelevisionSeason => MediaItem?.Name, _ => string.Empty };