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:
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user