rework service disposal
This commit is contained in:
@@ -220,6 +220,7 @@ public class FileCacheManager : IDisposable
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
Logger.Verbose($"Disposing {GetType()}");
|
||||||
WriteOutFullCsv();
|
WriteOutFullCsv();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,29 +6,27 @@ using MareSynchronos.Utils;
|
|||||||
|
|
||||||
namespace MareSynchronos.FileCache;
|
namespace MareSynchronos.FileCache;
|
||||||
|
|
||||||
public class PeriodicFileScanner : IDisposable
|
public class PeriodicFileScanner : MediatorSubscriberBase, IDisposable
|
||||||
{
|
{
|
||||||
private readonly IpcManager _ipcManager;
|
private readonly IpcManager _ipcManager;
|
||||||
private readonly ConfigurationService _configService;
|
private readonly ConfigurationService _configService;
|
||||||
private readonly FileCacheManager _fileDbManager;
|
private readonly FileCacheManager _fileDbManager;
|
||||||
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, MareMediator mediator)
|
public PeriodicFileScanner(IpcManager ipcManager, ConfigurationService configService, FileCacheManager fileDbManager, MareMediator mediator) : base(mediator)
|
||||||
{
|
{
|
||||||
Logger.Verbose("Creating " + nameof(PeriodicFileScanner));
|
Logger.Verbose("Creating " + nameof(PeriodicFileScanner));
|
||||||
|
|
||||||
_ipcManager = ipcManager;
|
_ipcManager = ipcManager;
|
||||||
_configService = configService;
|
_configService = configService;
|
||||||
_fileDbManager = fileDbManager;
|
_fileDbManager = fileDbManager;
|
||||||
_mediator = mediator;
|
|
||||||
|
|
||||||
_mediator.Subscribe<PenumbraInitializedMessage>(this, (_) => StartScan());
|
Mediator.Subscribe<PenumbraInitializedMessage>(this, (_) => StartScan());
|
||||||
_mediator.Subscribe<HaltScanMessage>(this, (msg) => HaltScan(((HaltScanMessage)msg).Source));
|
Mediator.Subscribe<HaltScanMessage>(this, (msg) => HaltScan(((HaltScanMessage)msg).Source));
|
||||||
_mediator.Subscribe<ResumeScanMessage>(this, (msg) => ResumeScan(((ResumeScanMessage)msg).Source));
|
Mediator.Subscribe<ResumeScanMessage>(this, (msg) => ResumeScan(((ResumeScanMessage)msg).Source));
|
||||||
_mediator.Subscribe<SwitchToMainUiMessage>(this, (_) => StartScan());
|
Mediator.Subscribe<SwitchToMainUiMessage>(this, (_) => StartScan());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResetLocks()
|
public void ResetLocks()
|
||||||
@@ -76,9 +74,9 @@ public class PeriodicFileScanner : IDisposable
|
|||||||
private TimeSpan _timeUntilNextScan = TimeSpan.Zero;
|
private TimeSpan _timeUntilNextScan = TimeSpan.Zero;
|
||||||
private int TimeBetweenScans => _configService.Current.TimeSpanBetweenScansInSeconds;
|
private int TimeBetweenScans => _configService.Current.TimeSpanBetweenScansInSeconds;
|
||||||
|
|
||||||
public void Dispose()
|
public override void Dispose()
|
||||||
{
|
{
|
||||||
Logger.Verbose("Disposing " + nameof(PeriodicFileScanner));
|
base.Dispose();
|
||||||
|
|
||||||
_scanCancellationTokenSource?.Cancel();
|
_scanCancellationTokenSource?.Cancel();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,13 +12,12 @@ using MareSynchronos.WebAPI;
|
|||||||
|
|
||||||
namespace MareSynchronos.Managers;
|
namespace MareSynchronos.Managers;
|
||||||
|
|
||||||
public class CachedPlayer : IDisposable
|
public class CachedPlayer : MediatorSubscriberBase, IDisposable
|
||||||
{
|
{
|
||||||
private readonly ApiController _apiController;
|
private readonly ApiController _apiController;
|
||||||
private readonly DalamudUtil _dalamudUtil;
|
private readonly DalamudUtil _dalamudUtil;
|
||||||
private readonly IpcManager _ipcManager;
|
private readonly IpcManager _ipcManager;
|
||||||
private readonly FileCacheManager _fileDbManager;
|
private readonly FileCacheManager _fileDbManager;
|
||||||
private readonly MareMediator _mediator;
|
|
||||||
private API.Data.CharacterData _cachedData = new();
|
private API.Data.CharacterData _cachedData = new();
|
||||||
private PlayerRelatedObject? _currentCharacterEquipment;
|
private PlayerRelatedObject? _currentCharacterEquipment;
|
||||||
private CancellationTokenSource? _downloadCancellationTokenSource = new();
|
private CancellationTokenSource? _downloadCancellationTokenSource = new();
|
||||||
@@ -30,14 +29,13 @@ public class CachedPlayer : IDisposable
|
|||||||
|
|
||||||
private Task? _penumbraRedrawEventTask;
|
private Task? _penumbraRedrawEventTask;
|
||||||
|
|
||||||
public CachedPlayer(OnlineUserIdentDto onlineUser, IpcManager ipcManager, ApiController apiController, DalamudUtil dalamudUtil, FileCacheManager fileDbManager, MareMediator mediator)
|
public CachedPlayer(OnlineUserIdentDto onlineUser, IpcManager ipcManager, ApiController apiController, DalamudUtil dalamudUtil, FileCacheManager fileDbManager, MareMediator mediator) : base(mediator)
|
||||||
{
|
{
|
||||||
OnlineUser = onlineUser;
|
OnlineUser = onlineUser;
|
||||||
_ipcManager = ipcManager;
|
_ipcManager = ipcManager;
|
||||||
_apiController = apiController;
|
_apiController = apiController;
|
||||||
_dalamudUtil = dalamudUtil;
|
_dalamudUtil = dalamudUtil;
|
||||||
_fileDbManager = fileDbManager;
|
_fileDbManager = fileDbManager;
|
||||||
_mediator = mediator;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsVisible
|
public bool IsVisible
|
||||||
@@ -173,7 +171,7 @@ public class CachedPlayer : IDisposable
|
|||||||
|
|
||||||
if (missingPluginsForData.Any())
|
if (missingPluginsForData.Any())
|
||||||
{
|
{
|
||||||
_mediator.Publish(new NotificationMessage("Missing plugins for " + PlayerName,
|
Mediator.Publish(new NotificationMessage("Missing plugins for " + PlayerName,
|
||||||
$"Received data for {PlayerName} that contained information for plugins you have not installed. Install {string.Join(", ", missingPluginsForData)} to experience their character fully.",
|
$"Received data for {PlayerName} that contained information for plugins you have not installed. Install {string.Join(", ", missingPluginsForData)} to experience their character fully.",
|
||||||
NotificationType.Warning, 10000));
|
NotificationType.Warning, 10000));
|
||||||
}
|
}
|
||||||
@@ -202,9 +200,12 @@ public class CachedPlayer : IDisposable
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public override void Dispose()
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(PlayerName)) return;
|
if (string.IsNullOrEmpty(PlayerName)) return;
|
||||||
|
|
||||||
|
base.Dispose();
|
||||||
|
|
||||||
Logger.Debug("Disposing " + PlayerName + " (" + OnlineUser + ")");
|
Logger.Debug("Disposing " + PlayerName + " (" + OnlineUser + ")");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -227,7 +228,7 @@ public class CachedPlayer : IDisposable
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
_mediator.UnsubscribeAll(this);
|
Mediator.UnsubscribeAll(this);
|
||||||
_cachedData = new();
|
_cachedData = new();
|
||||||
var tempPlayerName = PlayerName;
|
var tempPlayerName = PlayerName;
|
||||||
PlayerName = string.Empty;
|
PlayerName = string.Empty;
|
||||||
@@ -244,7 +245,7 @@ public class CachedPlayer : IDisposable
|
|||||||
PlayerCharacter = character;
|
PlayerCharacter = character;
|
||||||
Logger.Debug("Initializing Player " + this);
|
Logger.Debug("Initializing Player " + this);
|
||||||
|
|
||||||
_mediator.Subscribe<PenumbraRedrawMessage>(this, (msg) => IpcManagerOnPenumbraRedrawEvent(((PenumbraRedrawMessage)msg)));
|
Mediator.Subscribe<PenumbraRedrawMessage>(this, (msg) => IpcManagerOnPenumbraRedrawEvent(((PenumbraRedrawMessage)msg)));
|
||||||
_originalGlamourerData = _ipcManager.GlamourerGetCharacterCustomization(PlayerCharacter);
|
_originalGlamourerData = _ipcManager.GlamourerGetCharacterCustomization(PlayerCharacter);
|
||||||
_currentCharacterEquipment = new PlayerRelatedObject(ObjectKind.Player, IntPtr.Zero, IntPtr.Zero,
|
_currentCharacterEquipment = new PlayerRelatedObject(ObjectKind.Player, IntPtr.Zero, IntPtr.Zero,
|
||||||
() => _dalamudUtil.GetPlayerCharacterFromObjectTableByName(PlayerName)?.Address ?? IntPtr.Zero);
|
() => _dalamudUtil.GetPlayerCharacterFromObjectTableByName(PlayerName)?.Address ?? IntPtr.Zero);
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ using MareSynchronos.Mediator;
|
|||||||
|
|
||||||
namespace MareSynchronos.Managers;
|
namespace MareSynchronos.Managers;
|
||||||
|
|
||||||
public class IpcManager : IDisposable
|
public class IpcManager : MediatorSubscriberBase, IDisposable
|
||||||
{
|
{
|
||||||
private readonly ICallGateSubscriber<int> _glamourerApiVersion;
|
private readonly ICallGateSubscriber<int> _glamourerApiVersion;
|
||||||
private readonly ICallGateSubscriber<string, GameObject?, object>? _glamourerApplyAll;
|
private readonly ICallGateSubscriber<string, GameObject?, object>? _glamourerApplyAll;
|
||||||
@@ -57,18 +57,15 @@ 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, MareMediator mediator)
|
public IpcManager(DalamudPluginInterface pi, DalamudUtil dalamudUtil, MareMediator mediator) : base(mediator)
|
||||||
{
|
{
|
||||||
Logger.Verbose("Creating " + nameof(IpcManager));
|
Logger.Verbose("Creating " + nameof(IpcManager));
|
||||||
|
|
||||||
_mediator = mediator;
|
|
||||||
|
|
||||||
_penumbraInit = Penumbra.Api.Ipc.Initialized.Subscriber(pi, () => PenumbraInit());
|
_penumbraInit = Penumbra.Api.Ipc.Initialized.Subscriber(pi, () => PenumbraInit());
|
||||||
_penumbraDispose = Penumbra.Api.Ipc.Disposed.Subscriber(pi, () => PenumbraDispose());
|
_penumbraDispose = Penumbra.Api.Ipc.Disposed.Subscriber(pi, () => PenumbraDispose());
|
||||||
_penumbraResolvePlayer = Penumbra.Api.Ipc.ResolvePlayerPath.Subscriber(pi);
|
_penumbraResolvePlayer = Penumbra.Api.Ipc.ResolvePlayerPath.Subscriber(pi);
|
||||||
@@ -121,13 +118,13 @@ public class IpcManager : IDisposable
|
|||||||
|
|
||||||
if (Initialized)
|
if (Initialized)
|
||||||
{
|
{
|
||||||
_mediator.Publish(new PenumbraInitializedMessage());
|
Mediator.Publish(new PenumbraInitializedMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
_dalamudUtil = dalamudUtil;
|
_dalamudUtil = dalamudUtil;
|
||||||
_mediator.Subscribe<FrameworkUpdateMessage>(this, (_) => HandleActionQueue());
|
Mediator.Subscribe<FrameworkUpdateMessage>(this, (_) => HandleActionQueue());
|
||||||
_mediator.Subscribe<GposeFrameworkUpdateMessage>(this, (_) => HandleGposeActionQueue());
|
Mediator.Subscribe<GposeFrameworkUpdateMessage>(this, (_) => HandleGposeActionQueue());
|
||||||
_mediator.Subscribe<ZoneSwitchEndMessage>(this, (_) => ClearActionQueue());
|
Mediator.Subscribe<ZoneSwitchEndMessage>(this, (_) => ClearActionQueue());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HandleGposeActionQueue()
|
private void HandleGposeActionQueue()
|
||||||
@@ -147,7 +144,7 @@ public class IpcManager : IDisposable
|
|||||||
|
|
||||||
private void PenumbraModSettingChangedHandler()
|
private void PenumbraModSettingChangedHandler()
|
||||||
{
|
{
|
||||||
_mediator.Publish(new PenumbraModSettingChangedMessage());
|
Mediator.Publish(new PenumbraModSettingChangedMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ClearActionQueue()
|
private void ClearActionQueue()
|
||||||
@@ -162,7 +159,7 @@ public class IpcManager : IDisposable
|
|||||||
{
|
{
|
||||||
if (ptr != IntPtr.Zero && string.Compare(arg1, arg2, ignoreCase: true, System.Globalization.CultureInfo.InvariantCulture) != 0)
|
if (ptr != IntPtr.Zero && string.Compare(arg1, arg2, ignoreCase: true, System.Globalization.CultureInfo.InvariantCulture) != 0)
|
||||||
{
|
{
|
||||||
_mediator.Publish(new PenumbraResourceLoadMessage(ptr, arg1, arg2));
|
Mediator.Publish(new PenumbraResourceLoadMessage(ptr, arg1, arg2));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -238,9 +235,9 @@ public class IpcManager : IDisposable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public override void Dispose()
|
||||||
{
|
{
|
||||||
Logger.Verbose("Disposing " + nameof(IpcManager));
|
base.Dispose();
|
||||||
|
|
||||||
int totalSleepTime = 0;
|
int totalSleepTime = 0;
|
||||||
while (!ActionQueue.IsEmpty && totalSleepTime < 2000)
|
while (!ActionQueue.IsEmpty && totalSleepTime < 2000)
|
||||||
@@ -500,31 +497,31 @@ public class IpcManager : IDisposable
|
|||||||
|
|
||||||
private void RedrawEvent(IntPtr objectAddress, int objectTableIndex)
|
private void RedrawEvent(IntPtr objectAddress, int objectTableIndex)
|
||||||
{
|
{
|
||||||
_mediator.Publish(new PenumbraRedrawMessage(objectAddress, objectTableIndex));
|
Mediator.Publish(new PenumbraRedrawMessage(objectAddress, objectTableIndex));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PenumbraInit()
|
private void PenumbraInit()
|
||||||
{
|
{
|
||||||
_mediator.Publish(new PenumbraInitializedMessage());
|
Mediator.Publish(new PenumbraInitializedMessage());
|
||||||
_penumbraRedraw!.Invoke("self", RedrawType.Redraw);
|
_penumbraRedraw!.Invoke("self", RedrawType.Redraw);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HeelsOffsetChange(float offset)
|
private void HeelsOffsetChange(float offset)
|
||||||
{
|
{
|
||||||
_mediator.Publish(new HeelsOffsetMessage(offset));
|
Mediator.Publish(new HeelsOffsetMessage(offset));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnCustomizePlusScaleChange(string? scale)
|
private void OnCustomizePlusScaleChange(string? scale)
|
||||||
{
|
{
|
||||||
if (scale != null) scale = Convert.ToBase64String(Encoding.UTF8.GetBytes(scale));
|
if (scale != null) scale = Convert.ToBase64String(Encoding.UTF8.GetBytes(scale));
|
||||||
_mediator.Publish(new CustomizePlusMessage(scale));
|
Mediator.Publish(new CustomizePlusMessage(scale));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnPalettePlusPaletteChange(Character character, string palette)
|
private void OnPalettePlusPaletteChange(Character character, string palette)
|
||||||
{
|
{
|
||||||
if (character.Address == 0 || character.Address != _dalamudUtil.PlayerPointer) return;
|
if (character.Address == 0 || character.Address != _dalamudUtil.PlayerPointer) return;
|
||||||
if (palette != null) palette = Convert.ToBase64String(Encoding.UTF8.GetBytes(palette));
|
if (palette != null) palette = Convert.ToBase64String(Encoding.UTF8.GetBytes(palette));
|
||||||
_mediator.Publish(new PalettePlusMessage(palette));
|
Mediator.Publish(new PalettePlusMessage(palette));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PalettePlusSetPalette(IntPtr character, string palette)
|
public void PalettePlusSetPalette(IntPtr character, string palette)
|
||||||
@@ -575,7 +572,7 @@ public class IpcManager : IDisposable
|
|||||||
|
|
||||||
private void PenumbraDispose()
|
private void PenumbraDispose()
|
||||||
{
|
{
|
||||||
_mediator.Publish(new PenumbraDisposedMessage());
|
Mediator.Publish(new PenumbraDisposedMessage());
|
||||||
ActionQueue.Clear();
|
ActionQueue.Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,13 +7,13 @@ using MareSynchronos.Mediator;
|
|||||||
using MareSynchronos.Utils;
|
using MareSynchronos.Utils;
|
||||||
|
|
||||||
namespace MareSynchronos.Managers;
|
namespace MareSynchronos.Managers;
|
||||||
public class NotificationService
|
public class NotificationService : MediatorSubscriberBase
|
||||||
{
|
{
|
||||||
private readonly UiBuilder _uiBuilder;
|
private readonly UiBuilder _uiBuilder;
|
||||||
private readonly ChatGui _chatGui;
|
private readonly ChatGui _chatGui;
|
||||||
private readonly ConfigurationService _configurationService;
|
private readonly ConfigurationService _configurationService;
|
||||||
|
|
||||||
public NotificationService(MareMediator mediator, UiBuilder uiBuilder, ChatGui chatGui, ConfigurationService configurationService)
|
public NotificationService(MareMediator mediator, UiBuilder uiBuilder, ChatGui chatGui, ConfigurationService configurationService) : base(mediator)
|
||||||
{
|
{
|
||||||
_uiBuilder = uiBuilder;
|
_uiBuilder = uiBuilder;
|
||||||
_chatGui = chatGui;
|
_chatGui = chatGui;
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ public class OnlinePlayerManager : MediatorSubscriberBase, IDisposable
|
|||||||
private readonly FileCacheManager _fileDbManager;
|
private readonly FileCacheManager _fileDbManager;
|
||||||
private readonly PairManager _pairManager;
|
private readonly PairManager _pairManager;
|
||||||
|
|
||||||
public OnlinePlayerManager(ApiController apiController, DalamudUtil dalamudUtil, PlayerManager playerManager, FileCacheManager fileDbManager, PairManager pairManager, MareMediator mediator) : base(mediator)
|
public OnlinePlayerManager(ApiController apiController, DalamudUtil dalamudUtil, PlayerManager playerManager,
|
||||||
|
FileCacheManager fileDbManager, PairManager pairManager, MareMediator mediator) : base(mediator)
|
||||||
{
|
{
|
||||||
Logger.Verbose("Creating " + nameof(OnlinePlayerManager));
|
Logger.Verbose("Creating " + nameof(OnlinePlayerManager));
|
||||||
|
|
||||||
@@ -48,7 +49,6 @@ public class OnlinePlayerManager : MediatorSubscriberBase, IDisposable
|
|||||||
|
|
||||||
public override void Dispose()
|
public override void Dispose()
|
||||||
{
|
{
|
||||||
Logger.Verbose("Disposing " + nameof(OnlinePlayerManager));
|
|
||||||
base.Dispose();
|
base.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,25 +17,22 @@ using System.Collections.Concurrent;
|
|||||||
|
|
||||||
namespace MareSynchronos.Managers;
|
namespace MareSynchronos.Managers;
|
||||||
|
|
||||||
public class PairManager : IDisposable
|
public class PairManager : MediatorSubscriberBase, IDisposable
|
||||||
{
|
{
|
||||||
private readonly ConcurrentDictionary<UserData, Pair> _allClientPairs = new(UserDataComparer.Instance);
|
private readonly ConcurrentDictionary<UserData, Pair> _allClientPairs = new(UserDataComparer.Instance);
|
||||||
private readonly ConcurrentDictionary<GroupData, GroupFullInfoDto> _allGroups = new(GroupDataComparer.Instance);
|
private readonly ConcurrentDictionary<GroupData, GroupFullInfoDto> _allGroups = new(GroupDataComparer.Instance);
|
||||||
private readonly CachedPlayerFactory _cachedPlayerFactory;
|
private readonly CachedPlayerFactory _cachedPlayerFactory;
|
||||||
private readonly PairFactory _pairFactory;
|
private readonly PairFactory _pairFactory;
|
||||||
private readonly UiBuilder _uiBuilder;
|
|
||||||
private readonly ConfigurationService _configurationService;
|
private readonly ConfigurationService _configurationService;
|
||||||
private readonly MareMediator _mediator;
|
|
||||||
|
|
||||||
public PairManager(CachedPlayerFactory cachedPlayerFactory, PairFactory pairFactory, UiBuilder uiBuilder, ConfigurationService configurationService, MareMediator mediator)
|
public PairManager(CachedPlayerFactory cachedPlayerFactory, PairFactory pairFactory,
|
||||||
|
ConfigurationService configurationService, MareMediator mediator) : base(mediator)
|
||||||
{
|
{
|
||||||
_cachedPlayerFactory = cachedPlayerFactory;
|
_cachedPlayerFactory = cachedPlayerFactory;
|
||||||
_pairFactory = pairFactory;
|
_pairFactory = pairFactory;
|
||||||
_uiBuilder = uiBuilder;
|
|
||||||
_configurationService = configurationService;
|
_configurationService = configurationService;
|
||||||
_mediator = mediator;
|
Mediator.Subscribe<ZoneSwitchStartMessage>(this, (_) => DalamudUtilOnZoneSwitched());
|
||||||
_mediator.Subscribe<ZoneSwitchStartMessage>(this, (_) => DalamudUtilOnZoneSwitched());
|
Mediator.Subscribe<DelayedFrameworkUpdateMessage>(this, (_) => DalamudUtilOnDelayedFrameworkUpdate());
|
||||||
_mediator.Subscribe<DelayedFrameworkUpdateMessage>(this, (_) => DalamudUtilOnDelayedFrameworkUpdate());
|
|
||||||
_directPairsInternal = DirectPairsLazy();
|
_directPairsInternal = DirectPairsLazy();
|
||||||
_groupPairsInternal = GroupPairsLazy();
|
_groupPairsInternal = GroupPairsLazy();
|
||||||
}
|
}
|
||||||
@@ -137,8 +134,9 @@ public class PairManager : IDisposable
|
|||||||
RecreateLazy();
|
RecreateLazy();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public override void Dispose()
|
||||||
{
|
{
|
||||||
|
base.Dispose();
|
||||||
DisposePairs();
|
DisposePairs();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,7 +182,7 @@ public class PairManager : IDisposable
|
|||||||
var msg = !string.IsNullOrEmpty(note)
|
var msg = !string.IsNullOrEmpty(note)
|
||||||
? $"{note} ({pair.UserData.AliasOrUID}) is now online"
|
? $"{note} ({pair.UserData.AliasOrUID}) is now online"
|
||||||
: $"{pair.UserData.AliasOrUID} is now online";
|
: $"{pair.UserData.AliasOrUID} is now online";
|
||||||
_mediator.Publish(new NotificationMessage("User online", msg, NotificationType.Info, 5000));
|
Mediator.Publish(new NotificationMessage("User online", msg, NotificationType.Info, 5000));
|
||||||
}
|
}
|
||||||
|
|
||||||
pair.CachedPlayer?.Dispose();
|
pair.CachedPlayer?.Dispose();
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ using MareSynchronos.Mediator;
|
|||||||
|
|
||||||
namespace MareSynchronos.Managers;
|
namespace MareSynchronos.Managers;
|
||||||
|
|
||||||
|
|
||||||
public class PlayerManager : MediatorSubscriberBase, IDisposable
|
public class PlayerManager : MediatorSubscriberBase, IDisposable
|
||||||
{
|
{
|
||||||
private readonly ApiController _apiController;
|
private readonly ApiController _apiController;
|
||||||
@@ -123,8 +122,6 @@ public class PlayerManager : MediatorSubscriberBase, IDisposable
|
|||||||
|
|
||||||
public override void Dispose()
|
public override void Dispose()
|
||||||
{
|
{
|
||||||
Logger.Verbose("Disposing " + nameof(PlayerManager));
|
|
||||||
|
|
||||||
base.Dispose();
|
base.Dispose();
|
||||||
|
|
||||||
_playerChangedCts?.Cancel();
|
_playerChangedCts?.Cancel();
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ public class ConfigurationService : IDisposable
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
Logger.Verbose($"Disposing {GetType()}");
|
||||||
Save();
|
Save();
|
||||||
_periodicCheckCts.Cancel();
|
_periodicCheckCts.Cancel();
|
||||||
}
|
}
|
||||||
|
|||||||
156
MareSynchronos/MarePlugin.cs
Normal file
156
MareSynchronos/MarePlugin.cs
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
using Dalamud.Game.Command;
|
||||||
|
using Dalamud.Plugin;
|
||||||
|
using Dalamud.Interface.ImGuiFileDialog;
|
||||||
|
using MareSynchronos.Managers;
|
||||||
|
using MareSynchronos.WebAPI;
|
||||||
|
using Dalamud.Interface.Windowing;
|
||||||
|
using MareSynchronos.UI;
|
||||||
|
using MareSynchronos.Utils;
|
||||||
|
using MareSynchronos.FileCache;
|
||||||
|
using MareSynchronos.MareConfiguration;
|
||||||
|
using MareSynchronos.Mediator;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
|
namespace MareSynchronos;
|
||||||
|
|
||||||
|
public class MarePlugin : MediatorSubscriberBase, IDisposable
|
||||||
|
{
|
||||||
|
private readonly ServiceProvider _serviceProvider;
|
||||||
|
private const string _commandName = "/mare";
|
||||||
|
private IServiceScope? _runtimeServiceScope;
|
||||||
|
|
||||||
|
public MarePlugin(ServiceProvider serviceProvider, MareMediator mediator) : base(mediator)
|
||||||
|
{
|
||||||
|
_serviceProvider = serviceProvider;
|
||||||
|
|
||||||
|
mediator.Subscribe<SwitchToMainUiMessage>(this, (_) => Task.Run(WaitForPlayerAndLaunchCharacterManager));
|
||||||
|
mediator.Subscribe<DalamudLoginMessage>(this, (_) => DalamudUtilOnLogIn());
|
||||||
|
mediator.Subscribe<DalamudLogoutMessage>(this, (_) => DalamudUtilOnLogOut());
|
||||||
|
|
||||||
|
serviceProvider.GetRequiredService<SettingsUi>();
|
||||||
|
serviceProvider.GetRequiredService<CompactUi>();
|
||||||
|
serviceProvider.GetRequiredService<GposeUi>();
|
||||||
|
serviceProvider.GetRequiredService<IntroUi>();
|
||||||
|
serviceProvider.GetRequiredService<DownloadUi>();
|
||||||
|
serviceProvider.GetRequiredService<NotificationService>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Dispose()
|
||||||
|
{
|
||||||
|
base.Dispose();
|
||||||
|
|
||||||
|
_serviceProvider.GetRequiredService<CommandManager>().RemoveHandler(_commandName);
|
||||||
|
|
||||||
|
_runtimeServiceScope?.Dispose();
|
||||||
|
_serviceProvider.Dispose();
|
||||||
|
|
||||||
|
Logger.Debug("Shut down");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DalamudUtilOnLogIn()
|
||||||
|
{
|
||||||
|
Logger.Debug("Client login");
|
||||||
|
|
||||||
|
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 (!_serviceProvider.GetRequiredService<ConfigurationService>().Current.HasValidSetup()
|
||||||
|
|| !_serviceProvider.GetRequiredService<ServerConfigurationManager>().HasValidConfig())
|
||||||
|
{
|
||||||
|
_serviceProvider.GetRequiredService<MareMediator>().Publish(new SwitchToIntroUiMessage());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_serviceProvider.GetRequiredService<PeriodicFileScanner>().StartScan();
|
||||||
|
Task.Run(WaitForPlayerAndLaunchCharacterManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DalamudUtilOnLogOut()
|
||||||
|
{
|
||||||
|
Logger.Debug("Client logout");
|
||||||
|
_runtimeServiceScope?.Dispose();
|
||||||
|
var pi = _serviceProvider.GetRequiredService<DalamudPluginInterface>();
|
||||||
|
pi.UiBuilder.Draw -= Draw;
|
||||||
|
pi.UiBuilder.OpenConfigUi -= OpenUi;
|
||||||
|
_serviceProvider.GetRequiredService<CommandManager>().RemoveHandler(_commandName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task WaitForPlayerAndLaunchCharacterManager()
|
||||||
|
{
|
||||||
|
var dalamudUtil = _serviceProvider.GetRequiredService<DalamudUtil>();
|
||||||
|
while (!dalamudUtil.IsPlayerPresent)
|
||||||
|
{
|
||||||
|
await Task.Delay(100).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Logger.Debug("Launching Managers");
|
||||||
|
|
||||||
|
_runtimeServiceScope?.Dispose();
|
||||||
|
_runtimeServiceScope = _serviceProvider.CreateScope();
|
||||||
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<TransientResourceManager>();
|
||||||
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<PlayerManager>();
|
||||||
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<OnlinePlayerManager>();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Warn(ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Draw()
|
||||||
|
{
|
||||||
|
_serviceProvider.GetRequiredService<WindowSystem>().Draw();
|
||||||
|
_serviceProvider.GetRequiredService<FileDialogManager>().Draw();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnCommand(string command, string args)
|
||||||
|
{
|
||||||
|
var splitArgs = args.ToLowerInvariant().Trim().Split(" ", StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
|
||||||
|
if (splitArgs == null || splitArgs.Length == 0)
|
||||||
|
{
|
||||||
|
// Interpret this as toggling the UI
|
||||||
|
OpenUi();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.Equals(splitArgs[0], "toggle", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
var serverConfigurationManager = _serviceProvider.GetRequiredService<ServerConfigurationManager>();
|
||||||
|
if (serverConfigurationManager.CurrentServer == null) return;
|
||||||
|
var fullPause = splitArgs.Length > 1 ? splitArgs[1] switch
|
||||||
|
{
|
||||||
|
"on" => false,
|
||||||
|
"off" => true,
|
||||||
|
_ => !serverConfigurationManager.CurrentServer.FullPause,
|
||||||
|
} : !serverConfigurationManager.CurrentServer.FullPause;
|
||||||
|
|
||||||
|
if (fullPause != serverConfigurationManager.CurrentServer.FullPause)
|
||||||
|
{
|
||||||
|
serverConfigurationManager.CurrentServer.FullPause = fullPause;
|
||||||
|
serverConfigurationManager.Save();
|
||||||
|
_ = _serviceProvider.GetRequiredService<ApiController>().CreateConnections();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (string.Equals(splitArgs[0], "gpose", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
_serviceProvider.GetRequiredService<GposeUi>().Toggle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OpenUi()
|
||||||
|
{
|
||||||
|
|
||||||
|
if (_serviceProvider.GetRequiredService<ConfigurationService>().Current.HasValidSetup())
|
||||||
|
_serviceProvider.GetRequiredService<CompactUi>().Toggle();
|
||||||
|
else
|
||||||
|
_serviceProvider.GetRequiredService<IntroUi>().Toggle();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,11 +4,11 @@ namespace MareSynchronos.Mediator;
|
|||||||
|
|
||||||
public class MareMediator : IDisposable
|
public class MareMediator : IDisposable
|
||||||
{
|
{
|
||||||
private record MediatorSubscriber(object Subscriber, Action<IMessage> Action);
|
private record MediatorSubscriber(IMediatorSubscriber Subscriber, Action<IMessage> Action);
|
||||||
|
|
||||||
private readonly Dictionary<Type, HashSet<MediatorSubscriber>> _subscriberDict = new();
|
private readonly Dictionary<Type, HashSet<MediatorSubscriber>> _subscriberDict = new();
|
||||||
|
|
||||||
public void Subscribe<T>(object subscriber, Action<IMessage> action) where T : IMessage
|
public void Subscribe<T>(IMediatorSubscriber subscriber, Action<IMessage> action) where T : IMessage
|
||||||
{
|
{
|
||||||
_subscriberDict.TryAdd(typeof(T), new HashSet<MediatorSubscriber>());
|
_subscriberDict.TryAdd(typeof(T), new HashSet<MediatorSubscriber>());
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ public class MareMediator : IDisposable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Unsubscribe<T>(object subscriber) where T : IMessage
|
public void Unsubscribe<T>(IMediatorSubscriber subscriber) where T : IMessage
|
||||||
{
|
{
|
||||||
if (_subscriberDict.TryGetValue(typeof(T), out var subscribers))
|
if (_subscriberDict.TryGetValue(typeof(T), out var subscribers))
|
||||||
{
|
{
|
||||||
@@ -30,7 +30,7 @@ public class MareMediator : IDisposable
|
|||||||
{
|
{
|
||||||
if (_subscriberDict.TryGetValue(message.GetType(), out var subscribers))
|
if (_subscriberDict.TryGetValue(message.GetType(), out var subscribers))
|
||||||
{
|
{
|
||||||
foreach (var subscriber in subscribers)
|
foreach (var subscriber in subscribers.ToList())
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -44,9 +44,9 @@ public class MareMediator : IDisposable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void UnsubscribeAll(object subscriber)
|
internal void UnsubscribeAll(IMediatorSubscriber subscriber)
|
||||||
{
|
{
|
||||||
foreach (var kvp in _subscriberDict)
|
foreach (var kvp in _subscriberDict.ToList())
|
||||||
{
|
{
|
||||||
kvp.Value.RemoveWhere(p => p.Subscriber == subscriber);
|
kvp.Value.RemoveWhere(p => p.Subscriber == subscriber);
|
||||||
}
|
}
|
||||||
@@ -54,6 +54,7 @@ public class MareMediator : IDisposable
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
Logger.Verbose($"Disposing {GetType()}");
|
||||||
_subscriberDict.Clear();
|
_subscriberDict.Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,16 +1,39 @@
|
|||||||
namespace MareSynchronos.Mediator;
|
using Dalamud.Interface.Windowing;
|
||||||
|
using MareSynchronos.Utils;
|
||||||
|
|
||||||
public abstract class MediatorSubscriberBase : IDisposable
|
namespace MareSynchronos.Mediator;
|
||||||
|
|
||||||
|
public abstract class MediatorSubscriberBase : IMediatorSubscriber
|
||||||
{
|
{
|
||||||
|
public MareMediator Mediator { get; }
|
||||||
protected MediatorSubscriberBase(MareMediator mediator)
|
protected MediatorSubscriberBase(MareMediator mediator)
|
||||||
{
|
{
|
||||||
Mediator = mediator;
|
Mediator = mediator;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected readonly MareMediator Mediator;
|
|
||||||
|
|
||||||
public virtual void Dispose()
|
public virtual void Dispose()
|
||||||
{
|
{
|
||||||
|
Logger.Verbose($"Disposing {GetType()}");
|
||||||
Mediator.UnsubscribeAll(this);
|
Mediator.UnsubscribeAll(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public abstract class WindowMediatorSubscriberBase : Window, IMediatorSubscriber
|
||||||
|
{
|
||||||
|
public MareMediator Mediator { get; }
|
||||||
|
protected WindowMediatorSubscriberBase(MareMediator mediator, string name) : base(name)
|
||||||
|
{
|
||||||
|
Mediator = mediator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void Dispose()
|
||||||
|
{
|
||||||
|
Logger.Verbose($"Disposing {GetType()}");
|
||||||
|
Mediator.UnsubscribeAll(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IMediatorSubscriber : IDisposable
|
||||||
|
{
|
||||||
|
MareMediator Mediator { get; }
|
||||||
|
}
|
||||||
|
|||||||
@@ -23,9 +23,8 @@ namespace MareSynchronos;
|
|||||||
|
|
||||||
public sealed class Plugin : IDalamudPlugin
|
public sealed class Plugin : IDalamudPlugin
|
||||||
{
|
{
|
||||||
private const string _commandName = "/mare";
|
private readonly MarePlugin plugin;
|
||||||
private IServiceScope? _runtimeServiceScope;
|
public string Name => "Mare Synchronos";
|
||||||
private readonly ServiceProvider _serviceProvider;
|
|
||||||
|
|
||||||
public Plugin(DalamudPluginInterface pluginInterface, CommandManager commandManager, DataManager gameData,
|
public Plugin(DalamudPluginInterface pluginInterface, CommandManager commandManager, DataManager gameData,
|
||||||
Framework framework, ObjectTable objectTable, ClientState clientState, Condition condition, ChatGui chatGui)
|
Framework framework, ObjectTable objectTable, ClientState clientState, Condition condition, ChatGui chatGui)
|
||||||
@@ -76,142 +75,18 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
collection.AddScoped<PlayerManager>();
|
collection.AddScoped<PlayerManager>();
|
||||||
collection.AddScoped<OnlinePlayerManager>();
|
collection.AddScoped<OnlinePlayerManager>();
|
||||||
|
|
||||||
_serviceProvider = collection.BuildServiceProvider(new ServiceProviderOptions() { ValidateOnBuild = true, ValidateScopes = true });
|
var serviceProvider = collection.BuildServiceProvider(new ServiceProviderOptions() { ValidateOnBuild = true, ValidateScopes = true });
|
||||||
|
|
||||||
_serviceProvider.GetRequiredService<Dalamud.Localization>().SetupWithLangCode("en");
|
serviceProvider.GetRequiredService<Dalamud.Localization>().SetupWithLangCode("en");
|
||||||
_serviceProvider.GetRequiredService<DalamudPluginInterface>().UiBuilder.DisableGposeUiHide = true;
|
serviceProvider.GetRequiredService<DalamudPluginInterface>().UiBuilder.DisableGposeUiHide = true;
|
||||||
|
|
||||||
var mediator = _serviceProvider.GetRequiredService<MareMediator>();
|
var mediator = serviceProvider.GetRequiredService<MareMediator>();
|
||||||
mediator.Subscribe<SwitchToMainUiMessage>(this, (_) => Task.Run(WaitForPlayerAndLaunchCharacterManager));
|
plugin = new MarePlugin(serviceProvider, mediator);
|
||||||
mediator.Subscribe<DalamudLoginMessage>(this, (_) => DalamudUtilOnLogIn());
|
|
||||||
mediator.Subscribe<DalamudLogoutMessage>(this, (_) => DalamudUtilOnLogOut());
|
|
||||||
|
|
||||||
_serviceProvider.GetRequiredService<SettingsUi>();
|
|
||||||
_serviceProvider.GetRequiredService<CompactUi>();
|
|
||||||
_serviceProvider.GetRequiredService<GposeUi>();
|
|
||||||
_serviceProvider.GetRequiredService<IntroUi>();
|
|
||||||
_serviceProvider.GetRequiredService<DownloadUi>();
|
|
||||||
_serviceProvider.GetRequiredService<NotificationService>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Name => "Mare Synchronos";
|
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
Logger.Verbose("Disposing " + Name);
|
Logger.Verbose($"Disposing {GetType()}");
|
||||||
|
plugin.Dispose();
|
||||||
_serviceProvider.GetRequiredService<CommandManager>().RemoveHandler(_commandName);
|
|
||||||
|
|
||||||
_runtimeServiceScope?.Dispose();
|
|
||||||
_serviceProvider.Dispose();
|
|
||||||
|
|
||||||
Logger.Debug("Shut down");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DalamudUtilOnLogIn()
|
|
||||||
{
|
|
||||||
Logger.Debug("Client login");
|
|
||||||
|
|
||||||
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 (!_serviceProvider.GetRequiredService<ConfigurationService>().Current.HasValidSetup()
|
|
||||||
|| !_serviceProvider.GetRequiredService<ServerConfigurationManager>().HasValidConfig())
|
|
||||||
{
|
|
||||||
_serviceProvider.GetRequiredService<MareMediator>().Publish(new SwitchToIntroUiMessage());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_serviceProvider.GetRequiredService<PeriodicFileScanner>().StartScan();
|
|
||||||
Task.Run(WaitForPlayerAndLaunchCharacterManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DalamudUtilOnLogOut()
|
|
||||||
{
|
|
||||||
Logger.Debug("Client logout");
|
|
||||||
_runtimeServiceScope?.Dispose();
|
|
||||||
var pi = _serviceProvider.GetRequiredService<DalamudPluginInterface>();
|
|
||||||
pi.UiBuilder.Draw -= Draw;
|
|
||||||
pi.UiBuilder.OpenConfigUi -= OpenUi;
|
|
||||||
_serviceProvider.GetRequiredService<CommandManager>().RemoveHandler(_commandName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task WaitForPlayerAndLaunchCharacterManager()
|
|
||||||
{
|
|
||||||
var dalamudUtil = _serviceProvider.GetRequiredService<DalamudUtil>();
|
|
||||||
while (!dalamudUtil.IsPlayerPresent)
|
|
||||||
{
|
|
||||||
await Task.Delay(100).ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Logger.Debug("Launching Managers");
|
|
||||||
|
|
||||||
_runtimeServiceScope?.Dispose();
|
|
||||||
_runtimeServiceScope = _serviceProvider.CreateScope();
|
|
||||||
_runtimeServiceScope.ServiceProvider.GetRequiredService<TransientResourceManager>();
|
|
||||||
_runtimeServiceScope.ServiceProvider.GetRequiredService<PlayerManager>();
|
|
||||||
_runtimeServiceScope.ServiceProvider.GetRequiredService<OnlinePlayerManager>();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Logger.Warn(ex.Message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Draw()
|
|
||||||
{
|
|
||||||
_serviceProvider.GetRequiredService<WindowSystem>().Draw();
|
|
||||||
_serviceProvider.GetRequiredService<FileDialogManager>().Draw();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnCommand(string command, string args)
|
|
||||||
{
|
|
||||||
var splitArgs = args.ToLowerInvariant().Trim().Split(" ", StringSplitOptions.RemoveEmptyEntries);
|
|
||||||
|
|
||||||
if (splitArgs == null || splitArgs.Length == 0)
|
|
||||||
{
|
|
||||||
// Interpret this as toggling the UI
|
|
||||||
OpenUi();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (string.Equals(splitArgs[0], "toggle", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
var serverConfigurationManager = _serviceProvider.GetRequiredService<ServerConfigurationManager>();
|
|
||||||
if (serverConfigurationManager.CurrentServer == null) return;
|
|
||||||
var fullPause = splitArgs.Length > 1 ? splitArgs[1] switch
|
|
||||||
{
|
|
||||||
"on" => false,
|
|
||||||
"off" => true,
|
|
||||||
_ => !serverConfigurationManager.CurrentServer.FullPause,
|
|
||||||
} : !serverConfigurationManager.CurrentServer.FullPause;
|
|
||||||
|
|
||||||
if (fullPause != serverConfigurationManager.CurrentServer.FullPause)
|
|
||||||
{
|
|
||||||
serverConfigurationManager.CurrentServer.FullPause = fullPause;
|
|
||||||
serverConfigurationManager.Save();
|
|
||||||
_ = _serviceProvider.GetRequiredService<ApiController>().CreateConnections();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (string.Equals(splitArgs[0], "gpose", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
_serviceProvider.GetRequiredService<GposeUi>().Toggle();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OpenUi()
|
|
||||||
{
|
|
||||||
|
|
||||||
if (_serviceProvider.GetRequiredService<ConfigurationService>().Current.HasValidSetup())
|
|
||||||
_serviceProvider.GetRequiredService<CompactUi>().Toggle();
|
|
||||||
else
|
|
||||||
_serviceProvider.GetRequiredService<IntroUi>().Toggle();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,12 +21,11 @@ using MareSynchronos.WebAPI;
|
|||||||
|
|
||||||
namespace MareSynchronos.UI;
|
namespace MareSynchronos.UI;
|
||||||
|
|
||||||
public class CompactUi : Window, IDisposable
|
public class CompactUi : WindowMediatorSubscriberBase, 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);
|
||||||
@@ -58,7 +57,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, MareMediator mediator) : base("###MareSynchronosMainUI")
|
ServerConfigurationManager serverManager, MareMediator mediator) : base(mediator, "###MareSynchronosMainUI")
|
||||||
{
|
{
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
@@ -89,7 +88,6 @@ 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);
|
||||||
@@ -97,10 +95,10 @@ 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<SwitchToMainUiMessage>(this, (_) => IsOpen = true);
|
||||||
_mediator.Subscribe<SwitchToIntroUiMessage>(this, (_) => IsOpen = false);
|
Mediator.Subscribe<SwitchToIntroUiMessage>(this, (_) => IsOpen = false);
|
||||||
_mediator.Subscribe<GposeStartMessage>(this, (_) => UiShared_GposeStart());
|
Mediator.Subscribe<GposeStartMessage>(this, (_) => UiShared_GposeStart());
|
||||||
_mediator.Subscribe<GposeEndMessage>(this, (_) => UiShared_GposeEnd());
|
Mediator.Subscribe<GposeEndMessage>(this, (_) => UiShared_GposeEnd());
|
||||||
|
|
||||||
SizeConstraints = new WindowSizeConstraints()
|
SizeConstraints = new WindowSizeConstraints()
|
||||||
{
|
{
|
||||||
@@ -122,9 +120,9 @@ public class CompactUi : Window, IDisposable
|
|||||||
IsOpen = false;
|
IsOpen = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public override void Dispose()
|
||||||
{
|
{
|
||||||
Logger.Verbose("Disposing " + nameof(CompactUi));
|
base.Dispose();
|
||||||
_windowSystem.RemoveWindow(this);
|
_windowSystem.RemoveWindow(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -701,7 +699,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))
|
||||||
{
|
{
|
||||||
_mediator.Publish(new OpenSettingsUiMessage());
|
Mediator.Publish(new OpenSettingsUiMessage());
|
||||||
}
|
}
|
||||||
UiShared.AttachToolTip("Open the Mare Synchronos Settings");
|
UiShared.AttachToolTip("Open the Mare Synchronos Settings");
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public class DownloadUi : Window, IDisposable
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
Logger.Verbose("Disposing " + nameof(DownloadUi));
|
Logger.Verbose($"Disposing {GetType()}");
|
||||||
_windowSystem.RemoveWindow(this);
|
_windowSystem.RemoveWindow(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,27 +10,25 @@ using MareSynchronos.Utils;
|
|||||||
|
|
||||||
namespace MareSynchronos.UI;
|
namespace MareSynchronos.UI;
|
||||||
|
|
||||||
public class GposeUi : Window, IDisposable
|
public class GposeUi : WindowMediatorSubscriberBase, IDisposable
|
||||||
{
|
{
|
||||||
private readonly WindowSystem _windowSystem;
|
private readonly WindowSystem _windowSystem;
|
||||||
private readonly MareCharaFileManager _mareCharaFileManager;
|
private readonly MareCharaFileManager _mareCharaFileManager;
|
||||||
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,
|
DalamudUtil dalamudUtil, FileDialogManager fileDialogManager, ConfigurationService configService,
|
||||||
MareMediator mediator) : base("Mare Synchronos Gpose Import UI###MareSynchronosGposeUI")
|
MareMediator mediator) : base(mediator, "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;
|
||||||
_mediator = mediator;
|
Mediator.Subscribe<GposeStartMessage>(this, (_) => StartGpose());
|
||||||
_mediator.Subscribe<GposeStartMessage>(this, (_) => StartGpose());
|
Mediator.Subscribe<GposeEndMessage>(this, (_) => EndGpose());
|
||||||
_mediator.Subscribe<GposeEndMessage>(this, (_) => EndGpose());
|
|
||||||
IsOpen = _dalamudUtil.IsInGpose;
|
IsOpen = _dalamudUtil.IsInGpose;
|
||||||
Flags = ImGuiWindowFlags.AlwaysAutoResize;
|
Flags = ImGuiWindowFlags.AlwaysAutoResize;
|
||||||
_windowSystem.AddWindow(this);
|
_windowSystem.AddWindow(this);
|
||||||
@@ -47,8 +45,9 @@ public class GposeUi : Window, IDisposable
|
|||||||
IsOpen = _configService.Current.OpenGposeImportOnGposeStart;
|
IsOpen = _configService.Current.OpenGposeImportOnGposeStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public override void Dispose()
|
||||||
{
|
{
|
||||||
|
base.Dispose();
|
||||||
_windowSystem.RemoveWindow(this);
|
_windowSystem.RemoveWindow(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,13 +13,12 @@ using MareSynchronos.Mediator;
|
|||||||
|
|
||||||
namespace MareSynchronos.UI;
|
namespace MareSynchronos.UI;
|
||||||
|
|
||||||
internal class IntroUi : Window, IDisposable
|
internal class IntroUi : WindowMediatorSubscriberBase, IDisposable
|
||||||
{
|
{
|
||||||
private readonly UiShared _uiShared;
|
private readonly UiShared _uiShared;
|
||||||
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;
|
||||||
|
|
||||||
@@ -31,15 +30,14 @@ internal class IntroUi : Window, IDisposable
|
|||||||
private readonly Dictionary<string, string> _languages = new(StringComparer.Ordinal) { { "English", "en" }, { "Deutsch", "de" }, { "Français", "fr" } };
|
private readonly Dictionary<string, string> _languages = new(StringComparer.Ordinal) { { "English", "en" }, { "Deutsch", "de" }, { "Français", "fr" } };
|
||||||
private int _currentLanguage;
|
private int _currentLanguage;
|
||||||
|
|
||||||
public void Dispose()
|
public override void Dispose()
|
||||||
{
|
{
|
||||||
Logger.Verbose("Disposing " + nameof(IntroUi));
|
base.Dispose();
|
||||||
|
|
||||||
_windowSystem.RemoveWindow(this);
|
_windowSystem.RemoveWindow(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IntroUi(WindowSystem windowSystem, UiShared uiShared, ConfigurationService configService,
|
public IntroUi(WindowSystem windowSystem, UiShared uiShared, ConfigurationService configService,
|
||||||
PeriodicFileScanner fileCacheManager, ServerConfigurationManager serverConfigurationManager, MareMediator mareMediator) : base("Mare Synchronos Setup")
|
PeriodicFileScanner fileCacheManager, ServerConfigurationManager serverConfigurationManager, MareMediator mareMediator) : base(mareMediator, "Mare Synchronos Setup")
|
||||||
{
|
{
|
||||||
Logger.Verbose("Creating " + nameof(IntroUi));
|
Logger.Verbose("Creating " + nameof(IntroUi));
|
||||||
|
|
||||||
@@ -47,7 +45,6 @@ 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,8 +56,8 @@ internal class IntroUi : Window, IDisposable
|
|||||||
|
|
||||||
GetToSLocalization();
|
GetToSLocalization();
|
||||||
|
|
||||||
_mareMediator.Subscribe<SwitchToMainUiMessage>(this, (_) => IsOpen = false);
|
Mediator.Subscribe<SwitchToMainUiMessage>(this, (_) => IsOpen = false);
|
||||||
_mareMediator.Subscribe<SwitchToIntroUiMessage>(this, (_) => IsOpen = true);
|
Mediator.Subscribe<SwitchToIntroUiMessage>(this, (_) => IsOpen = true);
|
||||||
|
|
||||||
_windowSystem.AddWindow(this);
|
_windowSystem.AddWindow(this);
|
||||||
}
|
}
|
||||||
@@ -242,7 +239,7 @@ internal class IntroUi : Window, IDisposable
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_mareMediator.Publish(new SwitchToMainUiMessage());
|
Mediator.Publish(new SwitchToMainUiMessage());
|
||||||
IsOpen = false;
|
IsOpen = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,12 +14,10 @@ using MareSynchronos.Managers;
|
|||||||
using MareSynchronos.API.Data.Comparer;
|
using MareSynchronos.API.Data.Comparer;
|
||||||
using MareSynchronos.MareConfiguration;
|
using MareSynchronos.MareConfiguration;
|
||||||
using MareSynchronos.Mediator;
|
using MareSynchronos.Mediator;
|
||||||
using Lumina.Excel.GeneratedSheets;
|
|
||||||
using static System.Runtime.InteropServices.JavaScript.JSType;
|
|
||||||
|
|
||||||
namespace MareSynchronos.UI;
|
namespace MareSynchronos.UI;
|
||||||
|
|
||||||
public class SettingsUi : Window, IDisposable
|
public class SettingsUi : WindowMediatorSubscriberBase, IDisposable
|
||||||
{
|
{
|
||||||
private readonly ConfigurationService _configService;
|
private readonly ConfigurationService _configService;
|
||||||
private readonly WindowSystem _windowSystem;
|
private readonly WindowSystem _windowSystem;
|
||||||
@@ -27,7 +25,6 @@ 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; }
|
||||||
|
|
||||||
@@ -39,7 +36,7 @@ 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,
|
MareCharaFileManager mareCharaFileManager, PairManager pairManager,
|
||||||
ServerConfigurationManager serverConfigurationManager, MareMediator mediator) : base("Mare Synchronos Settings")
|
ServerConfigurationManager serverConfigurationManager, MareMediator mediator) : base(mediator, "Mare Synchronos Settings")
|
||||||
{
|
{
|
||||||
Logger.Verbose("Creating " + nameof(SettingsUi));
|
Logger.Verbose("Creating " + nameof(SettingsUi));
|
||||||
|
|
||||||
@@ -54,15 +51,13 @@ 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<OpenSettingsUiMessage>(this, (_) => Toggle());
|
Mediator.Subscribe<SwitchToIntroUiMessage>(this, (_) => IsOpen = false);
|
||||||
_mediator.Subscribe<SwitchToIntroUiMessage>(this, (_) => IsOpen = false);
|
Mediator.Subscribe<GposeStartMessage>(this, (_) => UiShared_GposeStart());
|
||||||
_mediator.Subscribe<GposeStartMessage>(this, (_) => UiShared_GposeStart());
|
Mediator.Subscribe<GposeEndMessage>(this, (_) => UiShared_GposeEnd());
|
||||||
_mediator.Subscribe<GposeEndMessage>(this, (_) => UiShared_GposeEnd());
|
Mediator.Subscribe<PlayerChangedMessage>(this, (msg) => LastCreatedCharacterData = ((PlayerChangedMessage)msg).Data);
|
||||||
_mediator.Subscribe<PlayerChangedMessage>(this, (msg) => LastCreatedCharacterData = ((PlayerChangedMessage)msg).Data);
|
|
||||||
|
|
||||||
windowSystem.AddWindow(this);
|
windowSystem.AddWindow(this);
|
||||||
}
|
}
|
||||||
@@ -78,10 +73,9 @@ public class SettingsUi : Window, IDisposable
|
|||||||
IsOpen = false;
|
IsOpen = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public override void Dispose()
|
||||||
{
|
{
|
||||||
Logger.Verbose("Disposing " + nameof(SettingsUi));
|
base.Dispose();
|
||||||
|
|
||||||
_windowSystem.RemoveWindow(this);
|
_windowSystem.RemoveWindow(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,7 +209,7 @@ public class SettingsUi : Window, IDisposable
|
|||||||
{
|
{
|
||||||
Task.Run(() => ApiController.UserDelete());
|
Task.Run(() => ApiController.UserDelete());
|
||||||
_deleteAccountPopupModalShown = false;
|
_deleteAccountPopupModalShown = false;
|
||||||
_mediator.Publish(new SwitchToIntroUiMessage());
|
Mediator.Publish(new SwitchToIntroUiMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui.SameLine();
|
ImGui.SameLine();
|
||||||
|
|||||||
@@ -656,6 +656,7 @@ public partial class UiShared : IDisposable
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
Logger.Verbose($"Disposing {GetType()}");
|
||||||
_pluginInterface.UiBuilder.BuildFonts -= BuildFont;
|
_pluginInterface.UiBuilder.BuildFonts -= BuildFont;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ public class DalamudLoggingProvider : ILoggerProvider
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
Logger.Verbose($"Disposing {GetType()}");
|
||||||
_loggers.Clear();
|
_loggers.Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ using Dalamud.Game.ClientState;
|
|||||||
using Dalamud.Game.ClientState.Conditions;
|
using Dalamud.Game.ClientState.Conditions;
|
||||||
using Dalamud.Game.ClientState.Objects;
|
using Dalamud.Game.ClientState.Objects;
|
||||||
using Dalamud.Game.ClientState.Objects.SubKinds;
|
using Dalamud.Game.ClientState.Objects.SubKinds;
|
||||||
using Dalamud.Game.Gui;
|
|
||||||
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;
|
||||||
@@ -270,6 +268,7 @@ public class DalamudUtil : IDisposable
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
Logger.Verbose($"Disposing {GetType()}");
|
||||||
_framework.Update -= FrameworkOnUpdate;
|
_framework.Update -= FrameworkOnUpdate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ public partial class ApiController
|
|||||||
|
|
||||||
public async Task DownloadFiles(int currentDownloadId, List<FileReplacementData> fileReplacementDto, CancellationToken ct)
|
public async Task DownloadFiles(int currentDownloadId, List<FileReplacementData> fileReplacementDto, CancellationToken ct)
|
||||||
{
|
{
|
||||||
_mediator.Publish(new HaltScanMessage("Download"));
|
Mediator.Publish(new HaltScanMessage("Download"));
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await DownloadFilesInternal(currentDownloadId, fileReplacementDto, ct).ConfigureAwait(false);
|
await DownloadFilesInternal(currentDownloadId, fileReplacementDto, ct).ConfigureAwait(false);
|
||||||
@@ -197,7 +197,7 @@ public partial class ApiController
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
_mediator.Publish(new ResumeScanMessage("Download"));
|
Mediator.Publish(new ResumeScanMessage("Download"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -255,13 +255,13 @@ public partial class ApiController
|
|||||||
switch (severity)
|
switch (severity)
|
||||||
{
|
{
|
||||||
case MessageSeverity.Error:
|
case MessageSeverity.Error:
|
||||||
_mediator.Publish(new NotificationMessage("Warning from " + _serverManager.CurrentServer!.ServerName, message, NotificationType.Error, 7500));
|
Mediator.Publish(new NotificationMessage("Warning from " + _serverManager.CurrentServer!.ServerName, message, NotificationType.Error, 7500));
|
||||||
break;
|
break;
|
||||||
case MessageSeverity.Warning:
|
case MessageSeverity.Warning:
|
||||||
_mediator.Publish(new NotificationMessage("Warning from " + _serverManager.CurrentServer!.ServerName, message, NotificationType.Warning, 7500));
|
Mediator.Publish(new NotificationMessage("Warning from " + _serverManager.CurrentServer!.ServerName, message, NotificationType.Warning, 7500));
|
||||||
break;
|
break;
|
||||||
case MessageSeverity.Information:
|
case MessageSeverity.Information:
|
||||||
_mediator.Publish(new NotificationMessage("Info from " + _serverManager.CurrentServer!.ServerName, message, NotificationType.Info, 5000));
|
Mediator.Publish(new NotificationMessage("Info from " + _serverManager.CurrentServer!.ServerName, message, NotificationType.Info, 5000));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ using MareSynchronos.MareConfiguration;
|
|||||||
using MareSynchronos.Mediator;
|
using MareSynchronos.Mediator;
|
||||||
|
|
||||||
namespace MareSynchronos.WebAPI;
|
namespace MareSynchronos.WebAPI;
|
||||||
public partial class ApiController : IDisposable, IMareHubClient
|
public partial class ApiController : MediatorSubscriberBase, IDisposable, IMareHubClient
|
||||||
{
|
{
|
||||||
public const string MainServer = "Lunae Crescere Incipientis (Central Server EU)";
|
public const string MainServer = "Lunae Crescere Incipientis (Central Server EU)";
|
||||||
public const string MainServiceUri = "wss://maresynchronos.com";
|
public const string MainServiceUri = "wss://maresynchronos.com";
|
||||||
@@ -27,7 +27,6 @@ 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;
|
||||||
|
|
||||||
@@ -45,7 +44,8 @@ public partial class ApiController : IDisposable, IMareHubClient
|
|||||||
|
|
||||||
private HttpClient _httpClient;
|
private HttpClient _httpClient;
|
||||||
|
|
||||||
public ApiController(ConfigurationService configService, DalamudUtil dalamudUtil, FileCacheManager fileDbManager, PairManager pairManager, ServerConfigurationManager serverManager, MareMediator mediator)
|
public ApiController(ConfigurationService configService, DalamudUtil dalamudUtil, FileCacheManager fileDbManager,
|
||||||
|
PairManager pairManager, ServerConfigurationManager serverManager, MareMediator mediator) : base(mediator)
|
||||||
{
|
{
|
||||||
Logger.Verbose("Creating " + nameof(ApiController));
|
Logger.Verbose("Creating " + nameof(ApiController));
|
||||||
|
|
||||||
@@ -54,11 +54,10 @@ 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();
|
||||||
|
|
||||||
_mediator.Subscribe<DalamudLoginMessage>(this, (_) => DalamudUtilOnLogIn());
|
Mediator.Subscribe<DalamudLoginMessage>(this, (_) => DalamudUtilOnLogIn());
|
||||||
_mediator.Subscribe<DalamudLogoutMessage>(this, (_) => DalamudUtilOnLogOut());
|
Mediator.Subscribe<DalamudLogoutMessage>(this, (_) => DalamudUtilOnLogOut());
|
||||||
ServerState = ServerState.Offline;
|
ServerState = ServerState.Offline;
|
||||||
_verifiedUploadedHashes = new(StringComparer.Ordinal);
|
_verifiedUploadedHashes = new(StringComparer.Ordinal);
|
||||||
_httpClient = new();
|
_httpClient = new();
|
||||||
@@ -304,14 +303,12 @@ public partial class ApiController : IDisposable, IMareHubClient
|
|||||||
_ = ClientHealthCheck(_healthCheckTokenSource.Token);
|
_ = ClientHealthCheck(_healthCheckTokenSource.Token);
|
||||||
|
|
||||||
_initialized = true;
|
_initialized = true;
|
||||||
_mediator.Publish(new ConnectedMessage());
|
Mediator.Publish(new ConnectedMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public override void Dispose()
|
||||||
{
|
{
|
||||||
Logger.Verbose("Disposing " + nameof(ApiController));
|
base.Dispose();
|
||||||
|
|
||||||
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();
|
||||||
_healthCheckTokenSource?.Cancel();
|
_healthCheckTokenSource?.Cancel();
|
||||||
@@ -341,7 +338,7 @@ public partial class ApiController : IDisposable, IMareHubClient
|
|||||||
CurrentDownloads.Clear();
|
CurrentDownloads.Clear();
|
||||||
_uploadCancellationTokenSource?.Cancel();
|
_uploadCancellationTokenSource?.Cancel();
|
||||||
_healthCheckTokenSource?.Cancel();
|
_healthCheckTokenSource?.Cancel();
|
||||||
_mediator.Publish(new DisconnectedMessage());
|
Mediator.Publish(new DisconnectedMessage());
|
||||||
_pairManager.ClearPairs();
|
_pairManager.ClearPairs();
|
||||||
ServerState = ServerState.Offline;
|
ServerState = ServerState.Offline;
|
||||||
Logger.Info("Connection closed");
|
Logger.Info("Connection closed");
|
||||||
@@ -353,11 +350,11 @@ public partial class ApiController : IDisposable, IMareHubClient
|
|||||||
_connectionDto = null;
|
_connectionDto = null;
|
||||||
_healthCheckTokenSource?.Cancel();
|
_healthCheckTokenSource?.Cancel();
|
||||||
ServerState = ServerState.Reconnecting;
|
ServerState = ServerState.Reconnecting;
|
||||||
_mediator.Publish(new NotificationMessage("Connection lost", "Connection lost to " + _serverManager.CurrentServer!.ServerName, NotificationType.Error, 5000));
|
Mediator.Publish(new NotificationMessage("Connection lost", "Connection lost to " + _serverManager.CurrentServer!.ServerName, NotificationType.Error, 5000));
|
||||||
Logger.Warn("Connection closed... Reconnecting");
|
Logger.Warn("Connection closed... Reconnecting");
|
||||||
Logger.Warn(arg?.Message ?? string.Empty);
|
Logger.Warn(arg?.Message ?? string.Empty);
|
||||||
Logger.Warn(arg?.StackTrace ?? string.Empty);
|
Logger.Warn(arg?.StackTrace ?? string.Empty);
|
||||||
_mediator.Publish(new DisconnectedMessage());
|
Mediator.Publish(new DisconnectedMessage());
|
||||||
_pairManager.ClearPairs();
|
_pairManager.ClearPairs();
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
@@ -387,7 +384,7 @@ public partial class ApiController : IDisposable, IMareHubClient
|
|||||||
await _mareHub.DisposeAsync().ConfigureAwait(false);
|
await _mareHub.DisposeAsync().ConfigureAwait(false);
|
||||||
CurrentUploads.Clear();
|
CurrentUploads.Clear();
|
||||||
CurrentDownloads.Clear();
|
CurrentDownloads.Clear();
|
||||||
_mediator.Publish(new DisconnectedMessage());
|
Mediator.Publish(new DisconnectedMessage());
|
||||||
_pairManager.ClearPairs();
|
_pairManager.ClearPairs();
|
||||||
_mareHub = null;
|
_mareHub = null;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user