diff --git a/MareSynchronos/MareSynchronos.json b/MareSynchronos/MareSynchronos.json index 317ce25..82addc0 100644 --- a/MareSynchronos/MareSynchronos.json +++ b/MareSynchronos/MareSynchronos.json @@ -9,5 +9,6 @@ "customization" ], "IconUrl": "https://raw.githubusercontent.com/Penumbra-Sync/client/main/MareSynchronos/images/logo.png", - "RepoUrl": "https://github.com/Penumbra-Sync/client" + "RepoUrl": "https://github.com/Penumbra-Sync/client", + "CanUnloadAsync": true } \ No newline at end of file diff --git a/MareSynchronos/PlayerData/Export/MareCharaFileManager.cs b/MareSynchronos/PlayerData/Export/MareCharaFileManager.cs index 9b9cab6..bb7d287 100644 --- a/MareSynchronos/PlayerData/Export/MareCharaFileManager.cs +++ b/MareSynchronos/PlayerData/Export/MareCharaFileManager.cs @@ -10,7 +10,6 @@ using MareSynchronos.Services; using MareSynchronos.Services.Mediator; using MareSynchronos.Utils; using Microsoft.Extensions.Logging; -using System.Text.Json; using CharacterData = MareSynchronos.API.Data.CharacterData; namespace MareSynchronos.PlayerData.Export; diff --git a/MareSynchronos/PlayerData/Factories/PairHandlerFactory.cs b/MareSynchronos/PlayerData/Factories/PairHandlerFactory.cs index f9ee5f6..4c96117 100644 --- a/MareSynchronos/PlayerData/Factories/PairHandlerFactory.cs +++ b/MareSynchronos/PlayerData/Factories/PairHandlerFactory.cs @@ -5,7 +5,6 @@ using MareSynchronos.PlayerData.Handlers; using MareSynchronos.PlayerData.Pairs; using MareSynchronos.Services; using MareSynchronos.Services.Mediator; -using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace MareSynchronos.PlayerData.Factories; @@ -16,7 +15,7 @@ public class PairHandlerFactory private readonly FileCacheManager _fileCacheManager; private readonly FileDownloadManagerFactory _fileDownloadManagerFactory; private readonly GameObjectHandlerFactory _gameObjectHandlerFactory; - private readonly IHostApplicationLifetime _hostApplicationLifetime; + private readonly CancellationToken _dalamudLifetimeToken; private readonly IpcManager _ipcManager; private readonly ILoggerFactory _loggerFactory; private readonly MareMediator _mareMediator; @@ -24,7 +23,7 @@ public class PairHandlerFactory public PairHandlerFactory(ILoggerFactory loggerFactory, GameObjectHandlerFactory gameObjectHandlerFactory, IpcManager ipcManager, FileDownloadManagerFactory fileDownloadManagerFactory, DalamudUtilService dalamudUtilService, - PluginWarningNotificationService pluginWarningNotificationManager, IHostApplicationLifetime hostApplicationLifetime, + PluginWarningNotificationService pluginWarningNotificationManager, CancellationToken dalamudLifetime, FileCacheManager fileCacheManager, MareMediator mareMediator) { _loggerFactory = loggerFactory; @@ -33,7 +32,7 @@ public class PairHandlerFactory _fileDownloadManagerFactory = fileDownloadManagerFactory; _dalamudUtilService = dalamudUtilService; _pluginWarningNotificationManager = pluginWarningNotificationManager; - _hostApplicationLifetime = hostApplicationLifetime; + _dalamudLifetimeToken = dalamudLifetime; _fileCacheManager = fileCacheManager; _mareMediator = mareMediator; } @@ -41,7 +40,7 @@ public class PairHandlerFactory public PairHandler Create(OnlineUserIdentDto onlineUserIdentDto) { return new PairHandler(_loggerFactory.CreateLogger(), onlineUserIdentDto, _gameObjectHandlerFactory, - _ipcManager, _fileDownloadManagerFactory.Create(), _pluginWarningNotificationManager, _dalamudUtilService, _hostApplicationLifetime, + _ipcManager, _fileDownloadManagerFactory.Create(), _pluginWarningNotificationManager, _dalamudUtilService, _dalamudLifetimeToken, _fileCacheManager, _mareMediator); } } \ No newline at end of file diff --git a/MareSynchronos/PlayerData/Handlers/PairHandler.cs b/MareSynchronos/PlayerData/Handlers/PairHandler.cs index 115f830..5fbf94b 100644 --- a/MareSynchronos/PlayerData/Handlers/PairHandler.cs +++ b/MareSynchronos/PlayerData/Handlers/PairHandler.cs @@ -9,7 +9,6 @@ using MareSynchronos.Services.Events; using MareSynchronos.Services.Mediator; using MareSynchronos.Utils; using MareSynchronos.WebAPI.Files; -using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using System.Collections.Concurrent; using System.Diagnostics; @@ -26,7 +25,7 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase private readonly FileCacheManager _fileDbManager; private readonly GameObjectHandlerFactory _gameObjectHandlerFactory; private readonly IpcManager _ipcManager; - private readonly IHostApplicationLifetime _lifetime; + private readonly CancellationToken _lifetime; private readonly PluginWarningNotificationService _pluginWarningNotificationManager; private CancellationTokenSource? _applicationCancellationTokenSource = new(); private Guid _applicationId; @@ -45,7 +44,7 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase GameObjectHandlerFactory gameObjectHandlerFactory, IpcManager ipcManager, FileDownloadManager transferManager, PluginWarningNotificationService pluginWarningNotificationManager, - DalamudUtilService dalamudUtil, IHostApplicationLifetime lifetime, + DalamudUtilService dalamudUtil, CancellationToken lifetime, FileCacheManager fileDbManager, MareMediator mediator) : base(logger, mediator) { OnlineUser = onlineUser; @@ -233,7 +232,7 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase Mediator.Publish(new EventMessage(new Event(name, OnlineUser.User, nameof(PairHandler), EventSeverity.Informational, "Disposing User"))); } - if (_lifetime.ApplicationStopping.IsCancellationRequested) return; + if (_lifetime.IsCancellationRequested) return; if (_dalamudUtil is { IsZoning: false, IsInCutscene: false } && !string.IsNullOrEmpty(name)) { diff --git a/MareSynchronos/Plugin.cs b/MareSynchronos/Plugin.cs index c45566c..5beeaee 100644 --- a/MareSynchronos/Plugin.cs +++ b/MareSynchronos/Plugin.cs @@ -35,7 +35,7 @@ public sealed class Plugin : IDalamudPlugin public Plugin(DalamudPluginInterface pluginInterface, ICommandManager commandManager, IDataManager gameData, IFramework framework, IObjectTable objectTable, IClientState clientState, ICondition condition, IChatGui chatGui, - IGameGui gameGui, IDtrBar dtrBar, IPluginLog pluginLog, ITargetManager targetManager) + IGameGui gameGui, IDtrBar dtrBar, IPluginLog pluginLog, ITargetManager targetManager, IGameLifecycle addonLifecycle) { _hostBuilderRunTask = new HostBuilder() .UseContentRoot(pluginInterface.ConfigDirectory.FullName) @@ -66,7 +66,10 @@ public sealed class Plugin : IDalamudPlugin collection.AddSingleton(); collection.AddSingleton(); collection.AddSingleton(); - collection.AddSingleton(); + collection.AddSingleton((s) => new PairHandlerFactory(s.GetRequiredService(), s.GetRequiredService(), + s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), + s.GetRequiredService(), CancellationTokenSource.CreateLinkedTokenSource(addonLifecycle.GameShuttingDownToken, addonLifecycle.DalamudUnloadingToken).Token, + s.GetRequiredService(), s.GetRequiredService())); collection.AddSingleton(); collection.AddSingleton(); collection.AddSingleton(); @@ -150,6 +153,6 @@ public sealed class Plugin : IDalamudPlugin { _pluginCts.Cancel(); _pluginCts.Dispose(); - Task.WaitAny(_hostBuilderRunTask); + _hostBuilderRunTask.Wait(); } } \ No newline at end of file diff --git a/MareSynchronos/UI/EventViewerUI.cs b/MareSynchronos/UI/EventViewerUI.cs index a025c3b..d94f1a9 100644 --- a/MareSynchronos/UI/EventViewerUI.cs +++ b/MareSynchronos/UI/EventViewerUI.cs @@ -1,6 +1,5 @@ using Dalamud.Interface; using Dalamud.Interface.Colors; -using Dalamud.Interface.Utility; using Dalamud.Interface.Utility.Raii; using ImGuiNET; using MareSynchronos.Services.Events;