diff --git a/ErsatzTV.Application/MediaSources/Commands/ScanLocalLibraryHandler.cs b/ErsatzTV.Application/MediaSources/Commands/ScanLocalLibraryHandler.cs index 81fc46dfd..0054b29d5 100644 --- a/ErsatzTV.Application/MediaSources/Commands/ScanLocalLibraryHandler.cs +++ b/ErsatzTV.Application/MediaSources/Commands/ScanLocalLibraryHandler.cs @@ -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; } } diff --git a/ErsatzTV.Application/Movies/Mapper.cs b/ErsatzTV.Application/Movies/Mapper.cs index 1a69d3909..0d6865be8 100644 --- a/ErsatzTV.Application/Movies/Mapper.cs +++ b/ErsatzTV.Application/Movies/Mapper.cs @@ -1,4 +1,5 @@ using ErsatzTV.Core.Domain; +using static LanguageExt.Prelude; 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); } } } diff --git a/ErsatzTV.Core/Metadata/LocalMetadataProvider.cs b/ErsatzTV.Core/Metadata/LocalMetadataProvider.cs index 7fd09f8b8..72a8d4db8 100644 --- a/ErsatzTV.Core/Metadata/LocalMetadataProvider.cs +++ b/ErsatzTV.Core/Metadata/LocalMetadataProvider.cs @@ -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 existing.ReleaseDate = metadata.ReleaseDate; existing.SortTitle = metadata.SortTitle ?? GetSortTitle(metadata.Title); }, - () => episode.EpisodeMetadata = new List { metadata }); + () => + { + metadata.SortTitle ??= GetSortTitle(metadata.Title); + episode.EpisodeMetadata = new List { 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 existing.ReleaseDate = metadata.ReleaseDate; existing.SortTitle = metadata.SortTitle ?? GetSortTitle(metadata.Title); }, - () => movie.MovieMetadata = new List { metadata }); + () => + { + metadata.SortTitle ??= GetSortTitle(metadata.Title); + movie.MovieMetadata = new List { 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 existing.ReleaseDate = metadata.ReleaseDate; existing.SortTitle = metadata.SortTitle ?? GetSortTitle(metadata.Title); }, - () => show.ShowMetadata = new List { metadata }); + () => + { + metadata.SortTitle ??= GetSortTitle(metadata.Title); + show.ShowMetadata = new List { metadata }; + }); await _televisionRepository.Update(show); } diff --git a/ErsatzTV/Services/SchedulerService.cs b/ErsatzTV/Services/SchedulerService.cs index eb2920395..782f56e17 100644 --- a/ErsatzTV/Services/SchedulerService.cs +++ b/ErsatzTV/Services/SchedulerService.cs @@ -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(); @@ -93,20 +90,20 @@ namespace ErsatzTV.Services } } - List 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 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); + // // } + // } } } }