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.Linq;
using System.Threading;
using Dalamud.Logging;
using FFXIVClientStructs.FFXIV.Client.Game.Character;
using FFXIVClientStructs.FFXIV.Client.Graphics.Scene;
using FFXIVClientStructs.FFXIV.Client.System.Resource;
@@ -60,6 +61,8 @@ public class CharacterDataFactory
}
var mdlPath = new Utf8String(mdl->ResourceHandle->FileName()).ToString();
PluginLog.Verbose("Adding File Replacement for Model " + mdlPath);
FileReplacement mdlFileReplacement = CreateFileReplacement(mdlPath);
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 = "")
{
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);
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)
{
PluginLog.Verbose("Adding File Replacement for Texture " + texPath);
var texFileReplacement = CreateFileReplacement(texPath, doNotReverseResolve);
DebugPrint(texFileReplacement, objectKind, "Texture", inheritanceLevel);

View File

@@ -8,6 +8,7 @@ using System.Threading.Tasks;
using Dalamud.Logging;
using MareSynchronos.FileCacheDB;
using MareSynchronos.Utils;
using Microsoft.EntityFrameworkCore;
namespace MareSynchronos.Managers
{
@@ -143,7 +144,17 @@ namespace MareSynchronos.Managers
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;
@@ -288,10 +299,10 @@ namespace MareSynchronos.Managers
{
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);
if (entry != null)
db.FileCaches.Remove(entry);
if (await entries.AnyAsync(ct))
db.FileCaches.RemoveRange(entries);
}
await db.SaveChangesAsync(ct);
foreach (var entry in fileCachesToAdd)

View File

@@ -3,7 +3,7 @@
<PropertyGroup>
<Authors></Authors>
<Company></Company>
<Version>0.0.9.0</Version>
<Version>0.0.10.0</Version>
<Description></Description>
<Copyright></Copyright>
<PackageProjectUrl>https://github.com/Penumbra-Sync/client</PackageProjectUrl>

View File

@@ -40,7 +40,7 @@ namespace MareSynchronos.Models
FileCache? fileCache;
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)
@@ -88,7 +88,7 @@ namespace MareSynchronos.Models
string hash = Crypto.GetFileHash(fi.FullName);
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;
try