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