updates to file scanner

This commit is contained in:
2026-03-10 17:49:18 -04:00
parent 78651ca58d
commit 951e285f81
2 changed files with 16 additions and 1 deletions

View File

@@ -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>();

View File

@@ -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