updates to file scanner
This commit is contained in:
@@ -56,11 +56,14 @@ public class FileScannerService(MediaService mediaService, IConfiguration config
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var files = Directory.GetFiles(path, "*", SearchOption.AllDirectories);
|
var files = Directory.GetFiles(path, "*", SearchOption.AllDirectories);
|
||||||
|
var filesRelative = files.Select(f => Path.GetRelativePath(path, f)).ToArray();
|
||||||
var existingFiles = await mediaService.GetExistingFilePathsAsync(cancellationToken);
|
var existingFiles = await mediaService.GetExistingFilePathsAsync(cancellationToken);
|
||||||
var upToDateFiles = existingFiles.Where(e => e.Value == MediaEntry.CUR_VERSION)
|
var upToDateFiles = existingFiles.Where(e => e.Value == MediaEntry.CUR_VERSION)
|
||||||
.Select(e => e.Key)
|
.Select(e => e.Key)
|
||||||
.ToFrozenSet();
|
.ToFrozenSet();
|
||||||
var filesToProcess = files.Where(f => !upToDateFiles.Contains(Path.GetRelativePath(path, f))).ToArray();
|
var entriesToDelete = existingFiles.Keys.Except(filesRelative).ToArray();
|
||||||
|
await mediaService.DeleteEntriesBulkAsync(files, cancellationToken);
|
||||||
|
var filesToProcess = filesRelative.Where(f => !upToDateFiles.Contains(f)).ToArray();
|
||||||
var total = 0;
|
var total = 0;
|
||||||
var prog = 0;
|
var prog = 0;
|
||||||
foreach (var chunk in filesToProcess.Chunk(50))
|
foreach (var chunk in filesToProcess.Chunk(50))
|
||||||
@@ -76,6 +79,7 @@ public class FileScannerService(MediaService mediaService, IConfiguration config
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private async Task<int> ScanFileChunkAsync(string path, IEnumerable<string> files, FrozenDictionary<string, int> existingFiles, CancellationToken cancellationToken = default)
|
private async Task<int> ScanFileChunkAsync(string path, IEnumerable<string> files, FrozenDictionary<string, int> existingFiles, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var entries = new List<MediaEntry>();
|
var entries = new List<MediaEntry>();
|
||||||
|
|||||||
@@ -29,6 +29,17 @@ public class MediaService(IMongoDatabase db)
|
|||||||
await _entries.InsertManyAsync(entries, cancellationToken: cancellationToken);
|
await _entries.InsertManyAsync(entries, cancellationToken: cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="files">Relative paths of files to delete</param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task DeleteEntriesBulkAsync(IEnumerable<string> files, CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
await _entries.DeleteManyAsync(e => files.Contains(e.Filepath), cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<List<MediaEntry>> GetEntriesInRangeAsync(MediaType mediaType, DateTime from, DateTime to, CancellationToken cancellationToken = default)
|
public async Task<List<MediaEntry>> GetEntriesInRangeAsync(MediaType mediaType, DateTime from, DateTime to, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var filter = Builders<MediaEntry>.Filter
|
var filter = Builders<MediaEntry>.Filter
|
||||||
|
|||||||
Reference in New Issue
Block a user