added all the import export insert stuff
This commit is contained in:
parent
a11d2362be
commit
da360f47f2
@ -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);
|
||||||
|
53
Questionable/External/QuestionableIpc.cs
vendored
53
Questionable/External/QuestionableIpc.cs
vendored
@ -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();
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user