check availability of plugins implicitly
This commit is contained in:
@@ -11,23 +11,33 @@ using Object = FFXIVClientStructs.FFXIV.Client.Graphics.Scene.Object;
|
||||
using Penumbra.String;
|
||||
using Weapon = MareSynchronos.Interop.Weapon;
|
||||
using MareSynchronos.FileCache;
|
||||
using MareSynchronos.Mediator;
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
namespace MareSynchronos.Factories;
|
||||
|
||||
public class CharacterDataFactory
|
||||
public class CharacterDataFactory : MediatorSubscriberBase
|
||||
{
|
||||
private readonly DalamudUtil _dalamudUtil;
|
||||
private readonly IpcManager _ipcManager;
|
||||
private readonly TransientResourceManager _transientResourceManager;
|
||||
private readonly FileCacheManager _fileCacheManager;
|
||||
private ConcurrentQueue<Task<string>> _processingQueue = new();
|
||||
|
||||
public CharacterDataFactory(DalamudUtil dalamudUtil, IpcManager ipcManager, TransientResourceManager transientResourceManager, FileCacheManager fileReplacementFactory)
|
||||
public CharacterDataFactory(DalamudUtil dalamudUtil, IpcManager ipcManager, TransientResourceManager transientResourceManager, FileCacheManager fileReplacementFactory, MareMediator mediator) : base(mediator)
|
||||
{
|
||||
Logger.Verbose("Creating " + nameof(CharacterDataFactory));
|
||||
_dalamudUtil = dalamudUtil;
|
||||
_ipcManager = ipcManager;
|
||||
_transientResourceManager = transientResourceManager;
|
||||
_fileCacheManager = fileReplacementFactory;
|
||||
Mediator.Subscribe<FrameworkUpdateMessage>(this, (_) =>
|
||||
{
|
||||
while (_processingQueue.TryDequeue(out var result))
|
||||
{
|
||||
result.RunSynchronously();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private unsafe bool CheckForNullDrawObject(IntPtr playerPointer)
|
||||
@@ -74,10 +84,12 @@ public class CharacterDataFactory
|
||||
|
||||
try
|
||||
{
|
||||
_processingQueue.Clear();
|
||||
return await CreateCharacterData(previousData, playerRelatedObject, token).ConfigureAwait(false);
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
_processingQueue.Clear();
|
||||
Logger.Debug("Cancelled creating Character data");
|
||||
throw;
|
||||
}
|
||||
@@ -121,10 +133,16 @@ public class CharacterDataFactory
|
||||
// gather up data from ipc
|
||||
previousData.ManipulationString = _ipcManager.PenumbraGetMetaManipulations();
|
||||
previousData.HeelsOffset = _ipcManager.GetHeelsOffset();
|
||||
previousData.GlamourerString[playerRelatedObject.ObjectKind] = await _dalamudUtil.RunOnFrameworkThread(() => _ipcManager.GlamourerGetCharacterCustomization(playerRelatedObject.Address))
|
||||
.ConfigureAwait(false);
|
||||
previousData.CustomizePlusScale = await _dalamudUtil.RunOnFrameworkThread(_ipcManager.GetCustomizePlusScale).ConfigureAwait(false);
|
||||
previousData.PalettePlusPalette = await _dalamudUtil.RunOnFrameworkThread(_ipcManager.PalettePlusBuildPalette).ConfigureAwait(false);
|
||||
Task<string> getGlamourerData = new(() => _ipcManager.GlamourerGetCharacterCustomization(playerRelatedObject.Address));
|
||||
_processingQueue.Enqueue(getGlamourerData);
|
||||
Task<string> getCustomizeData = new(() => _ipcManager.GetCustomizePlusScale());
|
||||
_processingQueue.Enqueue(getCustomizeData);
|
||||
Task<string> getPalettePlusData = new(() => _ipcManager.PalettePlusBuildPalette());
|
||||
_processingQueue.Enqueue(getPalettePlusData);
|
||||
Task.WaitAll(new[] { getGlamourerData, getCustomizeData, getPalettePlusData }, token);
|
||||
previousData.GlamourerString[playerRelatedObject.ObjectKind] = getGlamourerData.Result;
|
||||
previousData.CustomizePlusScale = getCustomizeData.Result;
|
||||
previousData.PalettePlusPalette = getPalettePlusData.Result;
|
||||
|
||||
// gather static replacements from render model
|
||||
var (forwardResolve, reverseResolve) = BuildDataFromModel(objectKind, charaPointer, token);
|
||||
@@ -340,6 +358,8 @@ public class CharacterDataFactory
|
||||
{
|
||||
if (string.IsNullOrEmpty(texPath)) return;
|
||||
|
||||
Logger.Verbose("Checking file Replacement for texture " + texPath);
|
||||
|
||||
if (doNotReverseResolve)
|
||||
forwardResolve.Add(texPath);
|
||||
else
|
||||
|
||||
@@ -64,6 +64,12 @@ public class IpcManager : MediatorSubscriberBase, IDisposable
|
||||
private readonly ConcurrentQueue<Action> _normalQueue = new();
|
||||
private readonly ConcurrentQueue<Action> _gposeActionQueue = new();
|
||||
|
||||
private bool _penumbraAvailable = false;
|
||||
private bool _glamourerAvailable = false;
|
||||
private bool _customizePlusAvailable = false;
|
||||
private bool _heelsAvailable = false;
|
||||
private bool _palettePlusAvailable = false;
|
||||
|
||||
public IpcManager(DalamudPluginInterface pi, DalamudUtil dalamudUtil, MareMediator mediator) : base(mediator)
|
||||
{
|
||||
Logger.Verbose("Creating " + nameof(IpcManager));
|
||||
@@ -139,6 +145,11 @@ public class IpcManager : MediatorSubscriberBase, IDisposable
|
||||
private void CheckPenumbraModPath()
|
||||
{
|
||||
PenumbraModDirectory = GetPenumbraModDirectory();
|
||||
_glamourerAvailable = CheckGlamourerApiInternal();
|
||||
_penumbraAvailable = CheckPenumbraApiInternal();
|
||||
_heelsAvailable = CheckHeelsApiInternal();
|
||||
_customizePlusAvailable = CheckCustomizePlusApiInternal();
|
||||
_palettePlusAvailable = CheckPalettePlusApiInternal();
|
||||
}
|
||||
|
||||
private void HandleGposeActionQueue()
|
||||
@@ -183,8 +194,11 @@ public class IpcManager : MediatorSubscriberBase, IDisposable
|
||||
}
|
||||
}
|
||||
|
||||
public bool Initialized => CheckPenumbraApi() && CheckGlamourerApi();
|
||||
public bool CheckGlamourerApi()
|
||||
public bool Initialized => CheckPenumbraApiInternal() && CheckGlamourerApiInternal();
|
||||
|
||||
public bool CheckGlamourerApi() => _glamourerAvailable;
|
||||
|
||||
public bool CheckGlamourerApiInternal()
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -196,7 +210,9 @@ public class IpcManager : MediatorSubscriberBase, IDisposable
|
||||
}
|
||||
}
|
||||
|
||||
public bool CheckPenumbraApi()
|
||||
public bool CheckPenumbraApi() => _penumbraAvailable;
|
||||
|
||||
public bool CheckPenumbraApiInternal()
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -208,7 +224,9 @@ public class IpcManager : MediatorSubscriberBase, IDisposable
|
||||
}
|
||||
}
|
||||
|
||||
public bool CheckHeelsApi()
|
||||
public bool CheckHeelsApi() => _heelsAvailable;
|
||||
|
||||
public bool CheckHeelsApiInternal()
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -220,7 +238,9 @@ public class IpcManager : MediatorSubscriberBase, IDisposable
|
||||
}
|
||||
}
|
||||
|
||||
public bool CheckCustomizePlusApi()
|
||||
public bool CheckCustomizePlusApi() => _customizePlusAvailable;
|
||||
|
||||
public bool CheckCustomizePlusApiInternal()
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -232,7 +252,9 @@ public class IpcManager : MediatorSubscriberBase, IDisposable
|
||||
}
|
||||
}
|
||||
|
||||
public bool CheckPalettePlusApi()
|
||||
public bool CheckPalettePlusApi() => _palettePlusAvailable;
|
||||
|
||||
public bool CheckPalettePlusApiInternal()
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user