Browse Source

fix collections ui

pull/31/head
Jason Dove 6 years ago
parent
commit
4a7657d371
  1. 10
      ErsatzTV.Core.Tests/Fakes/FakeTelevisionRepository.cs
  2. 10
      ErsatzTV.Core/Interfaces/Repositories/ITelevisionRepository.cs
  3. 7
      ErsatzTV.Infrastructure/Data/Repositories/ChannelRepository.cs
  4. 9
      ErsatzTV.Infrastructure/Data/Repositories/ConfigElementRepository.cs
  5. 2
      ErsatzTV.Infrastructure/Data/Repositories/FFmpegProfileRepository.cs
  6. 13
      ErsatzTV.Infrastructure/Data/Repositories/MediaCollectionRepository.cs
  7. 2
      ErsatzTV.Infrastructure/Data/Repositories/MediaItemRepository.cs
  8. 3
      ErsatzTV.Infrastructure/Data/Repositories/MovieRepository.cs
  9. 5
      ErsatzTV.Infrastructure/Data/Repositories/PlayoutRepository.cs
  10. 7
      ErsatzTV.Infrastructure/Data/Repositories/ProgramScheduleRepository.cs
  11. 6
      ErsatzTV.Infrastructure/Data/Repositories/ResolutionRepository.cs
  12. 26
      ErsatzTV.Infrastructure/Data/Repositories/TelevisionRepository.cs
  13. 3
      ErsatzTV/Pages/CollectionItems.razor

10
ErsatzTV.Core.Tests/Fakes/FakeTelevisionRepository.cs

@ -17,7 +17,7 @@ namespace ErsatzTV.Core.Tests.Fakes @@ -17,7 +17,7 @@ namespace ErsatzTV.Core.Tests.Fakes
public Task<List<Show>> GetAllShows() => throw new NotSupportedException();
public Task<Option<Show>> GetShow(int televisionShowId) => throw new NotSupportedException();
public Task<Option<Show>> GetShow(int showId) => throw new NotSupportedException();
public Task<int> GetShowCount() => throw new NotSupportedException();
@ -28,18 +28,18 @@ namespace ErsatzTV.Core.Tests.Fakes @@ -28,18 +28,18 @@ namespace ErsatzTV.Core.Tests.Fakes
public Task<List<Season>> GetAllSeasons() => throw new NotSupportedException();
public Task<Option<Season>> GetSeason(int televisionSeasonId) => throw new NotSupportedException();
public Task<Option<Season>> GetSeason(int seasonId) => throw new NotSupportedException();
public Task<int> GetSeasonCount(int televisionShowId) => throw new NotSupportedException();
public Task<int> GetSeasonCount(int showId) => throw new NotSupportedException();
public Task<List<Season>> GetPagedSeasons(int televisionShowId, int pageNumber, int pageSize) =>
throw new NotSupportedException();
public Task<List<Episode>> GetSeasonItems(int seasonId) => throw new NotSupportedException();
public Task<Option<Episode>> GetEpisode(int televisionEpisodeId) => throw new NotSupportedException();
public Task<Option<Episode>> GetEpisode(int episodeId) => throw new NotSupportedException();
public Task<int> GetEpisodeCount(int televisionSeasonId) => throw new NotSupportedException();
public Task<int> GetEpisodeCount(int seasonId) => throw new NotSupportedException();
public Task<List<EpisodeMetadata>> GetPagedEpisodes(int seasonId, int pageNumber, int pageSize) =>
throw new NotSupportedException();

10
ErsatzTV.Core/Interfaces/Repositories/ITelevisionRepository.cs

@ -11,17 +11,17 @@ namespace ErsatzTV.Core.Interfaces.Repositories @@ -11,17 +11,17 @@ namespace ErsatzTV.Core.Interfaces.Repositories
Task<bool> Update(Season season);
Task<bool> Update(Episode episode);
Task<List<Show>> GetAllShows();
Task<Option<Show>> GetShow(int televisionShowId);
Task<Option<Show>> GetShow(int showId);
Task<int> GetShowCount();
Task<List<ShowMetadata>> GetPagedShows(int pageNumber, int pageSize);
Task<List<Episode>> GetShowItems(int showId);
Task<List<Season>> GetAllSeasons();
Task<Option<Season>> GetSeason(int televisionSeasonId);
Task<int> GetSeasonCount(int televisionShowId);
Task<Option<Season>> GetSeason(int seasonId);
Task<int> GetSeasonCount(int showId);
Task<List<Season>> GetPagedSeasons(int televisionShowId, int pageNumber, int pageSize);
Task<List<Episode>> GetSeasonItems(int seasonId);
Task<Option<Episode>> GetEpisode(int televisionEpisodeId);
Task<int> GetEpisodeCount(int televisionSeasonId);
Task<Option<Episode>> GetEpisode(int episodeId);
Task<int> GetEpisodeCount(int seasonId);
Task<List<EpisodeMetadata>> GetPagedEpisodes(int seasonId, int pageNumber, int pageSize);
Task<Option<Show>> GetShowByMetadata(int libraryPathId, ShowMetadata metadata);

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

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Repositories;
@ -22,12 +23,16 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -22,12 +23,16 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
}
public Task<Option<Channel>> Get(int id) =>
_dbContext.Channels.SingleOrDefaultAsync(c => c.Id == id).Map(Optional);
_dbContext.Channels
.OrderBy(c => c.Id)
.SingleOrDefaultAsync(c => c.Id == id)
.Map(Optional);
public Task<Option<Channel>> GetByNumber(int number) =>
_dbContext.Channels
.Include(c => c.FFmpegProfile)
.ThenInclude(p => p.Resolution)
.OrderBy(c => c.Number)
.SingleOrDefaultAsync(c => c.Number == number)
.Map(Optional);

9
ErsatzTV.Infrastructure/Data/Repositories/ConfigElementRepository.cs

@ -1,9 +1,11 @@ @@ -1,9 +1,11 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Repositories;
using LanguageExt;
using Microsoft.EntityFrameworkCore;
using static LanguageExt.Prelude;
namespace ErsatzTV.Infrastructure.Data.Repositories
{
@ -20,8 +22,11 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -20,8 +22,11 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
return configElement;
}
public async Task<Option<ConfigElement>> Get(ConfigElementKey key) =>
await _dbContext.ConfigElements.SingleOrDefaultAsync(ce => ce.Key == key.Key);
public Task<Option<ConfigElement>> Get(ConfigElementKey key) =>
_dbContext.ConfigElements
.OrderBy(ce => ce.Key)
.SingleOrDefaultAsync(ce => ce.Key == key.Key)
.Map(Optional);
public Task<Option<T>> GetValue<T>(ConfigElementKey key) =>
Get(key).MapT(ce => (T) Convert.ChangeType(ce.Value, typeof(T)));

2
ErsatzTV.Infrastructure/Data/Repositories/FFmpegProfileRepository.cs

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Repositories;
@ -23,6 +24,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -23,6 +24,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
public async Task<Option<FFmpegProfile>> Get(int id) =>
await _dbContext.FFmpegProfiles
.Include(p => p.Resolution)
.OrderBy(p => p.Id)
.SingleOrDefaultAsync(p => p.Id == id);
public Task<List<FFmpegProfile>> GetAll() =>

13
ErsatzTV.Infrastructure/Data/Repositories/MediaCollectionRepository.cs

@ -30,7 +30,10 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -30,7 +30,10 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
}
public Task<Option<Collection>> Get(int id) =>
_dbContext.Collections.SingleOrDefaultAsync(c => c.Id == id).Map(Optional);
_dbContext.Collections
.OrderBy(c => c.Id)
.SingleOrDefaultAsync(c => c.Id == id)
.Map(Optional);
public Task<Option<Collection>> GetCollectionWithItems(int id) =>
_dbContext.Collections
@ -49,6 +52,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -49,6 +52,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
.ThenInclude(i => (i as Episode).Season)
.ThenInclude(s => s.Show)
.ThenInclude(s => s.ShowMetadata)
.OrderBy(c => c.Id)
.SingleOrDefaultAsync(c => c.Id == id)
.Map(Optional);
@ -59,17 +63,24 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -59,17 +63,24 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
.ThenInclude(i => i.LibraryPath)
.Include(c => c.MediaItems)
.ThenInclude(i => (i as Movie).MovieMetadata)
.ThenInclude(mm => mm.Artwork)
.Include(c => c.MediaItems)
.ThenInclude(i => (i as Show).ShowMetadata)
.ThenInclude(sm => sm.Artwork)
.Include(c => c.MediaItems)
.ThenInclude(i => (i as Season).SeasonMetadata)
.ThenInclude(sm => sm.Artwork)
.Include(c => c.MediaItems)
.ThenInclude(i => (i as Season).Show)
.ThenInclude(s => s.ShowMetadata)
.Include(c => c.MediaItems)
.ThenInclude(i => (i as Episode).EpisodeMetadata)
.ThenInclude(em => em.Artwork)
.Include(c => c.MediaItems)
.ThenInclude(i => (i as Episode).Season)
.ThenInclude(s => s.Show)
.ThenInclude(s => s.ShowMetadata)
.OrderBy(c => c.Id)
.SingleOrDefaultAsync(c => c.Id == id)
.Map(Optional);

2
ErsatzTV.Infrastructure/Data/Repositories/MediaItemRepository.cs

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Repositories;
@ -17,6 +18,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -17,6 +18,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
public Task<Option<MediaItem>> Get(int id) =>
_dbContext.MediaItems
.Include(i => i.LibraryPath)
.OrderBy(i => i.Id)
.SingleOrDefaultAsync(i => i.Id == id)
.Map(Optional);

3
ErsatzTV.Infrastructure/Data/Repositories/MovieRepository.cs

@ -35,6 +35,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -35,6 +35,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
return await dbContext.Movies
.Include(m => m.MovieMetadata)
.ThenInclude(m => m.Artwork)
.OrderBy(m => m.Id)
.SingleOrDefaultAsync(m => m.Id == movieId)
.Map(Optional);
}
@ -45,6 +46,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -45,6 +46,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
.Include(i => i.MovieMetadata)
.ThenInclude(mm => mm.Artwork)
.Include(i => i.LibraryPath)
.OrderBy(i => i.Path)
.SingleOrDefaultAsync(i => i.Path == path);
return await maybeExisting.Match(
@ -59,6 +61,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -59,6 +61,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
Option<PlexMovie> maybeExisting = await _dbContext.PlexMovieMediaItems
.Include(i => i.MovieMetadata)
.Include(i => i.Part)
.OrderBy(i => i.Key)
.SingleOrDefaultAsync(i => i.Key == item.Key);
return await maybeExisting.Match(

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

@ -25,7 +25,10 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -25,7 +25,10 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
}
public Task<Option<Playout>> Get(int id) =>
_dbContext.Playouts.SingleOrDefaultAsync(p => p.Id == id).Map(Optional);
_dbContext.Playouts
.OrderBy(p => p.Id)
.SingleOrDefaultAsync(p => p.Id == id)
.Map(Optional);
public async Task<Option<Playout>> GetFull(int id) =>
await _dbContext.Playouts

7
ErsatzTV.Infrastructure/Data/Repositories/ProgramScheduleRepository.cs

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Repositories;
@ -22,12 +23,16 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -22,12 +23,16 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
}
public Task<Option<ProgramSchedule>> Get(int id) =>
_dbContext.ProgramSchedules.SingleOrDefaultAsync(s => s.Id == id).Map(Optional);
_dbContext.ProgramSchedules
.OrderBy(s => s.Id)
.SingleOrDefaultAsync(s => s.Id == id)
.Map(Optional);
public async Task<Option<ProgramSchedule>> GetWithPlayouts(int id) =>
await _dbContext.ProgramSchedules
.Include(ps => ps.Items)
.Include(ps => ps.Playouts)
.OrderBy(ps => ps.Id)
.SingleOrDefaultAsync(ps => ps.Id == id);
public Task<List<ProgramSchedule>> GetAll() =>

6
ErsatzTV.Infrastructure/Data/Repositories/ResolutionRepository.cs

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Repositories;
@ -15,7 +16,10 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -15,7 +16,10 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
public ResolutionRepository(TvContext dbContext) => _dbContext = dbContext;
public Task<Option<Resolution>> Get(int id) =>
_dbContext.Resolutions.SingleOrDefaultAsync(r => r.Id == id).Map(Optional);
_dbContext.Resolutions
.OrderBy(r => r.Id)
.SingleOrDefaultAsync(r => r.Id == id)
.Map(Optional);
public Task<List<Resolution>> GetAll() =>
_dbContext.Resolutions.ToListAsync();

26
ErsatzTV.Infrastructure/Data/Repositories/TelevisionRepository.cs

@ -48,12 +48,13 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -48,12 +48,13 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
.Include(s => s.ShowMetadata)
.ToListAsync();
public Task<Option<Show>> GetShow(int televisionShowId) =>
public Task<Option<Show>> GetShow(int showId) =>
_dbContext.Shows
.AsNoTracking()
.Filter(s => s.Id == televisionShowId)
.Filter(s => s.Id == showId)
.Include(s => s.ShowMetadata)
.ThenInclude(sm => sm.Artwork)
.OrderBy(s => s.Id)
.SingleOrDefaultAsync()
.Map(Optional);
@ -82,21 +83,21 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -82,21 +83,21 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
.ThenInclude(s => s.ShowMetadata)
.ToListAsync();
public Task<Option<Season>> GetSeason(int televisionSeasonId) =>
public Task<Option<Season>> GetSeason(int seasonId) =>
_dbContext.Seasons
.AsNoTracking()
.Include(s => s.SeasonMetadata)
.ThenInclude(sm => sm.Artwork)
.Include(s => s.Show)
.ThenInclude(s => s.ShowMetadata)
.SingleOrDefaultAsync(s => s.Id == televisionSeasonId)
.OrderBy(s => s.Id)
.SingleOrDefaultAsync(s => s.Id == seasonId)
.Map(Optional);
public Task<int> GetSeasonCount(int televisionShowId) =>
public Task<int> GetSeasonCount(int showId) =>
_dbContext.Seasons
.AsNoTracking()
.Where(s => s.ShowId == televisionShowId)
.CountAsync();
.CountAsync(s => s.ShowId == showId);
public async Task<List<Season>> GetPagedSeasons(int televisionShowId, int pageNumber, int pageSize)
{
@ -121,20 +122,20 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -121,20 +122,20 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
.ToListAsync();
}
public Task<Option<Episode>> GetEpisode(int televisionEpisodeId) =>
public Task<Option<Episode>> GetEpisode(int episodeId) =>
_dbContext.Episodes
.AsNoTracking()
.Include(e => e.Season)
.Include(e => e.EpisodeMetadata)
.ThenInclude(em => em.Artwork)
.SingleOrDefaultAsync(s => s.Id == televisionEpisodeId)
.OrderBy(s => s.Id)
.SingleOrDefaultAsync(s => s.Id == episodeId)
.Map(Optional);
public Task<int> GetEpisodeCount(int televisionSeasonId) =>
public Task<int> GetEpisodeCount(int seasonId) =>
_dbContext.Episodes
.AsNoTracking()
.Where(e => e.SeasonId == televisionSeasonId)
.CountAsync();
.CountAsync(e => e.SeasonId == seasonId);
public Task<List<EpisodeMetadata>> GetPagedEpisodes(int seasonId, int pageNumber, int pageSize) =>
_dbContext.EpisodeMetadata
@ -212,6 +213,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories @@ -212,6 +213,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
.Include(i => i.EpisodeMetadata)
.ThenInclude(em => em.Artwork)
.Include(i => i.Statistics)
.OrderBy(i => i.Path)
.SingleOrDefaultAsync(i => i.Path == path);
return await maybeExisting.Match(

3
ErsatzTV/Pages/CollectionItems.razor

@ -72,7 +72,8 @@ @@ -72,7 +72,8 @@
Subtitle="@card.Title"
ContainerClass="media-card-episode-container mx-2"
CardClass="media-card-episode"
DeleteClicked="@RemoveEpisodeFromCollection"/>
DeleteClicked="@RemoveEpisodeFromCollection"
ArtworkKind="@ArtworkKind.Thumbnail"/>
}
</MudContainer>
}

Loading…
Cancel
Save