Browse Source

update plex show title (#1677)

* update plex show title when changed in plex

* fix test build
pull/1678/head
Jason Dove 1 year ago committed by GitHub
parent
commit
6e7880386b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 3
      CHANGELOG.md
  2. 3
      ErsatzTV.Core.Tests/Fakes/FakeTelevisionRepository.cs
  3. 1
      ErsatzTV.Core/Interfaces/Repositories/ITelevisionRepository.cs
  4. 8
      ErsatzTV.Infrastructure/Data/Repositories/TelevisionRepository.cs
  5. 8
      ErsatzTV.Scanner/Core/Metadata/MediaServerTelevisionLibraryScanner.cs
  6. 10
      ErsatzTV.Scanner/Core/Plex/PlexTelevisionLibraryScanner.cs

3
CHANGELOG.md

@ -25,6 +25,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). @@ -25,6 +25,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Fix more wildcard search phrase queries (when wildcards are used in quotes, like `title:"law & order*"`)
- Fix bug where channels would unnecessarily wait on each other
- e.g. in-progress streams would delay responding with a playlist when new streams were starting
- Update Plex show title in ETV when changed in Plex
- Reindex seasons and episodes when show is updated from media server
- This is needed to keep `show_*` tags accurate in the search index (e.g., `show_title`, `show_studio`)
## [0.8.6-beta] - 2024-04-03
### Added

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

@ -86,4 +86,7 @@ public class FakeTelevisionRepository : ITelevisionRepository @@ -86,4 +86,7 @@ public class FakeTelevisionRepository : ITelevisionRepository
public Task<bool> UpdatePlot(EpisodeMetadata metadata, string plot) => throw new NotSupportedException();
public Task<bool> UpdateYear(ShowMetadata metadata, int? year) => throw new NotSupportedException();
public Task<bool> UpdateTitles(ShowMetadata metadata, string title, string sortTitle) =>
throw new NotSupportedException();
}

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

@ -48,4 +48,5 @@ public interface ITelevisionRepository @@ -48,4 +48,5 @@ public interface ITelevisionRepository
Task<bool> UpdateOutline(EpisodeMetadata metadata, string outline);
Task<bool> UpdatePlot(EpisodeMetadata metadata, string plot);
Task<bool> UpdateYear(ShowMetadata metadata, int? year);
Task<bool> UpdateTitles(ShowMetadata metadata, string title, string sortTitle);
}

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

@ -534,6 +534,14 @@ public class TelevisionRepository : ITelevisionRepository @@ -534,6 +534,14 @@ public class TelevisionRepository : ITelevisionRepository
new { Year = year, MetadataId = metadata.Id }).Map(result => result > 0);
}
public async Task<bool> UpdateTitles(ShowMetadata metadata, string title, string sortTitle)
{
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync();
return await dbContext.Connection.ExecuteAsync(
"UPDATE ShowMetadata SET Title = @Title, SortTitle = @SortTitle WHERE Id = @MetadataId",
new { Title = title, SortTitle = sortTitle, MetadataId = metadata.Id }).Map(result => result > 0);
}
public async Task<List<Episode>> GetShowItems(int showId)
{
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync();

8
ErsatzTV.Scanner/Core/Metadata/MediaServerTelevisionLibraryScanner.cs

@ -168,6 +168,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters, @@ -168,6 +168,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters,
library,
getLocalPath,
result.Item,
result.IsUpdated,
connectionParameters,
GetSeasonLibraryItems(library, connectionParameters, result.Item),
deepScan,
@ -290,6 +291,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters, @@ -290,6 +291,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters,
TLibrary library,
Func<TEpisode, string> getLocalPath,
TShow show,
bool showIsUpdated,
TConnectionParameters connectionParameters,
IAsyncEnumerable<TSeason> seasonEntries,
bool deepScan,
@ -352,6 +354,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters, @@ -352,6 +354,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters,
library,
getLocalPath,
show,
showIsUpdated,
result.Item,
connectionParameters,
GetEpisodeLibraryItems(library, connectionParameters, show, result.Item),
@ -373,7 +376,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters, @@ -373,7 +376,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters,
result.Item.Show = show;
if (result.IsAdded || result.IsUpdated)
if (result.IsAdded || result.IsUpdated || showIsUpdated)
{
await _mediator.Publish(
new ScannerProgressUpdate(
@ -402,6 +405,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters, @@ -402,6 +405,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters,
TLibrary library,
Func<TEpisode, string> getLocalPath,
TShow show,
bool showIsUpdated,
TSeason season,
TConnectionParameters connectionParameters,
IAsyncEnumerable<TEpisode> episodeEntries,
@ -523,7 +527,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters, @@ -523,7 +527,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters,
}
}
if (result.IsAdded || result.IsUpdated)
if (result.IsAdded || result.IsUpdated || showIsUpdated)
{
await _mediator.Publish(
new ScannerProgressUpdate(

10
ErsatzTV.Scanner/Core/Plex/PlexTelevisionLibraryScanner.cs

@ -433,6 +433,16 @@ public class PlexTelevisionLibraryScanner : @@ -433,6 +433,16 @@ public class PlexTelevisionLibraryScanner :
result.IsUpdated = true;
}
}
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;
}
}
bool poster = await UpdateArtworkIfNeeded(existingMetadata, fullMetadata, ArtworkKind.Poster);
bool fanArt = await UpdateArtworkIfNeeded(existingMetadata, fullMetadata, ArtworkKind.FanArt);

Loading…
Cancel
Save