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

14
ErsatzTV.Application/Movies/Mapper.cs

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

24
ErsatzTV.Core/Metadata/LocalMetadataProvider.cs

@ -82,7 +82,7 @@ namespace ErsatzTV.Core.Metadata @@ -82,7 +82,7 @@ namespace ErsatzTV.Core.Metadata
private async Task ApplyMetadataUpdate(Episode episode, EpisodeMetadata metadata)
{
episode.EpisodeMetadata.HeadOrNone().Match(
Optional(episode.EpisodeMetadata).Flatten().HeadOrNone().Match(
existing =>
{
existing.Outline = metadata.Outline;
@ -96,14 +96,18 @@ namespace ErsatzTV.Core.Metadata @@ -96,14 +96,18 @@ namespace ErsatzTV.Core.Metadata
existing.ReleaseDate = metadata.ReleaseDate;
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);
}
private async Task ApplyMetadataUpdate(Movie movie, MovieMetadata metadata)
{
movie.MovieMetadata.HeadOrNone().Match(
Optional(movie.MovieMetadata).Flatten().HeadOrNone().Match(
existing =>
{
existing.Outline = metadata.Outline;
@ -117,14 +121,18 @@ namespace ErsatzTV.Core.Metadata @@ -117,14 +121,18 @@ namespace ErsatzTV.Core.Metadata
existing.ReleaseDate = metadata.ReleaseDate;
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);
}
private async Task ApplyMetadataUpdate(Show show, ShowMetadata metadata)
{
show.ShowMetadata.HeadOrNone().Match(
Optional(show.ShowMetadata).Flatten().HeadOrNone().Match(
existing =>
{
existing.Outline = metadata.Outline;
@ -138,7 +146,11 @@ namespace ErsatzTV.Core.Metadata @@ -138,7 +146,11 @@ namespace ErsatzTV.Core.Metadata
existing.ReleaseDate = metadata.ReleaseDate;
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);
}

31
ErsatzTV/Services/SchedulerService.cs

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

Loading…
Cancel
Save