From 807d778b6b659c4ad450d6a0a44c7623a2ab14e0 Mon Sep 17 00:00:00 2001 From: Stanley Dimant Date: Sun, 25 Sep 2022 16:39:48 +0200 Subject: [PATCH] fix legacy migration not working properly with people using Penumbra mod folder with a backslash at the end --- MareSynchronos/FileCacheDB/FileDbManager.cs | 23 +++++++++++++++---- .../FileCacheDB/PeriodicFileScanner.cs | 2 +- MareSynchronos/MareSynchronos.csproj | 2 +- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/MareSynchronos/FileCacheDB/FileDbManager.cs b/MareSynchronos/FileCacheDB/FileDbManager.cs index b2d1a94..4854967 100644 --- a/MareSynchronos/FileCacheDB/FileDbManager.cs +++ b/MareSynchronos/FileCacheDB/FileDbManager.cs @@ -131,10 +131,11 @@ public class FileDbManager private FileCache? MigrateLegacy(FileCache fileCache) { - if (fileCache.OriginalFilepath.Contains(PenumbraPrefix) || fileCache.OriginalFilepath.Contains(CachePrefix)) return fileCache; + if (fileCache.OriginalFilepath.Contains(PenumbraPrefix + "\\") || fileCache.OriginalFilepath.Contains(CachePrefix)) return fileCache; var fileInfo = new FileInfo(fileCache.OriginalFilepath); var penumbraDir = _ipcManager.PenumbraModDirectory()!; + if (penumbraDir.Last() != '\\') penumbraDir += "\\"; // check if it's a cache file if (fileInfo.Exists && fileInfo.Name.Length == 40) { @@ -143,7 +144,12 @@ public class FileDbManager else if (fileInfo.Exists && fileInfo.FullName.ToLowerInvariant().Contains(penumbraDir)) { // attempt to replace penumbra mod folder path with {penumbra} - var newPath = PenumbraPrefix + fileCache.OriginalFilepath.ToLowerInvariant().Replace(_ipcManager.PenumbraModDirectory()!, string.Empty); + var newPath = PenumbraPrefix + "\\" + fileCache.OriginalFilepath.ToLowerInvariant().Replace(penumbraDir, string.Empty); + MigrateLegacyFilePath(fileCache, newPath); + } + else if (fileInfo.FullName.ToLowerInvariant().Contains(PenumbraPrefix)) + { + var newPath = PenumbraPrefix + "\\" + fileCache.OriginalFilepath.ToLowerInvariant().Replace(PenumbraPrefix, string.Empty); MigrateLegacyFilePath(fileCache, newPath); } else @@ -203,9 +209,18 @@ public class FileDbManager LastModifiedDate = cache.LastModifiedDate }; db.Remove(cache); - db.FileCaches.Add(newcache); - fileCacheToMigrate.UpdateFileCache(newcache); db.SaveChanges(); + var existingCache = db.FileCaches.FirstOrDefault(f => f.Filepath == newPath && f.Hash == cache.Hash); + if (existingCache != null) + { + fileCacheToMigrate.UpdateFileCache(existingCache); + } + else + { + db.FileCaches.Add(newcache); + fileCacheToMigrate.UpdateFileCache(newcache); + db.SaveChanges(); + } } } diff --git a/MareSynchronos/FileCacheDB/PeriodicFileScanner.cs b/MareSynchronos/FileCacheDB/PeriodicFileScanner.cs index 8d24ec1..7efa024 100644 --- a/MareSynchronos/FileCacheDB/PeriodicFileScanner.cs +++ b/MareSynchronos/FileCacheDB/PeriodicFileScanner.cs @@ -80,7 +80,7 @@ public class PeriodicFileScanner : IDisposable { while (!token.IsCancellationRequested) { - isForced = RecalculateFileCacheSize(); + isForced |= RecalculateFileCacheSize(); if (!_pluginConfiguration.FileScanPaused || isForced) { isForced = false; diff --git a/MareSynchronos/MareSynchronos.csproj b/MareSynchronos/MareSynchronos.csproj index 13096c0..665bc44 100644 --- a/MareSynchronos/MareSynchronos.csproj +++ b/MareSynchronos/MareSynchronos.csproj @@ -3,7 +3,7 @@ - 0.4.11 + 0.4.12 https://github.com/Penumbra-Sync/client