Browse Source

fix movie scanning/metadata

pull/31/head
Jason Dove 6 years ago
parent
commit
bdc9b0a010
  1. 3
      ErsatzTV.Application/MediaSources/Commands/ScanLocalLibraryHandler.cs
  2. 14
      ErsatzTV.Application/Movies/Mapper.cs
  3. 24
      ErsatzTV.Core/Metadata/LocalMetadataProvider.cs
  4. 31
      ErsatzTV/Services/SchedulerService.cs

3
ErsatzTV.Application/MediaSources/Commands/ScanLocalLibraryHandler.cs

@ -69,7 +69,8 @@ namespace ErsatzTV.Application.MediaSources.Commands
await _movieFolderScanner.ScanFolder(libraryPath, ffprobePath); await _movieFolderScanner.ScanFolder(libraryPath, ffprobePath);
break; break;
case LibraryMediaKind.Shows: case LibraryMediaKind.Shows:
await _televisionFolderScanner.ScanFolder(libraryPath, ffprobePath); // TODO: re-enable this
// await _televisionFolderScanner.ScanFolder(libraryPath, ffprobePath);
break; break;
} }
} }

14
ErsatzTV.Application/Movies/Mapper.cs

@ -1,4 +1,5 @@
using ErsatzTV.Core.Domain; using ErsatzTV.Core.Domain;
using static LanguageExt.Prelude;
namespace ErsatzTV.Application.Movies namespace ErsatzTV.Application.Movies
{ {
@ -6,13 +7,12 @@ namespace ErsatzTV.Application.Movies
{ {
internal static MovieViewModel ProjectToViewModel(Movie movie) internal static MovieViewModel ProjectToViewModel(Movie movie)
{ {
string title = movie.MovieMetadata.HeadOrNone().Map(m => m.Title).IfNone(string.Empty); MovieMetadata metadata = Optional(movie.MovieMetadata).Flatten().Head();
string year = movie.MovieMetadata.HeadOrNone() return new MovieViewModel(
.Map(m => m.ReleaseDate?.Year.ToString()) metadata.Title,
.IfNone(string.Empty); metadata.ReleaseDate?.Year.ToString(),
string plot = movie.MovieMetadata.HeadOrNone().Map(m => m.Plot).IfNone(string.Empty); metadata.Plot,
movie.Poster);
return new MovieViewModel(title, year, plot, movie.Poster);
} }
} }
} }

24
ErsatzTV.Core/Metadata/LocalMetadataProvider.cs

@ -82,7 +82,7 @@ namespace ErsatzTV.Core.Metadata
private async Task ApplyMetadataUpdate(Episode episode, EpisodeMetadata metadata) private async Task ApplyMetadataUpdate(Episode episode, EpisodeMetadata metadata)
{ {
episode.EpisodeMetadata.HeadOrNone().Match( Optional(episode.EpisodeMetadata).Flatten().HeadOrNone().Match(
existing => existing =>
{ {
existing.Outline = metadata.Outline; existing.Outline = metadata.Outline;
@ -96,14 +96,18 @@ namespace ErsatzTV.Core.Metadata
existing.ReleaseDate = metadata.ReleaseDate; existing.ReleaseDate = metadata.ReleaseDate;
existing.SortTitle = metadata.SortTitle ?? GetSortTitle(metadata.Title); existing.SortTitle = metadata.SortTitle ?? GetSortTitle(metadata.Title);
}, },
() => episode.EpisodeMetadata = new List<EpisodeMetadata> { metadata }); () =>
{
metadata.SortTitle ??= GetSortTitle(metadata.Title);
episode.EpisodeMetadata = new List<EpisodeMetadata> { metadata };
});
await _televisionRepository.Update(episode); await _televisionRepository.Update(episode);
} }
private async Task ApplyMetadataUpdate(Movie movie, MovieMetadata metadata) private async Task ApplyMetadataUpdate(Movie movie, MovieMetadata metadata)
{ {
movie.MovieMetadata.HeadOrNone().Match( Optional(movie.MovieMetadata).Flatten().HeadOrNone().Match(
existing => existing =>
{ {
existing.Outline = metadata.Outline; existing.Outline = metadata.Outline;
@ -117,14 +121,18 @@ namespace ErsatzTV.Core.Metadata
existing.ReleaseDate = metadata.ReleaseDate; existing.ReleaseDate = metadata.ReleaseDate;
existing.SortTitle = metadata.SortTitle ?? GetSortTitle(metadata.Title); existing.SortTitle = metadata.SortTitle ?? GetSortTitle(metadata.Title);
}, },
() => movie.MovieMetadata = new List<MovieMetadata> { metadata }); () =>
{
metadata.SortTitle ??= GetSortTitle(metadata.Title);
movie.MovieMetadata = new List<MovieMetadata> { metadata };
});
await _mediaItemRepository.Update(movie); await _mediaItemRepository.Update(movie);
} }
private async Task ApplyMetadataUpdate(Show show, ShowMetadata metadata) private async Task ApplyMetadataUpdate(Show show, ShowMetadata metadata)
{ {
show.ShowMetadata.HeadOrNone().Match( Optional(show.ShowMetadata).Flatten().HeadOrNone().Match(
existing => existing =>
{ {
existing.Outline = metadata.Outline; existing.Outline = metadata.Outline;
@ -138,7 +146,11 @@ namespace ErsatzTV.Core.Metadata
existing.ReleaseDate = metadata.ReleaseDate; existing.ReleaseDate = metadata.ReleaseDate;
existing.SortTitle = metadata.SortTitle ?? GetSortTitle(metadata.Title); existing.SortTitle = metadata.SortTitle ?? GetSortTitle(metadata.Title);
}, },
() => show.ShowMetadata = new List<ShowMetadata> { metadata }); () =>
{
metadata.SortTitle ??= GetSortTitle(metadata.Title);
show.ShowMetadata = new List<ShowMetadata> { metadata };
});
await _televisionRepository.Update(show); await _televisionRepository.Update(show);
} }

31
ErsatzTV/Services/SchedulerService.cs

@ -72,9 +72,6 @@ namespace ErsatzTV.Services
private async Task ScanLocalMediaSources(CancellationToken cancellationToken) private async Task ScanLocalMediaSources(CancellationToken cancellationToken)
{ {
// TODO: enable scanning again
return;
using IServiceScope scope = _serviceScopeFactory.CreateScope(); using IServiceScope scope = _serviceScopeFactory.CreateScope();
TvContext dbContext = scope.ServiceProvider.GetRequiredService<TvContext>(); TvContext dbContext = scope.ServiceProvider.GetRequiredService<TvContext>();
@ -93,20 +90,20 @@ namespace ErsatzTV.Services
} }
} }
List<PlexLibrary> plexLibraries = await dbContext.PlexLibraries // List<PlexLibrary> plexLibraries = await dbContext.PlexLibraries
.Filter(l => l.ShouldSyncItems) // .Filter(l => l.ShouldSyncItems)
.ToListAsync(cancellationToken); // .ToListAsync(cancellationToken);
//
foreach (PlexLibrary library in plexLibraries) // foreach (PlexLibrary library in plexLibraries)
{ // {
// TODO: this locking won't work... // // TODO: this locking won't work...
// if (_entityLocker.LockMediaSource(library.PlexMediaSourceId)) // // if (_entityLocker.LockMediaSource(library.PlexMediaSourceId))
// { // // {
// await _channel.WriteAsync( // // await _channel.WriteAsync(
// new SynchronizePlexLibraryByIdIfNeeded(library.PlexMediaSourceId, library.Id), // // new SynchronizePlexLibraryByIdIfNeeded(library.PlexMediaSourceId, library.Id),
// cancellationToken); // // cancellationToken);
// } // // }
} // }
} }
} }
} }

Loading…
Cancel
Save