diff --git a/Questionable/Controller/GatheringController.cs b/Questionable/Controller/GatheringController.cs index 4af7ede2e..8c7dedd4a 100644 --- a/Questionable/Controller/GatheringController.cs +++ b/Questionable/Controller/GatheringController.cs @@ -51,7 +51,7 @@ internal sealed unsafe class GatheringController : MiniTaskController private readonly IServiceProvider _serviceProvider; private readonly ILogger _logger; + private readonly string _actionCanceledText; + protected MiniTaskController(IChatGui chatGui, ICondition condition, IServiceProvider serviceProvider, - ILogger logger) + IDataManager dataManager, ILogger logger) { _chatGui = chatGui; _logger = logger; _serviceProvider = serviceProvider; _condition = condition; + + _actionCanceledText = dataManager.GetString(1314, x => x.Text)!; } protected virtual void UpdateCurrentTask() @@ -172,4 +180,22 @@ internal abstract class MiniTaskController foreach (ITask task in _taskQueue.RemainingTasks) _logger.LogInformation("- {TaskName}", task); } + + public void OnErrorToast(ref SeString message, ref bool isHandled) + { + if (_taskQueue.CurrentTaskExecutor is IToastAware toastAware) + { + if (toastAware.OnErrorToast(message)) + { + isHandled = true; + } + } + + if (!isHandled) + { + if (GameFunctions.GameStringEquals(_actionCanceledText, message.TextValue) && + !_condition[ConditionFlag.InFlight]) + InterruptQueueWithCombat(); + } + } } diff --git a/Questionable/Controller/QuestController.cs b/Questionable/Controller/QuestController.cs index b736de2eb..fc1734d31 100644 --- a/Questionable/Controller/QuestController.cs +++ b/Questionable/Controller/QuestController.cs @@ -43,8 +43,6 @@ internal sealed class QuestController : MiniTaskController, IDi private readonly TaskCreator _taskCreator; private readonly ILogger _logger; - private readonly string _actionCanceledText; - private readonly object _progressLock = new(); private QuestProgress? _startedQuest; @@ -84,7 +82,7 @@ internal sealed class QuestController : MiniTaskController, IDi TaskCreator taskCreator, IServiceProvider serviceProvider, IDataManager dataManager) - : base(chatGui, condition, serviceProvider, logger) + : base(chatGui, condition, serviceProvider, dataManager, logger) { _clientState = clientState; _gameFunctions = gameFunctions; @@ -105,8 +103,6 @@ internal sealed class QuestController : MiniTaskController, IDi _condition.ConditionChange += OnConditionChange; _toastGui.Toast += OnNormalToast; _toastGui.ErrorToast += OnErrorToast; - - _actionCanceledText = dataManager.GetString(1314, x => x.Text)!; } public EAutomationType AutomationType @@ -809,24 +805,6 @@ internal sealed class QuestController : MiniTaskController, IDi _gatheringController.OnNormalToast(message); } - private void OnErrorToast(ref SeString message, ref bool isHandled) - { - if (_taskQueue.CurrentTaskExecutor is IToastAware toastAware) - { - if (toastAware.OnErrorToast(message)) - { - isHandled = true; - } - } - - if (!isHandled) - { - if (GameFunctions.GameStringEquals(_actionCanceledText, message.TextValue) && - !_condition[ConditionFlag.InFlight]) - InterruptQueueWithCombat(); - } - } - public void Dispose() { _toastGui.ErrorToast -= OnErrorToast; diff --git a/Questionable/Controller/Steps/Gathering/MoveToLandingLocation.cs b/Questionable/Controller/Steps/Gathering/MoveToLandingLocation.cs index 14552c213..38fa30cd6 100644 --- a/Questionable/Controller/Steps/Gathering/MoveToLandingLocation.cs +++ b/Questionable/Controller/Steps/Gathering/MoveToLandingLocation.cs @@ -2,6 +2,7 @@ using System.Linq; using System.Numerics; using Dalamud.Game.ClientState.Objects.Enums; +using Dalamud.Game.Text.SeStringHandling; using Dalamud.Plugin.Services; using Microsoft.Extensions.Logging; using Questionable.Controller.Steps.Shared; @@ -26,7 +27,7 @@ internal static class MoveToLandingLocation MoveTo.MoveExecutor moveExecutor, GameFunctions gameFunctions, IObjectTable objectTable, - ILogger logger) : TaskExecutor + ILogger logger) : TaskExecutor, IToastAware { private ITask _moveTask = null!; @@ -57,5 +58,6 @@ internal static class MoveToLandingLocation } public override ETaskResult Update() => moveExecutor.Update(); + public bool OnErrorToast(SeString message) => moveExecutor.OnErrorToast(message); } } diff --git a/Questionable/Controller/Steps/Shared/Gather.cs b/Questionable/Controller/Steps/Shared/Gather.cs index 52229aa18..ee5c50a00 100644 --- a/Questionable/Controller/Steps/Shared/Gather.cs +++ b/Questionable/Controller/Steps/Shared/Gather.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using Dalamud.Game.Text; +using Dalamud.Game.Text.SeStringHandling; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions; using FFXIVClientStructs.FFXIV.Client.Game; @@ -124,7 +125,8 @@ internal static class Gather } } - internal sealed class StartGathering(GatheringController gatheringController) : TaskExecutor + internal sealed class StartGathering(GatheringController gatheringController) : TaskExecutor, + IToastAware { protected override bool Start() { @@ -140,6 +142,13 @@ internal static class Gather return ETaskResult.StillRunning; } + + public bool OnErrorToast(SeString message) + { + bool isHandled = false; + gatheringController.OnErrorToast(ref message, ref isHandled); + return isHandled; + } } ///