238 lines
10 KiB
C#
238 lines
10 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.CompilerServices;
|
|
using Dalamud.Plugin;
|
|
using Dalamud.Plugin.Ipc;
|
|
using Dalamud.Plugin.Ipc.Exceptions;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace LLib.External;
|
|
|
|
public sealed class PluginFeaturePauser : IDisposable
|
|
{
|
|
private readonly ICallGateSubscriber<string, bool?> _getEnabled;
|
|
|
|
private readonly ICallGateSubscriber<string, bool, object?> _setEnabled;
|
|
|
|
private readonly ILogger _logger;
|
|
|
|
private HashSet<string>? _pausedFeatures;
|
|
|
|
public bool IsPaused => _pausedFeatures != null;
|
|
|
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
|
public PluginFeaturePauser(IDalamudPluginInterface pluginInterface, string getEnabledEndpoint, string setEnabledEndpoint, ILogger logger)
|
|
{
|
|
_200B_202A_202E_202D_200B_202D_206D_206F_202A_206D_206C_200C_206E_206F_206F_206A_206B_202D_200B_202B_206E_206D_202D_202D_202B_202E_206E_206A_202D_206C_200D_200B_206A_206E_200C_206F_206A_206F_206D_206F_202E((object)pluginInterface, global::_003CModule_003E._206E_202B_206C_202A_202A_200E_202B_202B_206D_200B_200C_206B_200B_206D_202E_202D_206C_202B_200B_206A_202D_206C_202A_200F_202D_200C_200B_200B_200B_200D_202C_206E_206D_202E_200C_206B_206A_206D_202D_202C_202E<string>(766607579));
|
|
_202B_206D_202B_206C_200E_202A_206D_206D_206F_200D_202D_206A_202C_206E_200C_206B_206C_202D_206F_200D_206F_206E_200B_206E_206E_200D_200F_206F_202D_200B_200C_202C_200C_206B_202D_206E_206C_202C_200F_206C_202E(getEnabledEndpoint, global::_003CModule_003E._206A_206D_202C_206E_206D_206E_202A_200F_200D_206A_200F_206C_202C_202D_206D_206A_200D_200F_206A_206C_202C_206D_206E_200F_200F_200C_206B_200B_206B_206E_202B_206B_200E_200E_200B_206F_200F_202E_200C_200C_202E<string>(1664369552));
|
|
_202B_206D_202B_206C_200E_202A_206D_206D_206F_200D_202D_206A_202C_206E_200C_206B_206C_202D_206F_200D_206F_206E_200B_206E_206E_200D_200F_206F_202D_200B_200C_202C_200C_206B_202D_206E_206C_202C_200F_206C_202E(setEnabledEndpoint, global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E<string>(1390048610));
|
|
_200B_202A_202E_202D_200B_202D_206D_206F_202A_206D_206C_200C_206E_206F_206F_206A_206B_202D_200B_202B_206E_206D_202D_202D_202B_202E_206E_206A_202D_206C_200D_200B_206A_206E_200C_206F_206A_206F_206D_206F_202E((object)logger, global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E<string>(1584978576));
|
|
_getEnabled = pluginInterface.GetIpcSubscriber<string, bool?>(getEnabledEndpoint);
|
|
_setEnabled = pluginInterface.GetIpcSubscriber<string, bool, object>(setEnabledEndpoint);
|
|
_logger = logger;
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
|
public void Disable(IEnumerable<string> features)
|
|
{
|
|
int num = ((_pausedFeatures != null) ? (-124220902) : (-124220903));
|
|
while (true)
|
|
{
|
|
int num2 = num;
|
|
int num3 = -124220901;
|
|
int num4 = num2;
|
|
switch ((num4 | num3) - (num4 & num3))
|
|
{
|
|
case 0:
|
|
num = -124220903;
|
|
break;
|
|
case 2:
|
|
_pausedFeatures = new HashSet<string>();
|
|
num = -124220902;
|
|
break;
|
|
case 1:
|
|
{
|
|
IEnumerator<string> enumerator = features.GetEnumerator();
|
|
try
|
|
{
|
|
while (_200B_200C_206B_200F_200D_206E_202E_206E_202B_200D_202D_206C_206F_200D_200C_206E_206E_206A_202B_200E_202A_202A_200F_200D_202A_200D_202C_206B_200C_202D_200D_200F_202E_202B_200B_202E_206E_202C_200F_206F_202E((IEnumerator)enumerator))
|
|
{
|
|
string current = enumerator.Current;
|
|
if (_pausedFeatures.Contains(current))
|
|
{
|
|
continue;
|
|
}
|
|
try
|
|
{
|
|
num = ((_getEnabled.InvokeFunc(current) != true) ? 879033807 : 879033804);
|
|
while (true)
|
|
{
|
|
int num5 = num;
|
|
num3 = 879033805;
|
|
num4 = num5;
|
|
int num6 = num4 + num3;
|
|
int num7 = num4 & num3;
|
|
switch (num6 - (num7 + num7))
|
|
{
|
|
case 0:
|
|
num = 879033804;
|
|
break;
|
|
case 1:
|
|
_setEnabled.InvokeAction(current, arg2: false);
|
|
_pausedFeatures.Add(current);
|
|
_200E_202B_202C_200F_202C_202B_200C_206D_202E_202E_200B_206B_206A_202E_200E_202D_202E_200C_206C_202D_202E_202D_200C_200D_206F_202E_200C_202E_206C_206C_200E_202B_200D_206A_202A_206B_202C_206C_200E_202E(_logger, global::_003CModule_003E._206A_206D_202C_206E_206D_206E_202A_200F_200D_206A_200F_206C_202C_202D_206D_206A_200D_200F_206A_206C_202C_206D_206E_200F_200F_200C_206B_200B_206B_206E_202B_206B_200E_200E_200B_206F_200F_202E_200C_200C_202E<string>(-2022871407), new object[1] { current });
|
|
num = 879033807;
|
|
break;
|
|
case 2:
|
|
goto end_IL_00c8;
|
|
}
|
|
continue;
|
|
end_IL_00c8:
|
|
break;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
num = ((ex is IpcError) ? 285871159 : 285871156);
|
|
while (true)
|
|
{
|
|
int num8 = num;
|
|
num3 = 285871157;
|
|
num4 = num8;
|
|
switch ((num4 | num3) - (num4 & num3))
|
|
{
|
|
case 0:
|
|
num = 285871156;
|
|
break;
|
|
case 1:
|
|
_200C_200F_202D_202D_202E_206E_202B_200F_206F_202B_202A_206C_200F_200C_206E_206F_206C_202E_202B_206F_202C_206A_206F_200C_200D_206D_206B_206D_206C_202B_202E_202E_206E_206F_206A_200D_200C_206D_206F_202D_202E(_logger, ex, global::_003CModule_003E._202E_202C_206D_206B_202B_202D_206D_202E_206F_202E_202A_206A_206A_202B_206A_202D_202C_206C_206B_202C_206E_202B_200E_206E_206A_206C_200D_200D_200F_200B_202C_200B_200E_206F_202C_200F_202D_202A_206E_202B_202E<string>(-578647561), new object[1] { current });
|
|
num = 285871159;
|
|
break;
|
|
case 2:
|
|
goto end_IL_0170;
|
|
}
|
|
continue;
|
|
end_IL_0170:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
finally
|
|
{
|
|
num = ((enumerator == null) ? 1678269636 : 1678269639);
|
|
while (true)
|
|
{
|
|
int num9 = num;
|
|
num3 = 1678269637;
|
|
num4 = num9;
|
|
int num10 = num4 + num3;
|
|
int num11 = num4 & num3;
|
|
switch (num10 - (num11 + num11))
|
|
{
|
|
case 1:
|
|
goto end_IL_0207;
|
|
case 2:
|
|
_206D_200B_200D_200B_206C_206B_202D_202B_202E_200E_206B_202D_202A_200D_206A_200B_206F_206D_206B_202C_206A_200E_202B_206B_202C_202A_206A_200F_200E_200B_202C_206B_206F_200B_200D_202C_200B_206F_206B_202E((IDisposable)enumerator);
|
|
num = 1678269636;
|
|
break;
|
|
case 0:
|
|
num = 1678269639;
|
|
break;
|
|
}
|
|
continue;
|
|
end_IL_0207:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
|
public void Restore()
|
|
{
|
|
int num = ((_pausedFeatures != null) ? (-1219556396) : (-1219556395));
|
|
while (true)
|
|
{
|
|
int num2 = num;
|
|
int num3 = -1219556396;
|
|
int num4 = num2;
|
|
int num5 = num4 + num3;
|
|
int num6 = num4 & num3;
|
|
switch (num5 - (num6 + num6))
|
|
{
|
|
case 2:
|
|
goto IL_0051;
|
|
case 1:
|
|
return;
|
|
case 0:
|
|
{
|
|
HashSet<string> hashSet = new HashSet<string>();
|
|
foreach (string pausedFeature in _pausedFeatures)
|
|
{
|
|
try
|
|
{
|
|
_setEnabled.InvokeAction(pausedFeature, arg2: true);
|
|
_200E_202B_202C_200F_202C_202B_200C_206D_202E_202E_200B_206B_206A_202E_200E_202D_202E_200C_206C_202D_202E_202D_200C_200D_206F_202E_200C_202E_206C_206C_200E_202B_200D_206A_202A_206B_202C_206C_200E_202E(_logger, global::_003CModule_003E._202E_202C_206D_206B_202B_202D_206D_202E_206F_202E_202A_206A_206A_202B_206A_202D_202C_206C_206B_202C_206E_202B_200E_206E_206A_206C_200D_200D_200F_200B_202C_200B_200E_206F_202C_200F_202D_202A_206E_202B_202E<string>(1936594651), new object[1] { pausedFeature });
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
hashSet.Add(pausedFeature);
|
|
_200C_200F_202D_202D_202E_206E_202B_200F_206F_202B_202A_206C_200F_200C_206E_206F_206C_202E_202B_206F_202C_206A_206F_200C_200D_206D_206B_206D_206C_202B_202E_202E_206E_206F_206A_200D_200C_206D_206F_202D_202E(_logger, ex, global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E<string>(902723695), new object[1] { pausedFeature });
|
|
}
|
|
}
|
|
_pausedFeatures = ((hashSet.Count == 0) ? null : hashSet);
|
|
return;
|
|
}
|
|
}
|
|
continue;
|
|
IL_0051:
|
|
num = -1219556395;
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Restore();
|
|
}
|
|
|
|
void IDisposable.Dispose()
|
|
{
|
|
//ILSpy generated this explicit interface implementation from .override directive in Dispose
|
|
this.Dispose();
|
|
}
|
|
|
|
static void _200B_202A_202E_202D_200B_202D_206D_206F_202A_206D_206C_200C_206E_206F_206F_206A_206B_202D_200B_202B_206E_206D_202D_202D_202B_202E_206E_206A_202D_206C_200D_200B_206A_206E_200C_206F_206A_206F_206D_206F_202E(object P_0, string P_1)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(P_0, P_1);
|
|
}
|
|
|
|
static void _202B_206D_202B_206C_200E_202A_206D_206D_206F_200D_202D_206A_202C_206E_200C_206B_206C_202D_206F_200D_206F_206E_200B_206E_206E_200D_200F_206F_202D_200B_200C_202C_200C_206B_202D_206E_206C_202C_200F_206C_202E(string P_0, string P_1)
|
|
{
|
|
ArgumentException.ThrowIfNullOrEmpty(P_0, P_1);
|
|
}
|
|
|
|
static void _200E_202B_202C_200F_202C_202B_200C_206D_202E_202E_200B_206B_206A_202E_200E_202D_202E_200C_206C_202D_202E_202D_200C_200D_206F_202E_200C_202E_206C_206C_200E_202B_200D_206A_202A_206B_202C_206C_200E_202E(ILogger P_0, string P_1, object[] P_2)
|
|
{
|
|
P_0.LogInformation(P_1, P_2);
|
|
}
|
|
|
|
static void _200C_200F_202D_202D_202E_206E_202B_200F_206F_202B_202A_206C_200F_200C_206E_206F_206C_202E_202B_206F_202C_206A_206F_200C_200D_206D_206B_206D_206C_202B_202E_202E_206E_206F_206A_200D_200C_206D_206F_202D_202E(ILogger P_0, Exception P_1, string P_2, object[] P_3)
|
|
{
|
|
P_0.LogWarning(P_1, P_2, P_3);
|
|
}
|
|
|
|
static bool _200B_200C_206B_200F_200D_206E_202E_206E_202B_200D_202D_206C_206F_200D_200C_206E_206E_206A_202B_200E_202A_202A_200F_200D_202A_200D_202C_206B_200C_202D_200D_200F_202E_202B_200B_202E_206E_202C_200F_206F_202E(IEnumerator P_0)
|
|
{
|
|
return P_0.MoveNext();
|
|
}
|
|
|
|
static void _206D_200B_200D_200B_206C_206B_202D_202B_202E_200E_206B_202D_202A_200D_206A_200B_206F_206D_206B_202C_206A_200E_202B_206B_202C_202A_206A_200F_200E_200B_202C_206B_206F_200B_200D_202C_200B_206F_206B_202E(IDisposable P_0)
|
|
{
|
|
P_0.Dispose();
|
|
}
|
|
}
|