added quest piriority ipc
authorpot0to <19513249+pot0to@users.noreply.github.com>
Thu, 27 Feb 2025 23:37:43 +0000 (15:37 -0800)
committerpot0to <19513249+pot0to@users.noreply.github.com>
Thu, 27 Feb 2025 23:37:43 +0000 (15:37 -0800)
Questionable/Controller/QuestController.cs
Questionable/External/QuestionableIpc.cs
Questionable/Windows/PriorityWindow.cs

index c10d160c6ebc5a47fbbd6b8654fa3e4188c3a1ed..83c123578776620410f852dcf5e852bcb78e46e0 100644 (file)
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.Diagnostics.CodeAnalysis;
 using System.Linq;
+using System.Text;
 using Dalamud.Game.ClientState.Conditions;
 using Dalamud.Game.ClientState.Keys;
 using Dalamud.Game.Gui.Toast;
@@ -819,6 +820,15 @@ internal sealed class QuestController : MiniTaskController<QuestController>
         return false;
     }
 
+    public void ImportQuestPriority(List<ElementId> questElements)
+    {
+        foreach (ElementId elementId in questElements)
+        {
+            if (_questRegistry.TryGetQuest(elementId, out Quest? quest) && !ManualPriorityQuests.Contains(quest))
+                ManualPriorityQuests.Add(quest);
+        }
+    }
+
     public bool WasLastTaskUpdateWithin(TimeSpan timeSpan)
     {
         _logger.LogInformation("Last update: {Update}", _lastTaskUpdate);
index f1095f1edaf1c5733a539a75d672b3ea84fdfd5d..f27d2065fab75a6475c35794321cb8f211bcdddd 100644 (file)
@@ -2,12 +2,14 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Numerics;
+using System.Reflection.Metadata;
 using Dalamud.Plugin;
 using Dalamud.Plugin.Ipc;
 using JetBrains.Annotations;
 using Questionable.Controller;
 using Questionable.Functions;
 using Questionable.Model.Questing;
+using Questionable.Windows;
 using Questionable.Windows.QuestComponents;
 
 namespace Questionable.External;
@@ -21,6 +23,7 @@ internal sealed class QuestionableIpc : IDisposable
     private const string IpcStartQuest = "Questionable.StartQuest";
     private const string IpcStartSingleQuest = "Questionable.StartSingleQuest";
     private const string IpcIsQuestLocked = "Questionable.IsQuestLocked";
+    private const string IpcImportQuestPriority = "Questionable.ImportQuestPriority";
 
     private readonly QuestController _questController;
     private readonly QuestRegistry _questRegistry;
@@ -33,6 +36,7 @@ internal sealed class QuestionableIpc : IDisposable
     private readonly ICallGateProvider<string, bool> _startQuest;
     private readonly ICallGateProvider<string, bool> _startSingleQuest;
     private readonly ICallGateProvider<string, bool> _isQuestLocked;
+    private readonly ICallGateProvider<string, bool> _importQuestPriority;
 
     public QuestionableIpc(
         QuestController questController,
@@ -69,6 +73,9 @@ internal sealed class QuestionableIpc : IDisposable
 
         _isQuestLocked = pluginInterface.GetIpcProvider<string, bool>(IpcIsQuestLocked);
         _isQuestLocked.RegisterFunc((questId) => IsQuestLocked(questId));
+
+        _importQuestPriority = pluginInterface.GetIpcProvider<string, bool>(IpcImportQuestPriority);
+        _importQuestPriority.RegisterFunc((encodedQuestPriority) => ImportQuestPriority(encodedQuestPriority));
     }
 
     private bool StartQuest(string questId, bool single)
@@ -122,6 +129,13 @@ internal sealed class QuestionableIpc : IDisposable
         return true;
     }
 
+    private bool ImportQuestPriority(string encodedQuestPriority)
+    {
+        List<ElementId> questElements = PriorityWindow.ParseQuestPriority(encodedQuestPriority);
+        _questController.ImportQuestPriority(questElements);
+        return true;
+    }
+
     public void Dispose()
     {
         _startSingleQuest.UnregisterFunc();
index 8b4d5202a2f11d4b186ad5d065861cbf74a32691..55e74ae5ea1a5a8d6c3799562c3f81d2851c4af5 100644 (file)
@@ -249,11 +249,16 @@ internal sealed class PriorityWindow : LWindow
     }
 
     private List<ElementId> ParseClipboardItems()
+    {
+        string? clipboardText = GetClipboardText();
+        return ParseQuestPriority(clipboardText);
+    }
+
+    public static List<ElementId> ParseQuestPriority(string? clipboardText)
     {
         List<ElementId> clipboardItems = new List<ElementId>();
         try
         {
-            string? clipboardText = GetClipboardText();
             if (clipboardText != null && clipboardText.StartsWith(ClipboardPrefix, StringComparison.InvariantCulture))
             {
                 clipboardText = clipboardText.Substring(ClipboardPrefix.Length);
@@ -281,14 +286,9 @@ internal sealed class PriorityWindow : LWindow
         _chatGui.Print("Copied quests to clipboard.", CommandHandler.MessageTag, CommandHandler.TagColor);
     }
 
-    private void ImportFromClipboard(List<ElementId> clipboardItems)
+    private void ImportFromClipboard(List<ElementId> questElements)
     {
-        foreach (ElementId elementId in clipboardItems)
-        {
-            if (_questRegistry.TryGetQuest(elementId, out Quest? quest) &&
-                !_questController.ManualPriorityQuests.Contains(quest))
-                _questController.ManualPriorityQuests.Add(quest);
-        }
+        _questController.ImportQuestPriority(questElements);
     }
 
     /// <summary>