Browse Source

allow deleting media collections

pull/26/head
Jason Dove 6 years ago
parent
commit
3ff8983e2c
  1. 10
      ErsatzTV.Application/MediaCards/Mapper.cs
  2. 5
      ErsatzTV.Application/MediaCards/TelevisionEpisodeCardViewModel.cs
  3. 9
      ErsatzTV.Application/MediaCollections/Commands/CreateSimpleMediaCollectionHandler.cs
  4. 5
      ErsatzTV.Infrastructure/Data/Repositories/ChannelRepository.cs
  5. 2
      ErsatzTV/Pages/MediaCollectionEditor.razor
  6. 2
      ErsatzTV/Pages/MediaCollectionItems.razor
  7. 27
      ErsatzTV/Pages/MediaCollections.razor

10
ErsatzTV.Application/MediaCards/Mapper.cs

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
using System.Linq;
using System;
using System.Linq;
using ErsatzTV.Core.Domain;
namespace ErsatzTV.Application.MediaCards
@ -28,6 +29,7 @@ namespace ErsatzTV.Application.MediaCards @@ -28,6 +29,7 @@ namespace ErsatzTV.Application.MediaCards
TelevisionEpisodeMediaItem televisionEpisode) =>
new(
televisionEpisode.Id,
televisionEpisode.Metadata.Aired ?? DateTime.MinValue,
televisionEpisode.Season.TelevisionShow.Metadata.Title,
televisionEpisode.Metadata.Title,
$"Episode {televisionEpisode.Metadata.Episode}",
@ -38,9 +40,9 @@ namespace ErsatzTV.Application.MediaCards @@ -38,9 +40,9 @@ namespace ErsatzTV.Application.MediaCards
internal static MovieCardViewModel ProjectToViewModel(MovieMediaItem movie) =>
new(
movie.Id,
movie.Metadata.Title,
movie.Metadata.Year.ToString(),
movie.Metadata.SortTitle,
movie.Metadata?.Title,
movie.Metadata?.Year?.ToString(),
movie.Metadata?.SortTitle,
movie.Poster);
internal static SimpleMediaCollectionCardResultsViewModel

5
ErsatzTV.Application/MediaCards/TelevisionEpisodeCardViewModel.cs

@ -1,8 +1,11 @@ @@ -1,8 +1,11 @@
namespace ErsatzTV.Application.MediaCards
using System;
namespace ErsatzTV.Application.MediaCards
{
public record TelevisionEpisodeCardViewModel
(
int EpisodeId,
DateTime Aired,
string ShowTitle,
string Title,
string Subtitle,

9
ErsatzTV.Application/MediaCollections/Commands/CreateSimpleMediaCollectionHandler.cs

@ -29,7 +29,14 @@ namespace ErsatzTV.Application.MediaCollections.Commands @@ -29,7 +29,14 @@ namespace ErsatzTV.Application.MediaCollections.Commands
_mediaCollectionRepository.Add(c).Map(ProjectToViewModel);
private Task<Validation<BaseError, SimpleMediaCollection>> Validate(CreateSimpleMediaCollection request) =>
ValidateName(request).MapT(name => new SimpleMediaCollection { Name = name });
ValidateName(request).MapT(name => new SimpleMediaCollection
{
Name = name,
Movies = new List<MovieMediaItem>(),
TelevisionShows = new List<TelevisionShow>(),
TelevisionEpisodes = new List<TelevisionEpisodeMediaItem>(),
TelevisionSeasons = new List<TelevisionSeason>()
});
private async Task<Validation<BaseError, string>> ValidateName(CreateSimpleMediaCollection createCollection)
{

5
ErsatzTV.Infrastructure/Data/Repositories/ChannelRepository.cs

@ -38,6 +38,11 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -38,6 +38,11 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
.Include(c => c.Playouts)
.ThenInclude(p => p.Items)
.ThenInclude(i => i.MediaItem)
.ThenInclude(i => (i as TelevisionEpisodeMediaItem).Metadata)
.Include(c => c.Playouts)
.ThenInclude(p => p.Items)
.ThenInclude(i => i.MediaItem)
.ThenInclude(i => (i as MovieMediaItem).Metadata)
.ToListAsync();
public async Task Update(Channel channel)

2
ErsatzTV/Pages/MediaCollectionEditor.razor

@ -75,7 +75,7 @@ @@ -75,7 +75,7 @@
Snackbar.Add(error.Value, Severity.Error);
Logger.LogError("Error saving simple media collection: {Error}", error.Value);
},
() => NavigationManager.NavigateTo($"/media/collections/{Id}"));
() => NavigationManager.NavigateTo(_model.Id > 0 ? $"/media/collections/{_model.Id}" : "/media/collections"));
}
}

2
ErsatzTV/Pages/MediaCollectionItems.razor

@ -64,7 +64,7 @@ @@ -64,7 +64,7 @@
<MudText GutterBottom="true" Typo="Typo.h4">Television Episodes</MudText>
<MudContainer MaxWidth="MaxWidth.False" Class="media-card-grid">
@foreach (TelevisionEpisodeCardViewModel card in _data.EpisodeCards)
@foreach (TelevisionEpisodeCardViewModel card in _data.EpisodeCards.OrderBy(e => e.Aired))
{
<MediaCard Data="@card"
Link="@($"/media/tv/episodes/{card.EpisodeId}")"

27
ErsatzTV/Pages/MediaCollections.razor

@ -2,31 +2,18 @@ @@ -2,31 +2,18 @@
@using ErsatzTV.Application.MediaCollections
@using ErsatzTV.Application.MediaCollections.Commands
@using ErsatzTV.Application.MediaCollections.Queries
@using ErsatzTV.Application.MediaCards
@inject IDialogService Dialog
@inject IMediator Mediator
@* @if (context.IsSimple) *@
@* { *@
@* <MudMenu Icon="@Icons.Material.Filled.MoreVert"> *@
@* <MudMenuItem Icon="@Icons.Material.Filled.Edit" Link="@($"/media/collections/{context.Id}")"> *@
@* Edit Properties *@
@* </MudMenuItem> *@
@* <MudMenuItem Icon="@Icons.Material.Filled.Edit" Link="@($"/media/collections/{context.Id}/items")"> *@
@* Edit Media Items *@
@* </MudMenuItem> *@
@* <MudMenuItem Icon="@Icons.Material.Filled.Delete" OnClick="@(_ => DeleteMediaCollectionAsync(context))"> *@
@* Delete *@
@* </MudMenuItem> *@
@* </MudMenu> *@
@* } *@
<MudContainer MaxWidth="MaxWidth.False" Class="media-card-grid">
@foreach (MediaCollectionViewModel card in _data)
{
<MediaCard Data="@card"
Link="@($"/media/collections/{card.Id}")"
ContainerClass="media-card-episode-container mr-4"
CardClass="media-card-episode"/>
CardClass="media-card-episode"
DeleteClicked="@DeleteMediaCollection"/>
}
</MudContainer>
@ -44,18 +31,18 @@ @@ -44,18 +31,18 @@
private async Task RefreshData() =>
_data = await Mediator.Send(new GetAllMediaCollections());
private async Task DeleteMediaCollectionAsync(MediaCollectionSummaryViewModel mediaCollection)
private async Task DeleteMediaCollection(MediaCardViewModel vm)
{
if (mediaCollection.IsSimple)
if (vm is MediaCollectionViewModel collection)
{
var parameters = new DialogParameters { { "EntityType", "media collection" }, { "EntityName", mediaCollection.Name } };
var parameters = new DialogParameters { { "EntityType", "media collection" }, { "EntityName", collection.Name } };
var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall };
IDialogReference dialog = Dialog.Show<DeleteDialog>("Delete Media Collection", parameters, options);
DialogResult result = await dialog.Result;
if (!result.Cancelled)
{
await Mediator.Send(new DeleteSimpleMediaCollection(mediaCollection.Id));
await Mediator.Send(new DeleteSimpleMediaCollection(collection.Id));
await RefreshData();
}
}

Loading…
Cancel
Save