diff --git a/Questionable/Controller/QuestController.cs b/Questionable/Controller/QuestController.cs index c10d160c..83c12357 100644 --- a/Questionable/Controller/QuestController.cs +++ b/Questionable/Controller/QuestController.cs @@ -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 return false; } + public void ImportQuestPriority(List 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); diff --git a/Questionable/External/QuestionableIpc.cs b/Questionable/External/QuestionableIpc.cs index f1095f1e..f27d2065 100644 --- a/Questionable/External/QuestionableIpc.cs +++ b/Questionable/External/QuestionableIpc.cs @@ -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 _startQuest; private readonly ICallGateProvider _startSingleQuest; private readonly ICallGateProvider _isQuestLocked; + private readonly ICallGateProvider _importQuestPriority; public QuestionableIpc( QuestController questController, @@ -69,6 +73,9 @@ internal sealed class QuestionableIpc : IDisposable _isQuestLocked = pluginInterface.GetIpcProvider(IpcIsQuestLocked); _isQuestLocked.RegisterFunc((questId) => IsQuestLocked(questId)); + + _importQuestPriority = pluginInterface.GetIpcProvider(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 questElements = PriorityWindow.ParseQuestPriority(encodedQuestPriority); + _questController.ImportQuestPriority(questElements); + return true; + } + public void Dispose() { _startSingleQuest.UnregisterFunc(); diff --git a/Questionable/Windows/PriorityWindow.cs b/Questionable/Windows/PriorityWindow.cs index 8b4d5202..55e74ae5 100644 --- a/Questionable/Windows/PriorityWindow.cs +++ b/Questionable/Windows/PriorityWindow.cs @@ -249,11 +249,16 @@ internal sealed class PriorityWindow : LWindow } private List ParseClipboardItems() + { + string? clipboardText = GetClipboardText(); + return ParseQuestPriority(clipboardText); + } + + public static List ParseQuestPriority(string? clipboardText) { List clipboardItems = new List(); 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 clipboardItems) + private void ImportFromClipboard(List questElements) { - foreach (ElementId elementId in clipboardItems) - { - if (_questRegistry.TryGetQuest(elementId, out Quest? quest) && - !_questController.ManualPriorityQuests.Contains(quest)) - _questController.ManualPriorityQuests.Add(quest); - } + _questController.ImportQuestPriority(questElements); } ///