Browse Source

schedule editing works again

pull/31/head
Jason Dove 6 years ago
parent
commit
ba49fbc259
  1. 14
      ErsatzTV.Application/MediaItems/Mapper.cs
  2. 4
      ErsatzTV.Application/MediaItems/NamedMediaItemViewModel.cs
  3. 3
      ErsatzTV.Application/MediaSources/LocalMediaSourceViewModel.cs
  4. 3
      ErsatzTV.Application/MediaSources/Mapper.cs
  5. 48
      ErsatzTV.Application/ProgramSchedules/Mapper.cs
  6. 8
      ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemDurationViewModel.cs
  7. 8
      ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemFloodViewModel.cs
  8. 8
      ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemMultipleViewModel.cs
  9. 8
      ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemOneViewModel.cs
  10. 12
      ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemViewModel.cs
  11. 3
      ErsatzTV.Application/Television/Queries/GetAllTelevisionSeasons.cs
  12. 7
      ErsatzTV.Application/Television/Queries/GetAllTelevisionSeasonsHandler.cs
  13. 3
      ErsatzTV.Application/Television/Queries/GetAllTelevisionShows.cs
  14. 7
      ErsatzTV.Application/Television/Queries/GetAllTelevisionShowsHandler.cs
  15. 73
      ErsatzTV/Pages/ScheduleItemsEditor.razor
  16. 37
      ErsatzTV/ViewModels/ProgramScheduleItemEditViewModel.cs

14
ErsatzTV.Application/MediaItems/Mapper.cs

@ -52,7 +52,7 @@ namespace ErsatzTV.Application.MediaItems @@ -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 @@ -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}";
}
}

4
ErsatzTV.Application/MediaItems/NamedMediaItemViewModel.cs

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
namespace ErsatzTV.Application.MediaItems
{
public record NamedMediaItemViewModel(int MediaItemId, string Name);
}

3
ErsatzTV.Application/MediaSources/LocalMediaSourceViewModel.cs

@ -1,5 +1,4 @@ @@ -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");
}

3
ErsatzTV.Application/MediaSources/Mapper.cs

@ -8,8 +8,7 @@ namespace ErsatzTV.Application.MediaSources @@ -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}")
};

48
ErsatzTV.Application/ProgramSchedules/Mapper.cs

@ -21,12 +21,12 @@ namespace ErsatzTV.Application.ProgramSchedules @@ -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 @@ -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 @@ -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 @@ -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}")
};

8
ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemDurationViewModel.cs

@ -1,6 +1,6 @@ @@ -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 @@ -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 @@ -25,8 +24,7 @@ namespace ErsatzTV.Application.ProgramSchedules
PlayoutMode.Duration,
collectionType,
collection,
televisionShow,
televisionSeason)
mediaItem)
{
PlayoutDuration = playoutDuration;
OfflineTail = offlineTail;

8
ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemFloodViewModel.cs

@ -1,6 +1,6 @@ @@ -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 @@ -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 @@ -23,8 +22,7 @@ namespace ErsatzTV.Application.ProgramSchedules
PlayoutMode.Flood,
collectionType,
collection,
televisionShow,
televisionSeason)
mediaItem)
{
}
}

8
ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemMultipleViewModel.cs

@ -1,6 +1,6 @@ @@ -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 @@ -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 @@ -24,8 +23,7 @@ namespace ErsatzTV.Application.ProgramSchedules
PlayoutMode.Multiple,
collectionType,
collection,
televisionShow,
televisionSeason) =>
mediaItem) =>
Count = count;
public int Count { get; }

8
ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemOneViewModel.cs

@ -1,6 +1,6 @@ @@ -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 @@ -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 @@ -23,8 +22,7 @@ namespace ErsatzTV.Application.ProgramSchedules
PlayoutMode.One,
collectionType,
collection,
televisionShow,
televisionSeason)
mediaItem)
{
}
}

12
ErsatzTV.Application/ProgramSchedules/ProgramScheduleItemViewModel.cs

@ -1,6 +1,6 @@ @@ -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 @@ -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
};
}

3
ErsatzTV.Application/Television/Queries/GetAllTelevisionSeasons.cs

@ -1,7 +1,8 @@ @@ -1,7 +1,8 @@
using System.Collections.Generic;
using ErsatzTV.Application.MediaItems;
using MediatR;
namespace ErsatzTV.Application.Television.Queries
{
public record GetAllTelevisionSeasons : IRequest<List<TelevisionSeasonViewModel>>;
public record GetAllTelevisionSeasons : IRequest<List<NamedMediaItemViewModel>>;
}

7
ErsatzTV.Application/Television/Queries/GetAllTelevisionSeasonsHandler.cs

@ -2,22 +2,23 @@ @@ -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<GetAllTelevisionSeasons, List<TelevisionSeasonViewModel>>
GetAllTelevisionSeasonsHandler : IRequestHandler<GetAllTelevisionSeasons, List<NamedMediaItemViewModel>>
{
private readonly ITelevisionRepository _televisionRepository;
public GetAllTelevisionSeasonsHandler(ITelevisionRepository televisionRepository) =>
_televisionRepository = televisionRepository;
public Task<List<TelevisionSeasonViewModel>> Handle(
public Task<List<NamedMediaItemViewModel>> Handle(
GetAllTelevisionSeasons request,
CancellationToken cancellationToken) =>
_televisionRepository.GetAllSeasons().Map(list => list.Map(ProjectToViewModel).ToList());

3
ErsatzTV.Application/Television/Queries/GetAllTelevisionShows.cs

@ -1,7 +1,8 @@ @@ -1,7 +1,8 @@
using System.Collections.Generic;
using ErsatzTV.Application.MediaItems;
using MediatR;
namespace ErsatzTV.Application.Television.Queries
{
public record GetAllTelevisionShows : IRequest<List<TelevisionShowViewModel>>;
public record GetAllTelevisionShows : IRequest<List<NamedMediaItemViewModel>>;
}

7
ErsatzTV.Application/Television/Queries/GetAllTelevisionShowsHandler.cs

@ -2,21 +2,22 @@ @@ -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<GetAllTelevisionShows, List<TelevisionShowViewModel>>
public class GetAllTelevisionShowsHandler : IRequestHandler<GetAllTelevisionShows, List<NamedMediaItemViewModel>>
{
private readonly ITelevisionRepository _televisionRepository;
public GetAllTelevisionShowsHandler(ITelevisionRepository televisionRepository) =>
_televisionRepository = televisionRepository;
public Task<List<TelevisionShowViewModel>> Handle(
public Task<List<NamedMediaItemViewModel>> Handle(
GetAllTelevisionShows request,
CancellationToken cancellationToken) =>
_televisionRepository.GetAllShows().Map(list => list.Map(ProjectToViewModel).ToList());

73
ErsatzTV/Pages/ScheduleItemsEditor.razor

@ -1,9 +1,10 @@ @@ -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<ScheduleItemsEditor> Logger
@ -111,20 +112,20 @@ @@ -111,20 +112,20 @@
@if (_selectedItem.CollectionType == ProgramScheduleItemCollectionType.TelevisionShow)
{
<MudAutocomplete Class="mt-3"
T="TelevisionShowViewModel"
T="NamedMediaItemViewModel"
Label="Television Show"
@bind-value="_selectedItem.TelevisionShow"
@bind-value="_selectedItem.MediaItem"
SearchFunc="@SearchTelevisionShows"
ToStringFunc="@(s => s == null ? null : $"{s.Title} ({s.Year})")"/>
ToStringFunc="@(s => s?.Name)"/>
}
@if (_selectedItem.CollectionType == ProgramScheduleItemCollectionType.TelevisionSeason)
{
<MudAutocomplete Class="mt-3"
T="TelevisionSeasonViewModel"
T="NamedMediaItemViewModel"
Label="Television Season"
@bind-value="_selectedItem.TelevisionSeason"
@bind-value="_selectedItem.MediaItem"
SearchFunc="@SearchTelevisionSeasons"
ToStringFunc="@(s => s == null ? null : $"{s.Title} ({s.Year}) - {s.Plot}")"/>
ToStringFunc="@(s => s?.Name)"/>
}
<MudSelect Class="mt-3" Label="Playout Mode" @bind-Value="@_selectedItem.PlayoutMode" For="@(() => _selectedItem.PlayoutMode)">
@foreach (PlayoutMode playoutMode in Enum.GetValues<PlayoutMode>())
@ -150,8 +151,8 @@ @@ -150,8 +151,8 @@
private ProgramScheduleItemsEditViewModel _schedule;
private List<MediaCollectionViewModel> _mediaCollections;
private List<TelevisionShowViewModel> _televisionShows;
private List<TelevisionSeasonViewModel> _televisionSeasons;
private List<NamedMediaItemViewModel> _televisionShows;
private List<NamedMediaItemViewModel> _televisionSeasons;
private ProgramScheduleItemEditViewModel _selectedItem;
@ -186,8 +187,7 @@ @@ -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 @@ @@ -245,36 +245,35 @@
private Task<IEnumerable<MediaCollectionViewModel>> SearchMediaCollections(string value) =>
_mediaCollections.Filter(c => c.Name.Contains(value ?? string.Empty, StringComparison.OrdinalIgnoreCase)).AsTask();
private Task<IEnumerable<TelevisionShowViewModel>> SearchTelevisionShows(string value) =>
_televisionShows.Filter(s => s.Title.Contains(value ?? string.Empty, StringComparison.OrdinalIgnoreCase)).AsTask();
private Task<IEnumerable<NamedMediaItemViewModel>> SearchTelevisionShows(string value) =>
_televisionShows.Filter(s => s.Name.Contains(value ?? string.Empty, StringComparison.OrdinalIgnoreCase)).AsTask();
private Task<IEnumerable<TelevisionSeasonViewModel>> SearchTelevisionSeasons(string value) =>
_televisionSeasons.Filter(s => s.Title.Contains(value ?? string.Empty, StringComparison.OrdinalIgnoreCase)).AsTask();
private Task<IEnumerable<NamedMediaItemViewModel>> 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<BaseError> 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<BaseError> 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"));
}
}

37
ErsatzTV/ViewModels/ProgramScheduleItemEditViewModel.cs

@ -3,7 +3,7 @@ using System.ComponentModel; @@ -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 @@ -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
};

Loading…
Cancel
Save