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.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text;
using Dalamud.Game.ClientState.Conditions;
using Dalamud.Game.ClientState.Keys;
using Dalamud.Game.Gui.Toast;
using Dalamud.Game.Text.SeStringHandling;
using Dalamud.Plugin.Services;
using FFXIVClientStructs.FFXIV.Client.Game;
using Lumina.Excel.Sheets;
using Microsoft.Extensions.Logging;
using Questionable.Controller.Steps;
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)
{
_logger.LogInformation("Last update: {Update}", _lastTaskUpdate);

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using Dalamud.Game.ClientState.Objects;
using Dalamud.Plugin;
using Dalamud.Plugin.Ipc;
using JetBrains.Annotations;
@ -23,10 +24,15 @@ internal sealed class QuestionableIpc : IDisposable
private const string IpcStartSingleQuest = "Questionable.StartSingleQuest";
private const string IpcIsQuestLocked = "Questionable.IsQuestLocked";
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 QuestRegistry _questRegistry;
private readonly QuestFunctions _questFunctions;
private readonly PriorityWindow _priorityWindow;
private readonly ICallGateProvider<bool> _isRunning;
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> _isQuestLocked;
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(
QuestController questController,
EventInfoComponent eventInfoComponent,
QuestRegistry questRegistry,
QuestFunctions questFunctions,
PriorityWindow priorityWindow,
IDalamudPluginInterface pluginInterface)
{
_questController = questController;
_questRegistry = questRegistry;
_questFunctions = questFunctions;
_priorityWindow = priorityWindow;
_isRunning = pluginInterface.GetIpcProvider<bool>(IpcIsRunning);
_isRunning.RegisterFunc(() =>
@ -68,13 +80,24 @@ internal sealed class QuestionableIpc : IDisposable
_startSingleQuest = pluginInterface.GetIpcProvider<string, bool>(IpcStartSingleQuest);
_startSingleQuest.RegisterFunc(questId => StartQuest(questId, true));
//_startSingleQuest.RegisterFunc((questId) => StartQuest(questController, questRegistry, questId, true));
_isQuestLocked = pluginInterface.GetIpcProvider<string, bool>(IpcIsQuestLocked);
_isQuestLocked.RegisterFunc((questId) => IsQuestLocked(questId));
_importQuestPriority = pluginInterface.GetIpcProvider<string, bool>(IpcImportQuestPriority);
_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)
@ -130,11 +153,37 @@ internal sealed class QuestionableIpc : IDisposable
private bool ImportQuestPriority(string encodedQuestPriority)
{
List<ElementId> questElements = PriorityWindow.ParseQuestPriority(encodedQuestPriority);
List<ElementId> questElements = PriorityWindow.DecodeQuestPriority(encodedQuestPriority);
_questController.ImportQuestPriority(questElements);
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()
{
_startSingleQuest.UnregisterFunc();

View File

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