From 7a509fb608b0452b153e8a9f26a4d230d81b614e Mon Sep 17 00:00:00 2001 From: Stanley Dimant Date: Tue, 5 Jul 2022 19:54:57 +0200 Subject: [PATCH] fixes cache calculation and wrong filetransfer cast --- MareSynchronos/Managers/FileCacheManager.cs | 13 +++++++------ MareSynchronos/MareSynchronos.csproj | 2 +- MareSynchronos/WebAPI/Utils/FileTransfer.cs | 7 ++++++- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/MareSynchronos/Managers/FileCacheManager.cs b/MareSynchronos/Managers/FileCacheManager.cs index 15d7a77..6ffadd6 100644 --- a/MareSynchronos/Managers/FileCacheManager.cs +++ b/MareSynchronos/Managers/FileCacheManager.cs @@ -47,13 +47,14 @@ namespace MareSynchronos.Managers public string WatchedPenumbraDirectory => (_penumbraDirWatcher?.EnableRaisingEvents ?? false) ? _penumbraDirWatcher!.Path : "Not watched"; - public FileCache Create(string file) + public FileCache Create(string file, CancellationToken token) { FileInfo fileInfo = new(file); while (IsFileLocked(fileInfo)) { Thread.Sleep(1000); Logger.Debug("Waiting for file release " + fileInfo.FullName); + token.ThrowIfCancellationRequested(); } var sha1Hash = Crypto.GetFileHash(fileInfo.FullName); return new FileCache() @@ -144,11 +145,11 @@ namespace MareSynchronos.Managers { FileCacheSize = Directory.EnumerateFiles(_pluginConfiguration.CacheFolder).Sum(f => new FileInfo(f).Length); - if (FileCacheSize <= _pluginConfiguration.MaxLocalCacheInGiB * 1024 * 1024 * 1024) return; + if (FileCacheSize < (long)_pluginConfiguration.MaxLocalCacheInGiB * 1024 * 1024 * 1024) return; var allFiles = Directory.EnumerateFiles(_pluginConfiguration.CacheFolder) .Select(f => new FileInfo(f)).OrderBy(f => f.LastAccessTime).ToList(); - while (FileCacheSize > _pluginConfiguration.MaxLocalCacheInGiB * 1024 * 1024 * 1024) + while (FileCacheSize > (long)_pluginConfiguration.MaxLocalCacheInGiB * 1024 * 1024 * 1024) { var oldestFile = allFiles.First(); FileCacheSize -= oldestFile.Length; @@ -192,7 +193,7 @@ namespace MareSynchronos.Managers else { PluginLog.Verbose("Changed :" + item); - var fileCache = Create(item); + var fileCache = Create(item, _rescanTaskCancellationTokenSource.Token); db.RemoveRange(db.FileCaches.Where(f => f.Hash == fileCache.Hash)); await db.AddAsync(fileCache, _rescanTaskCancellationTokenSource.Token); } @@ -252,7 +253,7 @@ namespace MareSynchronos.Managers } FileInfo fileInfo = new(cache.Filepath); if (fileInfo.LastWriteTimeUtc.Ticks == long.Parse(cache.LastModifiedDate)) return; - fileCachesToAdd.Add(Create(cache.Filepath)); + fileCachesToAdd.Add(Create(cache.Filepath, ct)); fileCachesToDelete.Add(cache); } @@ -271,7 +272,7 @@ namespace MareSynchronos.Managers }, file => { - fileCachesToAdd.Add(Create(file.Key)); + fileCachesToAdd.Add(Create(file.Key, ct)); var files = CurrentFileProgress; Interlocked.Increment(ref files); diff --git a/MareSynchronos/MareSynchronos.csproj b/MareSynchronos/MareSynchronos.csproj index fc8a257..37f10b3 100644 --- a/MareSynchronos/MareSynchronos.csproj +++ b/MareSynchronos/MareSynchronos.csproj @@ -3,7 +3,7 @@ - 0.0.4.0 + 0.0.5.0 https://github.com/Penumbra-Sync/client diff --git a/MareSynchronos/WebAPI/Utils/FileTransfer.cs b/MareSynchronos/WebAPI/Utils/FileTransfer.cs index e7941a1..9013164 100644 --- a/MareSynchronos/WebAPI/Utils/FileTransfer.cs +++ b/MareSynchronos/WebAPI/Utils/FileTransfer.cs @@ -17,8 +17,13 @@ public abstract class FileTransfer public string Hash => TransferDto.Hash; public bool IsInTransfer => Transferred != Total && Transferred > 0; public bool IsTransferred => Transferred == Total; - public virtual bool CanBeTransferred => !TransferDto.IsForbidden && (((DownloadFileDto)TransferDto)?.FileExists ?? true); + public virtual bool CanBeTransferred => !TransferDto.IsForbidden && (TransferDto is not DownloadFileDto dto || dto.FileExists); public bool IsForbidden => TransferDto.IsForbidden; + + public override string ToString() + { + return Hash; + } } public class UploadFileTransfer : FileTransfer