added all the import export insert stuff

This commit is contained in:
pot0to 2025-03-01 19:35:32 -08:00
parent a11d2362be
commit da360f47f2
3 changed files with 96 additions and 7 deletions

View File

@ -2,12 +2,14 @@
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;
using Dalamud.Game.Text.SeStringHandling; using Dalamud.Game.Text.SeStringHandling;
using Dalamud.Plugin.Services; using Dalamud.Plugin.Services;
using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.Game;
using Lumina.Excel.Sheets;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Questionable.Controller.Steps; using Questionable.Controller.Steps;
using Questionable.Controller.Steps.Interactions; using Questionable.Controller.Steps.Interactions;
@ -828,6 +830,39 @@ internal sealed class QuestController : MiniTaskController<QuestController>
} }
} }
private const char ClipboardSeparator = ';';
public string ExportQuestPriority()
{
return string.Join(ClipboardSeparator, ManualPriorityQuests.Select(x => x.Id.ToString()));
}
public void ClearQuestPriority()
{
ManualPriorityQuests.Clear();
}
public bool AddQuestPriority(ElementId elementId)
{
if (_questRegistry.TryGetQuest(elementId, out Quest? quest) && !ManualPriorityQuests.Contains(quest))
ManualPriorityQuests.Add(quest);
return true;
}
public bool InsertQuestPriority(int index, ElementId elementId)
{
try
{
if (_questRegistry.TryGetQuest(elementId, out Quest? quest) && !ManualPriorityQuests.Contains(quest))
ManualPriorityQuests.Insert(index, quest);
return true;
}
catch (Exception e) {
_logger.LogError(e, "Failed to insert quest in priority list");
_chatGui.PrintError("Failed to insert quest in priority list, please check /xllog for details.", CommandHandler.MessageTag, CommandHandler.TagColor);
return false;
}
}
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,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Numerics; using System.Numerics;
using Dalamud.Game.ClientState.Objects;
using Dalamud.Plugin; using Dalamud.Plugin;
using Dalamud.Plugin.Ipc; using Dalamud.Plugin.Ipc;
using JetBrains.Annotations; using JetBrains.Annotations;
@ -23,10 +24,15 @@ internal sealed class QuestionableIpc : IDisposable
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 const string IpcImportQuestPriority = "Questionable.ImportQuestPriority";
private const string IpcClearQuestPriority = "Questionable.ClearQuestPriority";
private const string IpcAddQuestPriority = "Questionable.AddQuestPriority";
private const string IpcInsertQuestPriority = "Questionable.InsertQuestPriority";
private const string IpcExportQuestPriority = "Questionable.ExportQuestPriority";
private readonly QuestController _questController; private readonly QuestController _questController;
private readonly QuestRegistry _questRegistry; private readonly QuestRegistry _questRegistry;
private readonly QuestFunctions _questFunctions; private readonly QuestFunctions _questFunctions;
private readonly PriorityWindow _priorityWindow;
private readonly ICallGateProvider<bool> _isRunning; private readonly ICallGateProvider<bool> _isRunning;
private readonly ICallGateProvider<string?> _getCurrentQuestId; private readonly ICallGateProvider<string?> _getCurrentQuestId;
@ -36,17 +42,23 @@ internal sealed class QuestionableIpc : IDisposable
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; private readonly ICallGateProvider<string, bool> _importQuestPriority;
private readonly ICallGateProvider<string, bool> _addQuestPriority;
private readonly ICallGateProvider<bool> _clearQuestPriority;
private readonly ICallGateProvider<int, string, bool> _insertQuestPriority;
private readonly ICallGateProvider<string> _exportQuestPriority;
public QuestionableIpc( public QuestionableIpc(
QuestController questController, QuestController questController,
EventInfoComponent eventInfoComponent, EventInfoComponent eventInfoComponent,
QuestRegistry questRegistry, QuestRegistry questRegistry,
QuestFunctions questFunctions, QuestFunctions questFunctions,
PriorityWindow priorityWindow,
IDalamudPluginInterface pluginInterface) IDalamudPluginInterface pluginInterface)
{ {
_questController = questController; _questController = questController;
_questRegistry = questRegistry; _questRegistry = questRegistry;
_questFunctions = questFunctions; _questFunctions = questFunctions;
_priorityWindow = priorityWindow;
_isRunning = pluginInterface.GetIpcProvider<bool>(IpcIsRunning); _isRunning = pluginInterface.GetIpcProvider<bool>(IpcIsRunning);
_isRunning.RegisterFunc(() => _isRunning.RegisterFunc(() =>
@ -68,13 +80,24 @@ internal sealed class QuestionableIpc : IDisposable
_startSingleQuest = pluginInterface.GetIpcProvider<string, bool>(IpcStartSingleQuest); _startSingleQuest = pluginInterface.GetIpcProvider<string, bool>(IpcStartSingleQuest);
_startSingleQuest.RegisterFunc(questId => StartQuest(questId, true)); _startSingleQuest.RegisterFunc(questId => StartQuest(questId, true));
//_startSingleQuest.RegisterFunc((questId) => StartQuest(questController, questRegistry, questId, true));
_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 = pluginInterface.GetIpcProvider<string, bool>(IpcImportQuestPriority);
_importQuestPriority.RegisterFunc((encodedQuestPriority) => ImportQuestPriority(encodedQuestPriority)); _importQuestPriority.RegisterFunc((encodedQuestPriority) => ImportQuestPriority(encodedQuestPriority));
_importQuestPriority = pluginInterface.GetIpcProvider<string, bool>(IpcAddQuestPriority);
_importQuestPriority.RegisterFunc((questId) => AddQuestPriority(questId));
_clearQuestPriority = pluginInterface.GetIpcProvider<bool>(IpcClearQuestPriority);
_clearQuestPriority.RegisterFunc(ClearQuestPriority);
_insertQuestPriority = pluginInterface.GetIpcProvider<int, string, bool>(IpcInsertQuestPriority);
_insertQuestPriority.RegisterFunc((index, questId) => InsertQuestPriority(index, questId));
_exportQuestPriority = pluginInterface.GetIpcProvider<string>(IpcExportQuestPriority);
_exportQuestPriority.RegisterFunc(_priorityWindow.EncodeQuestPriority);
} }
private bool StartQuest(string questId, bool single) private bool StartQuest(string questId, bool single)
@ -130,11 +153,37 @@ internal sealed class QuestionableIpc : IDisposable
private bool ImportQuestPriority(string encodedQuestPriority) private bool ImportQuestPriority(string encodedQuestPriority)
{ {
List<ElementId> questElements = PriorityWindow.ParseQuestPriority(encodedQuestPriority); List<ElementId> questElements = PriorityWindow.DecodeQuestPriority(encodedQuestPriority);
_questController.ImportQuestPriority(questElements); _questController.ImportQuestPriority(questElements);
return true; return true;
} }
private bool ClearQuestPriority()
{
_questController.ClearQuestPriority();
return true;
}
private bool AddQuestPriority(string questId)
{
if (ElementId.TryFromString(questId, out var elementId) && elementId != null &&
_questRegistry.TryGetQuest(elementId, out var quest))
{
return _questController.AddQuestPriority(elementId);
}
return true;
}
private bool InsertQuestPriority(int index, string questId)
{
if (ElementId.TryFromString(questId, out var elementId) && elementId != null &&
_questRegistry.TryGetQuest(elementId, out var quest))
{
return _questController.InsertQuestPriority(index, elementId);
}
return true;
}
public void Dispose() public void Dispose()
{ {
_startSingleQuest.UnregisterFunc(); _startSingleQuest.UnregisterFunc();

View File

@ -76,7 +76,7 @@ internal sealed class PriorityWindow : LWindow
_questController.ManualPriorityQuests.RemoveAll(q => _questFunctions.IsQuestComplete(q.Id)); _questController.ManualPriorityQuests.RemoveAll(q => _questFunctions.IsQuestComplete(q.Id));
ImGui.SameLine(); ImGui.SameLine();
if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Trash, "Clear")) if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Trash, "Clear"))
_questController.ManualPriorityQuests.Clear(); _questController.ClearQuestPriority();
ImGui.EndDisabled(); ImGui.EndDisabled();
ImGui.Spacing(); ImGui.Spacing();
@ -251,10 +251,10 @@ internal sealed class PriorityWindow : LWindow
private List<ElementId> ParseClipboardItems() private List<ElementId> ParseClipboardItems()
{ {
string? clipboardText = GetClipboardText(); string? clipboardText = GetClipboardText();
return ParseQuestPriority(clipboardText); return DecodeQuestPriority(clipboardText);
} }
public static List<ElementId> ParseQuestPriority(string? clipboardText) public static List<ElementId> DecodeQuestPriority(string? clipboardText)
{ {
List<ElementId> clipboardItems = new List<ElementId>(); List<ElementId> clipboardItems = new List<ElementId>();
try try
@ -278,10 +278,15 @@ internal sealed class PriorityWindow : LWindow
return clipboardItems; return clipboardItems;
} }
public string EncodeQuestPriority()
{
return ClipboardPrefix + Convert.ToBase64String(Encoding.UTF8.GetBytes(
string.Join(ClipboardSeparator, _questController.ManualPriorityQuests.Select(x => x.Id.ToString()))));
}
private void ExportToClipboard() private void ExportToClipboard()
{ {
string clipboardText = ClipboardPrefix + Convert.ToBase64String(Encoding.UTF8.GetBytes( string clipboardText = EncodeQuestPriority();
string.Join(ClipboardSeparator, _questController.ManualPriorityQuests.Select(x => x.Id.ToString()))));
ImGui.SetClipboardText(clipboardText); ImGui.SetClipboardText(clipboardText);
_chatGui.Print("Copied quests to clipboard.", CommandHandler.MessageTag, CommandHandler.TagColor); _chatGui.Print("Copied quests to clipboard.", CommandHandler.MessageTag, CommandHandler.TagColor);
} }