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
	 Stanley Dimant
					Stanley Dimant