added quest piriority ipc

This commit is contained in:
pot0to 2025-02-27 15:37:43 -08:00
parent 3297b7009c
commit 8a8034de94
3 changed files with 32 additions and 8 deletions

View File

@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Linq; using System.Linq;
using System.Text;
using Dalamud.Game.ClientState.Conditions; using Dalamud.Game.ClientState.Conditions;
using Dalamud.Game.ClientState.Keys; using Dalamud.Game.ClientState.Keys;
using Dalamud.Game.Gui.Toast; using Dalamud.Game.Gui.Toast;
@ -819,6 +820,15 @@ internal sealed class QuestController : MiniTaskController<QuestController>
return false; 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) public bool WasLastTaskUpdateWithin(TimeSpan timeSpan)
{ {
_logger.LogInformation("Last update: {Update}", _lastTaskUpdate); _logger.LogInformation("Last update: {Update}", _lastTaskUpdate);

View File

@ -2,12 +2,14 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Numerics; using System.Numerics;
using System.Reflection.Metadata;
using Dalamud.Plugin; using Dalamud.Plugin;
using Dalamud.Plugin.Ipc; using Dalamud.Plugin.Ipc;
using JetBrains.Annotations; using JetBrains.Annotations;
using Questionable.Controller; using Questionable.Controller;
using Questionable.Functions; using Questionable.Functions;
using Questionable.Model.Questing; using Questionable.Model.Questing;
using Questionable.Windows;
using Questionable.Windows.QuestComponents; using Questionable.Windows.QuestComponents;
namespace Questionable.External; namespace Questionable.External;
@ -21,6 +23,7 @@ internal sealed class QuestionableIpc : IDisposable
private const string IpcStartQuest = "Questionable.StartQuest"; private const string IpcStartQuest = "Questionable.StartQuest";
private const string IpcStartSingleQuest = "Questionable.StartSingleQuest"; private const string IpcStartSingleQuest = "Questionable.StartSingleQuest";
private const string IpcIsQuestLocked = "Questionable.IsQuestLocked"; private const string IpcIsQuestLocked = "Questionable.IsQuestLocked";
private const string IpcImportQuestPriority = "Questionable.ImportQuestPriority";
private readonly QuestController _questController; private readonly QuestController _questController;
private readonly QuestRegistry _questRegistry; private readonly QuestRegistry _questRegistry;
@ -33,6 +36,7 @@ internal sealed class QuestionableIpc : IDisposable
private readonly ICallGateProvider<string, bool> _startQuest; private readonly ICallGateProvider<string, bool> _startQuest;
private readonly ICallGateProvider<string, bool> _startSingleQuest; private readonly ICallGateProvider<string, bool> _startSingleQuest;
private readonly ICallGateProvider<string, bool> _isQuestLocked; private readonly ICallGateProvider<string, bool> _isQuestLocked;
private readonly ICallGateProvider<string, bool> _importQuestPriority;
public QuestionableIpc( public QuestionableIpc(
QuestController questController, QuestController questController,
@ -69,6 +73,9 @@ internal sealed class QuestionableIpc : IDisposable
_isQuestLocked = pluginInterface.GetIpcProvider<string, bool>(IpcIsQuestLocked); _isQuestLocked = pluginInterface.GetIpcProvider<string, bool>(IpcIsQuestLocked);
_isQuestLocked.RegisterFunc((questId) => IsQuestLocked(questId)); _isQuestLocked.RegisterFunc((questId) => IsQuestLocked(questId));
_importQuestPriority = pluginInterface.GetIpcProvider<string, bool>(IpcImportQuestPriority);
_importQuestPriority.RegisterFunc((encodedQuestPriority) => ImportQuestPriority(encodedQuestPriority));
} }
private bool StartQuest(string questId, bool single) private bool StartQuest(string questId, bool single)
@ -122,6 +129,13 @@ internal sealed class QuestionableIpc : IDisposable
return true; return true;
} }
private bool ImportQuestPriority(string encodedQuestPriority)
{
List<ElementId> questElements = PriorityWindow.ParseQuestPriority(encodedQuestPriority);
_questController.ImportQuestPriority(questElements);
return true;
}
public void Dispose() public void Dispose()
{ {
_startSingleQuest.UnregisterFunc(); _startSingleQuest.UnregisterFunc();

View File

@ -249,11 +249,16 @@ internal sealed class PriorityWindow : LWindow
} }
private List<ElementId> ParseClipboardItems() private List<ElementId> ParseClipboardItems()
{
string? clipboardText = GetClipboardText();
return ParseQuestPriority(clipboardText);
}
public static List<ElementId> ParseQuestPriority(string? clipboardText)
{ {
List<ElementId> clipboardItems = new List<ElementId>(); List<ElementId> clipboardItems = new List<ElementId>();
try try
{ {
string? clipboardText = GetClipboardText();
if (clipboardText != null && clipboardText.StartsWith(ClipboardPrefix, StringComparison.InvariantCulture)) if (clipboardText != null && clipboardText.StartsWith(ClipboardPrefix, StringComparison.InvariantCulture))
{ {
clipboardText = clipboardText.Substring(ClipboardPrefix.Length); clipboardText = clipboardText.Substring(ClipboardPrefix.Length);
@ -281,14 +286,9 @@ internal sealed class PriorityWindow : LWindow
_chatGui.Print("Copied quests to clipboard.", CommandHandler.MessageTag, CommandHandler.TagColor); _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) _questController.ImportQuestPriority(questElements);
{
if (_questRegistry.TryGetQuest(elementId, out Quest? quest) &&
!_questController.ManualPriorityQuests.Contains(quest))
_questController.ManualPriorityQuests.Add(quest);
}
} }
/// <summary> /// <summary>