fix issue when multiple transient files point to different gamepaths

This commit is contained in:
Stanley Dimant
2022-09-16 00:25:07 +02:00
parent c9dc0e8468
commit 574cdb0b24
5 changed files with 30 additions and 16 deletions

View File

@@ -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

View File

@@ -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");

View File

@@ -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);
if (!fileReplacement.HasFileReplacement)
fileReplacement = createFileReplacement(gamePath.ToLowerInvariant(), false);
if (fileReplacement.HasFileReplacement)
{ {
Logger.Debug("Persisting " + gamePath.ToLowerInvariant());
var fileReplacement = createFileReplacement(item.ToLowerInvariant(), true); if (SemiTransientResources[objectKind].Add(fileReplacement))
if (!fileReplacement.HasFileReplacement)
fileReplacement = createFileReplacement(item.ToLowerInvariant(), false);
if (fileReplacement.HasFileReplacement)
{ {
Logger.Debug("Persisting " + item.ToLowerInvariant()); Logger.Debug("Added " + fileReplacement);
SemiTransientResources[objectKind].Add(fileReplacement); }
else
{
Logger.Debug("Not added " + fileReplacement);
} }
} }
} }

View File

@@ -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>

View File

@@ -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());