mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-12-11 15:45:05 -05:00
Potential scanner fix (#4242)
This commit is contained in:
parent
c4fed09e48
commit
5dd010b1b8
@ -21,6 +21,7 @@ using API.Services.Tasks;
|
|||||||
using API.Services.Tasks.Metadata;
|
using API.Services.Tasks.Metadata;
|
||||||
using API.Services.Tasks.Scanner;
|
using API.Services.Tasks.Scanner;
|
||||||
using API.SignalR;
|
using API.SignalR;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using NSubstitute;
|
using NSubstitute;
|
||||||
using Xunit.Abstractions;
|
using Xunit.Abstractions;
|
||||||
@ -75,6 +76,7 @@ public class ScannerHelper
|
|||||||
Substitute.For<IImageService>(), ds, Substitute.For<ILogger<ReadingItemService>>());
|
Substitute.For<IImageService>(), ds, Substitute.For<ILogger<ReadingItemService>>());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var processSeries = new ProcessSeries(_unitOfWork, Substitute.For<ILogger<ProcessSeries>>(),
|
var processSeries = new ProcessSeries(_unitOfWork, Substitute.For<ILogger<ProcessSeries>>(),
|
||||||
Substitute.For<IEventHub>(),
|
Substitute.For<IEventHub>(),
|
||||||
ds, Substitute.For<ICacheHelper>(), readingItemService, new FileService(fs),
|
ds, Substitute.For<ICacheHelper>(), readingItemService, new FileService(fs),
|
||||||
@ -83,10 +85,20 @@ public class ScannerHelper
|
|||||||
Substitute.For<IReadingListService>(),
|
Substitute.For<IReadingListService>(),
|
||||||
Substitute.For<IExternalMetadataService>());
|
Substitute.For<IExternalMetadataService>());
|
||||||
|
|
||||||
|
var serviceProvider = Substitute.For<IServiceProvider>();
|
||||||
|
serviceProvider.GetService(typeof(IUnitOfWork)).Returns(_unitOfWork);
|
||||||
|
serviceProvider.GetService(typeof(IProcessSeries)).Returns(processSeries);
|
||||||
|
|
||||||
|
var scope = Substitute.For<IServiceScope>();
|
||||||
|
scope.ServiceProvider.Returns(serviceProvider);
|
||||||
|
|
||||||
|
var scopeFactory = Substitute.For<IServiceScopeFactory>();
|
||||||
|
scopeFactory.CreateScope().Returns(scope);
|
||||||
|
|
||||||
var scanner = new ScannerService(_unitOfWork, Substitute.For<ILogger<ScannerService>>(),
|
var scanner = new ScannerService(_unitOfWork, Substitute.For<ILogger<ScannerService>>(),
|
||||||
Substitute.For<IMetadataService>(),
|
Substitute.For<IMetadataService>(),
|
||||||
Substitute.For<ICacheService>(), Substitute.For<IEventHub>(), ds,
|
Substitute.For<ICacheService>(), Substitute.For<IEventHub>(), ds,
|
||||||
readingItemService, processSeries, Substitute.For<IWordCountAnalyzerService>());
|
readingItemService, scopeFactory, Substitute.For<IWordCountAnalyzerService>());
|
||||||
return scanner;
|
return scanner;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -19,6 +19,7 @@ using API.Services.Tasks.Scanner;
|
|||||||
using API.Services.Tasks.Scanner.Parser;
|
using API.Services.Tasks.Scanner.Parser;
|
||||||
using API.SignalR;
|
using API.SignalR;
|
||||||
using Hangfire;
|
using Hangfire;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace API.Services.Tasks;
|
namespace API.Services.Tasks;
|
||||||
@ -86,13 +87,13 @@ public class ScannerService : IScannerService
|
|||||||
private readonly IEventHub _eventHub;
|
private readonly IEventHub _eventHub;
|
||||||
private readonly IDirectoryService _directoryService;
|
private readonly IDirectoryService _directoryService;
|
||||||
private readonly IReadingItemService _readingItemService;
|
private readonly IReadingItemService _readingItemService;
|
||||||
private readonly IProcessSeries _processSeries;
|
|
||||||
private readonly IWordCountAnalyzerService _wordCountAnalyzerService;
|
private readonly IWordCountAnalyzerService _wordCountAnalyzerService;
|
||||||
|
private readonly IServiceScopeFactory _scopeFactory;
|
||||||
|
|
||||||
public ScannerService(IUnitOfWork unitOfWork, ILogger<ScannerService> logger,
|
public ScannerService(IUnitOfWork unitOfWork, ILogger<ScannerService> logger,
|
||||||
IMetadataService metadataService, ICacheService cacheService, IEventHub eventHub,
|
IMetadataService metadataService, ICacheService cacheService, IEventHub eventHub,
|
||||||
IDirectoryService directoryService, IReadingItemService readingItemService,
|
IDirectoryService directoryService, IReadingItemService readingItemService,
|
||||||
IProcessSeries processSeries, IWordCountAnalyzerService wordCountAnalyzerService)
|
IServiceScopeFactory scopeFactory, IWordCountAnalyzerService wordCountAnalyzerService)
|
||||||
{
|
{
|
||||||
_unitOfWork = unitOfWork;
|
_unitOfWork = unitOfWork;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
@ -101,7 +102,7 @@ public class ScannerService : IScannerService
|
|||||||
_eventHub = eventHub;
|
_eventHub = eventHub;
|
||||||
_directoryService = directoryService;
|
_directoryService = directoryService;
|
||||||
_readingItemService = readingItemService;
|
_readingItemService = readingItemService;
|
||||||
_processSeries = processSeries;
|
_scopeFactory = scopeFactory;
|
||||||
_wordCountAnalyzerService = wordCountAnalyzerService;
|
_wordCountAnalyzerService = wordCountAnalyzerService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -318,7 +319,16 @@ public class ScannerService : IScannerService
|
|||||||
// Process Series
|
// Process Series
|
||||||
var seriesProcessStopWatch = Stopwatch.StartNew();
|
var seriesProcessStopWatch = Stopwatch.StartNew();
|
||||||
var settings = await _unitOfWork.SettingsRepository.GetMetadataSettingDto();
|
var settings = await _unitOfWork.SettingsRepository.GetMetadataSettingDto();
|
||||||
await _processSeries.ProcessSeriesAsync(settings, parsedSeries[pSeries], library, seriesLeftToProcess, bypassFolderOptimizationChecks);
|
|
||||||
|
using var scope = _scopeFactory.CreateScope();
|
||||||
|
var unitOfWork = scope.ServiceProvider.GetRequiredService<IUnitOfWork>();
|
||||||
|
var processSeries = scope.ServiceProvider.GetRequiredService<IProcessSeries>();
|
||||||
|
|
||||||
|
// Library needs to be returned from the used UnitOfWork
|
||||||
|
library = (await unitOfWork.LibraryRepository.GetLibraryForIdAsync(library.Id, LibraryIncludes.Folders | LibraryIncludes.FileTypes | LibraryIncludes.ExcludePatterns))!;
|
||||||
|
|
||||||
|
await processSeries.ProcessSeriesAsync(settings, parsedSeries[pSeries], library, seriesLeftToProcess, bypassFolderOptimizationChecks);
|
||||||
|
|
||||||
_logger.LogTrace("[TIME] Kavita took {Time} ms to process {SeriesName}", seriesProcessStopWatch.ElapsedMilliseconds, parsedSeries[pSeries][0].Series);
|
_logger.LogTrace("[TIME] Kavita took {Time} ms to process {SeriesName}", seriesProcessStopWatch.ElapsedMilliseconds, parsedSeries[pSeries][0].Series);
|
||||||
seriesLeftToProcess--;
|
seriesLeftToProcess--;
|
||||||
}
|
}
|
||||||
@ -672,7 +682,16 @@ public class ScannerService : IScannerService
|
|||||||
{
|
{
|
||||||
totalFiles += pSeries.Value.Count;
|
totalFiles += pSeries.Value.Count;
|
||||||
var seriesProcessStopWatch = Stopwatch.StartNew();
|
var seriesProcessStopWatch = Stopwatch.StartNew();
|
||||||
await _processSeries.ProcessSeriesAsync(settings, pSeries.Value, library, seriesLeftToProcess, forceUpdate);
|
|
||||||
|
using var scope = _scopeFactory.CreateScope();
|
||||||
|
var unitOfWork = scope.ServiceProvider.GetRequiredService<IUnitOfWork>();
|
||||||
|
var processSeries = scope.ServiceProvider.GetRequiredService<IProcessSeries>();
|
||||||
|
|
||||||
|
// Library needs to be returned from the used UnitOfWork
|
||||||
|
library = (await unitOfWork.LibraryRepository.GetLibraryForIdAsync(library.Id, LibraryIncludes.Folders | LibraryIncludes.FileTypes | LibraryIncludes.ExcludePatterns))!;
|
||||||
|
|
||||||
|
await processSeries.ProcessSeriesAsync(settings, pSeries.Value, library, seriesLeftToProcess, forceUpdate);
|
||||||
|
|
||||||
_logger.LogTrace("[TIME] Kavita took {Time} ms to process {SeriesName}", seriesProcessStopWatch.ElapsedMilliseconds, pSeries.Value[0].Series);
|
_logger.LogTrace("[TIME] Kavita took {Time} ms to process {SeriesName}", seriesProcessStopWatch.ElapsedMilliseconds, pSeries.Value[0].Series);
|
||||||
seriesLeftToProcess--;
|
seriesLeftToProcess--;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user