Browse Source

clien up old music video/artist artwork

pull/2778/head
Jason Dove 7 months ago
parent
commit
37a405e4e4
No known key found for this signature in database
  1. 12
      ErsatzTV.Core/Metadata/FallbackMetadataProvider.cs
  2. 8
      ErsatzTV.Scanner/Core/Metadata/LocalMetadataProvider.cs
  3. 2
      ErsatzTV.Scanner/Core/Metadata/MovieFolderScanner.cs
  4. 35
      ErsatzTV.Scanner/Core/Metadata/MusicVideoFolderScanner.cs
  5. 2
      ErsatzTV.Scanner/Core/Metadata/OtherVideoFolderScanner.cs

12
ErsatzTV.Core/Metadata/FallbackMetadataProvider.cs

@ -57,7 +57,11 @@ public partial class FallbackMetadataProvider(IClient client) : IFallbackMetadat
{ {
string fileName = Path.GetFileName(artistFolder); string fileName = Path.GetFileName(artistFolder);
return new ArtistMetadata return new ArtistMetadata
{ MetadataKind = MetadataKind.Fallback, Title = fileName ?? artistFolder }; {
MetadataKind = MetadataKind.Fallback,
Title = fileName ?? artistFolder,
Artwork = []
};
} }
public List<EpisodeMetadata> GetFallbackMetadata(Episode episode) public List<EpisodeMetadata> GetFallbackMetadata(Episode episode)
@ -112,7 +116,8 @@ public partial class FallbackMetadataProvider(IClient client) : IFallbackMetadat
var metadata = new MusicVideoMetadata var metadata = new MusicVideoMetadata
{ {
MetadataKind = MetadataKind.Fallback, MetadataKind = MetadataKind.Fallback,
Title = fileName ?? path Title = fileName ?? path,
Artwork = []
}; };
return GetMusicVideoMetadata(fileName, metadata); return GetMusicVideoMetadata(fileName, metadata);
@ -148,7 +153,8 @@ public partial class FallbackMetadataProvider(IClient client) : IFallbackMetadat
{ {
MetadataKind = MetadataKind.Fallback, MetadataKind = MetadataKind.Fallback,
Title = fileName ?? path, Title = fileName ?? path,
Song = song Song = song,
Artwork = []
}; };
return GetSongMetadata(path, metadata); return GetSongMetadata(path, metadata);

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

@ -335,7 +335,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider
Genres = nfo.Genres.Map(g => new Genre { Name = g }).ToList(), Genres = nfo.Genres.Map(g => new Genre { Name = g }).ToList(),
Tags = nfo.Tags.Map(t => new Tag { Name = t }).ToList(), Tags = nfo.Tags.Map(t => new Tag { Name = t }).ToList(),
Studios = nfo.Studios.Map(s => new Studio { Name = s }).ToList(), Studios = nfo.Studios.Map(s => new Studio { Name = s }).ToList(),
Directors = nfo.Directors.Map(s => new Director { Name = s }).ToList() Directors = nfo.Directors.Map(s => new Director { Name = s }).ToList(),
Artwork = []
}; };
} }
@ -949,7 +950,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
? SortTitle.GetSortTitle(metadata.Title) ? SortTitle.GetSortTitle(metadata.Title)
: metadata.SortTitle; : metadata.SortTitle;
metadata.ArtistId = artist.Id; metadata.ArtistId = artist.Id;
artist.ArtistMetadata = new List<ArtistMetadata> { metadata }; artist.ArtistMetadata = [metadata];
return await _metadataRepository.Add(metadata); return await _metadataRepository.Add(metadata);
} }
@ -1355,7 +1356,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider
Biography = nfo.Biography, Biography = nfo.Biography,
Genres = nfo.Genres.Map(g => new Genre { Name = g }).ToList(), Genres = nfo.Genres.Map(g => new Genre { Name = g }).ToList(),
Styles = nfo.Styles.Map(s => new Style { Name = s }).ToList(), Styles = nfo.Styles.Map(s => new Style { Name = s }).ToList(),
Moods = nfo.Moods.Map(m => new Mood { Name = m }).ToList() Moods = nfo.Moods.Map(m => new Mood { Name = m }).ToList(),
Artwork = []
}; };
} }

2
ErsatzTV.Scanner/Core/Metadata/MovieFolderScanner.cs

@ -314,7 +314,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
try try
{ {
Movie movie = result.Item; Movie movie = result.Item;
foreach (var metadata in movie.MovieMetadata.HeadOrNone()) foreach (MovieMetadata metadata in movie.MovieMetadata.HeadOrNone())
{ {
Option<string> maybeArtwork = LocateArtwork(movie, artworkKind); Option<string> maybeArtwork = LocateArtwork(movie, artworkKind);
foreach (string posterFile in maybeArtwork) foreach (string posterFile in maybeArtwork)

35
ErsatzTV.Scanner/Core/Metadata/MusicVideoFolderScanner.cs

@ -23,6 +23,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
private readonly IClient _client; private readonly IClient _client;
private readonly ILibraryRepository _libraryRepository; private readonly ILibraryRepository _libraryRepository;
private readonly ILocalChaptersProvider _localChaptersProvider; private readonly ILocalChaptersProvider _localChaptersProvider;
private readonly IMetadataRepository _metadataRepository;
private readonly IScannerProxy _scannerProxy; private readonly IScannerProxy _scannerProxy;
private readonly IFileSystem _fileSystem; private readonly IFileSystem _fileSystem;
private readonly ILocalFileSystem _localFileSystem; private readonly ILocalFileSystem _localFileSystem;
@ -66,6 +67,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
_localMetadataProvider = localMetadataProvider; _localMetadataProvider = localMetadataProvider;
_localSubtitlesProvider = localSubtitlesProvider; _localSubtitlesProvider = localSubtitlesProvider;
_localChaptersProvider = localChaptersProvider; _localChaptersProvider = localChaptersProvider;
_metadataRepository = metadataRepository;
_artistRepository = artistRepository; _artistRepository = artistRepository;
_musicVideoRepository = musicVideoRepository; _musicVideoRepository = musicVideoRepository;
_libraryRepository = libraryRepository; _libraryRepository = libraryRepository;
@ -279,11 +281,19 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
try try
{ {
Artist artist = result.Item; Artist artist = result.Item;
await LocateArtworkForArtist(artistFolder, artworkKind).IfSomeAsync(async artworkFile => foreach (ArtistMetadata metadata in artist.ArtistMetadata.HeadOrNone())
{ {
ArtistMetadata metadata = artist.ArtistMetadata.Head(); Option<string> maybeArtwork = LocateArtworkForArtist(artistFolder, artworkKind);
await RefreshArtwork(artworkFile, metadata, artworkKind, None, None, cancellationToken); foreach (string artworkFile in maybeArtwork)
}); {
await RefreshArtwork(artworkFile, metadata, artworkKind, None, None, cancellationToken);
}
if (maybeArtwork.IsNone && metadata.Artwork.Any(a => a.ArtworkKind == artworkKind))
{
await _metadataRepository.RemoveArtworkWithKind(metadata, artworkKind);
}
}
return result; return result;
} }
@ -425,7 +435,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
{ {
if (!Optional(musicVideo.MusicVideoMetadata).Flatten().Any()) if (!Optional(musicVideo.MusicVideoMetadata).Flatten().Any())
{ {
musicVideo.MusicVideoMetadata ??= new List<MusicVideoMetadata>(); musicVideo.MusicVideoMetadata ??= [];
string path = musicVideo.MediaVersions.Head().MediaFiles.Head().Path; string path = musicVideo.MediaVersions.Head().MediaFiles.Head().Path;
_logger.LogDebug("Refreshing {Attribute} for {Path}", "Fallback Metadata", path); _logger.LogDebug("Refreshing {Attribute} for {Path}", "Fallback Metadata", path);
@ -497,11 +507,18 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
{ {
MusicVideo musicVideo = result.Item; MusicVideo musicVideo = result.Item;
Option<string> maybeThumbnail = LocateThumbnail(musicVideo); foreach (MusicVideoMetadata metadata in musicVideo.MusicVideoMetadata.HeadOrNone())
foreach (string thumbnailFile in maybeThumbnail)
{ {
MusicVideoMetadata metadata = musicVideo.MusicVideoMetadata.Head(); Option<string> maybeThumbnail = LocateThumbnail(musicVideo);
await RefreshArtwork(thumbnailFile, metadata, ArtworkKind.Thumbnail, None, None, cancellationToken); foreach (string thumbnailFile in maybeThumbnail)
{
await RefreshArtwork(thumbnailFile, metadata, ArtworkKind.Thumbnail, None, None, cancellationToken);
}
if (maybeThumbnail.IsNone && metadata.Artwork.Any(a => a.ArtworkKind is ArtworkKind.Thumbnail))
{
await _metadataRepository.RemoveArtworkWithKind(metadata, ArtworkKind.Thumbnail);
}
} }
return result; return result;

2
ErsatzTV.Scanner/Core/Metadata/OtherVideoFolderScanner.cs

@ -361,7 +361,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
{ {
OtherVideo otherVideo = result.Item; OtherVideo otherVideo = result.Item;
foreach (var metadata in otherVideo.OtherVideoMetadata.HeadOrNone()) foreach (OtherVideoMetadata metadata in otherVideo.OtherVideoMetadata.HeadOrNone())
{ {
Option<string> maybeThumbnail = LocateThumbnail(otherVideo); Option<string> maybeThumbnail = LocateThumbnail(otherVideo);
foreach (string thumbnailFile in maybeThumbnail) foreach (string thumbnailFile in maybeThumbnail)

Loading…
Cancel
Save