Added clear of block of pap files.
This commit is contained in:
@@ -25,7 +25,6 @@ using Microsoft.Extensions.Logging;
|
|||||||
using DalamudObjectKind = Dalamud.Game.ClientState.Objects.Enums.ObjectKind;
|
using DalamudObjectKind = Dalamud.Game.ClientState.Objects.Enums.ObjectKind;
|
||||||
using ObjectKind = LightlessSync.API.Data.Enum.ObjectKind;
|
using ObjectKind = LightlessSync.API.Data.Enum.ObjectKind;
|
||||||
using FileReplacementDataComparer = LightlessSync.PlayerData.Data.FileReplacementDataComparer;
|
using FileReplacementDataComparer = LightlessSync.PlayerData.Data.FileReplacementDataComparer;
|
||||||
using LightlessSync.LightlessConfiguration;
|
|
||||||
|
|
||||||
namespace LightlessSync.PlayerData.Pairs;
|
namespace LightlessSync.PlayerData.Pairs;
|
||||||
|
|
||||||
@@ -96,6 +95,9 @@ internal sealed class PairHandlerAdapter : DisposableMediatorSubscriberBase, IPa
|
|||||||
private readonly Dictionary<ObjectKind, HashSet<PlayerChanges>> _pendingOwnedChanges = new();
|
private readonly Dictionary<ObjectKind, HashSet<PlayerChanges>> _pendingOwnedChanges = new();
|
||||||
private CancellationTokenSource? _ownedRetryCts;
|
private CancellationTokenSource? _ownedRetryCts;
|
||||||
private Task _ownedRetryTask = Task.CompletedTask;
|
private Task _ownedRetryTask = Task.CompletedTask;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private static readonly TimeSpan OwnedRetryInitialDelay = TimeSpan.FromSeconds(1);
|
private static readonly TimeSpan OwnedRetryInitialDelay = TimeSpan.FromSeconds(1);
|
||||||
private static readonly TimeSpan OwnedRetryMaxDelay = TimeSpan.FromSeconds(10);
|
private static readonly TimeSpan OwnedRetryMaxDelay = TimeSpan.FromSeconds(10);
|
||||||
private static readonly TimeSpan OwnedRetryStaleDataGrace = TimeSpan.FromMinutes(5);
|
private static readonly TimeSpan OwnedRetryStaleDataGrace = TimeSpan.FromMinutes(5);
|
||||||
@@ -109,6 +111,9 @@ internal sealed class PairHandlerAdapter : DisposableMediatorSubscriberBase, IPa
|
|||||||
};
|
};
|
||||||
|
|
||||||
private readonly ConcurrentDictionary<string, byte> _blockedPapHashes = new(StringComparer.OrdinalIgnoreCase);
|
private readonly ConcurrentDictionary<string, byte> _blockedPapHashes = new(StringComparer.OrdinalIgnoreCase);
|
||||||
|
private AnimationValidationMode _lastAnimMode = (AnimationValidationMode)(-1);
|
||||||
|
private bool _lastAllowOneBasedShift;
|
||||||
|
private bool _lastAllowNeighborTolerance;
|
||||||
private readonly ConcurrentDictionary<string, byte> _dumpedRemoteSkeletonForHash = new(StringComparer.OrdinalIgnoreCase);
|
private readonly ConcurrentDictionary<string, byte> _dumpedRemoteSkeletonForHash = new(StringComparer.OrdinalIgnoreCase);
|
||||||
|
|
||||||
private DateTime? _invisibleSinceUtc;
|
private DateTime? _invisibleSinceUtc;
|
||||||
@@ -2455,6 +2460,8 @@ internal sealed class PairHandlerAdapter : DisposableMediatorSubscriberBase, IPa
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
RefreshPapBlockCacheIfAnimSettingsChanged();
|
||||||
|
|
||||||
var replacementList = charaData.FileReplacements.SelectMany(k => k.Value.Where(v => string.IsNullOrEmpty(v.FileSwapPath))).ToList();
|
var replacementList = charaData.FileReplacements.SelectMany(k => k.Value.Where(v => string.IsNullOrEmpty(v.FileSwapPath))).ToList();
|
||||||
Parallel.ForEach(replacementList, new ParallelOptions()
|
Parallel.ForEach(replacementList, new ParallelOptions()
|
||||||
{
|
{
|
||||||
@@ -2855,6 +2862,26 @@ internal sealed class PairHandlerAdapter : DisposableMediatorSubscriberBase, IPa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void RefreshPapBlockCacheIfAnimSettingsChanged()
|
||||||
|
{
|
||||||
|
var cfg = _configService.Current;
|
||||||
|
|
||||||
|
if (cfg.AnimationValidationMode != _lastAnimMode
|
||||||
|
|| cfg.AnimationAllowOneBasedShift != _lastAllowOneBasedShift
|
||||||
|
|| cfg.AnimationAllowNeighborIndexTolerance != _lastAllowNeighborTolerance)
|
||||||
|
{
|
||||||
|
_lastAnimMode = cfg.AnimationValidationMode;
|
||||||
|
_lastAllowOneBasedShift = cfg.AnimationAllowOneBasedShift;
|
||||||
|
_lastAllowNeighborTolerance = cfg.AnimationAllowNeighborIndexTolerance;
|
||||||
|
|
||||||
|
_blockedPapHashes.Clear();
|
||||||
|
_dumpedRemoteSkeletonForHash.Clear();
|
||||||
|
|
||||||
|
Logger.LogDebug("{handler}: Cleared blocked PAP cache due to animation setting change (mode={mode}, shift={shift}, neigh={neigh})",
|
||||||
|
GetLogIdentifier(), _lastAnimMode, _lastAllowOneBasedShift, _lastAllowNeighborTolerance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void SplitPapMappings(
|
private static void SplitPapMappings(
|
||||||
Dictionary<(string GamePath, string? Hash), string> moddedPaths,
|
Dictionary<(string GamePath, string? Hash), string> moddedPaths,
|
||||||
out Dictionary<(string GamePath, string? Hash), string> withoutPap,
|
out Dictionary<(string GamePath, string? Hash), string> withoutPap,
|
||||||
@@ -2879,6 +2906,8 @@ internal sealed class PairHandlerAdapter : DisposableMediatorSubscriberBase, IPa
|
|||||||
Dictionary<(string GamePath, string? Hash), string> papOnly,
|
Dictionary<(string GamePath, string? Hash), string> papOnly,
|
||||||
CancellationToken token)
|
CancellationToken token)
|
||||||
{
|
{
|
||||||
|
RefreshPapBlockCacheIfAnimSettingsChanged();
|
||||||
|
|
||||||
var mode = _configService.Current.AnimationValidationMode;
|
var mode = _configService.Current.AnimationValidationMode;
|
||||||
var allowBasedShift = _configService.Current.AnimationAllowOneBasedShift;
|
var allowBasedShift = _configService.Current.AnimationAllowOneBasedShift;
|
||||||
var allownNightIndex = _configService.Current.AnimationAllowNeighborIndexTolerance;
|
var allownNightIndex = _configService.Current.AnimationAllowNeighborIndexTolerance;
|
||||||
|
|||||||
Reference in New Issue
Block a user