* move plex artwork removal to its own repository
* clean up old local movie artwork
* clien up old music video/artist artwork
* clean up old remote stream artwork
* clean up old song artwork
* clean up old show artwork; properly update season artwork
@ -25,7 +25,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
@@ -25,7 +25,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Fix 500 errors when serving XMLTV due to concurrent file reads and writes
- Fix playback of AC3 audio when targeting stereo output and input layout changes mid-stream
- Use other video artwork in XMLTV template
- Remove artwork from other videos when artwork has been removed from disk
- Properly update (add or remove) artwork for all local media libraries when files have changed
@ -309,14 +309,13 @@ public class MetadataRepository(IDbContextFactory<TvContext> dbContextFactory) :
@@ -309,14 +309,13 @@ public class MetadataRepository(IDbContextFactory<TvContext> dbContextFactory) :
@ -175,15 +175,6 @@ public class OtherVideoRepository : IOtherVideoRepository
@@ -175,15 +175,6 @@ public class OtherVideoRepository : IOtherVideoRepository
@ -271,17 +271,18 @@ public class TelevisionRepository : ITelevisionRepository
@@ -271,17 +271,18 @@ public class TelevisionRepository : ITelevisionRepository
try
{
metadata.DateAdded=DateTime.UtcNow;
metadata.Genres??=newList<Genre>();
metadata.Tags??=newList<Tag>();
metadata.Studios??=newList<Studio>();
metadata.Actors??=newList<Actor>();
metadata.Guids??=newList<MetadataGuid>();
metadata.Genres??=[];
metadata.Tags??=[];
metadata.Studios??=[];
metadata.Actors??=[];
metadata.Guids??=[];
metadata.Artwork??=[];
varshow=newShow
{
LibraryPathId=libraryPathId,
ShowMetadata=newList<ShowMetadata>{metadata},
Seasons=newList<Season>(),
TraktListItems=newList<TraktListItem>()
ShowMetadata=[metadata],
Seasons=[],
TraktListItems=[]
};
awaitdbContext.Shows.AddAsync(show);
@ -670,17 +671,18 @@ public class TelevisionRepository : ITelevisionRepository
@@ -670,17 +671,18 @@ public class TelevisionRepository : ITelevisionRepository
@ -335,7 +335,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@@ -335,7 +335,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@ -562,7 +563,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@@ -562,7 +563,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@ -949,7 +950,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@@ -949,7 +950,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@ -1316,7 +1317,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@@ -1316,7 +1317,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@ -1355,7 +1357,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@@ -1355,7 +1357,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@ -1407,8 +1410,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@@ -1407,8 +1410,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@ -27,6 +27,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
@@ -27,6 +27,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
@ -67,6 +68,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
@@ -67,6 +68,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
_localSubtitlesProvider=localSubtitlesProvider;
_localChaptersProvider=localChaptersProvider;
_localMetadataProvider=localMetadataProvider;
_metadataRepository=metadataRepository;
_libraryRepository=libraryRepository;
_mediaItemRepository=mediaItemRepository;
_client=client;
@ -312,13 +314,20 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
@@ -312,13 +314,20 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
@ -23,6 +23,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@@ -23,6 +23,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@ -66,6 +67,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@@ -66,6 +67,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
_localMetadataProvider=localMetadataProvider;
_localSubtitlesProvider=localSubtitlesProvider;
_localChaptersProvider=localChaptersProvider;
_metadataRepository=metadataRepository;
_artistRepository=artistRepository;
_musicVideoRepository=musicVideoRepository;
_libraryRepository=libraryRepository;
@ -279,11 +281,19 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@@ -279,11 +281,19 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@ -425,7 +435,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@@ -425,7 +435,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
_logger.LogDebug("Refreshing {Attribute} for {Path}","Fallback Metadata",path);
@ -497,13 +507,20 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@@ -497,13 +507,20 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@ -22,6 +22,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@@ -22,6 +22,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@ -64,6 +65,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@@ -64,6 +65,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
_localMetadataProvider=localMetadataProvider;
_localSubtitlesProvider=localSubtitlesProvider;
_localChaptersProvider=localChaptersProvider;
_metadataRepository=metadataRepository;
_otherVideoRepository=otherVideoRepository;
_libraryRepository=libraryRepository;
_mediaItemRepository=mediaItemRepository;
@ -359,7 +361,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@@ -359,7 +361,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@ -369,7 +371,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@@ -369,7 +371,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@ -28,6 +28,7 @@ public class RemoteStreamFolderScanner : LocalFolderScanner, IRemoteStreamFolder
@@ -28,6 +28,7 @@ public class RemoteStreamFolderScanner : LocalFolderScanner, IRemoteStreamFolder
@ -61,6 +62,7 @@ public class RemoteStreamFolderScanner : LocalFolderScanner, IRemoteStreamFolder
@@ -61,6 +62,7 @@ public class RemoteStreamFolderScanner : LocalFolderScanner, IRemoteStreamFolder
_fileSystem=fileSystem;
_localFileSystem=localFileSystem;
_localMetadataProvider=localMetadataProvider;
_metadataRepository=metadataRepository;
_remoteStreamRepository=remoteStreamRepository;
_libraryRepository=libraryRepository;
_mediaItemRepository=mediaItemRepository;
@ -386,13 +388,20 @@ public class RemoteStreamFolderScanner : LocalFolderScanner, IRemoteStreamFolder
@@ -386,13 +388,20 @@ public class RemoteStreamFolderScanner : LocalFolderScanner, IRemoteStreamFolder
@ -25,6 +25,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@@ -25,6 +25,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@ -58,6 +59,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@@ -58,6 +59,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
_fileSystem=fileSystem;
_localFileSystem=localFileSystem;
_localMetadataProvider=localMetadataProvider;
_metadataRepository=metadataRepository;
_songRepository=songRepository;
_libraryRepository=libraryRepository;
_mediaItemRepository=mediaItemRepository;
@ -263,7 +265,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@@ -263,7 +265,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
if(shouldUpdate)
{
song.SongMetadata??=newList<SongMetadata>();
song.SongMetadata??=[];
_logger.LogDebug("Refreshing {Attribute} for {Path}","Metadata",path);
@ -302,16 +304,20 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@@ -302,16 +304,20 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@ -320,6 +326,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@@ -320,6 +326,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
None,
cancellationToken);
}
}
returnresult;
}
@ -345,12 +352,12 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@@ -345,12 +352,12 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@ -358,5 +365,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@@ -358,5 +365,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@ -248,17 +248,15 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -248,17 +248,15 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
maybeParentFolder,
seasonFolder);
// skip folder if etag matches
if(knownFolder.Etag==etag)
// cache etag match for later checking
// we still need to scan the season folder in case season artwork has changed
_logger.LogDebug("Previously trashed items are now present in folder {Folder}",seasonFolder);
}
else
{
// etag matches and no trashed items are now present, continue to next folder
continue;
etagMatch=false;
}
}
@ -280,6 +278,12 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -280,6 +278,12 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
foreach(SeasonseasoninmaybeSeason.RightToSeq())
{
// skip scanning episodes when season folder etag matches
@ -410,7 +414,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -410,7 +414,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@ -419,8 +423,9 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -419,8 +423,9 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
SeasonId=season.Id,
Season=season,
DateAdded=DateTime.UtcNow,
Guids=newList<MetadataGuid>(),
Tags=newList<Tag>()
Guids=[],
Tags=[],
Artwork=[]
};
season.SeasonMetadata.Add(metadata);
@ -492,13 +497,20 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -492,13 +497,20 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@ -514,14 +526,21 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -514,14 +526,21 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@ -534,11 +553,11 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -534,11 +553,11 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@ -548,6 +567,11 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -548,6 +567,11 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan