reduce hitches and do some other changes to FSW
This commit is contained in:
		| @@ -68,6 +68,11 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase | |||||||
|             { |             { | ||||||
|                 try |                 try | ||||||
|                 { |                 { | ||||||
|  |                     while (_dalamudUtil.IsOnFrameworkThread && !token.IsCancellationRequested) | ||||||
|  |                     { | ||||||
|  |                         await Task.Delay(1).ConfigureAwait(false); | ||||||
|  |                     } | ||||||
|  |  | ||||||
|                     RecalculateFileCacheSize(token); |                     RecalculateFileCacheSize(token); | ||||||
|                 } |                 } | ||||||
|                 catch |                 catch | ||||||
| @@ -272,18 +277,41 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (changes.Any(c => c.Value.ChangeType == WatcherChangeTypes.Deleted)) |         HandleChanges(changes); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private void HandleChanges(Dictionary<string, WatcherChange> changes) | ||||||
|     { |     { | ||||||
|         lock (_fileDbManager) |         lock (_fileDbManager) | ||||||
|         { |         { | ||||||
|                 foreach (var change in changes) |             var deletedEntries = changes.Where(c => c.Value.ChangeType == WatcherChangeTypes.Deleted).Select(c => c.Key); | ||||||
|  |             var renamedEntries = changes.Where(c => c.Value.ChangeType == WatcherChangeTypes.Renamed); | ||||||
|  |             var remainingEntries = changes.Where(c => c.Value.ChangeType != WatcherChangeTypes.Deleted).Select(c => c.Key); | ||||||
|  |  | ||||||
|  |             foreach (var entry in deletedEntries) | ||||||
|             { |             { | ||||||
|                     Logger.LogDebug("FSW Change: {change} = {val}", change.Key, change.Value); |                 Logger.LogDebug("FSW Change: Deletion - {val}", entry); | ||||||
|                     _ = _fileDbManager.GetFileCacheByPath(change.Key); |  | ||||||
|             } |             } | ||||||
|  |  | ||||||
|                 _fileDbManager.WriteOutFullCsv(); |             foreach (var entry in renamedEntries) | ||||||
|  |             { | ||||||
|  |                 Logger.LogDebug("FSW Change: Renamed - {oldVal} => {val}", entry.Value.OldPath, entry.Key); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  |             foreach (var entry in remainingEntries) | ||||||
|  |             { | ||||||
|  |                 Logger.LogDebug("FSW Change: Creation or Change - {val}", entry); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             var allChanges = deletedEntries | ||||||
|  |                 .Concat(renamedEntries.Select(c => c.Value.OldPath!)) | ||||||
|  |                 .Concat(renamedEntries.Select(c => c.Key)) | ||||||
|  |                 .Concat(remainingEntries) | ||||||
|  |                 .ToArray(); | ||||||
|  |  | ||||||
|  |             _ = _fileDbManager.GetFileCachesByPaths(allChanges); | ||||||
|  |  | ||||||
|  |             _fileDbManager.WriteOutFullCsv(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -315,24 +343,7 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         lock (_fileDbManager) |         HandleChanges(changes); | ||||||
|         { |  | ||||||
|             foreach (var change in changes) |  | ||||||
|             { |  | ||||||
|                 Logger.LogDebug("FSW Change: {change} = {val}", change.Key, change.Value); |  | ||||||
|                 if (change.Value.ChangeType == WatcherChangeTypes.Deleted) |  | ||||||
|                 { |  | ||||||
|                     _fileDbManager.GetFileCacheByPath(change.Key); |  | ||||||
|                 } |  | ||||||
|                 else |  | ||||||
|                 { |  | ||||||
|                     if (change.Value.OldPath != null) _fileDbManager.GetFileCacheByPath(change.Value.OldPath); |  | ||||||
|                     _fileDbManager.CreateFileEntry(change.Key); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             _fileDbManager.WriteOutFullCsv(); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void InvokeScan() |     public void InvokeScan() | ||||||
| @@ -397,7 +408,7 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         FileCacheSize = Directory.EnumerateFiles(_configService.Current.CacheFolder) |         FileCacheSize = Directory.EnumerateFiles(_configService.Current.CacheFolder) | ||||||
|             .AsParallel().Sum(f => |             .Sum(f => | ||||||
|             { |             { | ||||||
|                 token.ThrowIfCancellationRequested(); |                 token.ThrowIfCancellationRequested(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,6 +20,7 @@ public sealed class FileCacheManager : IHostedService | |||||||
|     private readonly MareMediator _mareMediator; |     private readonly MareMediator _mareMediator; | ||||||
|     private readonly string _csvPath; |     private readonly string _csvPath; | ||||||
|     private readonly ConcurrentDictionary<string, List<FileCacheEntity>> _fileCaches = new(StringComparer.Ordinal); |     private readonly ConcurrentDictionary<string, List<FileCacheEntity>> _fileCaches = new(StringComparer.Ordinal); | ||||||
|  |     private readonly SemaphoreSlim _getCachesByPathsSemaphore = new(1, 1); | ||||||
|     private readonly object _fileWriteLock = new(); |     private readonly object _fileWriteLock = new(); | ||||||
|     private readonly IpcManager _ipcManager; |     private readonly IpcManager _ipcManager; | ||||||
|     private readonly ILogger<FileCacheManager> _logger; |     private readonly ILogger<FileCacheManager> _logger; | ||||||
| @@ -64,9 +65,9 @@ public sealed class FileCacheManager : IHostedService | |||||||
|         List<FileCacheEntity> output = []; |         List<FileCacheEntity> output = []; | ||||||
|         if (_fileCaches.TryGetValue(hash, out var fileCacheEntities)) |         if (_fileCaches.TryGetValue(hash, out var fileCacheEntities)) | ||||||
|         { |         { | ||||||
|             foreach (var filecache in fileCacheEntities.ToList()) |             foreach (var fileCache in fileCacheEntities.ToList()) | ||||||
|             { |             { | ||||||
|                 var validated = GetValidatedFileCache(filecache); |                 var validated = GetValidatedFileCache(fileCache); | ||||||
|                 if (validated != null) output.Add(validated); |                 if (validated != null) output.Add(validated); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -79,7 +80,7 @@ public sealed class FileCacheManager : IHostedService | |||||||
|         _mareMediator.Publish(new HaltScanMessage(nameof(ValidateLocalIntegrity))); |         _mareMediator.Publish(new HaltScanMessage(nameof(ValidateLocalIntegrity))); | ||||||
|         _logger.LogInformation("Validating local storage"); |         _logger.LogInformation("Validating local storage"); | ||||||
|         var cacheEntries = _fileCaches.SelectMany(v => v.Value).Where(v => v.IsCacheEntry).ToList(); |         var cacheEntries = _fileCaches.SelectMany(v => v.Value).Where(v => v.IsCacheEntry).ToList(); | ||||||
|         List<FileCacheEntity> brokenEntities = new(); |         List<FileCacheEntity> brokenEntities = []; | ||||||
|         int i = 0; |         int i = 0; | ||||||
|         foreach (var fileCache in cacheEntries) |         foreach (var fileCache in cacheEntries) | ||||||
|         { |         { | ||||||
| @@ -175,17 +176,21 @@ public sealed class FileCacheManager : IHostedService | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public Dictionary<string, FileCacheEntity?> GetFileCachesByPaths(string[] paths) |     public Dictionary<string, FileCacheEntity?> GetFileCachesByPaths(string[] paths) | ||||||
|  |     { | ||||||
|  |         _getCachesByPathsSemaphore.Wait(); | ||||||
|  |  | ||||||
|  |         try | ||||||
|         { |         { | ||||||
|             var cleanedPaths = paths.Distinct(StringComparer.OrdinalIgnoreCase).ToDictionary(p => p, |             var cleanedPaths = paths.Distinct(StringComparer.OrdinalIgnoreCase).ToDictionary(p => p, | ||||||
|                 p => p.Replace("/", "\\", StringComparison.OrdinalIgnoreCase) |                 p => p.Replace("/", "\\", StringComparison.OrdinalIgnoreCase) | ||||||
|             .Replace(_ipcManager.PenumbraModDirectory!, |                     .Replace(_ipcManager.PenumbraModDirectory!, PenumbraPrefix, StringComparison.OrdinalIgnoreCase) | ||||||
|                 _ipcManager.PenumbraModDirectory!.EndsWith('\\') ? (PenumbraPrefix + "\\") : PenumbraPrefix, |                     .Replace(_configService.Current.CacheFolder, CachePrefix, StringComparison.OrdinalIgnoreCase) | ||||||
|                 StringComparison.OrdinalIgnoreCase), |                     .Replace("\\\\", "\\", StringComparison.Ordinal), | ||||||
|                 StringComparer.OrdinalIgnoreCase); |                 StringComparer.OrdinalIgnoreCase); | ||||||
|  |  | ||||||
|             Dictionary<string, FileCacheEntity?> result = new(StringComparer.OrdinalIgnoreCase); |             Dictionary<string, FileCacheEntity?> result = new(StringComparer.OrdinalIgnoreCase); | ||||||
|  |  | ||||||
|         var dict = _fileCaches.SelectMany(f => f.Value).Where(f => f.PrefixedFilePath.StartsWith(PenumbraPrefix, StringComparison.Ordinal)) |             var dict = _fileCaches.SelectMany(f => f.Value) | ||||||
|                 .ToDictionary(d => d.PrefixedFilePath, d => d, StringComparer.Ordinal); |                 .ToDictionary(d => d.PrefixedFilePath, d => d, StringComparer.Ordinal); | ||||||
|  |  | ||||||
|             foreach (var entry in cleanedPaths) |             foreach (var entry in cleanedPaths) | ||||||
| @@ -197,12 +202,20 @@ public sealed class FileCacheManager : IHostedService | |||||||
|                 } |                 } | ||||||
|                 else |                 else | ||||||
|                 { |                 { | ||||||
|  |                     if (!entry.Value.Contains(CachePrefix, StringComparison.Ordinal)) | ||||||
|                         result.Add(entry.Key, CreateFileEntry(entry.Key)); |                         result.Add(entry.Key, CreateFileEntry(entry.Key)); | ||||||
|  |                     else | ||||||
|  |                         result.Add(entry.Key, CreateCacheEntry(entry.Key)); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             return result; |             return result; | ||||||
|         } |         } | ||||||
|  |         finally | ||||||
|  |         { | ||||||
|  |             _getCachesByPathsSemaphore.Release(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public void RemoveHashedFile(string hash, string prefixedFilePath) |     public void RemoveHashedFile(string hash, string prefixedFilePath) | ||||||
|     { |     { | ||||||
| @@ -281,8 +294,6 @@ public sealed class FileCacheManager : IHostedService | |||||||
|         try |         try | ||||||
|         { |         { | ||||||
|             RemoveHashedFile(fileCache.Hash, fileCache.PrefixedFilePath); |             RemoveHashedFile(fileCache.Hash, fileCache.PrefixedFilePath); | ||||||
|             FileInfo fileInfo = new(fileCache.ResolvedFilepath); |  | ||||||
|             FileInfo oldCache = fileInfo; |  | ||||||
|             var extensionPath = fileCache.ResolvedFilepath.ToUpper(CultureInfo.InvariantCulture) + "." + ext; |             var extensionPath = fileCache.ResolvedFilepath.ToUpper(CultureInfo.InvariantCulture) + "." + ext; | ||||||
|             File.Move(fileCache.ResolvedFilepath, extensionPath, overwrite: true); |             File.Move(fileCache.ResolvedFilepath, extensionPath, overwrite: true); | ||||||
|             var newHashedEntity = new FileCacheEntity(fileCache.Hash, fileCache.PrefixedFilePath + "." + ext, DateTime.UtcNow.Ticks.ToString(CultureInfo.InvariantCulture)); |             var newHashedEntity = new FileCacheEntity(fileCache.Hash, fileCache.PrefixedFilePath + "." + ext, DateTime.UtcNow.Ticks.ToString(CultureInfo.InvariantCulture)); | ||||||
| @@ -329,9 +340,9 @@ public sealed class FileCacheManager : IHostedService | |||||||
|  |  | ||||||
|     private FileCacheEntity? GetValidatedFileCache(FileCacheEntity fileCache) |     private FileCacheEntity? GetValidatedFileCache(FileCacheEntity fileCache) | ||||||
|     { |     { | ||||||
|         var resulingFileCache = ReplacePathPrefixes(fileCache); |         var resultingFileCache = ReplacePathPrefixes(fileCache); | ||||||
|         resulingFileCache = Validate(resulingFileCache); |         resultingFileCache = Validate(resultingFileCache); | ||||||
|         return resulingFileCache; |         return resultingFileCache; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private FileCacheEntity ReplacePathPrefixes(FileCacheEntity fileCache) |     private FileCacheEntity ReplacePathPrefixes(FileCacheEntity fileCache) | ||||||
|   | |||||||
| @@ -121,7 +121,7 @@ public sealed class Plugin : IDalamudPlugin | |||||||
|  |  | ||||||
|             collection.AddScoped<WindowMediatorSubscriberBase, EditProfileUi>((s) => new EditProfileUi(s.GetRequiredService<ILogger<EditProfileUi>>(), |             collection.AddScoped<WindowMediatorSubscriberBase, EditProfileUi>((s) => new EditProfileUi(s.GetRequiredService<ILogger<EditProfileUi>>(), | ||||||
|                 s.GetRequiredService<MareMediator>(), s.GetRequiredService<ApiController>(), pluginInterface.UiBuilder, s.GetRequiredService<UiSharedService>(), |                 s.GetRequiredService<MareMediator>(), s.GetRequiredService<ApiController>(), pluginInterface.UiBuilder, s.GetRequiredService<UiSharedService>(), | ||||||
|                 s.GetRequiredService<FileDialogManager>(), s.GetRequiredService<ServerConfigurationManager>(), s.GetRequiredService<MareProfileManager>())); |                 s.GetRequiredService<FileDialogManager>(), s.GetRequiredService<ServerConfigurationManager>(), s.GetRequiredService<MareProfileManager>(), s.GetRequiredService<PerformanceCollectorService>())); | ||||||
|             collection.AddScoped<WindowMediatorSubscriberBase, PopupHandler>(); |             collection.AddScoped<WindowMediatorSubscriberBase, PopupHandler>(); | ||||||
|             collection.AddScoped<IPopupHandler, ReportPopupHandler>(); |             collection.AddScoped<IPopupHandler, ReportPopupHandler>(); | ||||||
|             collection.AddScoped<IPopupHandler, BanUserPopupHandler>(); |             collection.AddScoped<IPopupHandler, BanUserPopupHandler>(); | ||||||
|   | |||||||
| @@ -6,12 +6,14 @@ namespace MareSynchronos.Services.Mediator; | |||||||
| public abstract class WindowMediatorSubscriberBase : Window, IMediatorSubscriber, IDisposable | public abstract class WindowMediatorSubscriberBase : Window, IMediatorSubscriber, IDisposable | ||||||
| { | { | ||||||
|     protected readonly ILogger _logger; |     protected readonly ILogger _logger; | ||||||
|  |     private readonly PerformanceCollectorService _performanceCollectorService; | ||||||
|  |  | ||||||
|     protected WindowMediatorSubscriberBase(ILogger logger, MareMediator mediator, string name) : base(name) |     protected WindowMediatorSubscriberBase(ILogger logger, MareMediator mediator, string name, | ||||||
|  |         PerformanceCollectorService performanceCollectorService) : base(name) | ||||||
|     { |     { | ||||||
|         _logger = logger; |         _logger = logger; | ||||||
|         Mediator = mediator; |         Mediator = mediator; | ||||||
|  |         _performanceCollectorService = performanceCollectorService; | ||||||
|         _logger.LogTrace("Creating {type}", GetType()); |         _logger.LogTrace("Creating {type}", GetType()); | ||||||
|  |  | ||||||
|         Mediator.Subscribe<UiToggleMessage>(this, (msg) => |         Mediator.Subscribe<UiToggleMessage>(this, (msg) => | ||||||
| @@ -31,6 +33,13 @@ public abstract class WindowMediatorSubscriberBase : Window, IMediatorSubscriber | |||||||
|         GC.SuppressFinalize(this); |         GC.SuppressFinalize(this); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public override void Draw() | ||||||
|  |     { | ||||||
|  |         _performanceCollectorService.LogPerformance(this, "Draw", DrawInternal); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected abstract void DrawInternal(); | ||||||
|  |  | ||||||
|     public virtual Task StopAsync(CancellationToken cancellationToken) |     public virtual Task StopAsync(CancellationToken cancellationToken) | ||||||
|     { |     { | ||||||
|         return Task.CompletedTask; |         return Task.CompletedTask; | ||||||
|   | |||||||
| @@ -18,10 +18,11 @@ public class UiFactory | |||||||
|     private readonly PairManager _pairManager; |     private readonly PairManager _pairManager; | ||||||
|     private readonly ServerConfigurationManager _serverConfigManager; |     private readonly ServerConfigurationManager _serverConfigManager; | ||||||
|     private readonly MareProfileManager _mareProfileManager; |     private readonly MareProfileManager _mareProfileManager; | ||||||
|  |     private readonly PerformanceCollectorService _performanceCollectorService; | ||||||
|  |  | ||||||
|     public UiFactory(ILoggerFactory loggerFactory, MareMediator mareMediator, ApiController apiController, |     public UiFactory(ILoggerFactory loggerFactory, MareMediator mareMediator, ApiController apiController, | ||||||
|         UiSharedService uiSharedService, PairManager pairManager, ServerConfigurationManager serverConfigManager, |         UiSharedService uiSharedService, PairManager pairManager, ServerConfigurationManager serverConfigManager, | ||||||
|         MareProfileManager mareProfileManager) |         MareProfileManager mareProfileManager, PerformanceCollectorService performanceCollectorService) | ||||||
|     { |     { | ||||||
|         _loggerFactory = loggerFactory; |         _loggerFactory = loggerFactory; | ||||||
|         _mareMediator = mareMediator; |         _mareMediator = mareMediator; | ||||||
| @@ -30,23 +31,24 @@ public class UiFactory | |||||||
|         _pairManager = pairManager; |         _pairManager = pairManager; | ||||||
|         _serverConfigManager = serverConfigManager; |         _serverConfigManager = serverConfigManager; | ||||||
|         _mareProfileManager = mareProfileManager; |         _mareProfileManager = mareProfileManager; | ||||||
|  |         _performanceCollectorService = performanceCollectorService; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public SyncshellAdminUI CreateSyncshellAdminUi(GroupFullInfoDto dto) |     public SyncshellAdminUI CreateSyncshellAdminUi(GroupFullInfoDto dto) | ||||||
|     { |     { | ||||||
|         return new SyncshellAdminUI(_loggerFactory.CreateLogger<SyncshellAdminUI>(), _mareMediator, |         return new SyncshellAdminUI(_loggerFactory.CreateLogger<SyncshellAdminUI>(), _mareMediator, | ||||||
|             _apiController, _uiSharedService, _pairManager, dto); |             _apiController, _uiSharedService, _pairManager, dto, _performanceCollectorService); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public StandaloneProfileUi CreateStandaloneProfileUi(Pair pair) |     public StandaloneProfileUi CreateStandaloneProfileUi(Pair pair) | ||||||
|     { |     { | ||||||
|         return new StandaloneProfileUi(_loggerFactory.CreateLogger<StandaloneProfileUi>(), _mareMediator, |         return new StandaloneProfileUi(_loggerFactory.CreateLogger<StandaloneProfileUi>(), _mareMediator, | ||||||
|             _uiSharedService, _serverConfigManager, _mareProfileManager, _pairManager, pair); |             _uiSharedService, _serverConfigManager, _mareProfileManager, _pairManager, pair, _performanceCollectorService); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public PermissionWindowUI CreatePermissionPopupUi(Pair pair) |     public PermissionWindowUI CreatePermissionPopupUi(Pair pair) | ||||||
|     { |     { | ||||||
|         return new PermissionWindowUI(_loggerFactory.CreateLogger<PermissionWindowUI>(), pair, |         return new PermissionWindowUI(_loggerFactory.CreateLogger<PermissionWindowUI>(), pair, | ||||||
|             _mareMediator, _uiSharedService, _apiController); |             _mareMediator, _uiSharedService, _apiController, _performanceCollectorService); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -59,7 +59,9 @@ public class CompactUi : WindowMediatorSubscriberBase | |||||||
|     private bool _wasOpen; |     private bool _wasOpen; | ||||||
|  |  | ||||||
|     public CompactUi(ILogger<CompactUi> logger, UiSharedService uiShared, MareConfigService configService, ApiController apiController, PairManager pairManager, ChatService chatService, |     public CompactUi(ILogger<CompactUi> logger, UiSharedService uiShared, MareConfigService configService, ApiController apiController, PairManager pairManager, ChatService chatService, | ||||||
|         ServerConfigurationManager serverManager, MareMediator mediator, FileUploadManager fileTransferManager, UidDisplayHandler uidDisplayHandler) : base(logger, mediator, "###LoporritSyncMainUI") |         ServerConfigurationManager serverManager, MareMediator mediator, FileUploadManager fileTransferManager, UidDisplayHandler uidDisplayHandler, | ||||||
|  |         PerformanceCollectorService performanceCollectorService) | ||||||
|  |         : base(logger, mediator, "###LoporritSyncMainUI", performanceCollectorService) | ||||||
|     { |     { | ||||||
|         _uiShared = uiShared; |         _uiShared = uiShared; | ||||||
|         _configService = configService; |         _configService = configService; | ||||||
| @@ -101,7 +103,7 @@ public class CompactUi : WindowMediatorSubscriberBase | |||||||
|         }; |         }; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public override void Draw() |     protected override void DrawInternal() | ||||||
|     { |     { | ||||||
|         /*if (_apiController.ServerInfo.AccentColor.HasValue) |         /*if (_apiController.ServerInfo.AccentColor.HasValue) | ||||||
|         { |         { | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ | |||||||
| using Dalamud.Interface.Utility; | using Dalamud.Interface.Utility; | ||||||
| using Dalamud.Interface.Utility.Raii; | using Dalamud.Interface.Utility.Raii; | ||||||
| using ImGuiNET; | using ImGuiNET; | ||||||
|  | using MareSynchronos.Services; | ||||||
| using MareSynchronos.Services.Mediator; | using MareSynchronos.Services.Mediator; | ||||||
| using Microsoft.Extensions.Logging; | using Microsoft.Extensions.Logging; | ||||||
| using System.Numerics; | using System.Numerics; | ||||||
| @@ -14,8 +15,8 @@ public class PopupHandler : WindowMediatorSubscriberBase | |||||||
|     private readonly HashSet<IPopupHandler> _handlers; |     private readonly HashSet<IPopupHandler> _handlers; | ||||||
|     private IPopupHandler? _currentHandler = null; |     private IPopupHandler? _currentHandler = null; | ||||||
|  |  | ||||||
|     public PopupHandler(ILogger<PopupHandler> logger, MareMediator mediator, IEnumerable<IPopupHandler> popupHandlers) |     public PopupHandler(ILogger<PopupHandler> logger, MareMediator mediator, IEnumerable<IPopupHandler> popupHandlers, PerformanceCollectorService performanceCollectorService) | ||||||
|         : base(logger, mediator, "MarePopupHandler") |         : base(logger, mediator, "MarePopupHandler", performanceCollectorService) | ||||||
|     { |     { | ||||||
|         Flags = ImGuiWindowFlags.NoBringToFrontOnFocus |         Flags = ImGuiWindowFlags.NoBringToFrontOnFocus | ||||||
|           | ImGuiWindowFlags.NoDecoration |           | ImGuiWindowFlags.NoDecoration | ||||||
| @@ -46,7 +47,7 @@ public class PopupHandler : WindowMediatorSubscriberBase | |||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public override void Draw() |     protected override void DrawInternal() | ||||||
|     { |     { | ||||||
|         if (_currentHandler == null) return; |         if (_currentHandler == null) return; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -31,7 +31,8 @@ public class DataAnalysisUi : WindowMediatorSubscriberBase | |||||||
|     private ObjectKind _selectedObjectTab; |     private ObjectKind _selectedObjectTab; | ||||||
|     private bool _showModal = false; |     private bool _showModal = false; | ||||||
|  |  | ||||||
|     public DataAnalysisUi(ILogger<DataAnalysisUi> logger, MareMediator mediator, CharacterAnalyzer characterAnalyzer, IpcManager ipcManager) : base(logger, mediator, "Mare Character Data Analysis") |     public DataAnalysisUi(ILogger<DataAnalysisUi> logger, MareMediator mediator, CharacterAnalyzer characterAnalyzer, IpcManager ipcManager, PerformanceCollectorService performanceCollectorService) | ||||||
|  |         : base(logger, mediator, "Mare Character Data Analysis", performanceCollectorService) | ||||||
|     { |     { | ||||||
|         _characterAnalyzer = characterAnalyzer; |         _characterAnalyzer = characterAnalyzer; | ||||||
|         _ipcManager = ipcManager; |         _ipcManager = ipcManager; | ||||||
| @@ -56,7 +57,7 @@ public class DataAnalysisUi : WindowMediatorSubscriberBase | |||||||
|         _conversionProgress.ProgressChanged += ConversionProgress_ProgressChanged; |         _conversionProgress.ProgressChanged += ConversionProgress_ProgressChanged; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public override void Draw() |     protected override void DrawInternal() | ||||||
|     { |     { | ||||||
|         if (_conversionTask != null && !_conversionTask.IsCompleted) |         if (_conversionTask != null && !_conversionTask.IsCompleted) | ||||||
|         { |         { | ||||||
|   | |||||||
| @@ -22,7 +22,8 @@ public class DownloadUi : WindowMediatorSubscriberBase | |||||||
|     private readonly ConcurrentDictionary<GameObjectHandler, bool> _uploadingPlayers = new(); |     private readonly ConcurrentDictionary<GameObjectHandler, bool> _uploadingPlayers = new(); | ||||||
|  |  | ||||||
|     public DownloadUi(ILogger<DownloadUi> logger, DalamudUtilService dalamudUtilService, MareConfigService configService, |     public DownloadUi(ILogger<DownloadUi> logger, DalamudUtilService dalamudUtilService, MareConfigService configService, | ||||||
|         FileUploadManager fileTransferManager, MareMediator mediator, UiSharedService uiShared) : base(logger, mediator, "Loporrit Downloads") |         FileUploadManager fileTransferManager, MareMediator mediator, UiSharedService uiShared, PerformanceCollectorService performanceCollectorService) | ||||||
|  |         : base(logger, mediator, "Loporrit Downloads", performanceCollectorService) | ||||||
|     { |     { | ||||||
|         _dalamudUtilService = dalamudUtilService; |         _dalamudUtilService = dalamudUtilService; | ||||||
|         _configService = configService; |         _configService = configService; | ||||||
| @@ -66,7 +67,7 @@ public class DownloadUi : WindowMediatorSubscriberBase | |||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public override void Draw() |     protected override void DrawInternal() | ||||||
|     { |     { | ||||||
|         if (_configService.Current.ShowTransferWindow) |         if (_configService.Current.ShowTransferWindow) | ||||||
|         { |         { | ||||||
|   | |||||||
| @@ -36,7 +36,8 @@ public class EditProfileUi : WindowMediatorSubscriberBase | |||||||
|     public EditProfileUi(ILogger<EditProfileUi> logger, MareMediator mediator, |     public EditProfileUi(ILogger<EditProfileUi> logger, MareMediator mediator, | ||||||
|         ApiController apiController, IUiBuilder uiBuilder, UiSharedService uiSharedService, |         ApiController apiController, IUiBuilder uiBuilder, UiSharedService uiSharedService, | ||||||
|         FileDialogManager fileDialogManager, ServerConfigurationManager serverConfigurationManager, |         FileDialogManager fileDialogManager, ServerConfigurationManager serverConfigurationManager, | ||||||
|         MareProfileManager mareProfileManager) : base(logger, mediator, "Loporrit Edit Profile###LoporritSyncEditProfileUI") |         MareProfileManager mareProfileManager, PerformanceCollectorService performanceCollectorService) | ||||||
|  |         : base(logger, mediator, "Loporrit Edit Profile###LoporritSyncEditProfileUI", performanceCollectorService) | ||||||
|     { |     { | ||||||
|         IsOpen = false; |         IsOpen = false; | ||||||
|         this.SizeConstraints = new() |         this.SizeConstraints = new() | ||||||
| @@ -64,7 +65,7 @@ public class EditProfileUi : WindowMediatorSubscriberBase | |||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public override void Draw() |     protected override void DrawInternal() | ||||||
|     { |     { | ||||||
|         _uiSharedService.BigText("Current Profile (as saved on server)"); |         _uiSharedService.BigText("Current Profile (as saved on server)"); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,7 +20,8 @@ public class GposeUi : WindowMediatorSubscriberBase | |||||||
|  |  | ||||||
|     public GposeUi(ILogger<GposeUi> logger, MareCharaFileManager mareCharaFileManager, |     public GposeUi(ILogger<GposeUi> logger, MareCharaFileManager mareCharaFileManager, | ||||||
|         DalamudUtilService dalamudUtil, FileDialogManager fileDialogManager, MareConfigService configService, |         DalamudUtilService dalamudUtil, FileDialogManager fileDialogManager, MareConfigService configService, | ||||||
|         MareMediator mediator) : base(logger, mediator, "Loporrit Gpose Import UI###LoporritSyncGposeUI") |         MareMediator mediator, PerformanceCollectorService performanceCollectorService) | ||||||
|  |         : base(logger, mediator, "Loporrit Gpose Import UI###LoporritSyncGposeUI", performanceCollectorService) | ||||||
|     { |     { | ||||||
|         _mareCharaFileManager = mareCharaFileManager; |         _mareCharaFileManager = mareCharaFileManager; | ||||||
|         _dalamudUtil = dalamudUtil; |         _dalamudUtil = dalamudUtil; | ||||||
| @@ -37,7 +38,7 @@ public class GposeUi : WindowMediatorSubscriberBase | |||||||
|         }; |         }; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public override void Draw() |     protected override void DrawInternal() | ||||||
|     { |     { | ||||||
|         if (!_dalamudUtil.IsInGpose) IsOpen = false; |         if (!_dalamudUtil.IsInGpose) IsOpen = false; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ using MareSynchronos.FileCache; | |||||||
| using MareSynchronos.Localization; | using MareSynchronos.Localization; | ||||||
| using MareSynchronos.MareConfiguration; | using MareSynchronos.MareConfiguration; | ||||||
| using MareSynchronos.MareConfiguration.Models; | using MareSynchronos.MareConfiguration.Models; | ||||||
|  | using MareSynchronos.Services; | ||||||
| using MareSynchronos.Services.Mediator; | using MareSynchronos.Services.Mediator; | ||||||
| using MareSynchronos.Services.ServerConfiguration; | using MareSynchronos.Services.ServerConfiguration; | ||||||
| using MareSynchronos.WebAPI; | using MareSynchronos.WebAPI; | ||||||
| @@ -41,7 +42,8 @@ public class IntroUi : WindowMediatorSubscriberBase | |||||||
|     private RegisterReplyDto? _registrationReply; |     private RegisterReplyDto? _registrationReply; | ||||||
|  |  | ||||||
|     public IntroUi(ILogger<IntroUi> logger, UiSharedService uiShared, MareConfigService configService, ApiController apiController, |     public IntroUi(ILogger<IntroUi> logger, UiSharedService uiShared, MareConfigService configService, ApiController apiController, | ||||||
|         CacheMonitor fileCacheManager, ServerConfigurationManager serverConfigurationManager, MareMediator mareMediator) : base(logger, mareMediator, "Loporrit Setup") |         CacheMonitor fileCacheManager, ServerConfigurationManager serverConfigurationManager, MareMediator mareMediator, | ||||||
|  |         PerformanceCollectorService performanceCollectorService) : base(logger, mareMediator, "Loporrit Setup", performanceCollectorService) | ||||||
|     { |     { | ||||||
|         _uiShared = uiShared; |         _uiShared = uiShared; | ||||||
|         _configService = configService; |         _configService = configService; | ||||||
| @@ -69,7 +71,7 @@ public class IntroUi : WindowMediatorSubscriberBase | |||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public override void Draw() |     protected override void DrawInternal() | ||||||
|     { |     { | ||||||
|         if (_uiShared.IsInGpose) return; |         if (_uiShared.IsInGpose) return; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ using ImGuiNET; | |||||||
| using MareSynchronos.API.Data.Enum; | using MareSynchronos.API.Data.Enum; | ||||||
| using MareSynchronos.API.Data.Extensions; | using MareSynchronos.API.Data.Extensions; | ||||||
| using MareSynchronos.PlayerData.Pairs; | using MareSynchronos.PlayerData.Pairs; | ||||||
|  | using MareSynchronos.Services; | ||||||
| using MareSynchronos.Services.Mediator; | using MareSynchronos.Services.Mediator; | ||||||
| using MareSynchronos.Utils; | using MareSynchronos.Utils; | ||||||
| using MareSynchronos.WebAPI; | using MareSynchronos.WebAPI; | ||||||
| @@ -20,7 +21,8 @@ public class PermissionWindowUI : WindowMediatorSubscriberBase | |||||||
|     private UserPermissions _ownPermissions; |     private UserPermissions _ownPermissions; | ||||||
|  |  | ||||||
|     public PermissionWindowUI(ILogger<PermissionWindowUI> logger, Pair pair, MareMediator mediator, UiSharedService uiSharedService, |     public PermissionWindowUI(ILogger<PermissionWindowUI> logger, Pair pair, MareMediator mediator, UiSharedService uiSharedService, | ||||||
|         ApiController apiController) : base(logger, mediator, "Permissions for " + pair.UserData.AliasOrUID + "###LoporritSyncPermissions" + pair.UserData.UID) |         ApiController apiController, PerformanceCollectorService performanceCollectorService) | ||||||
|  |         : base(logger, mediator, "Permissions for " + pair.UserData.AliasOrUID + "###LoporritSyncPermissions" + pair.UserData.UID, performanceCollectorService) | ||||||
|     { |     { | ||||||
|         Pair = pair; |         Pair = pair; | ||||||
|         _uiSharedService = uiSharedService; |         _uiSharedService = uiSharedService; | ||||||
| @@ -35,7 +37,7 @@ public class PermissionWindowUI : WindowMediatorSubscriberBase | |||||||
|         IsOpen = true; |         IsOpen = true; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public override void Draw() |     protected override void DrawInternal() | ||||||
|     { |     { | ||||||
|         var paused = _ownPermissions.IsPaused(); |         var paused = _ownPermissions.IsPaused(); | ||||||
|         var disableSounds = _ownPermissions.IsDisableSounds(); |         var disableSounds = _ownPermissions.IsDisableSounds(); | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ public class PopoutProfileUi : WindowMediatorSubscriberBase | |||||||
|  |  | ||||||
|     public PopoutProfileUi(ILogger<PopoutProfileUi> logger, MareMediator mediator, UiSharedService uiSharedService, |     public PopoutProfileUi(ILogger<PopoutProfileUi> logger, MareMediator mediator, UiSharedService uiSharedService, | ||||||
|         ServerConfigurationManager serverManager, MareConfigService mareConfigService, |         ServerConfigurationManager serverManager, MareConfigService mareConfigService, | ||||||
|         MareProfileManager mareProfileManager, PairManager pairManager) : base(logger, mediator, "###LoporritSyncPopoutProfileUI") |         MareProfileManager mareProfileManager, PairManager pairManager, PerformanceCollectorService performanceCollectorService) : base(logger, mediator, "###LoporritSyncPopoutProfileUI", performanceCollectorService) | ||||||
|     { |     { | ||||||
|         _uiSharedService = uiSharedService; |         _uiSharedService = uiSharedService; | ||||||
|         _serverManager = serverManager; |         _serverManager = serverManager; | ||||||
| @@ -78,7 +78,7 @@ public class PopoutProfileUi : WindowMediatorSubscriberBase | |||||||
|         IsOpen = false; |         IsOpen = false; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public override void Draw() |     protected override void DrawInternal() | ||||||
|     { |     { | ||||||
|         if (_pair == null) return; |         if (_pair == null) return; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -81,7 +81,7 @@ public class SettingsUi : WindowMediatorSubscriberBase | |||||||
|         FileTransferOrchestrator fileTransferOrchestrator, |         FileTransferOrchestrator fileTransferOrchestrator, | ||||||
|         FileCacheManager fileCacheManager, |         FileCacheManager fileCacheManager, | ||||||
|         FileCompactor fileCompactor, ApiController apiController, |         FileCompactor fileCompactor, ApiController apiController, | ||||||
|         IpcManager ipcManager, CacheMonitor cacheMonitor) : base(logger, mediator, "Loporrit Settings") |         IpcManager ipcManager, CacheMonitor cacheMonitor) : base(logger, mediator, "Loporrit Settings", performanceCollector) | ||||||
|     { |     { | ||||||
|         _configService = configService; |         _configService = configService; | ||||||
|         _mareCharaFileManager = mareCharaFileManager; |         _mareCharaFileManager = mareCharaFileManager; | ||||||
| @@ -120,7 +120,7 @@ public class SettingsUi : WindowMediatorSubscriberBase | |||||||
|     public CharacterData? LastCreatedCharacterData { private get; set; } |     public CharacterData? LastCreatedCharacterData { private get; set; } | ||||||
|     private ApiController ApiController => _uiShared.ApiController; |     private ApiController ApiController => _uiShared.ApiController; | ||||||
|  |  | ||||||
|     public override void Draw() |     protected override void DrawInternal() | ||||||
|     { |     { | ||||||
|         _ = _uiShared.DrawOtherPluginState(); |         _ = _uiShared.DrawOtherPluginState(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -26,8 +26,9 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase | |||||||
|     private IDalamudTextureWrap? _textureWrap; |     private IDalamudTextureWrap? _textureWrap; | ||||||
|  |  | ||||||
|     public StandaloneProfileUi(ILogger<StandaloneProfileUi> logger, MareMediator mediator, UiSharedService uiBuilder, |     public StandaloneProfileUi(ILogger<StandaloneProfileUi> logger, MareMediator mediator, UiSharedService uiBuilder, | ||||||
|         ServerConfigurationManager serverManager, MareProfileManager mareProfileManager, PairManager pairManager, Pair pair) |         ServerConfigurationManager serverManager, MareProfileManager mareProfileManager, PairManager pairManager, Pair pair, | ||||||
|         : base(logger, mediator, "Profile of " + pair.UserData.AliasOrUID + "##LoporritSyncStandaloneProfileUI" + pair.UserData.AliasOrUID) |         PerformanceCollectorService performanceCollector) | ||||||
|  |         : base(logger, mediator, "Profile of " + pair.UserData.AliasOrUID + "##LoporritSyncStandaloneProfileUI" + pair.UserData.AliasOrUID, performanceCollector) | ||||||
|     { |     { | ||||||
|         _uiSharedService = uiBuilder; |         _uiSharedService = uiBuilder; | ||||||
|         _serverManager = serverManager; |         _serverManager = serverManager; | ||||||
| @@ -45,7 +46,7 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase | |||||||
|  |  | ||||||
|     public Pair Pair { get; init; } |     public Pair Pair { get; init; } | ||||||
|  |  | ||||||
|     public override void Draw() |     protected override void DrawInternal() | ||||||
|     { |     { | ||||||
|         try |         try | ||||||
|         { |         { | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ using MareSynchronos.API.Data.Enum; | |||||||
| using MareSynchronos.API.Data.Extensions; | using MareSynchronos.API.Data.Extensions; | ||||||
| using MareSynchronos.API.Dto.Group; | using MareSynchronos.API.Dto.Group; | ||||||
| using MareSynchronos.PlayerData.Pairs; | using MareSynchronos.PlayerData.Pairs; | ||||||
|  | using MareSynchronos.Services; | ||||||
| using MareSynchronos.Services.Mediator; | using MareSynchronos.Services.Mediator; | ||||||
| using MareSynchronos.WebAPI; | using MareSynchronos.WebAPI; | ||||||
| using Microsoft.Extensions.Logging; | using Microsoft.Extensions.Logging; | ||||||
| @@ -31,8 +32,8 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase | |||||||
|     private int _pruneDays = 14; |     private int _pruneDays = 14; | ||||||
|  |  | ||||||
|     public SyncshellAdminUI(ILogger<SyncshellAdminUI> logger, MareMediator mediator, ApiController apiController, |     public SyncshellAdminUI(ILogger<SyncshellAdminUI> logger, MareMediator mediator, ApiController apiController, | ||||||
|         UiSharedService uiSharedService, PairManager pairManager, GroupFullInfoDto groupFullInfo) |         UiSharedService uiSharedService, PairManager pairManager, GroupFullInfoDto groupFullInfo, PerformanceCollectorService performanceCollectorService) | ||||||
|         : base(logger, mediator, "Syncshell Admin Panel (" + groupFullInfo.GroupAliasOrGID + ")") |         : base(logger, mediator, "Syncshell Admin Panel (" + groupFullInfo.GroupAliasOrGID + ")", performanceCollectorService) | ||||||
|     { |     { | ||||||
|         GroupFullInfo = groupFullInfo; |         GroupFullInfo = groupFullInfo; | ||||||
|         _apiController = apiController; |         _apiController = apiController; | ||||||
| @@ -53,7 +54,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase | |||||||
|  |  | ||||||
|     public GroupFullInfoDto GroupFullInfo { get; private set; } |     public GroupFullInfoDto GroupFullInfo { get; private set; } | ||||||
|  |  | ||||||
|     public override void Draw() |     protected override void DrawInternal() | ||||||
|     { |     { | ||||||
|         if (!_isModerator && !_isOwner) return; |         if (!_isModerator && !_isOwner) return; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Stanley Dimant
					Stanley Dimant