diff --git a/MareSynchronos/FileCache/CacheMonitor.cs b/MareSynchronos/FileCache/CacheMonitor.cs index 3215cae..f2a11ca 100644 --- a/MareSynchronos/FileCache/CacheMonitor.cs +++ b/MareSynchronos/FileCache/CacheMonitor.cs @@ -68,6 +68,11 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase { try { + while (_dalamudUtil.IsOnFrameworkThread && !token.IsCancellationRequested) + { + await Task.Delay(1).ConfigureAwait(false); + } + RecalculateFileCacheSize(token); } catch @@ -272,18 +277,41 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase } } - if (changes.Any(c => c.Value.ChangeType == WatcherChangeTypes.Deleted)) - { - lock (_fileDbManager) - { - foreach (var change in changes) - { - Logger.LogDebug("FSW Change: {change} = {val}", change.Key, change.Value); - _ = _fileDbManager.GetFileCacheByPath(change.Key); - } + HandleChanges(changes); + } - _fileDbManager.WriteOutFullCsv(); + private void HandleChanges(Dictionary changes) + { + lock (_fileDbManager) + { + 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: Deletion - {val}", entry); } + + 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) - { - 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(); - } + HandleChanges(changes); } public void InvokeScan() @@ -397,7 +408,7 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase } FileCacheSize = Directory.EnumerateFiles(_configService.Current.CacheFolder) - .AsParallel().Sum(f => + .Sum(f => { token.ThrowIfCancellationRequested(); diff --git a/MareSynchronos/FileCache/FileCacheManager.cs b/MareSynchronos/FileCache/FileCacheManager.cs index 57ad31f..ccfb72e 100644 --- a/MareSynchronos/FileCache/FileCacheManager.cs +++ b/MareSynchronos/FileCache/FileCacheManager.cs @@ -20,6 +20,7 @@ public sealed class FileCacheManager : IHostedService private readonly MareMediator _mareMediator; private readonly string _csvPath; private readonly ConcurrentDictionary> _fileCaches = new(StringComparer.Ordinal); + private readonly SemaphoreSlim _getCachesByPathsSemaphore = new(1, 1); private readonly object _fileWriteLock = new(); private readonly IpcManager _ipcManager; private readonly ILogger _logger; @@ -64,9 +65,9 @@ public sealed class FileCacheManager : IHostedService List output = []; 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); } } @@ -79,7 +80,7 @@ public sealed class FileCacheManager : IHostedService _mareMediator.Publish(new HaltScanMessage(nameof(ValidateLocalIntegrity))); _logger.LogInformation("Validating local storage"); var cacheEntries = _fileCaches.SelectMany(v => v.Value).Where(v => v.IsCacheEntry).ToList(); - List brokenEntities = new(); + List brokenEntities = []; int i = 0; foreach (var fileCache in cacheEntries) { @@ -176,32 +177,44 @@ public sealed class FileCacheManager : IHostedService public Dictionary GetFileCachesByPaths(string[] paths) { - var cleanedPaths = paths.Distinct(StringComparer.OrdinalIgnoreCase).ToDictionary(p => p, - p => p.Replace("/", "\\", StringComparison.OrdinalIgnoreCase) - .Replace(_ipcManager.PenumbraModDirectory!, - _ipcManager.PenumbraModDirectory!.EndsWith('\\') ? (PenumbraPrefix + "\\") : PenumbraPrefix, - StringComparison.OrdinalIgnoreCase), - StringComparer.OrdinalIgnoreCase); + _getCachesByPathsSemaphore.Wait(); - Dictionary result = new(StringComparer.OrdinalIgnoreCase); - - var dict = _fileCaches.SelectMany(f => f.Value).Where(f => f.PrefixedFilePath.StartsWith(PenumbraPrefix, StringComparison.Ordinal)) - .ToDictionary(d => d.PrefixedFilePath, d => d, StringComparer.Ordinal); - - foreach (var entry in cleanedPaths) + try { - if (dict.TryGetValue(entry.Value, out var entity)) - { - var validatedCache = GetValidatedFileCache(entity); - result.Add(entry.Key, validatedCache); - } - else - { - result.Add(entry.Key, CreateFileEntry(entry.Key)); - } - } + var cleanedPaths = paths.Distinct(StringComparer.OrdinalIgnoreCase).ToDictionary(p => p, + p => p.Replace("/", "\\", StringComparison.OrdinalIgnoreCase) + .Replace(_ipcManager.PenumbraModDirectory!, PenumbraPrefix, StringComparison.OrdinalIgnoreCase) + .Replace(_configService.Current.CacheFolder, CachePrefix, StringComparison.OrdinalIgnoreCase) + .Replace("\\\\", "\\", StringComparison.Ordinal), + StringComparer.OrdinalIgnoreCase); - return result; + Dictionary result = new(StringComparer.OrdinalIgnoreCase); + + var dict = _fileCaches.SelectMany(f => f.Value) + .ToDictionary(d => d.PrefixedFilePath, d => d, StringComparer.Ordinal); + + foreach (var entry in cleanedPaths) + { + if (dict.TryGetValue(entry.Value, out var entity)) + { + var validatedCache = GetValidatedFileCache(entity); + result.Add(entry.Key, validatedCache); + } + else + { + if (!entry.Value.Contains(CachePrefix, StringComparison.Ordinal)) + result.Add(entry.Key, CreateFileEntry(entry.Key)); + else + result.Add(entry.Key, CreateCacheEntry(entry.Key)); + } + } + + return result; + } + finally + { + _getCachesByPathsSemaphore.Release(); + } } public void RemoveHashedFile(string hash, string prefixedFilePath) @@ -281,8 +294,6 @@ public sealed class FileCacheManager : IHostedService try { RemoveHashedFile(fileCache.Hash, fileCache.PrefixedFilePath); - FileInfo fileInfo = new(fileCache.ResolvedFilepath); - FileInfo oldCache = fileInfo; var extensionPath = fileCache.ResolvedFilepath.ToUpper(CultureInfo.InvariantCulture) + "." + ext; File.Move(fileCache.ResolvedFilepath, extensionPath, overwrite: true); 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) { - var resulingFileCache = ReplacePathPrefixes(fileCache); - resulingFileCache = Validate(resulingFileCache); - return resulingFileCache; + var resultingFileCache = ReplacePathPrefixes(fileCache); + resultingFileCache = Validate(resultingFileCache); + return resultingFileCache; } private FileCacheEntity ReplacePathPrefixes(FileCacheEntity fileCache) diff --git a/MareSynchronos/Plugin.cs b/MareSynchronos/Plugin.cs index f848d9e..e568b5f 100644 --- a/MareSynchronos/Plugin.cs +++ b/MareSynchronos/Plugin.cs @@ -121,7 +121,7 @@ public sealed class Plugin : IDalamudPlugin collection.AddScoped((s) => new EditProfileUi(s.GetRequiredService>(), s.GetRequiredService(), s.GetRequiredService(), pluginInterface.UiBuilder, s.GetRequiredService(), - s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService())); + s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService())); collection.AddScoped(); collection.AddScoped(); collection.AddScoped(); diff --git a/MareSynchronos/Services/Mediator/WindowMediatorSubscriberBase.cs b/MareSynchronos/Services/Mediator/WindowMediatorSubscriberBase.cs index 9552d39..87a7b41 100644 --- a/MareSynchronos/Services/Mediator/WindowMediatorSubscriberBase.cs +++ b/MareSynchronos/Services/Mediator/WindowMediatorSubscriberBase.cs @@ -6,12 +6,14 @@ namespace MareSynchronos.Services.Mediator; public abstract class WindowMediatorSubscriberBase : Window, IMediatorSubscriber, IDisposable { 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; Mediator = mediator; - + _performanceCollectorService = performanceCollectorService; _logger.LogTrace("Creating {type}", GetType()); Mediator.Subscribe(this, (msg) => @@ -31,6 +33,13 @@ public abstract class WindowMediatorSubscriberBase : Window, IMediatorSubscriber GC.SuppressFinalize(this); } + public override void Draw() + { + _performanceCollectorService.LogPerformance(this, "Draw", DrawInternal); + } + + protected abstract void DrawInternal(); + public virtual Task StopAsync(CancellationToken cancellationToken) { return Task.CompletedTask; diff --git a/MareSynchronos/Services/UiFactory.cs b/MareSynchronos/Services/UiFactory.cs index 7db5232..88f53ac 100644 --- a/MareSynchronos/Services/UiFactory.cs +++ b/MareSynchronos/Services/UiFactory.cs @@ -18,10 +18,11 @@ public class UiFactory private readonly PairManager _pairManager; private readonly ServerConfigurationManager _serverConfigManager; private readonly MareProfileManager _mareProfileManager; + private readonly PerformanceCollectorService _performanceCollectorService; public UiFactory(ILoggerFactory loggerFactory, MareMediator mareMediator, ApiController apiController, UiSharedService uiSharedService, PairManager pairManager, ServerConfigurationManager serverConfigManager, - MareProfileManager mareProfileManager) + MareProfileManager mareProfileManager, PerformanceCollectorService performanceCollectorService) { _loggerFactory = loggerFactory; _mareMediator = mareMediator; @@ -30,23 +31,24 @@ public class UiFactory _pairManager = pairManager; _serverConfigManager = serverConfigManager; _mareProfileManager = mareProfileManager; + _performanceCollectorService = performanceCollectorService; } public SyncshellAdminUI CreateSyncshellAdminUi(GroupFullInfoDto dto) { return new SyncshellAdminUI(_loggerFactory.CreateLogger(), _mareMediator, - _apiController, _uiSharedService, _pairManager, dto); + _apiController, _uiSharedService, _pairManager, dto, _performanceCollectorService); } public StandaloneProfileUi CreateStandaloneProfileUi(Pair pair) { return new StandaloneProfileUi(_loggerFactory.CreateLogger(), _mareMediator, - _uiSharedService, _serverConfigManager, _mareProfileManager, _pairManager, pair); + _uiSharedService, _serverConfigManager, _mareProfileManager, _pairManager, pair, _performanceCollectorService); } public PermissionWindowUI CreatePermissionPopupUi(Pair pair) { return new PermissionWindowUI(_loggerFactory.CreateLogger(), pair, - _mareMediator, _uiSharedService, _apiController); + _mareMediator, _uiSharedService, _apiController, _performanceCollectorService); } } diff --git a/MareSynchronos/UI/CompactUI.cs b/MareSynchronos/UI/CompactUI.cs index 28edfcf..7e79632 100644 --- a/MareSynchronos/UI/CompactUI.cs +++ b/MareSynchronos/UI/CompactUI.cs @@ -59,7 +59,9 @@ public class CompactUi : WindowMediatorSubscriberBase private bool _wasOpen; public CompactUi(ILogger 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; _configService = configService; @@ -101,7 +103,7 @@ public class CompactUi : WindowMediatorSubscriberBase }; } - public override void Draw() + protected override void DrawInternal() { /*if (_apiController.ServerInfo.AccentColor.HasValue) { diff --git a/MareSynchronos/UI/Components/Popup/PopupHandler.cs b/MareSynchronos/UI/Components/Popup/PopupHandler.cs index fede15b..b463b28 100644 --- a/MareSynchronos/UI/Components/Popup/PopupHandler.cs +++ b/MareSynchronos/UI/Components/Popup/PopupHandler.cs @@ -2,6 +2,7 @@ using Dalamud.Interface.Utility; using Dalamud.Interface.Utility.Raii; using ImGuiNET; +using MareSynchronos.Services; using MareSynchronos.Services.Mediator; using Microsoft.Extensions.Logging; using System.Numerics; @@ -14,8 +15,8 @@ public class PopupHandler : WindowMediatorSubscriberBase private readonly HashSet _handlers; private IPopupHandler? _currentHandler = null; - public PopupHandler(ILogger logger, MareMediator mediator, IEnumerable popupHandlers) - : base(logger, mediator, "MarePopupHandler") + public PopupHandler(ILogger logger, MareMediator mediator, IEnumerable popupHandlers, PerformanceCollectorService performanceCollectorService) + : base(logger, mediator, "MarePopupHandler", performanceCollectorService) { Flags = ImGuiWindowFlags.NoBringToFrontOnFocus | ImGuiWindowFlags.NoDecoration @@ -46,7 +47,7 @@ public class PopupHandler : WindowMediatorSubscriberBase }); } - public override void Draw() + protected override void DrawInternal() { if (_currentHandler == null) return; diff --git a/MareSynchronos/UI/DataAnalysisUi.cs b/MareSynchronos/UI/DataAnalysisUi.cs index 0d00300..183f2d0 100644 --- a/MareSynchronos/UI/DataAnalysisUi.cs +++ b/MareSynchronos/UI/DataAnalysisUi.cs @@ -31,7 +31,8 @@ public class DataAnalysisUi : WindowMediatorSubscriberBase private ObjectKind _selectedObjectTab; private bool _showModal = false; - public DataAnalysisUi(ILogger logger, MareMediator mediator, CharacterAnalyzer characterAnalyzer, IpcManager ipcManager) : base(logger, mediator, "Mare Character Data Analysis") + public DataAnalysisUi(ILogger logger, MareMediator mediator, CharacterAnalyzer characterAnalyzer, IpcManager ipcManager, PerformanceCollectorService performanceCollectorService) + : base(logger, mediator, "Mare Character Data Analysis", performanceCollectorService) { _characterAnalyzer = characterAnalyzer; _ipcManager = ipcManager; @@ -56,7 +57,7 @@ public class DataAnalysisUi : WindowMediatorSubscriberBase _conversionProgress.ProgressChanged += ConversionProgress_ProgressChanged; } - public override void Draw() + protected override void DrawInternal() { if (_conversionTask != null && !_conversionTask.IsCompleted) { diff --git a/MareSynchronos/UI/DownloadUi.cs b/MareSynchronos/UI/DownloadUi.cs index 0f81b7c..5da8851 100644 --- a/MareSynchronos/UI/DownloadUi.cs +++ b/MareSynchronos/UI/DownloadUi.cs @@ -22,7 +22,8 @@ public class DownloadUi : WindowMediatorSubscriberBase private readonly ConcurrentDictionary _uploadingPlayers = new(); public DownloadUi(ILogger 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; _configService = configService; @@ -66,7 +67,7 @@ public class DownloadUi : WindowMediatorSubscriberBase }); } - public override void Draw() + protected override void DrawInternal() { if (_configService.Current.ShowTransferWindow) { diff --git a/MareSynchronos/UI/EditProfileUi.cs b/MareSynchronos/UI/EditProfileUi.cs index 7070596..529a3a9 100644 --- a/MareSynchronos/UI/EditProfileUi.cs +++ b/MareSynchronos/UI/EditProfileUi.cs @@ -36,7 +36,8 @@ public class EditProfileUi : WindowMediatorSubscriberBase public EditProfileUi(ILogger logger, MareMediator mediator, ApiController apiController, IUiBuilder uiBuilder, UiSharedService uiSharedService, 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; 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)"); diff --git a/MareSynchronos/UI/GposeUi.cs b/MareSynchronos/UI/GposeUi.cs index 7306dd4..e6448e5 100644 --- a/MareSynchronos/UI/GposeUi.cs +++ b/MareSynchronos/UI/GposeUi.cs @@ -20,7 +20,8 @@ public class GposeUi : WindowMediatorSubscriberBase public GposeUi(ILogger logger, MareCharaFileManager mareCharaFileManager, 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; _dalamudUtil = dalamudUtil; @@ -37,7 +38,7 @@ public class GposeUi : WindowMediatorSubscriberBase }; } - public override void Draw() + protected override void DrawInternal() { if (!_dalamudUtil.IsInGpose) IsOpen = false; diff --git a/MareSynchronos/UI/IntroUI.cs b/MareSynchronos/UI/IntroUI.cs index 32fb7fe..d4beee9 100644 --- a/MareSynchronos/UI/IntroUI.cs +++ b/MareSynchronos/UI/IntroUI.cs @@ -7,6 +7,7 @@ using MareSynchronos.FileCache; using MareSynchronos.Localization; using MareSynchronos.MareConfiguration; using MareSynchronos.MareConfiguration.Models; +using MareSynchronos.Services; using MareSynchronos.Services.Mediator; using MareSynchronos.Services.ServerConfiguration; using MareSynchronos.WebAPI; @@ -41,7 +42,8 @@ public class IntroUi : WindowMediatorSubscriberBase private RegisterReplyDto? _registrationReply; public IntroUi(ILogger 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; _configService = configService; @@ -69,7 +71,7 @@ public class IntroUi : WindowMediatorSubscriberBase }); } - public override void Draw() + protected override void DrawInternal() { if (_uiShared.IsInGpose) return; diff --git a/MareSynchronos/UI/PermissionWindowUI.cs b/MareSynchronos/UI/PermissionWindowUI.cs index 5ff02ee..fa3e4d8 100644 --- a/MareSynchronos/UI/PermissionWindowUI.cs +++ b/MareSynchronos/UI/PermissionWindowUI.cs @@ -4,6 +4,7 @@ using ImGuiNET; using MareSynchronos.API.Data.Enum; using MareSynchronos.API.Data.Extensions; using MareSynchronos.PlayerData.Pairs; +using MareSynchronos.Services; using MareSynchronos.Services.Mediator; using MareSynchronos.Utils; using MareSynchronos.WebAPI; @@ -20,7 +21,8 @@ public class PermissionWindowUI : WindowMediatorSubscriberBase private UserPermissions _ownPermissions; public PermissionWindowUI(ILogger 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; _uiSharedService = uiSharedService; @@ -35,7 +37,7 @@ public class PermissionWindowUI : WindowMediatorSubscriberBase IsOpen = true; } - public override void Draw() + protected override void DrawInternal() { var paused = _ownPermissions.IsPaused(); var disableSounds = _ownPermissions.IsDisableSounds(); diff --git a/MareSynchronos/UI/PopoutProfileUi.cs b/MareSynchronos/UI/PopoutProfileUi.cs index 00e40ca..01b72c7 100644 --- a/MareSynchronos/UI/PopoutProfileUi.cs +++ b/MareSynchronos/UI/PopoutProfileUi.cs @@ -30,7 +30,7 @@ public class PopoutProfileUi : WindowMediatorSubscriberBase public PopoutProfileUi(ILogger logger, MareMediator mediator, UiSharedService uiSharedService, 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; _serverManager = serverManager; @@ -78,7 +78,7 @@ public class PopoutProfileUi : WindowMediatorSubscriberBase IsOpen = false; } - public override void Draw() + protected override void DrawInternal() { if (_pair == null) return; diff --git a/MareSynchronos/UI/SettingsUi.cs b/MareSynchronos/UI/SettingsUi.cs index a8b3033..021927c 100644 --- a/MareSynchronos/UI/SettingsUi.cs +++ b/MareSynchronos/UI/SettingsUi.cs @@ -81,7 +81,7 @@ public class SettingsUi : WindowMediatorSubscriberBase FileTransferOrchestrator fileTransferOrchestrator, FileCacheManager fileCacheManager, 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; _mareCharaFileManager = mareCharaFileManager; @@ -120,7 +120,7 @@ public class SettingsUi : WindowMediatorSubscriberBase public CharacterData? LastCreatedCharacterData { private get; set; } private ApiController ApiController => _uiShared.ApiController; - public override void Draw() + protected override void DrawInternal() { _ = _uiShared.DrawOtherPluginState(); diff --git a/MareSynchronos/UI/StandaloneProfileUi.cs b/MareSynchronos/UI/StandaloneProfileUi.cs index 0b03fc3..750d269 100644 --- a/MareSynchronos/UI/StandaloneProfileUi.cs +++ b/MareSynchronos/UI/StandaloneProfileUi.cs @@ -26,8 +26,9 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase private IDalamudTextureWrap? _textureWrap; public StandaloneProfileUi(ILogger logger, MareMediator mediator, UiSharedService uiBuilder, - ServerConfigurationManager serverManager, MareProfileManager mareProfileManager, PairManager pairManager, Pair pair) - : base(logger, mediator, "Profile of " + pair.UserData.AliasOrUID + "##LoporritSyncStandaloneProfileUI" + pair.UserData.AliasOrUID) + ServerConfigurationManager serverManager, MareProfileManager mareProfileManager, PairManager pairManager, Pair pair, + PerformanceCollectorService performanceCollector) + : base(logger, mediator, "Profile of " + pair.UserData.AliasOrUID + "##LoporritSyncStandaloneProfileUI" + pair.UserData.AliasOrUID, performanceCollector) { _uiSharedService = uiBuilder; _serverManager = serverManager; @@ -45,7 +46,7 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase public Pair Pair { get; init; } - public override void Draw() + protected override void DrawInternal() { try { diff --git a/MareSynchronos/UI/SyncshellAdminUI.cs b/MareSynchronos/UI/SyncshellAdminUI.cs index 72f5ebe..07ca119 100644 --- a/MareSynchronos/UI/SyncshellAdminUI.cs +++ b/MareSynchronos/UI/SyncshellAdminUI.cs @@ -7,6 +7,7 @@ using MareSynchronos.API.Data.Enum; using MareSynchronos.API.Data.Extensions; using MareSynchronos.API.Dto.Group; using MareSynchronos.PlayerData.Pairs; +using MareSynchronos.Services; using MareSynchronos.Services.Mediator; using MareSynchronos.WebAPI; using Microsoft.Extensions.Logging; @@ -31,8 +32,8 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase private int _pruneDays = 14; public SyncshellAdminUI(ILogger logger, MareMediator mediator, ApiController apiController, - UiSharedService uiSharedService, PairManager pairManager, GroupFullInfoDto groupFullInfo) - : base(logger, mediator, "Syncshell Admin Panel (" + groupFullInfo.GroupAliasOrGID + ")") + UiSharedService uiSharedService, PairManager pairManager, GroupFullInfoDto groupFullInfo, PerformanceCollectorService performanceCollectorService) + : base(logger, mediator, "Syncshell Admin Panel (" + groupFullInfo.GroupAliasOrGID + ")", performanceCollectorService) { GroupFullInfo = groupFullInfo; _apiController = apiController; @@ -53,7 +54,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase public GroupFullInfoDto GroupFullInfo { get; private set; } - public override void Draw() + protected override void DrawInternal() { if (!_isModerator && !_isOwner) return;