Extend error toast handling
authorLiza Carvelli <liza@carvel.li>
Wed, 25 Sep 2024 18:07:40 +0000 (20:07 +0200)
committerLiza Carvelli <liza@carvel.li>
Wed, 25 Sep 2024 18:07:40 +0000 (20:07 +0200)
Questionable/Controller/GatheringController.cs
Questionable/Controller/MiniTaskController.cs
Questionable/Controller/QuestController.cs
Questionable/Controller/Steps/Gathering/MoveToLandingLocation.cs
Questionable/Controller/Steps/Shared/Gather.cs

index 4af7ede2e9aee69126488415e8ed75d600fd9558..8c7dedd4a6ff53054eb917eff99c5e3af4229f36 100644 (file)
@@ -51,7 +51,7 @@ internal sealed unsafe class GatheringController : MiniTaskController<GatheringC
         IServiceProvider serviceProvider,
         IDataManager dataManager,
         IPluginLog pluginLog)
-        : base(chatGui, condition, serviceProvider, logger)
+        : base(chatGui, condition, serviceProvider, dataManager, logger)
     {
         _movementController = movementController;
         _gatheringPointRegistry = gatheringPointRegistry;
index 2a570eebb64fa836a4c8755582c00aa574a5d2b2..4cf0828e3b139bdd0aadeb9214f7b72f7ff0a9ed 100644 (file)
@@ -2,14 +2,18 @@
 using System.Collections.Generic;
 using System.Linq;
 using Dalamud.Game.ClientState.Conditions;
+using Dalamud.Game.Text.SeStringHandling;
 using Dalamud.Plugin.Services;
+using LLib;
+using Lumina.Excel.GeneratedSheets;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
 using Questionable.Controller.Steps;
-using Questionable.Controller.Steps.Common;
 using Questionable.Controller.Steps.Interactions;
 using Questionable.Controller.Steps.Shared;
+using Questionable.Functions;
 using Questionable.Model.Questing;
+using Mount = Questionable.Controller.Steps.Common.Mount;
 
 namespace Questionable.Controller;
 
@@ -22,13 +26,17 @@ internal abstract class MiniTaskController<T>
     private readonly IServiceProvider _serviceProvider;
     private readonly ILogger<T> _logger;
 
+    private readonly string _actionCanceledText;
+
     protected MiniTaskController(IChatGui chatGui, ICondition condition, IServiceProvider serviceProvider,
-        ILogger<T> logger)
+        IDataManager dataManager, ILogger<T> logger)
     {
         _chatGui = chatGui;
         _logger = logger;
         _serviceProvider = serviceProvider;
         _condition = condition;
+
+        _actionCanceledText = dataManager.GetString<LogMessage>(1314, x => x.Text)!;
     }
 
     protected virtual void UpdateCurrentTask()
@@ -172,4 +180,22 @@ internal abstract class MiniTaskController<T>
         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();
+        }
+    }
 }
index b736de2ebf252896049b26fd20dbf4ec4b4f0f4a..fc1734d31dd0af87467868bac4533f29cc1d3482 100644 (file)
@@ -43,8 +43,6 @@ internal sealed class QuestController : MiniTaskController<QuestController>, IDi
     private readonly TaskCreator _taskCreator;
     private readonly ILogger<QuestController> _logger;
 
-    private readonly string _actionCanceledText;
-
     private readonly object _progressLock = new();
 
     private QuestProgress? _startedQuest;
@@ -84,7 +82,7 @@ internal sealed class QuestController : MiniTaskController<QuestController>, 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<QuestController>, IDi
         _condition.ConditionChange += OnConditionChange;
         _toastGui.Toast += OnNormalToast;
         _toastGui.ErrorToast += OnErrorToast;
-
-        _actionCanceledText = dataManager.GetString<LogMessage>(1314, x => x.Text)!;
     }
 
     public EAutomationType AutomationType
@@ -809,24 +805,6 @@ internal sealed class QuestController : MiniTaskController<QuestController>, 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;
index 14552c21360dd43173b82d5ac090fec5407f3d0e..38fa30cd65ae44445bfe1f899889fe71a515a18f 100644 (file)
@@ -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<MoveToLandingLocationExecutor> logger) : TaskExecutor<Task>
+        ILogger<MoveToLandingLocationExecutor> logger) : TaskExecutor<Task>, 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);
     }
 }
index 52229aa18c011971510f95c1de6f7112af36120f..ee5c50a008a874acb9682f6957edd0d1525ea448 100644 (file)
@@ -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<GatheringTask>
+    internal sealed class StartGathering(GatheringController gatheringController) : TaskExecutor<GatheringTask>,
+        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;
+        }
     }
 
     /// <summary>