From d6155e403ee549914b1fb647a01f8c12d72a47cd Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 10 Sep 2023 14:19:09 +0200 Subject: [PATCH] Cancel discard if no server response received after 15s --- ARDiscard/AutoDiscardPlogon.cs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/ARDiscard/AutoDiscardPlogon.cs b/ARDiscard/AutoDiscardPlogon.cs index 806e2da..e22a102 100644 --- a/ARDiscard/AutoDiscardPlogon.cs +++ b/ARDiscard/AutoDiscardPlogon.cs @@ -33,6 +33,8 @@ public class AutoDiscardPlogon : IDalamudPlugin private readonly AutoRetainerApi _autoRetainerApi; private readonly TaskManager _taskManager; + private DateTime _cancelDiscardAfter = DateTime.MaxValue; + public AutoDiscardPlogon(DalamudPluginInterface pluginInterface, CommandManager commandManager, ChatGui chatGui, DataManager dataManager, ClientState clientState) { @@ -117,6 +119,7 @@ public class AutoDiscardPlogon : IDalamudPlugin PluginLog.Information( $"Discarding itemId {nextItem->ItemID} in slot {nextItem->Slot} of container {nextItem->Container}."); _inventoryUtils.Discard(nextItem); + _cancelDiscardAfter = DateTime.Now.AddSeconds(15); _taskManager.DelayNext(20); _taskManager.Enqueue(() => ConfirmDiscardItem(finishRetainerAction, inventoryType, slot)); @@ -176,9 +179,20 @@ public class AutoDiscardPlogon : IDalamudPlugin } else if (nextItem->Container == inventoryType && nextItem->Slot == slot) { - PluginLog.Information($"ContinueAfterDiscard: Waiting for server response"); - _taskManager.DelayNext(20); - _taskManager.Enqueue(() => ContinueAfterDiscard(finishRetainerAction, inventoryType, slot)); + if (_cancelDiscardAfter < DateTime.Now) + { + PluginLog.Information("No longer waiting for plugin to pop up, assume discard failed"); + if (finishRetainerAction) + _autoRetainerApi.FinishPostProcess(); + else + _chatGui.PrintError("Discarding probably failed due to an error."); + } + else + { + PluginLog.Information($"ContinueAfterDiscard: Waiting for server response until {_cancelDiscardAfter}"); + _taskManager.DelayNext(20); + _taskManager.Enqueue(() => ContinueAfterDiscard(finishRetainerAction, inventoryType, slot)); + } } else {