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);
|
||||||
{
|
}
|
||||||
lock (_fileDbManager)
|
|
||||||
{
|
|
||||||
foreach (var change in changes)
|
|
||||||
{
|
|
||||||
Logger.LogDebug("FSW Change: {change} = {val}", change.Key, change.Value);
|
|
||||||
_ = _fileDbManager.GetFileCacheByPath(change.Key);
|
|
||||||
}
|
|
||||||
|
|
||||||
_fileDbManager.WriteOutFullCsv();
|
private void HandleChanges(Dictionary<string, WatcherChange> 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)
|
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)
|
||||||
{
|
{
|
||||||
@@ -176,32 +177,44 @@ public sealed class FileCacheManager : IHostedService
|
|||||||
|
|
||||||
public Dictionary<string, FileCacheEntity?> GetFileCachesByPaths(string[] paths)
|
public Dictionary<string, FileCacheEntity?> GetFileCachesByPaths(string[] paths)
|
||||||
{
|
{
|
||||||
var cleanedPaths = paths.Distinct(StringComparer.OrdinalIgnoreCase).ToDictionary(p => p,
|
_getCachesByPathsSemaphore.Wait();
|
||||||
p => p.Replace("/", "\\", StringComparison.OrdinalIgnoreCase)
|
|
||||||
.Replace(_ipcManager.PenumbraModDirectory!,
|
|
||||||
_ipcManager.PenumbraModDirectory!.EndsWith('\\') ? (PenumbraPrefix + "\\") : PenumbraPrefix,
|
|
||||||
StringComparison.OrdinalIgnoreCase),
|
|
||||||
StringComparer.OrdinalIgnoreCase);
|
|
||||||
|
|
||||||
Dictionary<string, FileCacheEntity?> result = new(StringComparer.OrdinalIgnoreCase);
|
try
|
||||||
|
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
if (dict.TryGetValue(entry.Value, out var entity))
|
var cleanedPaths = paths.Distinct(StringComparer.OrdinalIgnoreCase).ToDictionary(p => p,
|
||||||
{
|
p => p.Replace("/", "\\", StringComparison.OrdinalIgnoreCase)
|
||||||
var validatedCache = GetValidatedFileCache(entity);
|
.Replace(_ipcManager.PenumbraModDirectory!, PenumbraPrefix, StringComparison.OrdinalIgnoreCase)
|
||||||
result.Add(entry.Key, validatedCache);
|
.Replace(_configService.Current.CacheFolder, CachePrefix, StringComparison.OrdinalIgnoreCase)
|
||||||
}
|
.Replace("\\\\", "\\", StringComparison.Ordinal),
|
||||||
else
|
StringComparer.OrdinalIgnoreCase);
|
||||||
{
|
|
||||||
result.Add(entry.Key, CreateFileEntry(entry.Key));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
Dictionary<string, FileCacheEntity?> 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)
|
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