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 c6a63c2..2ce0680 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 c9d66ec..c1c60a2 100644 --- a/MareSynchronos/PlayerData/Handlers/PairHandler.cs +++ b/MareSynchronos/PlayerData/Handlers/PairHandler.cs @@ -8,7 +8,6 @@ using MareSynchronos.Services; 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; @@ -25,7 +24,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; @@ -44,7 +43,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; @@ -214,7 +213,7 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase _charaHandler?.Dispose(); _charaHandler = null; - if (_lifetime.ApplicationStopping.IsCancellationRequested) return; + if (_lifetime.IsCancellationRequested) return; if (_dalamudUtil is { IsZoning: false, IsInCutscene: false } && !string.IsNullOrEmpty(name)) { @@ -635,4 +634,4 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase Logger.LogDebug("[BASE-{appBase}] ModdedPaths calculated in {time}ms, missing files: {count}, total files: {total}", applicationBase, st.ElapsedMilliseconds, missingFiles.Count, moddedDictionary.Keys.Count); return [.. missingFiles]; } -} \ No newline at end of file +} diff --git a/MareSynchronos/Plugin.cs b/MareSynchronos/Plugin.cs index 028c61f..67a9665 100644 --- a/MareSynchronos/Plugin.cs +++ b/MareSynchronos/Plugin.cs @@ -46,7 +46,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, IToastGui toastGui, IPluginLog pluginLog, ITargetManager targetManager) + IGameGui gameGui, IDtrBar dtrBar, IToastGui toastGui, IPluginLog pluginLog, ITargetManager targetManager, IGameLifecycle addonLifecycle) { Plugin.Self = this; _hostBuilderRunTask = new HostBuilder() @@ -78,7 +78,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(); @@ -152,6 +155,6 @@ public sealed class Plugin : IDalamudPlugin { _pluginCts.Cancel(); _pluginCts.Dispose(); - Task.WaitAny(_hostBuilderRunTask); + _hostBuilderRunTask.Wait(); } -} \ No newline at end of file +}