@ -84,6 +84,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
@@ -84,6 +84,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Add disabled text color and `(D)` and `(H)` labels for disabled and hidden channels in channel list
- Graphics engine: fix subtitle path escaping and font loading
- Fix corrupt output (green artifacts) when decoding certain 10-bit content using AMD Polaris GPUs
- Work around sequential schedule validation limit (1000/hr by Newtonsoft.Json.Schema library)
- Playout builds now use JsonSchema.Net library which has no validation limit
- Validation tool in the UI still uses Newtonsoft.Json.Schema (with 1000/hr limit) as the error output is easier to understand
### Changed
- Classic schedules: `Refresh` classic playouts from playout list; do not `Reset` them
@ -44,7 +44,7 @@ public class DeleteChannelHandler : IRequestHandler<DeleteChannel, Either<BaseEr
@@ -44,7 +44,7 @@ public class DeleteChannelHandler : IRequestHandler<DeleteChannel, Either<BaseEr
@ -26,6 +27,7 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
@@ -26,6 +27,7 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
@ -33,12 +35,14 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
@@ -33,12 +35,14 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
@ -886,7 +890,7 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
@@ -886,7 +890,7 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
"Unable to generate movie XMLTV fragment without template file {File}; please restart ErsatzTV",
@ -905,7 +909,7 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
@@ -905,7 +909,7 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
"Unable to generate episode XMLTV fragment without template file {File}; please restart ErsatzTV",
@ -924,7 +928,7 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
@@ -924,7 +928,7 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
"Unable to generate music video XMLTV fragment without template file {File}; please restart ErsatzTV",
@ -943,7 +947,7 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
@@ -943,7 +947,7 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
"Unable to generate song XMLTV fragment without template file {File}; please restart ErsatzTV",
@ -962,7 +966,7 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
@@ -962,7 +966,7 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
"Unable to generate other video XMLTV fragment without template file {File}; please restart ErsatzTV",
@ -1077,7 +1081,7 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
@@ -1077,7 +1081,7 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
@ -26,11 +28,13 @@ public class RefreshChannelListHandler : IRequestHandler<RefreshChannelList>
@@ -26,11 +28,13 @@ public class RefreshChannelListHandler : IRequestHandler<RefreshChannelList>
@ -44,13 +48,13 @@ public class RefreshChannelListHandler : IRequestHandler<RefreshChannelList>
@@ -44,13 +48,13 @@ public class RefreshChannelListHandler : IRequestHandler<RefreshChannelList>
@ -15,14 +16,17 @@ public partial class GetChannelGuideHandler : IRequestHandler<GetChannelGuide, E
@@ -15,14 +16,17 @@ public partial class GetChannelGuideHandler : IRequestHandler<GetChannelGuide, E
@ -39,7 +43,7 @@ public partial class GetChannelGuideHandler : IRequestHandler<GetChannelGuide, E
@@ -39,7 +43,7 @@ public partial class GetChannelGuideHandler : IRequestHandler<GetChannelGuide, E
@ -44,15 +32,15 @@ public class DeletePlayoutHandler : IRequestHandler<DeletePlayout, Either<BaseEr
@@ -44,15 +32,15 @@ public class DeletePlayoutHandler : IRequestHandler<DeletePlayout, Either<BaseEr
@ -40,6 +42,7 @@ public class StartFFmpegSessionHandler : IRequestHandler<StartFFmpegSession, Eit
@@ -40,6 +42,7 @@ public class StartFFmpegSessionHandler : IRequestHandler<StartFFmpegSession, Eit
IServiceScopeFactoryserviceScopeFactory,
IMediatormediator,
IClientclient,
IFileSystemfileSystem,
ILocalFileSystemlocalFileSystem,
ILogger<StartFFmpegSessionHandler>logger,
ILogger<HlsSessionWorker>sessionWorkerLogger,
@ -54,6 +57,7 @@ public class StartFFmpegSessionHandler : IRequestHandler<StartFFmpegSession, Eit
@@ -54,6 +57,7 @@ public class StartFFmpegSessionHandler : IRequestHandler<StartFFmpegSession, Eit
_serviceScopeFactory=serviceScopeFactory;
_mediator=mediator;
_client=client;
_fileSystem=fileSystem;
_localFileSystem=localFileSystem;
_logger=logger;
_sessionWorkerLogger=sessionWorkerLogger;
@ -129,6 +133,7 @@ public class StartFFmpegSessionHandler : IRequestHandler<StartFFmpegSession, Eit
@@ -129,6 +133,7 @@ public class StartFFmpegSessionHandler : IRequestHandler<StartFFmpegSession, Eit
@ -31,6 +32,7 @@ public class GetPlayoutItemProcessByChannelNumberHandler : FFmpegProcessHandler<
@@ -31,6 +32,7 @@ public class GetPlayoutItemProcessByChannelNumberHandler : FFmpegProcessHandler<
@ -47,6 +49,7 @@ public class GetPlayoutItemProcessByChannelNumberHandler : FFmpegProcessHandler<
@@ -47,6 +49,7 @@ public class GetPlayoutItemProcessByChannelNumberHandler : FFmpegProcessHandler<
@ -64,6 +67,7 @@ public class GetPlayoutItemProcessByChannelNumberHandler : FFmpegProcessHandler<
@@ -64,6 +67,7 @@ public class GetPlayoutItemProcessByChannelNumberHandler : FFmpegProcessHandler<
@ -775,7 +779,7 @@ public class GetPlayoutItemProcessByChannelNumberHandler : FFmpegProcessHandler<
@@ -775,7 +779,7 @@ public class GetPlayoutItemProcessByChannelNumberHandler : FFmpegProcessHandler<
@ -23,12 +23,12 @@ public class ExtractEmbeddedSubtitlesHandler : ExtractEmbeddedSubtitlesHandlerBa
@@ -23,12 +23,12 @@ public class ExtractEmbeddedSubtitlesHandler : ExtractEmbeddedSubtitlesHandlerBa
@ -133,7 +133,7 @@ public abstract class ExtractEmbeddedSubtitlesHandlerBase(ILocalFileSystem local
@@ -133,7 +133,7 @@ public abstract class ExtractEmbeddedSubtitlesHandlerBase(ILocalFileSystem local
@ -193,7 +193,7 @@ public abstract class ExtractEmbeddedSubtitlesHandlerBase(ILocalFileSystem local
@@ -193,7 +193,7 @@ public abstract class ExtractEmbeddedSubtitlesHandlerBase(ILocalFileSystem local
@ -212,7 +212,7 @@ public abstract class ExtractEmbeddedSubtitlesHandlerBase(ILocalFileSystem local
@@ -212,7 +212,7 @@ public abstract class ExtractEmbeddedSubtitlesHandlerBase(ILocalFileSystem local
// ffmpeg seems to return exit code 1 in all cases when dumping an attachment
// so ignore it and check success a different way
if(localFileSystem.FileExists(fullOutputPath))
if(fileSystem.File.Exists(fullOutputPath))
{
logger.LogDebug("Successfully extracted font {Font}",fontStream.FileName);
}
@ -300,7 +300,7 @@ public abstract class ExtractEmbeddedSubtitlesHandlerBase(ILocalFileSystem local
@@ -300,7 +300,7 @@ public abstract class ExtractEmbeddedSubtitlesHandlerBase(ILocalFileSystem local
@ -588,7 +588,6 @@ public class ContinuePlayoutTests : PlayoutBuilderTestBase
@@ -588,7 +588,6 @@ public class ContinuePlayoutTests : PlayoutBuilderTestBase
@ -596,7 +595,7 @@ public class ContinuePlayoutTests : PlayoutBuilderTestBase
@@ -596,7 +595,7 @@ public class ContinuePlayoutTests : PlayoutBuilderTestBase
televisionRepo,
artistRepo,
factory,
localFileSystem,
newMockFileSystem(),
rerunHelper,
Logger);
@ -714,7 +713,6 @@ public class ContinuePlayoutTests : PlayoutBuilderTestBase
@@ -714,7 +713,6 @@ public class ContinuePlayoutTests : PlayoutBuilderTestBase
@ -722,7 +720,7 @@ public class ContinuePlayoutTests : PlayoutBuilderTestBase
@@ -722,7 +720,7 @@ public class ContinuePlayoutTests : PlayoutBuilderTestBase
televisionRepo,
artistRepo,
factory,
localFileSystem,
newMockFileSystem(),
rerunHelper,
Logger);
@ -842,7 +840,6 @@ public class ContinuePlayoutTests : PlayoutBuilderTestBase
@@ -842,7 +840,6 @@ public class ContinuePlayoutTests : PlayoutBuilderTestBase
@ -850,7 +847,7 @@ public class ContinuePlayoutTests : PlayoutBuilderTestBase
@@ -850,7 +847,7 @@ public class ContinuePlayoutTests : PlayoutBuilderTestBase
@ -101,7 +101,6 @@ public class RefreshPlayoutTests : PlayoutBuilderTestBase
@@ -101,7 +101,6 @@ public class RefreshPlayoutTests : PlayoutBuilderTestBase
@ -109,7 +108,7 @@ public class RefreshPlayoutTests : PlayoutBuilderTestBase
@@ -109,7 +108,7 @@ public class RefreshPlayoutTests : PlayoutBuilderTestBase
@ -25,7 +25,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
@@ -25,7 +25,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
logger.LogWarning("YAML stream selector file {File} does not exist; aborting.",channel.StreamSelector);
returnStreamSelectorResult.None;
@ -327,7 +327,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
@@ -327,7 +327,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
@ -25,14 +26,14 @@ public class FFmpegStreamSelector : IFFmpegStreamSelector
@@ -25,14 +26,14 @@ public class FFmpegStreamSelector : IFFmpegStreamSelector
@ -318,7 +319,7 @@ public class FFmpegStreamSelector : IFFmpegStreamSelector
@@ -318,7 +319,7 @@ public class FFmpegStreamSelector : IFFmpegStreamSelector
"js");
_logger.LogDebug("Checking for JS Script at {Path}",jsScriptPath);
if(!_localFileSystem.FileExists(jsScriptPath))
if(!_fileSystem.File.Exists(jsScriptPath))
{
_logger.LogDebug("Unable to locate episode audio stream selector script; falling back to built-in logic");
returnOption<MediaStream>.None;
@ -358,7 +359,7 @@ public class FFmpegStreamSelector : IFFmpegStreamSelector
@@ -358,7 +359,7 @@ public class FFmpegStreamSelector : IFFmpegStreamSelector
"js");
_logger.LogDebug("Checking for JS Script at {Path}",jsScriptPath);
if(!_localFileSystem.FileExists(jsScriptPath))
if(!_fileSystem.File.Exists(jsScriptPath))
{
_logger.LogDebug(
"Unable to locate movie audio stream selector script; falling back to built-in logic");
@ -1087,7 +1087,10 @@ public class MediaCollectionRepository : IMediaCollectionRepository
@@ -1087,7 +1087,10 @@ public class MediaCollectionRepository : IMediaCollectionRepository
@ -65,9 +65,9 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext
@@ -65,9 +65,9 @@ public class TemplateDataRepository(ILocalFileSystem localFileSystem, IDbContext
@ -25,15 +26,18 @@ public partial class LocalStatisticsProvider : ILocalStatisticsProvider
@@ -25,15 +26,18 @@ public partial class LocalStatisticsProvider : ILocalStatisticsProvider
@ -146,7 +150,7 @@ public partial class LocalStatisticsProvider : ILocalStatisticsProvider
@@ -146,7 +150,7 @@ public partial class LocalStatisticsProvider : ILocalStatisticsProvider
@ -47,30 +49,27 @@ public class SequentialScheduleValidator(ILogger<SequentialScheduleValidator> lo
@@ -47,30 +49,27 @@ public class SequentialScheduleValidator(ILogger<SequentialScheduleValidator> lo
@ -80,13 +79,24 @@ public class SequentialScheduleValidator(ILogger<SequentialScheduleValidator> lo
@@ -80,13 +79,24 @@ public class SequentialScheduleValidator(ILogger<SequentialScheduleValidator> lo
@ -28,7 +29,7 @@ public class ExternalJsonPlayoutItemProvider : IExternalJsonPlayoutItemProvider
@@ -28,7 +29,7 @@ public class ExternalJsonPlayoutItemProvider : IExternalJsonPlayoutItemProvider
@ -36,7 +37,7 @@ public class ExternalJsonPlayoutItemProvider : IExternalJsonPlayoutItemProvider
@@ -36,7 +37,7 @@ public class ExternalJsonPlayoutItemProvider : IExternalJsonPlayoutItemProvider
@ -62,7 +63,7 @@ public class ExternalJsonPlayoutItemProvider : IExternalJsonPlayoutItemProvider
@@ -62,7 +63,7 @@ public class ExternalJsonPlayoutItemProvider : IExternalJsonPlayoutItemProvider
@ -86,7 +87,7 @@ public class ExternalJsonPlayoutItemProvider : IExternalJsonPlayoutItemProvider
@@ -86,7 +87,7 @@ public class ExternalJsonPlayoutItemProvider : IExternalJsonPlayoutItemProvider
@ -139,7 +140,7 @@ public class ExternalJsonPlayoutItemProvider : IExternalJsonPlayoutItemProvider
@@ -139,7 +140,7 @@ public class ExternalJsonPlayoutItemProvider : IExternalJsonPlayoutItemProvider
@ -30,13 +30,13 @@ public class EmbyTelevisionLibraryScanner : MediaServerTelevisionLibraryScanner<
@@ -30,13 +30,13 @@ public class EmbyTelevisionLibraryScanner : MediaServerTelevisionLibraryScanner<
@ -31,13 +31,13 @@ public class JellyfinTelevisionLibraryScanner : MediaServerTelevisionLibraryScan
@@ -31,13 +31,13 @@ public class JellyfinTelevisionLibraryScanner : MediaServerTelevisionLibraryScan
@ -22,6 +23,7 @@ public class ImageFolderScanner : LocalFolderScanner, IImageFolderScanner
@@ -22,6 +23,7 @@ public class ImageFolderScanner : LocalFolderScanner, IImageFolderScanner
@ -29,6 +31,7 @@ public class ImageFolderScanner : LocalFolderScanner, IImageFolderScanner
@@ -29,6 +31,7 @@ public class ImageFolderScanner : LocalFolderScanner, IImageFolderScanner
publicImageFolderScanner(
IScannerProxyscannerProxy,
IFileSystemfileSystem,
ILocalFileSystemlocalFileSystem,
ILocalStatisticsProviderlocalStatisticsProvider,
ILocalMetadataProviderlocalMetadataProvider,
@ -41,7 +44,7 @@ public class ImageFolderScanner : LocalFolderScanner, IImageFolderScanner
@@ -41,7 +44,7 @@ public class ImageFolderScanner : LocalFolderScanner, IImageFolderScanner
ITempFilePooltempFilePool,
IClientclient,
ILogger<ImageFolderScanner>logger):base(
localFileSystem,
fileSystem,
localStatisticsProvider,
metadataRepository,
mediaItemRepository,
@ -52,6 +55,7 @@ public class ImageFolderScanner : LocalFolderScanner, IImageFolderScanner
@@ -52,6 +55,7 @@ public class ImageFolderScanner : LocalFolderScanner, IImageFolderScanner
logger)
{
_scannerProxy=scannerProxy;
_fileSystem=fileSystem;
_localFileSystem=localFileSystem;
_localMetadataProvider=localMetadataProvider;
_imageRepository=imageRepository;
@ -226,7 +230,7 @@ public class ImageFolderScanner : LocalFolderScanner, IImageFolderScanner
@@ -226,7 +230,7 @@ public class ImageFolderScanner : LocalFolderScanner, IImageFolderScanner
@ -22,6 +23,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@@ -22,6 +23,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@ -49,6 +51,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@@ -49,6 +51,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@ -70,6 +73,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@@ -70,6 +73,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@ -86,7 +90,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@@ -86,7 +90,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@ -106,7 +110,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@@ -106,7 +110,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
@ -21,19 +21,19 @@ public abstract class MediaServerMovieLibraryScanner<TConnectionParameters, TLib
@@ -21,19 +21,19 @@ public abstract class MediaServerMovieLibraryScanner<TConnectionParameters, TLib
@ -167,7 +167,7 @@ public abstract class MediaServerMovieLibraryScanner<TConnectionParameters, TLib
@@ -167,7 +167,7 @@ public abstract class MediaServerMovieLibraryScanner<TConnectionParameters, TLib
@ -270,7 +270,7 @@ public abstract class MediaServerMovieLibraryScanner<TConnectionParameters, TLib
@@ -270,7 +270,7 @@ public abstract class MediaServerMovieLibraryScanner<TConnectionParameters, TLib
existingEtag==MediaServerEtag(incoming))
{
// skip scanning unavailable/file not found items that are unchanged and still don't exist locally
@ -279,7 +279,7 @@ public abstract class MediaServerMovieLibraryScanner<TConnectionParameters, TLib
@@ -279,7 +279,7 @@ public abstract class MediaServerMovieLibraryScanner<TConnectionParameters, TLib
@ -21,19 +21,19 @@ public abstract class MediaServerOtherVideoLibraryScanner<TConnectionParameters,
@@ -21,19 +21,19 @@ public abstract class MediaServerOtherVideoLibraryScanner<TConnectionParameters,
@ -174,7 +174,7 @@ public abstract class MediaServerOtherVideoLibraryScanner<TConnectionParameters,
@@ -174,7 +174,7 @@ public abstract class MediaServerOtherVideoLibraryScanner<TConnectionParameters,
@ -277,7 +277,7 @@ public abstract class MediaServerOtherVideoLibraryScanner<TConnectionParameters,
@@ -277,7 +277,7 @@ public abstract class MediaServerOtherVideoLibraryScanner<TConnectionParameters,
existingEtag==MediaServerEtag(incoming))
{
// skip scanning unavailable/file not found items that are unchanged and still don't exist locally
@ -286,7 +286,7 @@ public abstract class MediaServerOtherVideoLibraryScanner<TConnectionParameters,
@@ -286,7 +286,7 @@ public abstract class MediaServerOtherVideoLibraryScanner<TConnectionParameters,
@ -23,19 +23,19 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters,
@@ -23,19 +23,19 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters,
@ -469,7 +469,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters,
@@ -469,7 +469,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters,
@ -541,7 +541,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters,
@@ -541,7 +541,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters,
existingEtag==MediaServerEtag(incoming))
{
// skip scanning unavailable/file not found items that are unchanged and still don't exist locally
@ -550,7 +550,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters,
@@ -550,7 +550,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters,
{
// item is unchanged, but file does not exist
// don't scan, but mark as unavailable
if(!_localFileSystem.FileExists(localPath))
if(!_fileSystem.File.Exists(localPath))
{
if(ServerSupportsRemoteStreaming)
{
@ -741,7 +741,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters,
@@ -741,7 +741,7 @@ public abstract class MediaServerTelevisionLibraryScanner<TConnectionParameters,
@ -23,6 +24,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
@@ -23,6 +24,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
@ -32,6 +34,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
@@ -32,6 +34,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
publicMovieFolderScanner(
IScannerProxyscannerProxy,
IFileSystemfileSystem,
ILocalFileSystemlocalFileSystem,
IMovieRepositorymovieRepository,
ILocalStatisticsProviderlocalStatisticsProvider,
@ -47,7 +50,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
@@ -47,7 +50,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
IClientclient,
ILogger<MovieFolderScanner>logger)
:base(
localFileSystem,
fileSystem,
localStatisticsProvider,
metadataRepository,
mediaItemRepository,
@ -58,6 +61,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
@@ -58,6 +61,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
logger)
{
_scannerProxy=scannerProxy;
_fileSystem=fileSystem;
_localFileSystem=localFileSystem;
_movieRepository=movieRepository;
_localSubtitlesProvider=localSubtitlesProvider;
@ -209,7 +213,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
@@ -209,7 +213,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
@ -362,7 +366,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
@@ -362,7 +366,7 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
@ -380,12 +384,12 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
@@ -380,12 +384,12 @@ public class MovieFolderScanner : LocalFolderScanner, IMovieFolderScanner
@ -23,6 +24,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@@ -23,6 +24,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@ -32,6 +34,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@@ -32,6 +34,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
publicMusicVideoFolderScanner(
IScannerProxyscannerProxy,
IFileSystemfileSystem,
ILocalFileSystemlocalFileSystem,
ILocalStatisticsProviderlocalStatisticsProvider,
ILocalMetadataProviderlocalMetadataProvider,
@ -47,7 +50,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@@ -47,7 +50,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
ITempFilePooltempFilePool,
IClientclient,
ILogger<MusicVideoFolderScanner>logger):base(
localFileSystem,
fileSystem,
localStatisticsProvider,
metadataRepository,
mediaItemRepository,
@ -58,6 +61,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@@ -58,6 +61,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
logger)
{
_scannerProxy=scannerProxy;
_fileSystem=fileSystem;
_localFileSystem=localFileSystem;
_localMetadataProvider=localMetadataProvider;
_localSubtitlesProvider=localSubtitlesProvider;
@ -173,7 +177,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@@ -173,7 +177,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@ -459,7 +463,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@@ -459,7 +463,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@ -473,7 +477,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@@ -473,7 +477,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
returnImageFileExtensions
.Map(ext=>$"{segment}.{ext}")
.Map(f=>Path.Combine(artistFolder,f))
.Filter(s=>_localFileSystem.FileExists(s))
.Filter(s=>_fileSystem.File.Exists(s))
.HeadOrNone();
}
@ -481,7 +485,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@@ -481,7 +485,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@ -554,7 +558,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@@ -554,7 +558,7 @@ public class MusicVideoFolderScanner : LocalFolderScanner, IMusicVideoFolderScan
@ -22,6 +23,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@@ -22,6 +23,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@ -31,6 +33,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@@ -31,6 +33,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
publicOtherVideoFolderScanner(
IScannerProxyscannerProxy,
IFileSystemfileSystem,
ILocalFileSystemlocalFileSystem,
ILocalStatisticsProviderlocalStatisticsProvider,
ILocalMetadataProviderlocalMetadataProvider,
@ -45,7 +48,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@@ -45,7 +48,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
ITempFilePooltempFilePool,
IClientclient,
ILogger<OtherVideoFolderScanner>logger):base(
localFileSystem,
fileSystem,
localStatisticsProvider,
metadataRepository,
mediaItemRepository,
@ -56,6 +59,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@@ -56,6 +59,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
logger)
{
_scannerProxy=scannerProxy;
_fileSystem=fileSystem;
_localFileSystem=localFileSystem;
_localMetadataProvider=localMetadataProvider;
_localSubtitlesProvider=localSubtitlesProvider;
@ -220,7 +224,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@@ -220,7 +224,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@ -274,7 +278,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@@ -274,7 +278,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@ -376,7 +380,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@@ -376,7 +380,7 @@ public class OtherVideoFolderScanner : LocalFolderScanner, IOtherVideoFolderScan
@ -24,6 +25,7 @@ public class RemoteStreamFolderScanner : LocalFolderScanner, IRemoteStreamFolder
@@ -24,6 +25,7 @@ public class RemoteStreamFolderScanner : LocalFolderScanner, IRemoteStreamFolder
@ -32,6 +34,7 @@ public class RemoteStreamFolderScanner : LocalFolderScanner, IRemoteStreamFolder
@@ -32,6 +34,7 @@ public class RemoteStreamFolderScanner : LocalFolderScanner, IRemoteStreamFolder
publicRemoteStreamFolderScanner(
IScannerProxyscannerProxy,
IFileSystemfileSystem,
ILocalFileSystemlocalFileSystem,
ILocalStatisticsProviderlocalStatisticsProvider,
ILocalMetadataProviderlocalMetadataProvider,
@ -44,7 +47,7 @@ public class RemoteStreamFolderScanner : LocalFolderScanner, IRemoteStreamFolder
@@ -44,7 +47,7 @@ public class RemoteStreamFolderScanner : LocalFolderScanner, IRemoteStreamFolder
ITempFilePooltempFilePool,
IClientclient,
ILogger<RemoteStreamFolderScanner>logger):base(
localFileSystem,
fileSystem,
localStatisticsProvider,
metadataRepository,
mediaItemRepository,
@ -55,6 +58,7 @@ public class RemoteStreamFolderScanner : LocalFolderScanner, IRemoteStreamFolder
@@ -55,6 +58,7 @@ public class RemoteStreamFolderScanner : LocalFolderScanner, IRemoteStreamFolder
logger)
{
_scannerProxy=scannerProxy;
_fileSystem=fileSystem;
_localFileSystem=localFileSystem;
_localMetadataProvider=localMetadataProvider;
_remoteStreamRepository=remoteStreamRepository;
@ -213,7 +217,7 @@ public class RemoteStreamFolderScanner : LocalFolderScanner, IRemoteStreamFolder
@@ -213,7 +217,7 @@ public class RemoteStreamFolderScanner : LocalFolderScanner, IRemoteStreamFolder
@ -21,6 +22,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@@ -21,6 +22,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@ -29,6 +31,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@@ -29,6 +31,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
publicSongFolderScanner(
IScannerProxyscannerProxy,
IFileSystemfileSystem,
ILocalFileSystemlocalFileSystem,
ILocalStatisticsProviderlocalStatisticsProvider,
ILocalMetadataProviderlocalMetadataProvider,
@ -41,7 +44,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@@ -41,7 +44,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
ITempFilePooltempFilePool,
IClientclient,
ILogger<SongFolderScanner>logger):base(
localFileSystem,
fileSystem,
localStatisticsProvider,
metadataRepository,
mediaItemRepository,
@ -52,6 +55,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@@ -52,6 +55,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
logger)
{
_scannerProxy=scannerProxy;
_fileSystem=fileSystem;
_localFileSystem=localFileSystem;
_localMetadataProvider=localMetadataProvider;
_songRepository=songRepository;
@ -201,7 +205,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@@ -201,7 +205,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@ -336,7 +340,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@@ -336,7 +340,7 @@ public class SongFolderScanner : LocalFolderScanner, ISongFolderScanner
@ -23,6 +24,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -23,6 +24,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@ -33,6 +35,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -33,6 +35,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
publicTelevisionFolderScanner(
IScannerProxyscannerProxy,
IFileSystemfileSystem,
ILocalFileSystemlocalFileSystem,
ITelevisionRepositorytelevisionRepository,
ILocalStatisticsProviderlocalStatisticsProvider,
@ -48,7 +51,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -48,7 +51,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@ -59,6 +62,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -59,6 +62,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
logger)
{
_scannerProxy=scannerProxy;
_fileSystem=fileSystem;
_localFileSystem=localFileSystem;
_televisionRepository=televisionRepository;
_localMetadataProvider=localMetadataProvider;
@ -169,7 +173,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -169,7 +173,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
_logger.LogInformation("Flagging missing episode at {Path}",path);
@ -584,12 +588,12 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -584,12 +588,12 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@ -606,7 +610,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -606,7 +610,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@ -615,7 +619,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -615,7 +619,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@ -626,7 +630,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan
@@ -626,7 +630,7 @@ public class TelevisionFolderScanner : LocalFolderScanner, ITelevisionFolderScan