fix issue when multiple transient files point to different gamepaths
This commit is contained in:
@@ -320,10 +320,13 @@ public class CharacterDataFactory
|
|||||||
previousData.FileReplacements.Add(objectKind, new());
|
previousData.FileReplacements.Add(objectKind, new());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!previousData.FileReplacements[objectKind].Any(k => k.ResolvedPath.ToLowerInvariant() == item.ResolvedPath.ToLowerInvariant()))
|
if (!previousData.FileReplacements[objectKind].Any(k => k.GamePaths.Any(p => item.GamePaths.Select(p => p.ToLowerInvariant()).Contains(p.ToLowerInvariant()))))
|
||||||
{
|
{
|
||||||
if (_ipcManager.PenumbraResolvePath(item.GamePaths.First()).ToLowerInvariant() == item.GamePaths.First().ToLowerInvariant())
|
var penumResolve = _ipcManager.PenumbraResolvePath(item.GamePaths.First()).ToLowerInvariant();
|
||||||
|
var gamePath = item.GamePaths.First().ToLowerInvariant();
|
||||||
|
if (penumResolve == gamePath)
|
||||||
{
|
{
|
||||||
|
Logger.Debug("PenumResolve was same as GamePath, not adding " + item);
|
||||||
transientResourceManager.RemoveTransientResource(charaPointer, item);
|
transientResourceManager.RemoveTransientResource(charaPointer, item);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ using FFXIVClientStructs.FFXIV.Client.Game.Character;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using MareSynchronos.Models;
|
using MareSynchronos.Models;
|
||||||
|
#if DEBUG
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace MareSynchronos.Managers
|
namespace MareSynchronos.Managers
|
||||||
{
|
{
|
||||||
@@ -236,6 +239,11 @@ namespace MareSynchronos.Managers
|
|||||||
CharacterCacheDto? cacheDto = (await CreateFullCharacterCacheDto(token));
|
CharacterCacheDto? cacheDto = (await CreateFullCharacterCacheDto(token));
|
||||||
if (cacheDto == null || token.IsCancellationRequested) return;
|
if (cacheDto == null || token.IsCancellationRequested) return;
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
var json = JsonConvert.SerializeObject(cacheDto, Formatting.Indented);
|
||||||
|
Logger.Verbose(json);
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((LastCreatedCharacterData?.GetHashCode() ?? 0) == cacheDto.GetHashCode())
|
if ((LastCreatedCharacterData?.GetHashCode() ?? 0) == cacheDto.GetHashCode())
|
||||||
{
|
{
|
||||||
Logger.Debug("Not sending data, already sent");
|
Logger.Debug("Not sending data, already sent");
|
||||||
|
|||||||
@@ -143,27 +143,30 @@ namespace MareSynchronos.Managers
|
|||||||
|
|
||||||
var transientResources = resources.ToList();
|
var transientResources = resources.ToList();
|
||||||
Logger.Debug("Persisting " + transientResources.Count + " transient resources");
|
Logger.Debug("Persisting " + transientResources.Count + " transient resources");
|
||||||
foreach (var item in transientResources)
|
foreach (var gamePath in transientResources)
|
||||||
{
|
{
|
||||||
var existingResource = SemiTransientResources[objectKind].Any(f => f.GamePaths.First().ToLowerInvariant() == item.ToLowerInvariant());
|
var existingResource = SemiTransientResources[objectKind].Any(f => f.GamePaths.First().ToLowerInvariant() == gamePath.ToLowerInvariant());
|
||||||
if (existingResource)
|
if (existingResource)
|
||||||
{
|
{
|
||||||
Logger.Debug("Semi Transient resource replaced: " + item);
|
Logger.Debug("Semi Transient resource replaced: " + gamePath);
|
||||||
SemiTransientResources[objectKind].RemoveWhere(f => f.GamePaths.First().ToLowerInvariant() == item.ToLowerInvariant());
|
SemiTransientResources[objectKind].RemoveWhere(f => f.GamePaths.First().ToLowerInvariant() == gamePath.ToLowerInvariant());
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!SemiTransientResources[objectKind].Any(f => f.GamePaths.First().ToLowerInvariant() == item.ToLowerInvariant()))
|
var fileReplacement = createFileReplacement(gamePath.ToLowerInvariant(), true);
|
||||||
{
|
|
||||||
|
|
||||||
var fileReplacement = createFileReplacement(item.ToLowerInvariant(), true);
|
|
||||||
if (!fileReplacement.HasFileReplacement)
|
if (!fileReplacement.HasFileReplacement)
|
||||||
fileReplacement = createFileReplacement(item.ToLowerInvariant(), false);
|
fileReplacement = createFileReplacement(gamePath.ToLowerInvariant(), false);
|
||||||
if (fileReplacement.HasFileReplacement)
|
if (fileReplacement.HasFileReplacement)
|
||||||
{
|
{
|
||||||
Logger.Debug("Persisting " + item.ToLowerInvariant());
|
Logger.Debug("Persisting " + gamePath.ToLowerInvariant());
|
||||||
SemiTransientResources[objectKind].Add(fileReplacement);
|
if (SemiTransientResources[objectKind].Add(fileReplacement))
|
||||||
|
{
|
||||||
|
Logger.Debug("Added " + fileReplacement);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Logger.Debug("Not added " + fileReplacement);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Authors></Authors>
|
<Authors></Authors>
|
||||||
<Company></Company>
|
<Company></Company>
|
||||||
<Version>0.4.5</Version>
|
<Version>0.4.6</Version>
|
||||||
<Description></Description>
|
<Description></Description>
|
||||||
<Copyright></Copyright>
|
<Copyright></Copyright>
|
||||||
<PackageProjectUrl>https://github.com/Penumbra-Sync/client</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/Penumbra-Sync/client</PackageProjectUrl>
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ namespace MareSynchronos.Models
|
|||||||
{
|
{
|
||||||
return new FileReplacementDto()
|
return new FileReplacementDto()
|
||||||
{
|
{
|
||||||
GamePaths = g.SelectMany(g => g.GamePaths).Distinct().ToArray(),
|
GamePaths = g.SelectMany(f => f.GamePaths).Distinct().ToArray(),
|
||||||
Hash = g.First().Hash,
|
Hash = g.First().Hash,
|
||||||
};
|
};
|
||||||
}).ToList());
|
}).ToList());
|
||||||
|
|||||||
Reference in New Issue
Block a user