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