From 4226f2e16d7aa67c2bd3342aa3c36b747edad518 Mon Sep 17 00:00:00 2001 From: Stanley Dimant Date: Sat, 13 Aug 2022 21:16:05 +0200 Subject: [PATCH] add penumbra ipc for pathchanges, change all tolower to tolowerinvariant --- MareSynchronos/Managers/FileCacheManager.cs | 8 ++++---- MareSynchronos/Managers/IpcManager.cs | 8 ++++++++ MareSynchronos/Models/FileReplacement.cs | 10 +++++----- MareSynchronos/UI/CompactUI.cs | 4 ++-- MareSynchronos/UI/UIShared.cs | 2 +- MareSynchronos/WebAPI/ApIController.Functions.Files.cs | 2 +- 6 files changed, 21 insertions(+), 13 deletions(-) diff --git a/MareSynchronos/Managers/FileCacheManager.cs b/MareSynchronos/Managers/FileCacheManager.cs index b1d75f4..14946b8 100644 --- a/MareSynchronos/Managers/FileCacheManager.cs +++ b/MareSynchronos/Managers/FileCacheManager.cs @@ -64,7 +64,7 @@ namespace MareSynchronos.Managers var sha1Hash = Crypto.GetFileHash(fileInfo.FullName); return new FileCache() { - Filepath = fileInfo.FullName.ToLower(), + Filepath = fileInfo.FullName.ToLowerInvariant(), Hash = sha1Hash, LastModifiedDate = fileInfo.LastWriteTimeUtc.Ticks.ToString(), }; @@ -203,7 +203,7 @@ namespace MareSynchronos.Managers { PluginLog.Verbose("Removed: " + item); - db.RemoveRange(db.FileCaches.Where(f => f.Filepath.ToLower() == item.ToLower())); + db.RemoveRange(db.FileCaches.Where(f => f.Filepath.ToLowerInvariant() == item.ToLowerInvariant())); } else { @@ -211,7 +211,7 @@ namespace MareSynchronos.Managers var fileCache = Create(item, _rescanTaskCancellationTokenSource.Token); if (fileCache != null) { - db.RemoveRange(db.FileCaches.Where(f => f.Filepath.ToLower() == fileCache.Filepath.ToLower())); + db.RemoveRange(db.FileCaches.Where(f => f.Filepath.ToLowerInvariant() == fileCache.Filepath.ToLowerInvariant())); await db.AddAsync(fileCache, _rescanTaskCancellationTokenSource.Token); } } @@ -316,7 +316,7 @@ namespace MareSynchronos.Managers foreach (var deletion in fileCachesToDelete) { var entries = db.FileCaches.Where(f => - f.Hash == deletion.Hash && f.Filepath.ToLower() == deletion.Filepath.ToLower()); + f.Hash == deletion.Hash && f.Filepath.ToLowerInvariant() == deletion.Filepath.ToLowerInvariant()); if (await entries.AnyAsync(ct)) { Logger.Verbose("Removing file from DB: " + deletion.Filepath); diff --git a/MareSynchronos/Managers/IpcManager.cs b/MareSynchronos/Managers/IpcManager.cs index 7aa4a75..5ac24e0 100644 --- a/MareSynchronos/Managers/IpcManager.cs +++ b/MareSynchronos/Managers/IpcManager.cs @@ -31,6 +31,7 @@ namespace MareSynchronos.Managers private readonly ICallGateSubscriber? _reverseResolvePlayer; private readonly ICallGateSubscriber, string, int, int> _penumbraSetTemporaryMod; + private readonly ICallGateSubscriber _penumbraPlayerPathResolved; private readonly DalamudUtil _dalamudUtil; public IpcManager(DalamudPluginInterface pi, DalamudUtil dalamudUtil) @@ -55,7 +56,9 @@ namespace MareSynchronos.Managers _glamourerApplyOnlyCustomization = pi.GetIpcSubscriber("Glamourer.ApplyOnlyCustomizationToCharacter"); _glamourerApplyOnlyEquipment = pi.GetIpcSubscriber("Glamourer.ApplyOnlyEquipmentToCharacter"); _glamourerRevertCustomization = pi.GetIpcSubscriber("Glamourer.RevertCharacter"); + _penumbraPlayerPathResolved = pi.GetIpcSubscriber("Penumbra.PlayerFileResourceResolved"); + _penumbraPlayerPathResolved.Subscribe(PlayerPathResolved); _penumbraObjectIsRedrawn.Subscribe(RedrawEvent); _penumbraInit.Subscribe(PenumbraInit); _penumbraDispose.Subscribe(PenumbraDispose); @@ -78,6 +81,11 @@ namespace MareSynchronos.Managers this._dalamudUtil = dalamudUtil; } + private void PlayerPathResolved(string arg1, string arg2) + { + Logger.Debug($"Resolved {arg1} => {arg2}"); + } + public event VoidDelegate? PenumbraInitialized; public event VoidDelegate? PenumbraDisposed; public event PenumbraRedrawEvent? PenumbraRedrawEvent; diff --git a/MareSynchronos/Models/FileReplacement.cs b/MareSynchronos/Models/FileReplacement.cs index a9b696b..5b48206 100644 --- a/MareSynchronos/Models/FileReplacement.cs +++ b/MareSynchronos/Models/FileReplacement.cs @@ -32,7 +32,7 @@ namespace MareSynchronos.Models public void SetResolvedPath(string path) { - ResolvedPath = path.ToLower().Replace('/', '\\').Replace(_penumbraDirectory, "").Replace('\\', '/'); + ResolvedPath = path.ToLowerInvariant().Replace('/', '\\').Replace(_penumbraDirectory, "").Replace('\\', '/'); if (!HasFileReplacement) return; _ = Task.Run(() => @@ -40,7 +40,7 @@ namespace MareSynchronos.Models FileCache? fileCache; using (FileCacheContext db = new()) { - fileCache = db.FileCaches.FirstOrDefault(f => f.Filepath == path.ToLower()); + fileCache = db.FileCaches.FirstOrDefault(f => f.Filepath == path.ToLowerInvariant()); } if (fileCache != null) @@ -54,7 +54,7 @@ namespace MareSynchronos.Models { Hash = ComputeHash(fi); using var db = new FileCacheContext(); - var newTempCache = db.FileCaches.Single(f => f.Filepath == path.ToLower()); + var newTempCache = db.FileCaches.Single(f => f.Filepath == path.ToLowerInvariant()); newTempCache.Hash = Hash; db.Update(newTempCache); db.SaveChanges(); @@ -88,7 +88,7 @@ namespace MareSynchronos.Models string hash = Crypto.GetFileHash(fi.FullName); using FileCacheContext db = new(); - var fileAddedDuringCompute = db.FileCaches.FirstOrDefault(f => f.Filepath == fi.FullName.ToLower()); + var fileAddedDuringCompute = db.FileCaches.FirstOrDefault(f => f.Filepath == fi.FullName.ToLowerInvariant()); if (fileAddedDuringCompute != null) return fileAddedDuringCompute.Hash; try @@ -96,7 +96,7 @@ namespace MareSynchronos.Models db.Add(new FileCache() { Hash = hash, - Filepath = fi.FullName.ToLower(), + Filepath = fi.FullName.ToLowerInvariant(), LastModifiedDate = fi.LastWriteTimeUtc.Ticks.ToString() }); db.SaveChanges(); diff --git a/MareSynchronos/UI/CompactUI.cs b/MareSynchronos/UI/CompactUI.cs index 3097f10..b48d416 100644 --- a/MareSynchronos/UI/CompactUI.cs +++ b/MareSynchronos/UI/CompactUI.cs @@ -273,8 +273,8 @@ namespace MareSynchronos.UI { if (_characterOrCommentFilter.IsNullOrEmpty()) return true; _configuration.GetCurrentServerUidComments().TryGetValue(p.OtherUID, out var comment); - return p.OtherUID.ToLower().Contains(_characterOrCommentFilter.ToLower()) || - (comment?.ToLower().Contains(_characterOrCommentFilter.ToLower()) ?? false); + return p.OtherUID.ToLowerInvariant().Contains(_characterOrCommentFilter.ToLowerInvariant()) || + (comment?.ToLowerInvariant().Contains(_characterOrCommentFilter.ToLowerInvariant()) ?? false); }); if (_configuration.ReverseUserSort) users = users.Reverse(); diff --git a/MareSynchronos/UI/UIShared.cs b/MareSynchronos/UI/UIShared.cs index d4ff9c5..277084e 100644 --- a/MareSynchronos/UI/UIShared.cs +++ b/MareSynchronos/UI/UIShared.cs @@ -424,7 +424,7 @@ namespace MareSynchronos.UI { if (!success) return; - _isPenumbraDirectory = path.ToLower() == _ipcManager.PenumbraModDirectory()?.ToLower(); + _isPenumbraDirectory = path.ToLowerInvariant() == _ipcManager.PenumbraModDirectory()?.ToLowerInvariant(); _isDirectoryWritable = IsDirectoryWritable(path); _cacheDirectoryHasOtherFilesThanCache = Directory.GetFiles(path, "*", SearchOption.AllDirectories).Any(f => new FileInfo(f).Name.Length != 40); _cacheDirectoryIsValidPath = Regex.IsMatch(path, @"^(?:[a-zA-Z]:\\[\w\s\-\\]+?|\/(?:[\w\s\-\/])+?)$", RegexOptions.ECMAScript); diff --git a/MareSynchronos/WebAPI/ApIController.Functions.Files.cs b/MareSynchronos/WebAPI/ApIController.Functions.Files.cs index a52459d..6fc4a86 100644 --- a/MareSynchronos/WebAPI/ApIController.Functions.Files.cs +++ b/MareSynchronos/WebAPI/ApIController.Functions.Files.cs @@ -172,7 +172,7 @@ namespace MareSynchronos.WebAPI { CurrentUploads.Add(new UploadFileTransfer(file) { - Total = new FileInfo(db.FileCaches.FirstOrDefault(f => f.Hash.ToLower() == file.Hash.ToLower()) + Total = new FileInfo(db.FileCaches.FirstOrDefault(f => f.Hash.ToLowerInvariant() == file.Hash.ToLowerInvariant()) ?.Filepath ?? string.Empty).Length }); }