* start moving local scans to separate process * send progress updates to main process * move scanners and tests * simplify dependencies; sync search index * commit search index more often when scanning * support forced scan and cancellation * use scanner process for plex libraries * update changelog * update dockerfiles * fix search index for local folder scanning * rework plex scanners * rework scanner handlers * emby works again * sync jellyfin * cleanup * update build * update changelog * remove scanner dependency in pr and artifacts workflows * fix mac sed syntax * fix pr build
55 lines
1.9 KiB
C#
55 lines
1.9 KiB
C#
using System.Threading.Channels;
|
|
using ErsatzTV.Application.Libraries;
|
|
using ErsatzTV.Core;
|
|
using ErsatzTV.FFmpeg.Runtime;
|
|
|
|
namespace ErsatzTV.Application.MediaSources;
|
|
|
|
public class CallLocalLibraryScannerHandler : CallLibraryScannerHandler,
|
|
IRequestHandler<ForceScanLocalLibrary, Either<BaseError, string>>,
|
|
IRequestHandler<ScanLocalLibraryIfNeeded, Either<BaseError, string>>
|
|
{
|
|
public CallLocalLibraryScannerHandler(
|
|
ChannelWriter<ISearchIndexBackgroundServiceRequest> channel,
|
|
IMediator mediator,
|
|
IRuntimeInfo runtimeInfo)
|
|
: base(channel, mediator, runtimeInfo)
|
|
{
|
|
}
|
|
|
|
Task<Either<BaseError, string>> IRequestHandler<ForceScanLocalLibrary, Either<BaseError, string>>.Handle(
|
|
ForceScanLocalLibrary request,
|
|
CancellationToken cancellationToken) => Handle(request, cancellationToken);
|
|
|
|
Task<Either<BaseError, string>> IRequestHandler<ScanLocalLibraryIfNeeded, Either<BaseError, string>>.Handle(
|
|
ScanLocalLibraryIfNeeded request,
|
|
CancellationToken cancellationToken) => Handle(request, cancellationToken);
|
|
|
|
private async Task<Either<BaseError, string>> Handle(IScanLocalLibrary request, CancellationToken cancellationToken)
|
|
{
|
|
Validation<BaseError, string> validation = Validate();
|
|
return await validation.Match(
|
|
scanner => PerformScan(scanner, request, cancellationToken),
|
|
error => Task.FromResult<Either<BaseError, string>>(error.Join()));
|
|
}
|
|
|
|
private async Task<Either<BaseError, string>> PerformScan(
|
|
string scanner,
|
|
IScanLocalLibrary request,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
var arguments = new List<string>
|
|
{
|
|
"--local",
|
|
request.LibraryId.ToString()
|
|
};
|
|
|
|
if (request.ForceScan)
|
|
{
|
|
arguments.Add("--force");
|
|
}
|
|
|
|
return await base.PerformScan(scanner, arguments, cancellationToken);
|
|
}
|
|
}
|