mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-07-09 03:04:19 -04:00
Merge pull request #56 from Kareadita/feature/scan-parallelize
Parallelize ScanLibrary
This commit is contained in:
commit
5ee27b5e7b
@ -6,6 +6,7 @@ using System.Globalization;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using API.Entities;
|
using API.Entities;
|
||||||
using API.Entities.Enums;
|
using API.Entities.Enums;
|
||||||
@ -147,7 +148,6 @@ namespace API.Services
|
|||||||
|
|
||||||
private void UpdateLibrary(Library library, Dictionary<string, List<ParserInfo>> parsedSeries)
|
private void UpdateLibrary(Library library, Dictionary<string, List<ParserInfo>> parsedSeries)
|
||||||
{
|
{
|
||||||
// TODO: Split this into multiple threads
|
|
||||||
// First, remove any series that are not in parsedSeries list
|
// First, remove any series that are not in parsedSeries list
|
||||||
var foundSeries = parsedSeries.Select(s => Parser.Parser.Normalize(s.Key)).ToList();
|
var foundSeries = parsedSeries.Select(s => Parser.Parser.Normalize(s.Key)).ToList();
|
||||||
var missingSeries = library.Series.Where(existingSeries =>
|
var missingSeries = library.Series.Where(existingSeries =>
|
||||||
@ -180,16 +180,19 @@ namespace API.Services
|
|||||||
}
|
}
|
||||||
existingSeries.NormalizedName = Parser.Parser.Normalize(info.Key);
|
existingSeries.NormalizedName = Parser.Parser.Normalize(info.Key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int total = 0;
|
||||||
// Now, we only have to deal with series that exist on disk. Let's recalculate the volumes for each series
|
// Now, we only have to deal with series that exist on disk. Let's recalculate the volumes for each series
|
||||||
foreach (var existingSeries in library.Series)
|
var librarySeries = library.Series.ToList();
|
||||||
|
Parallel.ForEach<Series, int>(librarySeries, () => 0, (series, state, subtotal) =>
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Processing series {SeriesName}", existingSeries.Name);
|
_logger.LogInformation("Processing series {SeriesName}", series.Name);
|
||||||
UpdateVolumes(existingSeries, parsedSeries[existingSeries.Name].ToArray());
|
UpdateVolumes(series, parsedSeries[series.Name].ToArray());
|
||||||
existingSeries.Pages = existingSeries.Volumes.Sum(v => v.Pages);
|
series.Pages = series.Volumes.Sum(v => v.Pages);
|
||||||
_metadataService.UpdateMetadata(existingSeries, _forceUpdate);
|
_metadataService.UpdateMetadata(series, _forceUpdate);
|
||||||
}
|
return 0;
|
||||||
|
}, finalResult => Interlocked.Add(ref total, finalResult));
|
||||||
|
|
||||||
foreach (var folder in library.Folders) folder.LastScanned = DateTime.Now;
|
foreach (var folder in library.Folders) folder.LastScanned = DateTime.Now;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user