fix file cache size calculation exception, add more logging to character data factory, add more resilience into file system scan

This commit is contained in:
Stanley Dimant
2022-07-06 09:14:09 +02:00
parent 54abfd74dc
commit 145dc50f8a
4 changed files with 26 additions and 8 deletions

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using Dalamud.Logging;
using FFXIVClientStructs.FFXIV.Client.Game.Character; using FFXIVClientStructs.FFXIV.Client.Game.Character;
using FFXIVClientStructs.FFXIV.Client.Graphics.Scene; using FFXIVClientStructs.FFXIV.Client.Graphics.Scene;
using FFXIVClientStructs.FFXIV.Client.System.Resource; using FFXIVClientStructs.FFXIV.Client.System.Resource;
@@ -60,6 +61,8 @@ public class CharacterDataFactory
} }
var mdlPath = new Utf8String(mdl->ResourceHandle->FileName()).ToString(); var mdlPath = new Utf8String(mdl->ResourceHandle->FileName()).ToString();
PluginLog.Verbose("Adding File Replacement for Model " + mdlPath);
FileReplacement mdlFileReplacement = CreateFileReplacement(mdlPath); FileReplacement mdlFileReplacement = CreateFileReplacement(mdlPath);
DebugPrint(mdlFileReplacement, objectKind, "Model", inheritanceLevel); DebugPrint(mdlFileReplacement, objectKind, "Model", inheritanceLevel);
@@ -76,7 +79,9 @@ public class CharacterDataFactory
private unsafe void AddReplacementsFromMaterial(Material* mtrl, CharacterData cache, int inheritanceLevel = 0, string objectKind = "") private unsafe void AddReplacementsFromMaterial(Material* mtrl, CharacterData cache, int inheritanceLevel = 0, string objectKind = "")
{ {
var mtrlPath = new Utf8String(mtrl->ResourceHandle->FileName()).ToString().Split("|")[2]; var fileName = new Utf8String(mtrl->ResourceHandle->FileName()).ToString();
PluginLog.Verbose("Adding File Replacement for Material " + fileName);
var mtrlPath = fileName.Split("|")[2];
var mtrlFileReplacement = CreateFileReplacement(mtrlPath); var mtrlFileReplacement = CreateFileReplacement(mtrlPath);
DebugPrint(mtrlFileReplacement, objectKind, "Material", inheritanceLevel); DebugPrint(mtrlFileReplacement, objectKind, "Material", inheritanceLevel);
@@ -96,6 +101,8 @@ public class CharacterDataFactory
private void AddReplacementsFromTexture(string texPath, CharacterData cache, int inheritanceLevel = 0, string objectKind = "", bool doNotReverseResolve = true) private void AddReplacementsFromTexture(string texPath, CharacterData cache, int inheritanceLevel = 0, string objectKind = "", bool doNotReverseResolve = true)
{ {
PluginLog.Verbose("Adding File Replacement for Texture " + texPath);
var texFileReplacement = CreateFileReplacement(texPath, doNotReverseResolve); var texFileReplacement = CreateFileReplacement(texPath, doNotReverseResolve);
DebugPrint(texFileReplacement, objectKind, "Texture", inheritanceLevel); DebugPrint(texFileReplacement, objectKind, "Texture", inheritanceLevel);

View File

@@ -8,6 +8,7 @@ using System.Threading.Tasks;
using Dalamud.Logging; using Dalamud.Logging;
using MareSynchronos.FileCacheDB; using MareSynchronos.FileCacheDB;
using MareSynchronos.Utils; using MareSynchronos.Utils;
using Microsoft.EntityFrameworkCore;
namespace MareSynchronos.Managers namespace MareSynchronos.Managers
{ {
@@ -143,7 +144,17 @@ namespace MareSynchronos.Managers
private void RecalculateFileCacheSize() private void RecalculateFileCacheSize()
{ {
FileCacheSize = Directory.EnumerateFiles(_pluginConfiguration.CacheFolder).Sum(f => new FileInfo(f).Length); FileCacheSize = Directory.EnumerateFiles(_pluginConfiguration.CacheFolder).Sum(f =>
{
try
{
return new FileInfo(f).Length;
}
catch
{
return 0;
}
});
if (FileCacheSize < (long)_pluginConfiguration.MaxLocalCacheInGiB * 1024 * 1024 * 1024) return; if (FileCacheSize < (long)_pluginConfiguration.MaxLocalCacheInGiB * 1024 * 1024 * 1024) return;
@@ -288,10 +299,10 @@ namespace MareSynchronos.Managers
{ {
foreach (var deletion in fileCachesToDelete) foreach (var deletion in fileCachesToDelete)
{ {
var entry = db.FileCaches.SingleOrDefault(f => var entries = db.FileCaches.Where(f =>
f.Hash == deletion.Hash && f.Filepath == deletion.Filepath); f.Hash == deletion.Hash && f.Filepath == deletion.Filepath);
if (entry != null) if (await entries.AnyAsync(ct))
db.FileCaches.Remove(entry); db.FileCaches.RemoveRange(entries);
} }
await db.SaveChangesAsync(ct); await db.SaveChangesAsync(ct);
foreach (var entry in fileCachesToAdd) foreach (var entry in fileCachesToAdd)

View File

@@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<Authors></Authors> <Authors></Authors>
<Company></Company> <Company></Company>
<Version>0.0.9.0</Version> <Version>0.0.10.0</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

@@ -40,7 +40,7 @@ namespace MareSynchronos.Models
FileCache? fileCache; FileCache? fileCache;
using (FileCacheContext db = new()) using (FileCacheContext db = new())
{ {
fileCache = db.FileCaches.SingleOrDefault(f => f.Filepath == path.ToLower()); fileCache = db.FileCaches.FirstOrDefault(f => f.Filepath == path.ToLower());
} }
if (fileCache != null) if (fileCache != null)
@@ -88,7 +88,7 @@ namespace MareSynchronos.Models
string hash = Crypto.GetFileHash(fi.FullName); string hash = Crypto.GetFileHash(fi.FullName);
using FileCacheContext db = new(); using FileCacheContext db = new();
var fileAddedDuringCompute = db.FileCaches.SingleOrDefault(f => f.Filepath == fi.FullName.ToLower()); var fileAddedDuringCompute = db.FileCaches.FirstOrDefault(f => f.Filepath == fi.FullName.ToLower());
if (fileAddedDuringCompute != null) return fileAddedDuringCompute.Hash; if (fileAddedDuringCompute != null) return fileAddedDuringCompute.Hash;
try try