re-check semi-persistent transient resources validity instead of clearing on redraw

This commit is contained in:
Stanley Dimant
2022-09-06 14:58:16 +02:00
parent 7265dab8a7
commit 99df88bb3b
3 changed files with 20 additions and 10 deletions

View File

@@ -341,24 +341,34 @@ public class CharacterDataFactory
} }
foreach (var item in transientResourceManager.GetTransientResources(charaPointer)) foreach (var item in transientResourceManager.GetTransientResources(charaPointer))
{
if (!previousData.FileReplacements[objectKind].Any(f => f.GamePaths.Any(p => p.ToLowerInvariant() == item.ToLowerInvariant())))
{ {
Logger.Verbose("Found transient resource: " + item); Logger.Verbose("Found transient resource: " + item);
AddReplacement(item, objectKind, previousData, 1, true); AddReplacement(item, objectKind, previousData, 1, true);
} }
}
foreach (var item in transientResourceManager.GetSemiTransientResources(objectKind)) foreach (var item in transientResourceManager.GetSemiTransientResources(objectKind))
{ {
Logger.Verbose("Found semi transient resource: " + item);
if (!previousData.FileReplacements.ContainsKey(objectKind)) if (!previousData.FileReplacements.ContainsKey(objectKind))
{ {
previousData.FileReplacements.Add(objectKind, new()); previousData.FileReplacements.Add(objectKind, new());
} }
if (!previousData.FileReplacements[objectKind].Any(k => k.ResolvedPath == item.ResolvedPath)) if (!previousData.FileReplacements[objectKind].Any(k => k.ResolvedPath.ToLowerInvariant() == item.ResolvedPath.ToLowerInvariant()))
{ {
if (_ipcManager.PenumbraResolvePath(item.GamePaths.First()).ToLowerInvariant() == item.GamePaths.First().ToLowerInvariant())
{
transientResourceManager.RemoveTransientResource(charaPointer, item);
}
else
{
Logger.Verbose("Found semi transient resource: " + item);
previousData.FileReplacements[objectKind].Add(item); previousData.FileReplacements[objectKind].Add(item);
} }
} }
}
transientResourceManager.PersistTransientResources(charaPointer, objectKind, CreateFileReplacement); transientResourceManager.PersistTransientResources(charaPointer, objectKind, CreateFileReplacement);

View File

@@ -254,11 +254,11 @@ namespace MareSynchronos.Managers
}); });
} }
public string? PenumbraResolvePath(string path) public string PenumbraResolvePath(string path)
{ {
if (!CheckPenumbraApi()) return null; if (!CheckPenumbraApi()) return path;
var resolvedPath = _penumbraResolvePlayer!.InvokeFunc(path); var resolvedPath = _penumbraResolvePlayer!.InvokeFunc(path);
return resolvedPath; return resolvedPath ?? path;
} }
public string[] PenumbraReverseResolvePlayer(string path) public string[] PenumbraReverseResolvePlayer(string path)

View File

@@ -157,7 +157,7 @@ namespace MareSynchronos.Managers
if (address == item.Address) if (address == item.Address)
{ {
Logger.Debug("Penumbra redraw Event for " + item.ObjectKind); Logger.Debug("Penumbra redraw Event for " + item.ObjectKind);
_transientResourceManager.CleanSemiTransientResources(item.ObjectKind); //_transientResourceManager.CleanSemiTransientResources(item.ObjectKind);
item.HasUnprocessedUpdate = true; item.HasUnprocessedUpdate = true;
} }
} }