From 38e4668845da09cf2433b880e27840299863dde3 Mon Sep 17 00:00:00 2001 From: Stanley Dimant Date: Sun, 12 Jan 2025 02:55:22 +0100 Subject: [PATCH] fix ipc probably --- MareAPI | 2 +- MareSynchronos/Interop/Ipc/IpcProvider.cs | 32 ++++--------------- MareSynchronos/MareSynchronos.csproj | 10 +++--- MareSynchronos/Plugin.cs | 2 +- .../CharaData/CharaDataCharacterHandler.cs | 2 +- .../CharaData/CharaDataFileHandler.cs | 2 +- .../Services/CharaData/CharaDataManager.cs | 14 ++++++-- .../CharaData/CharaDataNearbyManager.cs | 5 ++- .../CharaData/MareCharaFileDataFactory.cs | 2 +- MareSynchronos/UI/CharaDataHubUi.McdOnline.cs | 2 +- MareSynchronos/UI/SettingsUi.cs | 2 +- 11 files changed, 32 insertions(+), 43 deletions(-) diff --git a/MareAPI b/MareAPI index 73100c5..b4b8ff4 160000 --- a/MareAPI +++ b/MareAPI @@ -1 +1 @@ -Subproject commit 73100c54058376348fe312c73ae66e12896fc5f4 +Subproject commit b4b8ff4a52db9729660fe803bb812adf96dbcd8b diff --git a/MareSynchronos/Interop/Ipc/IpcProvider.cs b/MareSynchronos/Interop/Ipc/IpcProvider.cs index b2b2925..0c03e1f 100644 --- a/MareSynchronos/Interop/Ipc/IpcProvider.cs +++ b/MareSynchronos/Interop/Ipc/IpcProvider.cs @@ -13,7 +13,7 @@ public class IpcProvider : IHostedService, IMediatorSubscriber { private readonly ILogger _logger; private readonly IDalamudPluginInterface _pi; - private readonly DalamudUtilService _dalamudUtil; + private readonly CharaDataManager _charaDataManager; private ICallGateProvider? _loadFileProvider; private ICallGateProvider>? _loadFileAsyncProvider; private ICallGateProvider>? _handledGameAddresses; @@ -22,16 +22,13 @@ public class IpcProvider : IHostedService, IMediatorSubscriber public MareMediator Mediator { get; init; } public IpcProvider(ILogger logger, IDalamudPluginInterface pi, - DalamudUtilService dalamudUtil, - MareMediator mareMediator) + CharaDataManager charaDataManager, MareMediator mareMediator) { _logger = logger; _pi = pi; - _dalamudUtil = dalamudUtil; + _charaDataManager = charaDataManager; Mediator = mareMediator; - // todo: fix ipc to use CharaDataManager - Mediator.Subscribe(this, (msg) => { if (msg.OwnedObject) return; @@ -69,9 +66,6 @@ public class IpcProvider : IHostedService, IMediatorSubscriber private async Task LoadMcdfAsync(string path, IGameObject target) { - //if (_mareCharaFileManager.CurrentlyWorking || !_dalamudUtil.IsInGpose) - return false; - await ApplyFileAsync(path, target).ConfigureAwait(false); return true; @@ -79,9 +73,6 @@ public class IpcProvider : IHostedService, IMediatorSubscriber private bool LoadMcdf(string path, IGameObject target) { - //if (_mareCharaFileManager.CurrentlyWorking || !_dalamudUtil.IsInGpose) - return false; - _ = Task.Run(async () => await ApplyFileAsync(path, target).ConfigureAwait(false)).ConfigureAwait(false); return true; @@ -89,20 +80,9 @@ public class IpcProvider : IHostedService, IMediatorSubscriber private async Task ApplyFileAsync(string path, IGameObject target) { - /* - try - { - var expectedLength = _mareCharaFileManager.LoadMareCharaFile(path); - await _mareCharaFileManager.ApplyMareCharaFile(target, expectedLength).ConfigureAwait(false); - } - catch (Exception e) - { - _logger.LogError(e, "Failure of IPC call"); - } - finally - { - _mareCharaFileManager.ClearMareCharaFile(); - }*/ + _charaDataManager.LoadMcdf(path); + await (_charaDataManager.LoadedMcdfHeader ?? Task.CompletedTask).ConfigureAwait(false); + _charaDataManager.McdfApplyToTarget(target.Name.TextValue); } private List GetHandledAddresses() diff --git a/MareSynchronos/MareSynchronos.csproj b/MareSynchronos/MareSynchronos.csproj index 7fe5296..dca3468 100644 --- a/MareSynchronos/MareSynchronos.csproj +++ b/MareSynchronos/MareSynchronos.csproj @@ -28,6 +28,12 @@ + + + + + + @@ -107,8 +113,4 @@ - - - - diff --git a/MareSynchronos/Plugin.cs b/MareSynchronos/Plugin.cs index dec37d0..da19603 100644 --- a/MareSynchronos/Plugin.cs +++ b/MareSynchronos/Plugin.cs @@ -123,7 +123,7 @@ public sealed class Plugin : IDalamudPlugin collection.AddSingleton((s) => new BlockedCharacterHandler(s.GetRequiredService>(), gameInteropProvider)); collection.AddSingleton((s) => new IpcProvider(s.GetRequiredService>(), pluginInterface, - s.GetRequiredService(), + s.GetRequiredService(), s.GetRequiredService())); collection.AddSingleton(); collection.AddSingleton((s) => new EventAggregator(pluginInterface.ConfigDirectory.FullName, diff --git a/MareSynchronos/Services/CharaData/CharaDataCharacterHandler.cs b/MareSynchronos/Services/CharaData/CharaDataCharacterHandler.cs index aa2b9f0..845b963 100644 --- a/MareSynchronos/Services/CharaData/CharaDataCharacterHandler.cs +++ b/MareSynchronos/Services/CharaData/CharaDataCharacterHandler.cs @@ -8,7 +8,7 @@ using Microsoft.Extensions.Logging; namespace MareSynchronos.Services; -internal sealed class CharaDataCharacterHandler : DisposableMediatorSubscriberBase +public sealed class CharaDataCharacterHandler : DisposableMediatorSubscriberBase { private readonly GameObjectHandlerFactory _gameObjectHandlerFactory; private readonly DalamudUtilService _dalamudUtilService; diff --git a/MareSynchronos/Services/CharaData/CharaDataFileHandler.cs b/MareSynchronos/Services/CharaData/CharaDataFileHandler.cs index 6ba6bd5..6bb1297 100644 --- a/MareSynchronos/Services/CharaData/CharaDataFileHandler.cs +++ b/MareSynchronos/Services/CharaData/CharaDataFileHandler.cs @@ -14,7 +14,7 @@ using Microsoft.Extensions.Logging; namespace MareSynchronos.Services; -internal sealed class CharaDataFileHandler : IDisposable +public sealed class CharaDataFileHandler : IDisposable { private readonly DalamudUtilService _dalamudUtilService; private readonly FileCacheManager _fileCacheManager; diff --git a/MareSynchronos/Services/CharaData/CharaDataManager.cs b/MareSynchronos/Services/CharaData/CharaDataManager.cs index b9a2c87..2919b54 100644 --- a/MareSynchronos/Services/CharaData/CharaDataManager.cs +++ b/MareSynchronos/Services/CharaData/CharaDataManager.cs @@ -15,7 +15,7 @@ using System.Text; namespace MareSynchronos.Services; -internal sealed partial class CharaDataManager : DisposableMediatorSubscriberBase +public sealed partial class CharaDataManager : DisposableMediatorSubscriberBase { private readonly ApiController _apiController; private readonly CharaDataConfigService _configService; @@ -429,12 +429,12 @@ internal sealed partial class CharaDataManager : DisposableMediatorSubscriberBas LoadedMcdfHeader = _fileHandler.LoadCharaFileHeader(filePath); } - public void McdfApplyToGposeTarget() + public void McdfApplyToTarget(string charaName) { if (LoadedMcdfHeader == null || !LoadedMcdfHeader.IsCompletedSuccessfully) return; - var charaName = _dalamudUtilService.GposeTargetGameObject?.Name.TextValue ?? string.Empty; List actuallyExtractedFiles = []; + UiBlockingComputation = McdfApplicationTask = Task.Run(async () => { Guid applicationId = Guid.NewGuid(); @@ -480,6 +480,14 @@ internal sealed partial class CharaDataManager : DisposableMediatorSubscriberBas }); } + public void McdfApplyToGposeTarget() + { + if (CanApplyInGpose(out string target)) + { + McdfApplyToTarget(target); + } + } + public void SaveMareCharaFile(string description, string filePath) { UiBlockingComputation = Task.Run(async () => await _fileHandler.SaveCharaFileAsync(description, filePath).ConfigureAwait(false)); diff --git a/MareSynchronos/Services/CharaData/CharaDataNearbyManager.cs b/MareSynchronos/Services/CharaData/CharaDataNearbyManager.cs index 74058f7..44a00b5 100644 --- a/MareSynchronos/Services/CharaData/CharaDataNearbyManager.cs +++ b/MareSynchronos/Services/CharaData/CharaDataNearbyManager.cs @@ -6,14 +6,13 @@ using MareSynchronos.Services.CharaData.Models; using MareSynchronos.Services.Mediator; using MareSynchronos.Services.ServerConfiguration; using Microsoft.Extensions.Logging; -using System.Diagnostics.Eventing.Reader; using System.Numerics; namespace MareSynchronos.Services; -internal sealed class CharaDataNearbyManager : DisposableMediatorSubscriberBase +public sealed class CharaDataNearbyManager : DisposableMediatorSubscriberBase { - internal record NearbyCharaDataEntry + public record NearbyCharaDataEntry { public float Direction { get; init; } public float Distance { get; init; } diff --git a/MareSynchronos/Services/CharaData/MareCharaFileDataFactory.cs b/MareSynchronos/Services/CharaData/MareCharaFileDataFactory.cs index f0a1d4d..d9a2429 100644 --- a/MareSynchronos/Services/CharaData/MareCharaFileDataFactory.cs +++ b/MareSynchronos/Services/CharaData/MareCharaFileDataFactory.cs @@ -4,7 +4,7 @@ using MareSynchronos.Services.CharaData.Models; namespace MareSynchronos.Services.CharaData; -internal sealed class MareCharaFileDataFactory +public sealed class MareCharaFileDataFactory { private readonly FileCacheManager _fileCacheManager; diff --git a/MareSynchronos/UI/CharaDataHubUi.McdOnline.cs b/MareSynchronos/UI/CharaDataHubUi.McdOnline.cs index f8d8cf1..564c22f 100644 --- a/MareSynchronos/UI/CharaDataHubUi.McdOnline.cs +++ b/MareSynchronos/UI/CharaDataHubUi.McdOnline.cs @@ -533,7 +533,7 @@ internal sealed partial class CharaDataHubUi + "Be mindful that when you share your Character Data with other people there is a chance that, with the help of unsanctioned 3rd party plugins, your appearance could be stolen irreversibly, just like when using MCDF."); ImGuiHelpers.ScaledDummy(5); - using (ImRaii.Disabled(_charaDataManager.GetAllDataTask != null + using (ImRaii.Disabled((!_charaDataManager.GetAllDataTask?.IsCompleted ?? false) || (_charaDataManager.DataGetTimeoutTask != null && !_charaDataManager.DataGetTimeoutTask.IsCompleted))) { if (_uiSharedService.IconTextButton(FontAwesomeIcon.ArrowCircleDown, "Download your Character Data from Server")) diff --git a/MareSynchronos/UI/SettingsUi.cs b/MareSynchronos/UI/SettingsUi.cs index d0ac43d..73a0131 100644 --- a/MareSynchronos/UI/SettingsUi.cs +++ b/MareSynchronos/UI/SettingsUi.cs @@ -1235,7 +1235,7 @@ public class SettingsUi : WindowMediatorSubscriberBase ImGui.SameLine(); using (ImRaii.Disabled(string.IsNullOrEmpty(_uidToAddForIgnore))) { - if (_uiShared.IconTextButton(FontAwesomeIcon.Plus, "Add UID to whitelist")) + if (_uiShared.IconTextButton(FontAwesomeIcon.Plus, "Add UID/Vanity ID to whitelist")) { if (!_playerPerformanceConfigService.Current.UIDsToIgnore.Contains(_uidToAddForIgnore, StringComparer.Ordinal)) {