fix crashing and such
This commit is contained in:
@@ -145,18 +145,14 @@ public class CharacterDataFactory : MediatorSubscriberBase
|
||||
// gather up data from ipc
|
||||
previousData.ManipulationString = _ipcManager.PenumbraGetMetaManipulations();
|
||||
previousData.HeelsOffset = _ipcManager.GetHeelsOffset();
|
||||
Task<string> getGlamourerData = new(() => _ipcManager.GlamourerGetCharacterCustomization(playerRelatedObject.Address));
|
||||
_processingQueue.Enqueue(getGlamourerData);
|
||||
Task<string> getCustomizeData = new(() => _ipcManager.GetCustomizePlusScale());
|
||||
_processingQueue.Enqueue(getCustomizeData);
|
||||
Task<string> getPalettePlusData = new(() => _ipcManager.PalettePlusBuildPalette());
|
||||
_processingQueue.Enqueue(getPalettePlusData);
|
||||
Task.WaitAll(new[] { getGlamourerData, getCustomizeData, getPalettePlusData }, token);
|
||||
previousData.GlamourerString[playerRelatedObject.ObjectKind] = await getGlamourerData.ConfigureAwait(true);
|
||||
previousData.CustomizePlusScale = await getCustomizeData.ConfigureAwait(true);
|
||||
previousData.PalettePlusPalette = await getPalettePlusData.ConfigureAwait(true);
|
||||
Task<string> getGlamourerData = Task.Run(() => _ipcManager.GlamourerGetCharacterCustomization(playerRelatedObject.Address));
|
||||
Task<string> getCustomizeData = Task.Run(() => _ipcManager.GetCustomizePlusScale());
|
||||
Task<string> getPalettePlusData = Task.Run(() => _ipcManager.PalettePlusBuildPalette());
|
||||
previousData.GlamourerString[playerRelatedObject.ObjectKind] = await getGlamourerData.ConfigureAwait(false);
|
||||
_logger.LogDebug("Glamourer is now: {data}", previousData.GlamourerString[playerRelatedObject.ObjectKind]);
|
||||
previousData.CustomizePlusScale = await getCustomizeData.ConfigureAwait(false);
|
||||
_logger.LogDebug("Customize is now: {data}", previousData.CustomizePlusScale);
|
||||
previousData.PalettePlusPalette = await getPalettePlusData.ConfigureAwait(false);
|
||||
_logger.LogDebug("Palette is now: {data}", previousData.PalettePlusPalette);
|
||||
|
||||
// gather static replacements from render model
|
||||
|
||||
@@ -390,7 +390,7 @@ public class CachedPlayer : MediatorSubscriberBase, IDisposable
|
||||
}
|
||||
}
|
||||
|
||||
while (!_applicationTask?.IsCompleted ?? false)
|
||||
while (!_applicationTask?.IsCompleted ?? false && !downloadToken.IsCancellationRequested)
|
||||
{
|
||||
// block until current application is done
|
||||
_logger.LogDebug("Waiting for current data application (Id: {id}) to finish", _applicationId);
|
||||
@@ -416,15 +416,12 @@ public class CachedPlayer : MediatorSubscriberBase, IDisposable
|
||||
_logger.LogDebug("[{applicationId}] Application finished", _applicationId);
|
||||
});
|
||||
|
||||
}, downloadToken).ContinueWith(task =>
|
||||
{
|
||||
_downloadCancellationTokenSource = null;
|
||||
|
||||
if (!task.IsCanceled) return;
|
||||
|
||||
_logger.LogDebug("Download was cancelled");
|
||||
_apiController.CancelDownload(downloadId);
|
||||
});
|
||||
|
||||
}, downloadToken);
|
||||
}
|
||||
|
||||
private Task? _applicationTask;
|
||||
|
||||
@@ -124,7 +124,7 @@ public class GameObjectHandler : MediatorSubscriberBase
|
||||
|| (((GameObject*)curPtr)->RenderFlags & 0b100000000000) == 0b100000000000;
|
||||
}
|
||||
|
||||
public async Task<bool> IsBeingDrawn()
|
||||
public async Task<bool> IsBeingDrawnRunOnFramework()
|
||||
{
|
||||
return await _dalamudUtil.RunOnFrameworkThread(() =>
|
||||
{
|
||||
|
||||
@@ -254,11 +254,13 @@ public class DalamudUtil : IDisposable
|
||||
|
||||
public async Task RunOnFrameworkThread(Action act)
|
||||
{
|
||||
_logger.LogTrace("Running Action on framework thread: {act}", act);
|
||||
await _framework.RunOnFrameworkThread(act).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public async Task<T> RunOnFrameworkThread<T>(Func<T> func)
|
||||
{
|
||||
_logger.LogTrace("Running Func on framework thread: {func}", func);
|
||||
return await _framework.RunOnFrameworkThread(func).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
@@ -275,11 +277,11 @@ public class DalamudUtil : IDisposable
|
||||
// ReSharper disable once LoopVariableIsNeverChangedInsideLoop
|
||||
while ((!ct?.IsCancellationRequested ?? true)
|
||||
&& curWaitTime < timeOut
|
||||
&& await handler.IsBeingDrawn().ConfigureAwait(false)) // 0b100000000000 is "still rendering" or something
|
||||
&& await handler.IsBeingDrawnRunOnFramework().ConfigureAwait(true)) // 0b100000000000 is "still rendering" or something
|
||||
{
|
||||
logger.LogTrace($"[{redrawId}] Waiting for {handler} to finish drawing");
|
||||
curWaitTime += tick;
|
||||
Thread.Sleep(tick);
|
||||
await Task.Delay(tick).ConfigureAwait(true);
|
||||
}
|
||||
|
||||
logger.LogTrace($"[{redrawId}] Finished drawing after {curWaitTime}ms");
|
||||
|
||||
Reference in New Issue
Block a user