using Dalamud.Plugin; using Dalamud.Plugin.Ipc; using Dalamud.Plugin.Ipc.Exceptions; using Microsoft.Extensions.Logging; namespace Questionable.External; internal sealed class AutoHookIpc { private readonly ILogger _logger; private readonly ICallGateSubscriber _getPluginState; private readonly ICallGateSubscriber _setPluginState; private readonly ICallGateSubscriber _getAutoStartFishing; private readonly ICallGateSubscriber _setAutoStartFishing; private readonly ICallGateSubscriber _swapBaitById; private readonly ICallGateSubscriber _createAndSelectAnonymousPreset; private readonly ICallGateSubscriber _deleteAllAnonymousPresets; public AutoHookIpc(IDalamudPluginInterface pluginInterface, ILogger logger) { _logger = logger; _getPluginState = pluginInterface.GetIpcSubscriber("AutoHook.GetPluginState"); _setPluginState = pluginInterface.GetIpcSubscriber("AutoHook.SetPluginState"); _getAutoStartFishing = pluginInterface.GetIpcSubscriber("AutoHook.GetAutoStartFishing"); _setAutoStartFishing = pluginInterface.GetIpcSubscriber("AutoHook.SetAutoStartFishing"); _swapBaitById = pluginInterface.GetIpcSubscriber("AutoHook.SwapBaitById"); _createAndSelectAnonymousPreset = pluginInterface.GetIpcSubscriber("AutoHook.CreateAndSelectAnonymousPreset"); _deleteAllAnonymousPresets = pluginInterface.GetIpcSubscriber("AutoHook.DeleteAllAnonymousPresets"); } public bool IsAvailable() { try { _getPluginState.InvokeFunc(); return true; } catch (IpcError) { return false; } } public bool GetPluginState() { try { return _getPluginState.InvokeFunc(); } catch (IpcError exception) { _logger.LogError(exception, "Unable to get AutoHook plugin state"); return false; } } public void SetPluginState(bool enabled) { try { _setPluginState.InvokeAction(enabled); } catch (IpcError exception) { _logger.LogError(exception, "Unable to set AutoHook plugin state"); } } public bool GetAutoStartFishing() { try { return _getAutoStartFishing.InvokeFunc(); } catch (IpcError exception) { _logger.LogError(exception, "Unable to get AutoHook auto-start fishing state"); return false; } } public void SetAutoStartFishing(bool enabled) { try { _setAutoStartFishing.InvokeAction(enabled); } catch (IpcError exception) { _logger.LogError(exception, "Unable to set AutoHook auto-start fishing state"); } } public bool SwapBaitById(uint baitId) { try { return _swapBaitById.InvokeFunc(baitId); } catch (IpcError exception) { _logger.LogError(exception, "Unable to swap bait to {BaitId}", baitId); return false; } } public void CreateAndSelectAnonymousPreset(string compressedPreset) { try { _createAndSelectAnonymousPreset.InvokeAction(compressedPreset); } catch (IpcError exception) { _logger.LogError(exception, "Unable to create and select anonymous AutoHook preset"); } } public void DeleteAllAnonymousPresets() { try { _deleteAllAnonymousPresets.InvokeAction(); } catch (IpcError exception) { _logger.LogError(exception, "Unable to delete anonymous AutoHook presets"); } } }