diff --git a/AZKiServer/Services/FileScannerService.cs b/AZKiServer/Services/FileScannerService.cs index 5a64285..15fed74 100644 --- a/AZKiServer/Services/FileScannerService.cs +++ b/AZKiServer/Services/FileScannerService.cs @@ -56,11 +56,14 @@ public class FileScannerService(MediaService mediaService, IConfiguration config try { var files = Directory.GetFiles(path, "*", SearchOption.AllDirectories); + var filesRelative = files.Select(f => Path.GetRelativePath(path, f)).ToArray(); var existingFiles = await mediaService.GetExistingFilePathsAsync(cancellationToken); var upToDateFiles = existingFiles.Where(e => e.Value == MediaEntry.CUR_VERSION) .Select(e => e.Key) .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 prog = 0; foreach (var chunk in filesToProcess.Chunk(50)) @@ -76,6 +79,7 @@ public class FileScannerService(MediaService mediaService, IConfiguration config } } + private async Task ScanFileChunkAsync(string path, IEnumerable files, FrozenDictionary existingFiles, CancellationToken cancellationToken = default) { var entries = new List(); diff --git a/AZKiServer/Services/MediaService.cs b/AZKiServer/Services/MediaService.cs index 87221ff..d60c7da 100644 --- a/AZKiServer/Services/MediaService.cs +++ b/AZKiServer/Services/MediaService.cs @@ -29,6 +29,17 @@ public class MediaService(IMongoDatabase db) await _entries.InsertManyAsync(entries, cancellationToken: cancellationToken); } + /// + /// + /// + /// Relative paths of files to delete + /// + /// + public async Task DeleteEntriesBulkAsync(IEnumerable files, CancellationToken cancellationToken = default) + { + await _entries.DeleteManyAsync(e => files.Contains(e.Filepath), cancellationToken); + } + public async Task> GetEntriesInRangeAsync(MediaType mediaType, DateTime from, DateTime to, CancellationToken cancellationToken = default) { var filter = Builders.Filter