Fix PluginWatcher properly this time maybe

This commit is contained in:
Loporrit
2025-08-09 11:38:57 +00:00
parent e6ea8f499b
commit aaf24073f5
5 changed files with 23 additions and 6 deletions

View File

@@ -48,7 +48,7 @@ public sealed class IpcCallerGlamourer : DisposableMediatorSubscriberBase, IIpcC
_mareMediator = mareMediator; _mareMediator = mareMediator;
_redrawManager = redrawManager; _redrawManager = redrawManager;
var plugin = pi.InstalledPlugins.FirstOrDefault(p => p.InternalName.Equals("Glamourer", StringComparison.Ordinal)); var plugin = PluginWatcherService.GetInitialPluginState(pi, "Glamourer");
_pluginLoaded = plugin?.IsLoaded ?? false; _pluginLoaded = plugin?.IsLoaded ?? false;
_pluginVersion = plugin?.Version ?? new(0, 0, 0, 0); _pluginVersion = plugin?.Version ?? new(0, 0, 0, 0);

View File

@@ -84,7 +84,7 @@ public sealed class IpcCallerPenumbra : DisposableMediatorSubscriberBase, IIpcCa
_penumbraGameObjectResourcePathResolved = GameObjectResourcePathResolved.Subscriber(pi, ResourceLoaded); _penumbraGameObjectResourcePathResolved = GameObjectResourcePathResolved.Subscriber(pi, ResourceLoaded);
var plugin = pi.InstalledPlugins.FirstOrDefault(p => p.InternalName.Equals("Penumbra", StringComparison.Ordinal)); var plugin = PluginWatcherService.GetInitialPluginState(pi, "Penumbra");
_pluginLoaded = plugin?.IsLoaded ?? false; _pluginLoaded = plugin?.IsLoaded ?? false;
_pluginVersion = plugin?.Version ?? new(0, 0, 0, 0); _pluginVersion = plugin?.Version ?? new(0, 0, 0, 0);

View File

@@ -53,7 +53,7 @@ public class IpcProvider : IHostedService, IMediatorSubscriber
_activeGameObjectHandlers.Remove(msg.GameObjectHandler); _activeGameObjectHandlers.Remove(msg.GameObjectHandler);
}); });
_marePluginEnabled = pi.InstalledPlugins.Any(p => p.InternalName.Equals("MareSynchronos", StringComparison.Ordinal) && p.IsLoaded); _marePluginEnabled = PluginWatcherService.GetInitialPluginState(pi, "MareSynchronos")?.IsLoaded ?? false;
Mediator.SubscribeKeyed<PluginChangeMessage>(this, "MareSynchronos", p => { Mediator.SubscribeKeyed<PluginChangeMessage>(this, "MareSynchronos", p => {
_marePluginEnabled = p.IsLoaded; _marePluginEnabled = p.IsLoaded;
HandleMareImpersonation(); HandleMareImpersonation();

View File

@@ -182,9 +182,7 @@ public sealed class NoSnapService : IHostedService, IMediatorSubscriber
foreach (var pluginName in _listOfPlugins.Keys) foreach (var pluginName in _listOfPlugins.Keys)
{ {
var plugin = _pluginInterface.InstalledPlugins.FirstOrDefault(p => p.InternalName.Equals(pluginName, StringComparison.Ordinal)); _listOfPlugins[pluginName] = PluginWatcherService.GetInitialPluginState(_pluginInterface, pluginName)?.IsLoaded ?? false;
if (plugin?.IsLoaded ?? false)
_listOfPlugins[pluginName] = true;
Mediator.SubscribeKeyed<PluginChangeMessage>(this, pluginName, (msg) => Mediator.SubscribeKeyed<PluginChangeMessage>(this, pluginName, (msg) =>
{ {
_listOfPlugins[pluginName] = msg.IsLoaded; _listOfPlugins[pluginName] = msg.IsLoaded;

View File

@@ -88,6 +88,25 @@ public class PluginWatcherService : MediatorSubscriberBase
Update(publish: false); Update(publish: false);
} }
public static PluginChangeMessage? GetInitialPluginState(IDalamudPluginInterface pi, string internalName)
{
try
{
var plugin = pi.InstalledPlugins.Where(p => p.InternalName.Equals(internalName, StringComparison.Ordinal))
.OrderBy(p => (!p.IsLoaded, p.Version))
.FirstOrDefault();
if (plugin == null)
return null;
return new PluginChangeMessage(plugin.InternalName, plugin.Version, plugin.IsLoaded);
}
catch
{
return null;
}
}
private void Update(bool publish = true) private void Update(bool publish = true)
{ {
if (!ExposedPluginsEqual(_pluginInterface.InstalledPlugins, _prevInstalledPluginState)) if (!ExposedPluginsEqual(_pluginInterface.InstalledPlugins, _prevInstalledPluginState))