From 9de85b649bdb756060e95c3a74dd25a2a831f3ed Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Wed, 28 Jul 2021 12:25:05 -0600 Subject: [PATCH] Fixed race condition. --- FileLiberator/DownloadDecryptBook.cs | 2 ++ FileManager/AudibleFileStorage.cs | 5 +++++ FileManager/BackgroundFileSystem.cs | 29 +++++++++++++++++++++++++--- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/FileLiberator/DownloadDecryptBook.cs b/FileLiberator/DownloadDecryptBook.cs index 36655286..57473342 100644 --- a/FileLiberator/DownloadDecryptBook.cs +++ b/FileLiberator/DownloadDecryptBook.cs @@ -170,6 +170,8 @@ namespace FileLiberator File.Move(f.FullName, dest); } + AudibleFileStorage.Audio.Refresh(); + return destinationDir; } diff --git a/FileManager/AudibleFileStorage.cs b/FileManager/AudibleFileStorage.cs index d2e5c733..49de50a6 100644 --- a/FileManager/AudibleFileStorage.cs +++ b/FileManager/AudibleFileStorage.cs @@ -57,6 +57,11 @@ namespace FileManager extAggr = extensions_noDots.Aggregate((a, b) => $"{a}|{b}"); } + public void Refresh() + { + BookDirectoryFiles.RefreshFiles(); + } + /// /// Example for full books: /// Search recursively in _books directory. Full book exists if either are true diff --git a/FileManager/BackgroundFileSystem.cs b/FileManager/BackgroundFileSystem.cs index 1b828999..91e47916 100644 --- a/FileManager/BackgroundFileSystem.cs +++ b/FileManager/BackgroundFileSystem.cs @@ -28,6 +28,17 @@ namespace FileManager } } + public void RefreshFiles() + { + if (fsCache is null) return; + + lock (fsCache) + { + fsCache.Clear(); + fsCache.AddRange(Directory.EnumerateFiles(RootDirectory, SearchPattern, SearchOption)); + } + } + public void Init(string rootDirectory, string searchPattern, SearchOption searchOptions) { RootDirectory = rootDirectory; @@ -57,6 +68,19 @@ namespace FileManager backgroundScanner.Start(); } + private void AddUniqueFiles(IEnumerable newFiles) + { + foreach (var file in newFiles) + { + AddUniqueFile(file); + } + } + private void AddUniqueFile(string newFile) + { + if (!fsCache.Contains(newFile)) + fsCache.Add(newFile); + } + private void FileSystemWatcher_Error(object sender, ErrorEventArgs e) { Init(RootDirectory, SearchPattern, SearchOption); @@ -107,11 +131,10 @@ namespace FileManager private void AddPath(string path) { if (File.GetAttributes(path).HasFlag(FileAttributes.Directory)) - fsCache.AddRange(Directory.EnumerateFiles(path, SearchPattern, SearchOption)); + AddUniqueFiles(Directory.EnumerateFiles(path, SearchPattern, SearchOption)); else - fsCache.Add(path); + AddUniqueFile(path); } - #endregion } }