add DI, start implementing mediator pattern instead of events
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using System.Collections.Concurrent;
|
||||
using MareSynchronos.Managers;
|
||||
using MareSynchronos.MareConfiguration;
|
||||
using MareSynchronos.Mediator;
|
||||
using MareSynchronos.Utils;
|
||||
using MareSynchronos.WebAPI;
|
||||
|
||||
@@ -13,10 +14,11 @@ public class PeriodicFileScanner : IDisposable
|
||||
private readonly FileCacheManager _fileDbManager;
|
||||
private readonly ApiController _apiController;
|
||||
private readonly DalamudUtil _dalamudUtil;
|
||||
private readonly MareMediator _mediator;
|
||||
private CancellationTokenSource? _scanCancellationTokenSource;
|
||||
private Task? _fileScannerTask = null;
|
||||
public ConcurrentDictionary<string, int> haltScanLocks = new(StringComparer.Ordinal);
|
||||
public PeriodicFileScanner(IpcManager ipcManager, ConfigurationService configService, FileCacheManager fileDbManager, ApiController apiController, DalamudUtil dalamudUtil)
|
||||
public PeriodicFileScanner(IpcManager ipcManager, ConfigurationService configService, FileCacheManager fileDbManager, ApiController apiController, DalamudUtil dalamudUtil, MareMediator mediator)
|
||||
{
|
||||
Logger.Verbose("Creating " + nameof(PeriodicFileScanner));
|
||||
|
||||
@@ -25,11 +27,14 @@ public class PeriodicFileScanner : IDisposable
|
||||
_fileDbManager = fileDbManager;
|
||||
_apiController = apiController;
|
||||
_dalamudUtil = dalamudUtil;
|
||||
_mediator = mediator;
|
||||
_ipcManager.PenumbraInitialized += StartScan;
|
||||
_apiController.DownloadStarted += ApiHaltScan;
|
||||
_apiController.DownloadFinished += ApiResumeScan;
|
||||
_dalamudUtil.ZoneSwitchStart += ZoneSwitchHaltScan;
|
||||
_dalamudUtil.ZoneSwitchEnd += ZoneSwitchResumeScan;
|
||||
|
||||
_mediator.Subscribe<ZoneSwitchStartMessage>(this, (_) => ZoneSwitchHaltScan());
|
||||
_mediator.Subscribe<ZoneSwitchEndMessage>(this, (_) => ZoneSwitchResumeScan());
|
||||
_mediator.Subscribe<SwitchToMainUiMessage>(this, (_) => StartScan());
|
||||
}
|
||||
|
||||
private void ApiHaltScan()
|
||||
@@ -104,8 +109,6 @@ public class PeriodicFileScanner : IDisposable
|
||||
_ipcManager.PenumbraInitialized -= StartScan;
|
||||
_apiController.DownloadStarted -= ApiHaltScan;
|
||||
_apiController.DownloadFinished -= ApiResumeScan;
|
||||
_dalamudUtil.ZoneSwitchStart -= ZoneSwitchHaltScan;
|
||||
_dalamudUtil.ZoneSwitchEnd -= ZoneSwitchResumeScan;
|
||||
_scanCancellationTokenSource?.Cancel();
|
||||
}
|
||||
|
||||
@@ -201,9 +204,9 @@ public class PeriodicFileScanner : IDisposable
|
||||
|
||||
var scannedFiles = new ConcurrentDictionary<string, bool>(Directory.EnumerateFiles(penumbraDir!, "*.*", SearchOption.AllDirectories)
|
||||
.Select(s => s.ToLowerInvariant())
|
||||
.Where(f => ext.Any(e => f.EndsWith(e, StringComparison.OrdinalIgnoreCase))
|
||||
&& !f.Contains(@"\bg\", StringComparison.OrdinalIgnoreCase)
|
||||
&& !f.Contains(@"\bgcommon\", StringComparison.OrdinalIgnoreCase)
|
||||
.Where(f => ext.Any(e => f.EndsWith(e, StringComparison.OrdinalIgnoreCase))
|
||||
&& !f.Contains(@"\bg\", StringComparison.OrdinalIgnoreCase)
|
||||
&& !f.Contains(@"\bgcommon\", StringComparison.OrdinalIgnoreCase)
|
||||
&& !f.Contains(@"\ui\", StringComparison.OrdinalIgnoreCase))
|
||||
.Concat(Directory.EnumerateFiles(_configService.Current.CacheFolder, "*.*", SearchOption.TopDirectoryOnly)
|
||||
.Where(f => new FileInfo(f).Name.Length == 40)
|
||||
|
||||
@@ -8,10 +8,10 @@ using System.Text;
|
||||
using Penumbra.Api.Enums;
|
||||
using Penumbra.Api.Helpers;
|
||||
using MareSynchronos.Delegates;
|
||||
using MareSynchronos.Mediator;
|
||||
|
||||
namespace MareSynchronos.Managers;
|
||||
|
||||
|
||||
public class IpcManager : IDisposable
|
||||
{
|
||||
private readonly ICallGateSubscriber<int> _glamourerApiVersion;
|
||||
@@ -58,12 +58,13 @@ public class IpcManager : IDisposable
|
||||
private readonly ICallGateSubscriber<Character, string, object> _palettePlusPaletteChanged;
|
||||
|
||||
private readonly DalamudUtil _dalamudUtil;
|
||||
private readonly MareMediator _mediator;
|
||||
private bool _inGposeQueueMode = false;
|
||||
private ConcurrentQueue<Action> ActionQueue => _inGposeQueueMode ? _gposeActionQueue : _normalQueue;
|
||||
private readonly ConcurrentQueue<Action> _normalQueue = new();
|
||||
private readonly ConcurrentQueue<Action> _gposeActionQueue = new();
|
||||
|
||||
public IpcManager(DalamudPluginInterface pi, DalamudUtil dalamudUtil)
|
||||
public IpcManager(DalamudPluginInterface pi, DalamudUtil dalamudUtil, MareMediator mediator)
|
||||
{
|
||||
Logger.Verbose("Creating " + nameof(IpcManager));
|
||||
|
||||
@@ -123,9 +124,10 @@ public class IpcManager : IDisposable
|
||||
}
|
||||
|
||||
_dalamudUtil = dalamudUtil;
|
||||
_dalamudUtil.FrameworkUpdate += HandleActionQueue;
|
||||
_dalamudUtil.GposeFrameworkUpdate += HandleGposeActionQueue;
|
||||
_dalamudUtil.ZoneSwitchEnd += ClearActionQueue;
|
||||
_mediator = mediator;
|
||||
_mediator.Subscribe<FrameworkUpdateMessage>(this, (_) => HandleActionQueue());
|
||||
_mediator.Subscribe<GposeFrameworkUpdateMessage>(this, (_) => HandleGposeActionQueue());
|
||||
_mediator.Subscribe<ZoneSwitchEndMessage>(this, (_) => ClearActionQueue());
|
||||
}
|
||||
|
||||
private void HandleGposeActionQueue()
|
||||
@@ -263,9 +265,6 @@ public class IpcManager : IDisposable
|
||||
Logger.Verbose("Action queue clear or not, disposing");
|
||||
}
|
||||
|
||||
_dalamudUtil.FrameworkUpdate -= HandleActionQueue;
|
||||
_dalamudUtil.ZoneSwitchEnd -= ClearActionQueue;
|
||||
_dalamudUtil.GposeFrameworkUpdate -= HandleGposeActionQueue;
|
||||
ActionQueue.Clear();
|
||||
|
||||
_penumbraGameObjectResourcePathResolved.Dispose();
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using MareSynchronos.API.Data;
|
||||
using MareSynchronos.API.Dto.User;
|
||||
using MareSynchronos.FileCache;
|
||||
using MareSynchronos.Mediator;
|
||||
using MareSynchronos.Utils;
|
||||
using MareSynchronos.WebAPI;
|
||||
|
||||
@@ -13,8 +14,9 @@ public class OnlinePlayerManager : IDisposable
|
||||
private readonly PlayerManager _playerManager;
|
||||
private readonly FileCacheManager _fileDbManager;
|
||||
private readonly PairManager _pairManager;
|
||||
private readonly MareMediator _mediator;
|
||||
|
||||
public OnlinePlayerManager(ApiController apiController, DalamudUtil dalamudUtil, PlayerManager playerManager, FileCacheManager fileDbManager, PairManager pairManager)
|
||||
public OnlinePlayerManager(ApiController apiController, DalamudUtil dalamudUtil, PlayerManager playerManager, FileCacheManager fileDbManager, PairManager pairManager, MareMediator mediator)
|
||||
{
|
||||
Logger.Verbose("Creating " + nameof(OnlinePlayerManager));
|
||||
|
||||
@@ -23,11 +25,11 @@ public class OnlinePlayerManager : IDisposable
|
||||
_playerManager = playerManager;
|
||||
_fileDbManager = fileDbManager;
|
||||
_pairManager = pairManager;
|
||||
|
||||
_mediator = mediator;
|
||||
_playerManager.PlayerHasChanged += PlayerManagerOnPlayerHasChanged;
|
||||
|
||||
_dalamudUtil.LogIn += DalamudUtilOnLogIn;
|
||||
_dalamudUtil.LogOut += DalamudUtilOnLogOut;
|
||||
_mediator.Subscribe<DalamudLoginMessage>(this, (_) => DalamudUtilOnLogIn());
|
||||
_mediator.Subscribe<DalamudLogoutMessage>(this, (_) => DalamudUtilOnLogOut());
|
||||
|
||||
if (_dalamudUtil.IsLoggedIn)
|
||||
{
|
||||
@@ -42,12 +44,12 @@ public class OnlinePlayerManager : IDisposable
|
||||
|
||||
private void DalamudUtilOnLogIn()
|
||||
{
|
||||
_dalamudUtil.DelayedFrameworkUpdate += FrameworkOnUpdate;
|
||||
_mediator.Subscribe<DelayedFrameworkUpdateMessage>(this, (_) => FrameworkOnUpdate());
|
||||
}
|
||||
|
||||
private void DalamudUtilOnLogOut()
|
||||
{
|
||||
_dalamudUtil.DelayedFrameworkUpdate -= FrameworkOnUpdate;
|
||||
_mediator.Unsubscribe<DelayedFrameworkUpdateMessage>(this);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
@@ -55,9 +57,9 @@ public class OnlinePlayerManager : IDisposable
|
||||
Logger.Verbose("Disposing " + nameof(OnlinePlayerManager));
|
||||
|
||||
_playerManager.PlayerHasChanged -= PlayerManagerOnPlayerHasChanged;
|
||||
_dalamudUtil.LogIn -= DalamudUtilOnLogIn;
|
||||
_dalamudUtil.LogOut -= DalamudUtilOnLogOut;
|
||||
_dalamudUtil.DelayedFrameworkUpdate -= FrameworkOnUpdate;
|
||||
_mediator.Unsubscribe<DalamudLoginMessage>(this);
|
||||
_mediator.Unsubscribe<DalamudLogoutMessage>(this);
|
||||
_mediator.Unsubscribe<DelayedFrameworkUpdateMessage>(this);
|
||||
}
|
||||
|
||||
private void FrameworkOnUpdate()
|
||||
|
||||
@@ -8,6 +8,7 @@ using MareSynchronos.API.Dto.Group;
|
||||
using MareSynchronos.API.Dto.User;
|
||||
using MareSynchronos.Factories;
|
||||
using MareSynchronos.MareConfiguration;
|
||||
using MareSynchronos.Mediator;
|
||||
using MareSynchronos.Models;
|
||||
using MareSynchronos.Utils;
|
||||
using MareSynchronos.WebAPI;
|
||||
@@ -24,16 +25,18 @@ public class PairManager : IDisposable
|
||||
private readonly PairFactory _pairFactory;
|
||||
private readonly UiBuilder _uiBuilder;
|
||||
private readonly ConfigurationService _configurationService;
|
||||
private readonly MareMediator _mediator;
|
||||
|
||||
public PairManager(CachedPlayerFactory cachedPlayerFactory, DalamudUtil dalamudUtil, PairFactory pairFactory, UiBuilder uiBuilder, ConfigurationService configurationService)
|
||||
public PairManager(CachedPlayerFactory cachedPlayerFactory, DalamudUtil dalamudUtil, PairFactory pairFactory, UiBuilder uiBuilder, ConfigurationService configurationService, MareMediator mediator)
|
||||
{
|
||||
_cachedPlayerFactory = cachedPlayerFactory;
|
||||
_dalamudUtil = dalamudUtil;
|
||||
_pairFactory = pairFactory;
|
||||
_uiBuilder = uiBuilder;
|
||||
_configurationService = configurationService;
|
||||
_dalamudUtil.ZoneSwitchStart += DalamudUtilOnZoneSwitched;
|
||||
_dalamudUtil.DelayedFrameworkUpdate += DalamudUtilOnDelayedFrameworkUpdate;
|
||||
_mediator = mediator;
|
||||
_mediator.Subscribe<ZoneSwitchStartMessage>(this, (_) => DalamudUtilOnZoneSwitched());
|
||||
_mediator.Subscribe<DelayedFrameworkUpdateMessage>(this, (_) => DalamudUtilOnDelayedFrameworkUpdate());
|
||||
_directPairsInternal = DirectPairsLazy();
|
||||
_groupPairsInternal = GroupPairsLazy();
|
||||
}
|
||||
@@ -137,8 +140,6 @@ public class PairManager : IDisposable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_dalamudUtil.DelayedFrameworkUpdate -= DalamudUtilOnDelayedFrameworkUpdate;
|
||||
_dalamudUtil.ZoneSwitchStart -= DalamudUtilOnZoneSwitched;
|
||||
DisposePairs();
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ using MareSynchronos.FileCache;
|
||||
using MareSynchronos.UI;
|
||||
using MareSynchronos.API.Data.Enum;
|
||||
using MareSynchronos.Delegates;
|
||||
using MareSynchronos.Mediator;
|
||||
#if DEBUG
|
||||
#endif
|
||||
|
||||
@@ -21,6 +22,7 @@ public class PlayerManager : IDisposable
|
||||
private readonly TransientResourceManager _transientResourceManager;
|
||||
private readonly PeriodicFileScanner _periodicFileScanner;
|
||||
private readonly SettingsUi _settingsUi;
|
||||
private readonly MareMediator _mediator;
|
||||
private readonly IpcManager _ipcManager;
|
||||
public event CharacterDataDelegate? PlayerHasChanged;
|
||||
public API.Data.CharacterData? LastCreatedCharacterData { get; private set; }
|
||||
@@ -34,7 +36,7 @@ public class PlayerManager : IDisposable
|
||||
|
||||
public unsafe PlayerManager(ApiController apiController, IpcManager ipcManager,
|
||||
CharacterDataFactory characterDataFactory, DalamudUtil dalamudUtil, TransientResourceManager transientResourceManager,
|
||||
PeriodicFileScanner periodicFileScanner, SettingsUi settingsUi)
|
||||
PeriodicFileScanner periodicFileScanner, SettingsUi settingsUi, MareMediator mediator)
|
||||
{
|
||||
Logger.Verbose("Creating " + nameof(PlayerManager));
|
||||
|
||||
@@ -45,15 +47,16 @@ public class PlayerManager : IDisposable
|
||||
_transientResourceManager = transientResourceManager;
|
||||
_periodicFileScanner = periodicFileScanner;
|
||||
_settingsUi = settingsUi;
|
||||
_mediator = mediator;
|
||||
_apiController.Connected += ApiControllerOnConnected;
|
||||
_apiController.Disconnected += ApiController_Disconnected;
|
||||
_transientResourceManager.TransientResourceLoaded += HandleTransientResourceLoad;
|
||||
_dalamudUtil.DelayedFrameworkUpdate += DalamudUtilOnDelayedFrameworkUpdate;
|
||||
_ipcManager.HeelsOffsetChangeEvent += HeelsOffsetChanged;
|
||||
_ipcManager.CustomizePlusScaleChange += CustomizePlusChanged;
|
||||
_ipcManager.PalettePlusPaletteChange += PalettePlusChanged;
|
||||
_dalamudUtil.FrameworkUpdate += DalamudUtilOnFrameworkUpdate;
|
||||
|
||||
_mediator.Subscribe<DelayedFrameworkUpdateMessage>(this, (_) => DalamudUtilOnDelayedFrameworkUpdate());
|
||||
_mediator.Subscribe<FrameworkUpdateMessage>(this, (_) => DalamudUtilOnFrameworkUpdate());
|
||||
|
||||
Logger.Debug("Watching Player, ApiController is Connected: " + _apiController.IsConnected);
|
||||
if (_apiController.IsConnected)
|
||||
@@ -134,12 +137,13 @@ public class PlayerManager : IDisposable
|
||||
{
|
||||
Logger.Verbose("Disposing " + nameof(PlayerManager));
|
||||
|
||||
_mediator.Unsubscribe<DelayedFrameworkUpdateMessage>(this);
|
||||
_mediator.Unsubscribe<FrameworkUpdateMessage>(this);
|
||||
|
||||
_apiController.Connected -= ApiControllerOnConnected;
|
||||
_apiController.Disconnected -= ApiController_Disconnected;
|
||||
|
||||
_ipcManager.PenumbraRedrawEvent -= IpcManager_PenumbraRedrawEvent;
|
||||
_dalamudUtil.DelayedFrameworkUpdate -= DalamudUtilOnDelayedFrameworkUpdate;
|
||||
_dalamudUtil.FrameworkUpdate -= DalamudUtilOnFrameworkUpdate;
|
||||
|
||||
_transientResourceManager.TransientResourceLoaded -= HandleTransientResourceLoad;
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using MareSynchronos.Delegates;
|
||||
using MareSynchronos.Factories;
|
||||
using MareSynchronos.MareConfiguration;
|
||||
using MareSynchronos.Mediator;
|
||||
using MareSynchronos.Models;
|
||||
using MareSynchronos.Utils;
|
||||
using System.Collections.Concurrent;
|
||||
@@ -14,6 +15,8 @@ public class TransientResourceManager : IDisposable
|
||||
private readonly IpcManager _ipcManager;
|
||||
private readonly ConfigurationService _configurationService;
|
||||
private readonly DalamudUtil _dalamudUtil;
|
||||
private readonly MareMediator _mediator;
|
||||
|
||||
public event DrawObjectDelegate? TransientResourceLoaded;
|
||||
public IntPtr[] PlayerRelatedPointers = Array.Empty<IntPtr>();
|
||||
private readonly string[] _fileTypesToHandle = new[] { "tmb", "pap", "avfx", "atex", "sklb", "eid", "phyb", "scd", "skp", "shpk" };
|
||||
@@ -23,15 +26,16 @@ public class TransientResourceManager : IDisposable
|
||||
|
||||
private ConcurrentDictionary<IntPtr, HashSet<string>> TransientResources { get; } = new();
|
||||
private ConcurrentDictionary<ObjectKind, HashSet<FileReplacement>> SemiTransientResources { get; } = new();
|
||||
public TransientResourceManager(IpcManager manager, ConfigurationService configurationService, DalamudUtil dalamudUtil, FileReplacementFactory fileReplacementFactory)
|
||||
public TransientResourceManager(IpcManager manager, ConfigurationService configurationService, DalamudUtil dalamudUtil, FileReplacementFactory fileReplacementFactory, MareMediator mediator)
|
||||
{
|
||||
manager.PenumbraResourceLoadEvent += Manager_PenumbraResourceLoadEvent;
|
||||
manager.PenumbraModSettingChanged += Manager_PenumbraModSettingChanged;
|
||||
_ipcManager = manager;
|
||||
_configurationService = configurationService;
|
||||
_dalamudUtil = dalamudUtil;
|
||||
dalamudUtil.FrameworkUpdate += DalamudUtil_FrameworkUpdate;
|
||||
dalamudUtil.ClassJobChanged += DalamudUtil_ClassJobChanged;
|
||||
_mediator = mediator;
|
||||
_mediator.Subscribe<FrameworkUpdateMessage>(this, (_) => DalamudUtil_FrameworkUpdate());
|
||||
_mediator.Subscribe<ClassJobChangedMessage>(this, (_) => DalamudUtil_ClassJobChanged());
|
||||
// migrate obsolete data to new format
|
||||
if (File.Exists(PersistentDataCache))
|
||||
{
|
||||
@@ -248,9 +252,9 @@ public class TransientResourceManager : IDisposable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_dalamudUtil.FrameworkUpdate -= DalamudUtil_FrameworkUpdate;
|
||||
_mediator.Unsubscribe<FrameworkUpdateMessage>(this);
|
||||
_mediator.Unsubscribe<ClassJobChangedMessage>(this);
|
||||
_ipcManager.PenumbraResourceLoadEvent -= Manager_PenumbraResourceLoadEvent;
|
||||
_dalamudUtil.ClassJobChanged -= DalamudUtil_ClassJobChanged;
|
||||
_ipcManager.PenumbraModSettingChanged -= Manager_PenumbraModSettingChanged;
|
||||
TransientResources.Clear();
|
||||
SemiTransientResources.Clear();
|
||||
|
||||
23
MareSynchronos/Mediator/Messages.cs
Normal file
23
MareSynchronos/Mediator/Messages.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MareSynchronos.Mediator;
|
||||
|
||||
#pragma warning disable MA0048 // File name must match type name
|
||||
public record SwitchToIntroUiMessage : IMessage;
|
||||
public record SwitchToMainUiMessage : IMessage;
|
||||
public record OpenSettingsUiMessage : IMessage;
|
||||
public record DalamudLoginMessage : IMessage;
|
||||
public record DalamudLogoutMessage : IMessage;
|
||||
public record FrameworkUpdateMessage : IMessage;
|
||||
public record ClassJobChangedMessage : IMessage;
|
||||
public record DelayedFrameworkUpdateMessage : IMessage;
|
||||
public record ZoneSwitchStartMessage : IMessage;
|
||||
public record ZoneSwitchEndMessage : IMessage;
|
||||
public record GposeStartMessage : IMessage;
|
||||
public record GposeEndMessage : IMessage;
|
||||
public record GposeFrameworkUpdateMessage : IMessage;
|
||||
#pragma warning restore MA0048 // File name must match type name
|
||||
@@ -18,38 +18,13 @@ using Dalamud.Data;
|
||||
using MareSynchronos.MareConfiguration;
|
||||
using MareSynchronos.Mediator;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
|
||||
namespace MareSynchronos;
|
||||
|
||||
public sealed class Plugin : IDalamudPlugin
|
||||
{
|
||||
private const string _commandName = "/mare";
|
||||
private readonly ApiController _apiController;
|
||||
private readonly CommandManager _commandManager;
|
||||
private readonly PeriodicFileScanner _periodicFileScanner;
|
||||
private readonly IntroUi _introUi;
|
||||
private readonly IpcManager _ipcManager;
|
||||
private readonly DalamudPluginInterface _pluginInterface;
|
||||
private readonly SettingsUi _settingsUi;
|
||||
private readonly WindowSystem _windowSystem;
|
||||
private PlayerManager? _playerManager;
|
||||
private TransientResourceManager? _transientResourceManager;
|
||||
private readonly DalamudUtil _dalamudUtil;
|
||||
private OnlinePlayerManager? _characterCacheManager;
|
||||
private readonly DownloadUi _downloadUi;
|
||||
private readonly FileDialogManager _fileDialogManager;
|
||||
private readonly FileCacheManager _fileCacheManager;
|
||||
private readonly PairManager _pairManager;
|
||||
private readonly CompactUi _compactUi;
|
||||
private readonly UiShared _uiSharedComponent;
|
||||
private readonly Dalamud.Localization _localization;
|
||||
private readonly FileReplacementFactory _fileReplacementFactory;
|
||||
private readonly MareCharaFileManager _mareCharaFileManager;
|
||||
private readonly ServerConfigurationManager _serverConfigurationManager;
|
||||
private readonly GposeUi _gposeUi;
|
||||
private readonly ConfigurationService _configurationService;
|
||||
private readonly MareMediator _mediator;
|
||||
private IServiceScope? _runtimeServiceServiceScope;
|
||||
private readonly ServiceProvider _serviceProvider;
|
||||
|
||||
|
||||
@@ -57,9 +32,6 @@ public sealed class Plugin : IDalamudPlugin
|
||||
Framework framework, ObjectTable objectTable, ClientState clientState, Condition condition, ChatGui chatGui)
|
||||
{
|
||||
Logger.Debug("Launching " + Name);
|
||||
_pluginInterface = pluginInterface;
|
||||
_pluginInterface.UiBuilder.DisableGposeUiHide = true;
|
||||
_commandManager = commandManager;
|
||||
|
||||
IServiceCollection collection = new ServiceCollection();
|
||||
// inject dalamud stuff
|
||||
@@ -71,6 +43,7 @@ public sealed class Plugin : IDalamudPlugin
|
||||
collection.AddSingleton(clientState);
|
||||
collection.AddSingleton(condition);
|
||||
collection.AddSingleton(chatGui);
|
||||
collection.AddSingleton(pluginInterface.UiBuilder);
|
||||
collection.AddSingleton(new WindowSystem("MareSynchronos"));
|
||||
collection.AddSingleton<FileDialogManager>();
|
||||
|
||||
@@ -82,6 +55,8 @@ public sealed class Plugin : IDalamudPlugin
|
||||
collection.AddSingleton<DalamudUtil>();
|
||||
collection.AddSingleton<IpcManager>();
|
||||
collection.AddSingleton<FileCacheManager>();
|
||||
collection.AddSingleton<CachedPlayerFactory>();
|
||||
collection.AddSingleton<PairFactory>();
|
||||
collection.AddSingleton<ServerConfigurationManager>();
|
||||
collection.AddSingleton<PairManager>();
|
||||
collection.AddSingleton<ApiController>();
|
||||
@@ -94,44 +69,30 @@ public sealed class Plugin : IDalamudPlugin
|
||||
collection.AddSingleton<CompactUi>();
|
||||
collection.AddSingleton<GposeUi>();
|
||||
collection.AddSingleton<IntroUi>();
|
||||
collection.AddSingleton<DownloadUi>();
|
||||
|
||||
collection.AddTransient<TransientResourceManager>();
|
||||
collection.AddTransient<CharacterDataFactory>();
|
||||
collection.AddTransient<PlayerManager>();
|
||||
collection.AddTransient<OnlinePlayerManager>();
|
||||
collection.AddScoped<TransientResourceManager>();
|
||||
collection.AddScoped<CharacterDataFactory>();
|
||||
collection.AddScoped<PlayerManager>();
|
||||
collection.AddScoped<OnlinePlayerManager>();
|
||||
|
||||
_serviceProvider = collection.BuildServiceProvider(new ServiceProviderOptions() { ValidateOnBuild = true, ValidateScopes = true });
|
||||
|
||||
_serviceProvider.GetRequiredService<Dalamud.Localization>().SetupWithLangCode("en");
|
||||
|
||||
// those can be initialized outside of game login
|
||||
|
||||
_settingsUi.SwitchToIntroUi += () =>
|
||||
{
|
||||
_introUi.IsOpen = true;
|
||||
_settingsUi.IsOpen = false;
|
||||
_compactUi.IsOpen = false;
|
||||
};
|
||||
_introUi.SwitchToMainUi += () =>
|
||||
{
|
||||
_introUi.IsOpen = false;
|
||||
_compactUi.IsOpen = true;
|
||||
_periodicFileScanner.StartScan();
|
||||
ReLaunchCharacterManager();
|
||||
};
|
||||
_compactUi.OpenSettingsUi += () =>
|
||||
{
|
||||
_settingsUi.Toggle();
|
||||
};
|
||||
_downloadUi = new DownloadUi(_windowSystem, _configurationService, _apiController, _uiSharedComponent);
|
||||
_serviceProvider.GetRequiredService<Dalamud.Localization>().SetupWithLangCode("en");
|
||||
_serviceProvider.GetRequiredService<DalamudPluginInterface>().UiBuilder.DisableGposeUiHide = true;
|
||||
|
||||
_dalamudUtil.LogIn += DalamudUtilOnLogIn;
|
||||
_dalamudUtil.LogOut += DalamudUtilOnLogOut;
|
||||
var mediator = _serviceProvider.GetRequiredService<MareMediator>();
|
||||
mediator.Subscribe<SwitchToMainUiMessage>(this, (_) => ReLaunchCharacterManager());
|
||||
mediator.Subscribe<DalamudLoginMessage>(this, (_) => DalamudUtilOnLogIn());
|
||||
mediator.Subscribe<DalamudLogoutMessage>(this, (_) => DalamudUtilOnLogOut());
|
||||
|
||||
if (_dalamudUtil.IsLoggedIn)
|
||||
{
|
||||
DalamudUtilOnLogIn();
|
||||
}
|
||||
_serviceProvider.GetRequiredService<SettingsUi>();
|
||||
_serviceProvider.GetRequiredService<CompactUi>();
|
||||
_serviceProvider.GetRequiredService<GposeUi>();
|
||||
_serviceProvider.GetRequiredService<IntroUi>();
|
||||
_serviceProvider.GetRequiredService<DownloadUi>();
|
||||
}
|
||||
|
||||
public string Name => "Mare Synchronos";
|
||||
@@ -140,33 +101,10 @@ public sealed class Plugin : IDalamudPlugin
|
||||
{
|
||||
Logger.Verbose("Disposing " + Name);
|
||||
|
||||
var services = _serviceProvider.GetServices<IDisposable>().ToList();
|
||||
services.ForEach(c => c.Dispose());
|
||||
_serviceProvider.GetRequiredService<CommandManager>().RemoveHandler(_commandName);
|
||||
|
||||
_apiController?.Dispose();
|
||||
|
||||
_commandManager.RemoveHandler(_commandName);
|
||||
_dalamudUtil.LogIn -= DalamudUtilOnLogIn;
|
||||
_dalamudUtil.LogOut -= DalamudUtilOnLogOut;
|
||||
|
||||
_uiSharedComponent.Dispose();
|
||||
_settingsUi?.Dispose();
|
||||
_introUi?.Dispose();
|
||||
_downloadUi?.Dispose();
|
||||
_compactUi?.Dispose();
|
||||
_gposeUi?.Dispose();
|
||||
|
||||
_pairManager.Dispose();
|
||||
_periodicFileScanner?.Dispose();
|
||||
_fileCacheManager?.Dispose();
|
||||
_playerManager?.Dispose();
|
||||
_characterCacheManager?.Dispose();
|
||||
_ipcManager?.Dispose();
|
||||
_transientResourceManager?.Dispose();
|
||||
_dalamudUtil.Dispose();
|
||||
_configurationService?.Dispose();
|
||||
|
||||
_mediator.Dispose();
|
||||
_runtimeServiceServiceScope?.Dispose();
|
||||
_serviceProvider.Dispose();
|
||||
|
||||
Logger.Debug("Shut down");
|
||||
}
|
||||
@@ -176,47 +114,46 @@ public sealed class Plugin : IDalamudPlugin
|
||||
{
|
||||
Logger.Debug("Client login");
|
||||
|
||||
_pluginInterface.UiBuilder.Draw += Draw;
|
||||
_pluginInterface.UiBuilder.OpenConfigUi += OpenUi;
|
||||
_commandManager.AddHandler(_commandName, new CommandInfo(OnCommand)
|
||||
var pi = _serviceProvider.GetRequiredService<DalamudPluginInterface>();
|
||||
pi.UiBuilder.Draw += Draw;
|
||||
pi.UiBuilder.OpenConfigUi += OpenUi;
|
||||
_serviceProvider.GetRequiredService<CommandManager>().AddHandler(_commandName, new CommandInfo(OnCommand)
|
||||
{
|
||||
HelpMessage = "Opens the Mare Synchronos UI",
|
||||
});
|
||||
|
||||
if (!_configurationService.Current.HasValidSetup() || !_serverConfigurationManager.HasValidConfig())
|
||||
if (!_serviceProvider.GetRequiredService<ConfigurationService>().Current.HasValidSetup()
|
||||
|| !_serviceProvider.GetRequiredService<ServerConfigurationManager>().HasValidConfig())
|
||||
{
|
||||
_introUi.IsOpen = true;
|
||||
_compactUi.IsOpen = false;
|
||||
_serviceProvider.GetRequiredService<MareMediator>().Publish(new SwitchToIntroUiMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
_periodicFileScanner.StartScan();
|
||||
_serviceProvider.GetRequiredService<PeriodicFileScanner>().StartScan();
|
||||
ReLaunchCharacterManager();
|
||||
}
|
||||
|
||||
private void DalamudUtilOnLogOut()
|
||||
{
|
||||
Logger.Debug("Client logout");
|
||||
_characterCacheManager?.Dispose();
|
||||
_playerManager?.Dispose();
|
||||
_transientResourceManager?.Dispose();
|
||||
_pluginInterface.UiBuilder.Draw -= Draw;
|
||||
_pluginInterface.UiBuilder.OpenConfigUi -= OpenUi;
|
||||
_commandManager.RemoveHandler(_commandName);
|
||||
_runtimeServiceServiceScope?.Dispose();
|
||||
var pi = _serviceProvider.GetRequiredService<DalamudPluginInterface>();
|
||||
pi.UiBuilder.Draw -= Draw;
|
||||
pi.UiBuilder.OpenConfigUi -= OpenUi;
|
||||
_serviceProvider.GetRequiredService<CommandManager>().RemoveHandler(_commandName);
|
||||
}
|
||||
|
||||
public void ReLaunchCharacterManager()
|
||||
{
|
||||
_characterCacheManager?.Dispose();
|
||||
_playerManager?.Dispose();
|
||||
_transientResourceManager?.Dispose();
|
||||
_runtimeServiceServiceScope?.Dispose();
|
||||
|
||||
Task.Run(WaitForPlayerAndLaunchCharacterManager);
|
||||
}
|
||||
|
||||
private async Task WaitForPlayerAndLaunchCharacterManager()
|
||||
{
|
||||
while (!_dalamudUtil.IsPlayerPresent)
|
||||
var dalamudUtil = _serviceProvider.GetRequiredService<DalamudUtil>();
|
||||
while (!dalamudUtil.IsPlayerPresent)
|
||||
{
|
||||
await Task.Delay(100).ConfigureAwait(false);
|
||||
}
|
||||
@@ -225,9 +162,10 @@ public sealed class Plugin : IDalamudPlugin
|
||||
{
|
||||
Logger.Debug("Launching Managers");
|
||||
|
||||
_transientResourceManager = _serviceProvider.GetRequiredService<TransientResourceManager>();
|
||||
_playerManager = _serviceProvider.GetRequiredService<PlayerManager>();
|
||||
_characterCacheManager = _serviceProvider.GetRequiredService<OnlinePlayerManager>();
|
||||
_runtimeServiceServiceScope = _serviceProvider.CreateScope();
|
||||
_runtimeServiceServiceScope.ServiceProvider.GetRequiredService<TransientResourceManager>();
|
||||
_runtimeServiceServiceScope.ServiceProvider.GetRequiredService<PlayerManager>();
|
||||
_runtimeServiceServiceScope.ServiceProvider.GetRequiredService<OnlinePlayerManager>();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -237,8 +175,8 @@ public sealed class Plugin : IDalamudPlugin
|
||||
|
||||
private void Draw()
|
||||
{
|
||||
_windowSystem.Draw();
|
||||
_fileDialogManager.Draw();
|
||||
_serviceProvider.GetRequiredService<WindowSystem>().Draw();
|
||||
_serviceProvider.GetRequiredService<FileDialogManager>().Draw();
|
||||
}
|
||||
|
||||
private void OnCommand(string command, string args)
|
||||
@@ -254,6 +192,8 @@ public sealed class Plugin : IDalamudPlugin
|
||||
|
||||
if (string.Equals(splitArgs[0], "toggle", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var _serverConfigurationManager = _serviceProvider.GetRequiredService<ServerConfigurationManager>();
|
||||
var _apiController = _serviceProvider.GetRequiredService<ApiController>();
|
||||
if (_serverConfigurationManager.CurrentServer == null) return;
|
||||
var fullPause = splitArgs.Length > 1 ? splitArgs[1] switch
|
||||
{
|
||||
@@ -266,20 +206,21 @@ public sealed class Plugin : IDalamudPlugin
|
||||
{
|
||||
_serverConfigurationManager.CurrentServer.FullPause = fullPause;
|
||||
_serverConfigurationManager.Save();
|
||||
_ = _apiController.CreateConnections();
|
||||
_ = _serviceProvider.GetRequiredService<ApiController>().CreateConnections();
|
||||
}
|
||||
}
|
||||
else if (string.Equals(splitArgs[0], "gpose", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
_gposeUi.Toggle();
|
||||
_serviceProvider.GetRequiredService<GposeUi>().Toggle();
|
||||
}
|
||||
}
|
||||
|
||||
private void OpenUi()
|
||||
{
|
||||
if (_configurationService.Current.HasValidSetup())
|
||||
_compactUi.Toggle();
|
||||
|
||||
if (_serviceProvider.GetRequiredService<ConfigurationService>().Current.HasValidSetup())
|
||||
_serviceProvider.GetRequiredService<CompactUi>().Toggle();
|
||||
else
|
||||
_introUi.Toggle();
|
||||
_serviceProvider.GetRequiredService<IntroUi>().Toggle();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ using MareSynchronos.API.Dto.User;
|
||||
using MareSynchronos.Delegates;
|
||||
using MareSynchronos.Managers;
|
||||
using MareSynchronos.MareConfiguration;
|
||||
using MareSynchronos.Mediator;
|
||||
using MareSynchronos.Models;
|
||||
using MareSynchronos.UI.Components;
|
||||
using MareSynchronos.UI.Handlers;
|
||||
@@ -26,6 +27,7 @@ public class CompactUi : Window, IDisposable
|
||||
private readonly ApiController _apiController;
|
||||
private readonly PairManager _pairManager;
|
||||
private readonly ServerConfigurationManager _serverManager;
|
||||
private readonly MareMediator _mediator;
|
||||
private readonly ConfigurationService _configService;
|
||||
private readonly TagHandler _tagHandler;
|
||||
public readonly Dictionary<string, bool> ShowUidForEntry = new(StringComparer.Ordinal);
|
||||
@@ -57,7 +59,7 @@ public class CompactUi : Window, IDisposable
|
||||
|
||||
public CompactUi(WindowSystem windowSystem,
|
||||
UiShared uiShared, ConfigurationService configService, ApiController apiController, PairManager pairManager,
|
||||
ServerConfigurationManager serverManager) : base("###MareSynchronosMainUI")
|
||||
ServerConfigurationManager serverManager, MareMediator mediator) : base("###MareSynchronosMainUI")
|
||||
{
|
||||
|
||||
#if DEBUG
|
||||
@@ -88,6 +90,7 @@ public class CompactUi : Window, IDisposable
|
||||
_apiController = apiController;
|
||||
_pairManager = pairManager;
|
||||
_serverManager = serverManager;
|
||||
_mediator = mediator;
|
||||
_tagHandler = new(_serverManager);
|
||||
|
||||
_groupPanel = new(this, uiShared, _pairManager, _serverManager, _configService);
|
||||
@@ -95,6 +98,9 @@ public class CompactUi : Window, IDisposable
|
||||
_selectPairsForGroupUi = new(_tagHandler);
|
||||
_pairGroupsUi = new(_tagHandler, DrawPairedClient, apiController, _selectPairsForGroupUi);
|
||||
|
||||
_mediator.Subscribe<SwitchToMainUiMessage>(this, (_) => IsOpen = true);
|
||||
_mediator.Subscribe<SwitchToIntroUiMessage>(this, (_) => IsOpen = false);
|
||||
|
||||
_uiShared.GposeStart += UiShared_GposeStart;
|
||||
_uiShared.GposeEnd += UiShared_GposeEnd;
|
||||
|
||||
@@ -118,7 +124,6 @@ public class CompactUi : Window, IDisposable
|
||||
IsOpen = false;
|
||||
}
|
||||
|
||||
public event VoidDelegate? OpenSettingsUi;
|
||||
public void Dispose()
|
||||
{
|
||||
Logger.Verbose("Disposing " + nameof(CompactUi));
|
||||
@@ -700,7 +705,7 @@ public class CompactUi : Window, IDisposable
|
||||
ImGui.SetCursorPosY(originalPos.Y + uidTextSize.Y / 2 - buttonSize.Y / 2);
|
||||
if (ImGuiComponents.IconButton(FontAwesomeIcon.Cog))
|
||||
{
|
||||
OpenSettingsUi?.Invoke();
|
||||
_mediator.Publish(new OpenSettingsUiMessage());
|
||||
}
|
||||
UiShared.AttachToolTip("Open the Mare Synchronos Settings");
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ using Dalamud.Interface.Windowing;
|
||||
using ImGuiNET;
|
||||
using MareSynchronos.Export;
|
||||
using MareSynchronos.MareConfiguration;
|
||||
using MareSynchronos.Mediator;
|
||||
using MareSynchronos.Utils;
|
||||
|
||||
namespace MareSynchronos.UI;
|
||||
@@ -16,17 +17,20 @@ public class GposeUi : Window, IDisposable
|
||||
private readonly DalamudUtil _dalamudUtil;
|
||||
private readonly FileDialogManager _fileDialogManager;
|
||||
private readonly ConfigurationService _configService;
|
||||
private readonly MareMediator _mediator;
|
||||
|
||||
public GposeUi(WindowSystem windowSystem, MareCharaFileManager mareCharaFileManager,
|
||||
DalamudUtil dalamudUtil, FileDialogManager fileDialogManager, ConfigurationService configService) : base("Mare Synchronos Gpose Import UI###MareSynchronosGposeUI")
|
||||
DalamudUtil dalamudUtil, FileDialogManager fileDialogManager, ConfigurationService configService,
|
||||
MareMediator mediator) : base("Mare Synchronos Gpose Import UI###MareSynchronosGposeUI")
|
||||
{
|
||||
_windowSystem = windowSystem;
|
||||
_mareCharaFileManager = mareCharaFileManager;
|
||||
_dalamudUtil = dalamudUtil;
|
||||
_fileDialogManager = fileDialogManager;
|
||||
_configService = configService;
|
||||
_dalamudUtil.GposeStart += StartGpose;
|
||||
_dalamudUtil.GposeEnd += EndGpose;
|
||||
_mediator = mediator;
|
||||
_mediator.Subscribe<GposeStartMessage>(this, (_) => StartGpose());
|
||||
_mediator.Subscribe<GposeEndMessage>(this, (_) => EndGpose());
|
||||
IsOpen = _dalamudUtil.IsInGpose;
|
||||
Flags = ImGuiWindowFlags.AlwaysAutoResize;
|
||||
_windowSystem.AddWindow(this);
|
||||
@@ -45,8 +49,6 @@ public class GposeUi : Window, IDisposable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_dalamudUtil.GposeStart -= StartGpose;
|
||||
_dalamudUtil.GposeEnd -= EndGpose;
|
||||
_windowSystem.RemoveWindow(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ using MareSynchronos.FileCache;
|
||||
using Dalamud.Interface;
|
||||
using MareSynchronos.Managers;
|
||||
using MareSynchronos.MareConfiguration;
|
||||
using MareSynchronos.Delegates;
|
||||
using MareSynchronos.Mediator;
|
||||
|
||||
namespace MareSynchronos.UI;
|
||||
|
||||
@@ -19,11 +19,10 @@ internal class IntroUi : Window, IDisposable
|
||||
private readonly ConfigurationService _configService;
|
||||
private readonly PeriodicFileScanner _fileCacheManager;
|
||||
private readonly ServerConfigurationManager _serverConfigurationManager;
|
||||
private readonly MareMediator _mareMediator;
|
||||
private readonly WindowSystem _windowSystem;
|
||||
private bool _readFirstPage;
|
||||
|
||||
public event VoidDelegate? SwitchToMainUi;
|
||||
|
||||
private string[]? _tosParagraphs;
|
||||
|
||||
private Task? _timeoutTask;
|
||||
@@ -40,7 +39,7 @@ internal class IntroUi : Window, IDisposable
|
||||
}
|
||||
|
||||
public IntroUi(WindowSystem windowSystem, UiShared uiShared, ConfigurationService configService,
|
||||
PeriodicFileScanner fileCacheManager, ServerConfigurationManager serverConfigurationManager) : base("Mare Synchronos Setup")
|
||||
PeriodicFileScanner fileCacheManager, ServerConfigurationManager serverConfigurationManager, MareMediator mareMediator) : base("Mare Synchronos Setup")
|
||||
{
|
||||
Logger.Verbose("Creating " + nameof(IntroUi));
|
||||
|
||||
@@ -48,6 +47,7 @@ internal class IntroUi : Window, IDisposable
|
||||
_configService = configService;
|
||||
_fileCacheManager = fileCacheManager;
|
||||
_serverConfigurationManager = serverConfigurationManager;
|
||||
_mareMediator = mareMediator;
|
||||
_windowSystem = windowSystem;
|
||||
IsOpen = false;
|
||||
|
||||
@@ -59,6 +59,9 @@ internal class IntroUi : Window, IDisposable
|
||||
|
||||
GetToSLocalization();
|
||||
|
||||
_mareMediator.Subscribe<SwitchToMainUiMessage>(this, (_) => IsOpen = false);
|
||||
_mareMediator.Subscribe<SwitchToIntroUiMessage>(this, (_) => IsOpen = true);
|
||||
|
||||
_windowSystem.AddWindow(this);
|
||||
}
|
||||
|
||||
@@ -239,7 +242,7 @@ internal class IntroUi : Window, IDisposable
|
||||
}
|
||||
else
|
||||
{
|
||||
SwitchToMainUi?.Invoke();
|
||||
_mareMediator.Publish(new SwitchToMainUiMessage());
|
||||
IsOpen = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ using MareSynchronos.API.Data;
|
||||
using MareSynchronos.Managers;
|
||||
using MareSynchronos.API.Data.Comparer;
|
||||
using MareSynchronos.MareConfiguration;
|
||||
using MareSynchronos.Delegates;
|
||||
using MareSynchronos.Mediator;
|
||||
|
||||
namespace MareSynchronos.UI;
|
||||
|
||||
@@ -25,10 +25,10 @@ public class SettingsUi : Window, IDisposable
|
||||
private readonly MareCharaFileManager _mareCharaFileManager;
|
||||
private readonly PairManager _pairManager;
|
||||
private readonly ServerConfigurationManager _serverConfigurationManager;
|
||||
private readonly MareMediator _mediator;
|
||||
private readonly UiShared _uiShared;
|
||||
public CharacterData? LastCreatedCharacterData { private get; set; }
|
||||
|
||||
public event VoidDelegate? SwitchToIntroUi;
|
||||
private bool _overwriteExistingLabels = false;
|
||||
private bool? _notesSuccessfullyApplied = null;
|
||||
private string _lastTab = string.Empty;
|
||||
@@ -36,7 +36,8 @@ public class SettingsUi : Window, IDisposable
|
||||
|
||||
public SettingsUi(WindowSystem windowSystem,
|
||||
UiShared uiShared, ConfigurationService configService,
|
||||
MareCharaFileManager mareCharaFileManager, PairManager pairManager, ServerConfigurationManager serverConfigurationManager) : base("Mare Synchronos Settings")
|
||||
MareCharaFileManager mareCharaFileManager, PairManager pairManager,
|
||||
ServerConfigurationManager serverConfigurationManager, MareMediator mediator) : base("Mare Synchronos Settings")
|
||||
{
|
||||
Logger.Verbose("Creating " + nameof(SettingsUi));
|
||||
|
||||
@@ -51,9 +52,12 @@ public class SettingsUi : Window, IDisposable
|
||||
_mareCharaFileManager = mareCharaFileManager;
|
||||
_pairManager = pairManager;
|
||||
_serverConfigurationManager = serverConfigurationManager;
|
||||
_mediator = mediator;
|
||||
_uiShared = uiShared;
|
||||
|
||||
|
||||
_mediator.Subscribe<OpenSettingsUiMessage>(this, (_) => Toggle());
|
||||
_mediator.Subscribe<SwitchToIntroUiMessage>(this, (_) => IsOpen = false);
|
||||
_uiShared.GposeStart += UiShared_GposeStart;
|
||||
_uiShared.GposeEnd += UiShared_GposeEnd;
|
||||
|
||||
@@ -211,7 +215,7 @@ public class SettingsUi : Window, IDisposable
|
||||
{
|
||||
Task.Run(() => ApiController.UserDelete());
|
||||
_deleteAccountPopupModalShown = false;
|
||||
SwitchToIntroUi?.Invoke();
|
||||
_mediator.Publish(new SwitchToIntroUiMessage());
|
||||
}
|
||||
|
||||
ImGui.SameLine();
|
||||
|
||||
@@ -14,6 +14,7 @@ using MareSynchronos.FileCache;
|
||||
using MareSynchronos.Localization;
|
||||
using MareSynchronos.Managers;
|
||||
using MareSynchronos.MareConfiguration;
|
||||
using MareSynchronos.Mediator;
|
||||
using MareSynchronos.Models;
|
||||
using MareSynchronos.Utils;
|
||||
using MareSynchronos.WebAPI;
|
||||
@@ -34,6 +35,7 @@ public partial class UiShared : IDisposable
|
||||
private readonly DalamudPluginInterface _pluginInterface;
|
||||
private readonly Dalamud.Localization _localization;
|
||||
private readonly ServerConfigurationManager _serverConfigurationManager;
|
||||
private readonly MareMediator _mediator;
|
||||
|
||||
public long FileCacheSize => _cacheScanner.FileCacheSize;
|
||||
public string PlayerName => _dalamudUtil.PlayerName;
|
||||
@@ -57,7 +59,7 @@ public partial class UiShared : IDisposable
|
||||
|
||||
public UiShared(IpcManager ipcManager, ApiController apiController, PeriodicFileScanner cacheScanner, FileDialogManager fileDialogManager,
|
||||
ConfigurationService configService, DalamudUtil dalamudUtil, DalamudPluginInterface pluginInterface, Dalamud.Localization localization,
|
||||
ServerConfigurationManager serverManager)
|
||||
ServerConfigurationManager serverManager, MareMediator mediator)
|
||||
{
|
||||
_ipcManager = ipcManager;
|
||||
_apiController = apiController;
|
||||
@@ -68,13 +70,14 @@ public partial class UiShared : IDisposable
|
||||
_pluginInterface = pluginInterface;
|
||||
_localization = localization;
|
||||
_serverConfigurationManager = serverManager;
|
||||
_mediator = mediator;
|
||||
_isDirectoryWritable = IsDirectoryWritable(_configService.Current.CacheFolder);
|
||||
|
||||
_pluginInterface.UiBuilder.BuildFonts += BuildFont;
|
||||
_pluginInterface.UiBuilder.RebuildFonts();
|
||||
|
||||
_dalamudUtil.GposeStart += DalamudUtil_GposeStart;
|
||||
_dalamudUtil.GposeEnd += DalamudUtil_GposeEnd;
|
||||
_mediator.Subscribe<GposeStartMessage>(this, (_) => DalamudUtil_GposeStart());
|
||||
_mediator.Subscribe<GposeEndMessage>(this, (_) => DalamudUtil_GposeEnd());
|
||||
}
|
||||
|
||||
private void DalamudUtil_GposeEnd()
|
||||
@@ -673,7 +676,5 @@ public partial class UiShared : IDisposable
|
||||
public void Dispose()
|
||||
{
|
||||
_pluginInterface.UiBuilder.BuildFonts -= BuildFont;
|
||||
_dalamudUtil.GposeStart -= DalamudUtil_GposeStart;
|
||||
_dalamudUtil.GposeEnd -= DalamudUtil_GposeEnd;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,13 +8,11 @@ using Dalamud.Game.Text.SeStringHandling;
|
||||
using FFXIVClientStructs.FFXIV.Client.Game.Character;
|
||||
using FFXIVClientStructs.FFXIV.Client.Game.Control;
|
||||
using Lumina.Excel.GeneratedSheets;
|
||||
using MareSynchronos.Delegates;
|
||||
using MareSynchronos.Mediator;
|
||||
using GameObject = FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject;
|
||||
|
||||
|
||||
namespace MareSynchronos.Utils;
|
||||
|
||||
|
||||
public class DalamudUtil : IDisposable
|
||||
{
|
||||
private readonly ClientState _clientState;
|
||||
@@ -23,18 +21,9 @@ public class DalamudUtil : IDisposable
|
||||
private readonly Dalamud.Game.ClientState.Conditions.Condition _condition;
|
||||
private readonly ChatGui _chatGui;
|
||||
private readonly Dalamud.Data.DataManager _gameData;
|
||||
private readonly MareMediator _mediator;
|
||||
|
||||
public event VoidDelegate? LogIn;
|
||||
public event VoidDelegate? LogOut;
|
||||
public event VoidDelegate? FrameworkUpdate;
|
||||
public event VoidDelegate? ClassJobChanged;
|
||||
private uint? _classJobId = 0;
|
||||
public event VoidDelegate? DelayedFrameworkUpdate;
|
||||
public event VoidDelegate? ZoneSwitchStart;
|
||||
public event VoidDelegate? ZoneSwitchEnd;
|
||||
public event VoidDelegate? GposeStart;
|
||||
public event VoidDelegate? GposeEnd;
|
||||
public event VoidDelegate? GposeFrameworkUpdate;
|
||||
private DateTime _delayedFrameworkUpdateCheck = DateTime.Now;
|
||||
private bool _sentBetweenAreas = false;
|
||||
public bool IsInGpose { get; private set; } = false;
|
||||
@@ -52,8 +41,9 @@ public class DalamudUtil : IDisposable
|
||||
return false;
|
||||
}
|
||||
|
||||
public DalamudUtil(ClientState clientState, ObjectTable objectTable, Framework framework, Dalamud.Game.ClientState.Conditions.Condition condition, ChatGui chatGui,
|
||||
Dalamud.Data.DataManager gameData)
|
||||
public DalamudUtil(ClientState clientState, ObjectTable objectTable, Framework framework,
|
||||
Dalamud.Game.ClientState.Conditions.Condition condition, ChatGui chatGui,
|
||||
Dalamud.Data.DataManager gameData, MareMediator mediator)
|
||||
{
|
||||
_clientState = clientState;
|
||||
_objectTable = objectTable;
|
||||
@@ -61,11 +51,11 @@ public class DalamudUtil : IDisposable
|
||||
_condition = condition;
|
||||
_chatGui = chatGui;
|
||||
_gameData = gameData;
|
||||
_mediator = mediator;
|
||||
_framework.Update += FrameworkOnUpdate;
|
||||
if (IsLoggedIn)
|
||||
{
|
||||
_classJobId = _clientState.LocalPlayer!.ClassJob.Id;
|
||||
ClientStateOnLogin(sender: null, EventArgs.Empty);
|
||||
}
|
||||
WorldData = new(() =>
|
||||
{
|
||||
@@ -101,13 +91,13 @@ public class DalamudUtil : IDisposable
|
||||
{
|
||||
Logger.Debug("Gpose start");
|
||||
IsInGpose = true;
|
||||
GposeStart?.Invoke();
|
||||
_mediator.Publish(new GposeStartMessage());
|
||||
}
|
||||
else if (GposeTarget == null && IsInGpose)
|
||||
{
|
||||
Logger.Debug("Gpose end");
|
||||
IsInGpose = false;
|
||||
GposeEnd?.Invoke();
|
||||
_mediator.Publish(new GposeEndMessage());
|
||||
}
|
||||
|
||||
if (_condition[ConditionFlag.BetweenAreas] || _condition[ConditionFlag.BetweenAreas51] || IsInGpose)
|
||||
@@ -116,10 +106,10 @@ public class DalamudUtil : IDisposable
|
||||
{
|
||||
Logger.Debug("Zone switch/Gpose start");
|
||||
_sentBetweenAreas = true;
|
||||
ZoneSwitchStart?.Invoke();
|
||||
_mediator.Publish(new ZoneSwitchStartMessage());
|
||||
}
|
||||
|
||||
if (IsInGpose) GposeFrameworkUpdate?.Invoke();
|
||||
if (IsInGpose) _mediator.Publish(new GposeFrameworkUpdateMessage());
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -128,21 +118,10 @@ public class DalamudUtil : IDisposable
|
||||
{
|
||||
Logger.Debug("Zone switch/Gpose end");
|
||||
_sentBetweenAreas = false;
|
||||
ZoneSwitchEnd?.Invoke();
|
||||
_mediator.Publish(new ZoneSwitchEndMessage());
|
||||
}
|
||||
|
||||
foreach (VoidDelegate? frameworkInvocation in (FrameworkUpdate?.GetInvocationList() ?? Array.Empty<VoidDelegate>()).Cast<VoidDelegate>())
|
||||
{
|
||||
try
|
||||
{
|
||||
frameworkInvocation?.Invoke();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Warn(ex.Message);
|
||||
Logger.Warn(ex.StackTrace ?? string.Empty);
|
||||
}
|
||||
}
|
||||
_mediator.Publish(new FrameworkUpdateMessage());
|
||||
|
||||
if (DateTime.Now < _delayedFrameworkUpdateCheck.AddSeconds(1)) return;
|
||||
|
||||
@@ -152,13 +131,13 @@ public class DalamudUtil : IDisposable
|
||||
{
|
||||
Logger.Debug("Logged in");
|
||||
IsLoggedIn = true;
|
||||
LogIn?.Invoke();
|
||||
_mediator.Publish(new DalamudLoginMessage());
|
||||
}
|
||||
else if (localPlayer == null && IsLoggedIn)
|
||||
{
|
||||
Logger.Debug("Logged out");
|
||||
IsLoggedIn = false;
|
||||
LogOut?.Invoke();
|
||||
_mediator.Publish(new DalamudLogoutMessage());
|
||||
}
|
||||
|
||||
if (_clientState.LocalPlayer != null && _clientState.LocalPlayer.IsValid())
|
||||
@@ -168,35 +147,15 @@ public class DalamudUtil : IDisposable
|
||||
if (_classJobId != newclassJobId)
|
||||
{
|
||||
_classJobId = newclassJobId;
|
||||
ClassJobChanged?.Invoke();
|
||||
_mediator.Publish(new ClassJobChangedMessage());
|
||||
}
|
||||
}
|
||||
|
||||
foreach (VoidDelegate? frameworkInvocation in (DelayedFrameworkUpdate?.GetInvocationList() ?? Array.Empty<VoidDelegate>()).Cast<VoidDelegate>())
|
||||
{
|
||||
try
|
||||
{
|
||||
frameworkInvocation?.Invoke();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Warn(ex.Message);
|
||||
Logger.Warn(ex.StackTrace ?? string.Empty);
|
||||
}
|
||||
}
|
||||
_mediator.Publish(new DelayedFrameworkUpdateMessage());
|
||||
|
||||
_delayedFrameworkUpdateCheck = DateTime.Now;
|
||||
}
|
||||
|
||||
private void ClientStateOnLogout(object? sender, EventArgs e)
|
||||
{
|
||||
LogOut?.Invoke();
|
||||
}
|
||||
|
||||
private void ClientStateOnLogin(object? sender, EventArgs e)
|
||||
{
|
||||
LogIn?.Invoke();
|
||||
}
|
||||
|
||||
public Dalamud.Game.ClientState.Objects.Types.GameObject? CreateGameObject(IntPtr reference)
|
||||
{
|
||||
return _objectTable.CreateObjectReference(reference);
|
||||
@@ -331,8 +290,6 @@ public class DalamudUtil : IDisposable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_clientState.Login -= ClientStateOnLogin;
|
||||
_clientState.Logout -= ClientStateOnLogout;
|
||||
_framework.Update -= FrameworkOnUpdate;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ using MareSynchronos.Managers;
|
||||
using Dalamud.Utility;
|
||||
using MareSynchronos.MareConfiguration;
|
||||
using MareSynchronos.Delegates;
|
||||
using MareSynchronos.Mediator;
|
||||
|
||||
namespace MareSynchronos.WebAPI;
|
||||
public partial class ApiController : IDisposable, IMareHubClient
|
||||
@@ -26,6 +27,7 @@ public partial class ApiController : IDisposable, IMareHubClient
|
||||
private readonly FileCacheManager _fileDbManager;
|
||||
private readonly PairManager _pairManager;
|
||||
private readonly ServerConfigurationManager _serverManager;
|
||||
private readonly MareMediator _mediator;
|
||||
private CancellationTokenSource _connectionCancellationTokenSource;
|
||||
private HubConnection? _mareHub;
|
||||
|
||||
@@ -43,7 +45,7 @@ public partial class ApiController : IDisposable, IMareHubClient
|
||||
|
||||
private HttpClient _httpClient;
|
||||
|
||||
public ApiController(ConfigurationService configService, DalamudUtil dalamudUtil, FileCacheManager fileDbManager, PairManager pairManager, ServerConfigurationManager serverManager)
|
||||
public ApiController(ConfigurationService configService, DalamudUtil dalamudUtil, FileCacheManager fileDbManager, PairManager pairManager, ServerConfigurationManager serverManager, MareMediator mediator)
|
||||
{
|
||||
Logger.Verbose("Creating " + nameof(ApiController));
|
||||
|
||||
@@ -52,9 +54,11 @@ public partial class ApiController : IDisposable, IMareHubClient
|
||||
_fileDbManager = fileDbManager;
|
||||
_pairManager = pairManager;
|
||||
_serverManager = serverManager;
|
||||
_mediator = mediator;
|
||||
_connectionCancellationTokenSource = new CancellationTokenSource();
|
||||
_dalamudUtil.LogIn += DalamudUtilOnLogIn;
|
||||
_dalamudUtil.LogOut += DalamudUtilOnLogOut;
|
||||
|
||||
_mediator.Subscribe<DalamudLoginMessage>(this, (_) => DalamudUtilOnLogIn());
|
||||
_mediator.Subscribe<DalamudLogoutMessage>(this, (_) => DalamudUtilOnLogOut());
|
||||
ServerState = ServerState.Offline;
|
||||
_verifiedUploadedHashes = new(StringComparer.Ordinal);
|
||||
_httpClient = new();
|
||||
@@ -312,9 +316,6 @@ public partial class ApiController : IDisposable, IMareHubClient
|
||||
{
|
||||
Logger.Verbose("Disposing " + nameof(ApiController));
|
||||
|
||||
_dalamudUtil.LogIn -= DalamudUtilOnLogIn;
|
||||
_dalamudUtil.LogOut -= DalamudUtilOnLogOut;
|
||||
|
||||
ServerState = ServerState.Offline;
|
||||
Task.Run(async () => await StopConnection(_connectionCancellationTokenSource.Token, ServerState.Disconnected).ConfigureAwait(false));
|
||||
_connectionCancellationTokenSource?.Cancel();
|
||||
|
||||
Reference in New Issue
Block a user