Browse Source

apply plex episode metadata updates (#871)

* update more plex episode metadata

* update dependencies
pull/872/head
Jason Dove 4 years ago committed by GitHub
parent
commit
f349646703
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      CHANGELOG.md
  2. 35
      ErsatzTV.Core.Tests/Fakes/FakeTelevisionRepository.cs
  3. 11
      ErsatzTV.Core/Interfaces/Repositories/ITelevisionRepository.cs
  4. 2
      ErsatzTV.Core/Metadata/TelevisionFolderScanner.cs
  5. 28
      ErsatzTV.Core/Plex/PlexTelevisionLibraryScanner.cs
  6. 23
      ErsatzTV.Infrastructure/Data/Repositories/TelevisionRepository.cs
  7. 4
      ErsatzTV/ErsatzTV.csproj

1
CHANGELOG.md

@ -6,6 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). @@ -6,6 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased]
### Fixed
- Maintain stream continuity when playout is rebuilt for a channel that is actively being streamed
- Properly apply changes to episode title, sort title, outline and plot from Plex
## [0.6.2-beta] - 2022-06-18
### Fixed

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

@ -1,7 +1,6 @@ @@ -1,7 +1,6 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Core.Metadata;
using ErsatzTV.Core.Plex;
namespace ErsatzTV.Core.Tests.Fakes;
@ -42,8 +41,7 @@ public class FakeTelevisionRepository : ITelevisionRepository @@ -42,8 +41,7 @@ public class FakeTelevisionRepository : ITelevisionRepository
public Task<Option<Show>> GetShowByMetadata(int libraryPathId, ShowMetadata metadata) =>
throw new NotSupportedException();
public Task<Either<BaseError, MediaItemScanResult<Show>>>
AddShow(int libraryPathId, string showFolder, ShowMetadata metadata) =>
public Task<Either<BaseError, MediaItemScanResult<Show>>> AddShow(int libraryPathId, ShowMetadata metadata) =>
throw new NotSupportedException();
public Task<Either<BaseError, Season>> GetOrAddSeason(Show show, int libraryPathId, int seasonNumber) =>
@ -74,36 +72,11 @@ public class FakeTelevisionRepository : ITelevisionRepository @@ -74,36 +72,11 @@ public class FakeTelevisionRepository : ITelevisionRepository
public Task<bool> AddDirector(EpisodeMetadata metadata, Director director) => throw new NotSupportedException();
public Task<bool> AddWriter(EpisodeMetadata metadata, Writer writer) => throw new NotSupportedException();
public Task<Unit> UpdatePath(int mediaFileId, string path) => throw new NotSupportedException();
public Task<Either<BaseError, MediaItemScanResult<PlexShow>>> GetOrAddPlexShow(
PlexLibrary library,
PlexShow item) =>
public Task<bool> UpdateTitles(EpisodeMetadata metadata, string title, string sortTitle) =>
throw new NotSupportedException();
public Task<Either<BaseError, PlexSeason>> GetOrAddPlexSeason(PlexLibrary library, PlexSeason item) =>
throw new NotSupportedException();
public Task<Either<BaseError, MediaItemScanResult<PlexEpisode>>> GetOrAddPlexEpisode(
PlexLibrary library,
PlexEpisode item) =>
throw new NotSupportedException();
public Task<List<int>> RemoveMissingPlexShows(PlexLibrary library, List<string> showKeys) =>
throw new NotSupportedException();
public Task<Unit> RemoveMissingPlexSeasons(string showKey, List<string> seasonKeys) =>
throw new NotSupportedException();
public Task<bool> UpdateOutline(EpisodeMetadata metadata, string outline) => throw new NotSupportedException();
public Task<List<int>> RemoveMissingPlexEpisodes(string seasonKey, List<string> episodeKeys) =>
throw new NotSupportedException();
public Task<Unit> SetPlexEtag(PlexShow show, string etag) => throw new NotSupportedException();
public Task<Unit> SetPlexEtag(PlexSeason season, string etag) => throw new NotSupportedException();
public Task<Unit> SetPlexEtag(PlexEpisode episode, string etag) => throw new NotSupportedException();
public Task<List<PlexItemEtag>> GetExistingPlexEpisodes(PlexLibrary library, PlexSeason season) =>
throw new NotSupportedException();
public Task<bool> UpdatePlot(EpisodeMetadata metadata, string plot) => throw new NotSupportedException();
}

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

@ -22,12 +22,7 @@ public interface ITelevisionRepository @@ -22,12 +22,7 @@ public interface ITelevisionRepository
Task<int> GetEpisodeCount(int seasonId);
Task<List<EpisodeMetadata>> GetPagedEpisodes(int seasonId, int pageNumber, int pageSize);
Task<Option<Show>> GetShowByMetadata(int libraryPathId, ShowMetadata metadata);
Task<Either<BaseError, MediaItemScanResult<Show>>> AddShow(
int libraryPathId,
string showFolder,
ShowMetadata metadata);
Task<Either<BaseError, MediaItemScanResult<Show>>> AddShow(int libraryPathId, ShowMetadata metadata);
Task<Either<BaseError, Season>> GetOrAddSeason(Show show, int libraryPathId, int seasonNumber);
Task<Either<BaseError, Episode>> GetOrAddEpisode(Season season, LibraryPath libraryPath, string path);
Task<IEnumerable<string>> FindEpisodePaths(LibraryPath libraryPath);
@ -42,5 +37,7 @@ public interface ITelevisionRepository @@ -42,5 +37,7 @@ public interface ITelevisionRepository
Task<Unit> RemoveMetadata(Episode episode, EpisodeMetadata metadata);
Task<bool> AddDirector(EpisodeMetadata metadata, Director director);
Task<bool> AddWriter(EpisodeMetadata metadata, Writer writer);
Task<Unit> UpdatePath(int mediaFileId, string path);
Task<bool> UpdateTitles(EpisodeMetadata metadata, string title, string sortTitle);
Task<bool> UpdateOutline(EpisodeMetadata metadata, string outline);
Task<bool> UpdatePlot(EpisodeMetadata metadata, string plot);
}

2
ErsatzTV.Core/Metadata/TelevisionFolderScanner.cs

@ -177,7 +177,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan @@ -177,7 +177,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
return new MediaItemScanResult<Show>(show);
}
return await _televisionRepository.AddShow(libraryPathId, showFolder, metadata);
return await _televisionRepository.AddShow(libraryPathId, metadata);
}
private async Task<Either<BaseError, Unit>> ScanSeasons(

28
ErsatzTV.Core/Plex/PlexTelevisionLibraryScanner.cs

@ -520,6 +520,34 @@ public class PlexTelevisionLibraryScanner : @@ -520,6 +520,34 @@ public class PlexTelevisionLibraryScanner :
}
}
if (fullMetadata.SortTitle != existingMetadata.SortTitle || fullMetadata.Title != existingMetadata.Title)
{
existingMetadata.Title = fullMetadata.Title;
existingMetadata.SortTitle = fullMetadata.SortTitle;
if (await _televisionRepository.UpdateTitles(existingMetadata, fullMetadata.Title, fullMetadata.SortTitle))
{
result.IsUpdated = true;
}
}
if (fullMetadata.Outline != existingMetadata.Outline)
{
existingMetadata.Outline = fullMetadata.Outline;
if (await _televisionRepository.UpdateOutline(existingMetadata, fullMetadata.Outline))
{
result.IsUpdated = true;
}
}
if (fullMetadata.Plot != existingMetadata.Plot)
{
existingMetadata.Plot = fullMetadata.Plot;
if (await _televisionRepository.UpdatePlot(existingMetadata, fullMetadata.Plot))
{
result.IsUpdated = true;
}
}
if (await UpdateArtworkIfNeeded(existingMetadata, fullMetadata, ArtworkKind.Thumbnail))
{
result.IsUpdated = true;

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

@ -260,7 +260,6 @@ public class TelevisionRepository : ITelevisionRepository @@ -260,7 +260,6 @@ public class TelevisionRepository : ITelevisionRepository
public async Task<Either<BaseError, MediaItemScanResult<Show>>> AddShow(
int libraryPathId,
string showFolder,
ShowMetadata metadata)
{
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync();
@ -464,12 +463,28 @@ public class TelevisionRepository : ITelevisionRepository @@ -464,12 +463,28 @@ public class TelevisionRepository : ITelevisionRepository
new { writer.Name, MetadataId = metadata.Id }).Map(result => result > 0);
}
public async Task<Unit> UpdatePath(int mediaFileId, string path)
public async Task<bool> UpdateTitles(EpisodeMetadata metadata, string title, string sortTitle)
{
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync();
return await dbContext.Connection.ExecuteAsync(
"UPDATE MediaFile SET Path = @Path WHERE Id = @MediaFileId",
new { Path = path, MediaFileId = mediaFileId }).Map(_ => Unit.Default);
"UPDATE EpisodeMetadata SET Title = @Title, SortTitle = @SortTitle WHERE Id = @MetadataId",
new { Title = title, SortTitle = sortTitle, MetadataId = metadata.Id }).Map(result => result > 0);
}
public async Task<bool> UpdateOutline(EpisodeMetadata metadata, string outline)
{
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync();
return await dbContext.Connection.ExecuteAsync(
"UPDATE EpisodeMetadata SET Outline = @Outline WHERE Id = @MetadataId",
new { Outline = outline, MetadataId = metadata.Id }).Map(result => result > 0);
}
public async Task<bool> UpdatePlot(EpisodeMetadata metadata, string plot)
{
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync();
return await dbContext.Connection.ExecuteAsync(
"UPDATE EpisodeMetadata SET Plot = @Plot WHERE Id = @MetadataId",
new { Plot = plot, MetadataId = metadata.Id }).Map(result => result > 0);
}
public async Task<List<Episode>> GetShowItems(int showId)

4
ErsatzTV/ErsatzTV.csproj

@ -55,8 +55,8 @@ @@ -55,8 +55,8 @@
<ItemGroup>
<PackageReference Include="Bugsnag.AspNet.Core" Version="3.1.0" />
<PackageReference Include="FluentValidation" Version="11.0.3" />
<PackageReference Include="FluentValidation.AspNetCore" Version="11.0.3" />
<PackageReference Include="FluentValidation" Version="11.1.0" />
<PackageReference Include="FluentValidation.AspNetCore" Version="11.1.0" />
<PackageReference Include="HtmlSanitizer" Version="7.1.512" />
<PackageReference Include="LanguageExt.Core" Version="4.2.7" />
<PackageReference Include="Markdig" Version="0.30.2" />

Loading…
Cancel
Save