fix issue when penumbra mod folder contains a part of the path of cache folder
This commit is contained in:
@@ -61,7 +61,7 @@ public class FileDbManager
|
|||||||
|
|
||||||
if (matchingEntries == null)
|
if (matchingEntries == null)
|
||||||
{
|
{
|
||||||
return CreateFileCacheEntity(path);
|
return CreateFileEntry(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
var validatedCacheEntry = GetValidatedFileCache(matchingEntries);
|
var validatedCacheEntry = GetValidatedFileCache(matchingEntries);
|
||||||
@@ -69,20 +69,33 @@ public class FileDbManager
|
|||||||
return validatedCacheEntry;
|
return validatedCacheEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
public FileCache? CreateFileCacheEntity(string path)
|
public FileCache? CreateCacheEntry(string path)
|
||||||
{
|
{
|
||||||
Logger.Verbose("Creating entry for " + path);
|
Logger.Debug("Creating cache entry for " + path);
|
||||||
FileInfo fi = new FileInfo(path);
|
FileInfo fi = new FileInfo(path);
|
||||||
if (!fi.Exists) return null;
|
if (!fi.Exists) return null;
|
||||||
string prefixedPath = fi.FullName.ToLowerInvariant().Replace(_ipcManager.PenumbraModDirectory()!.ToLowerInvariant(), PenumbraPrefix + "\\")
|
string prefixedPath = fi.FullName.ToLowerInvariant().Replace(_configuration.CacheFolder.ToLowerInvariant(), CachePrefix + "\\").Replace("\\\\", "\\");
|
||||||
.Replace(_configuration.CacheFolder.ToLowerInvariant(), CachePrefix + "\\").Replace("\\\\", "\\");
|
return CreateFileCacheEntity(fi, prefixedPath);
|
||||||
var hash = Crypto.GetFileHash(path);
|
}
|
||||||
|
|
||||||
|
public FileCache? CreateFileEntry(string path)
|
||||||
|
{
|
||||||
|
Logger.Debug("Creating file entry for " + path);
|
||||||
|
FileInfo fi = new FileInfo(path);
|
||||||
|
if (!fi.Exists) return null;
|
||||||
|
string prefixedPath = fi.FullName.ToLowerInvariant().Replace(_ipcManager.PenumbraModDirectory()!.ToLowerInvariant(), PenumbraPrefix + "\\").Replace("\\\\", "\\");
|
||||||
|
return CreateFileCacheEntity(fi, prefixedPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
private FileCache? CreateFileCacheEntity(FileInfo fileInfo, string prefixedPath)
|
||||||
|
{
|
||||||
|
var hash = Crypto.GetFileHash(fileInfo.FullName);
|
||||||
lock (_lock)
|
lock (_lock)
|
||||||
{
|
{
|
||||||
var entity = new FileCacheEntity();
|
var entity = new FileCacheEntity();
|
||||||
entity.Hash = hash;
|
entity.Hash = hash;
|
||||||
entity.Filepath = prefixedPath;
|
entity.Filepath = prefixedPath;
|
||||||
entity.LastModifiedDate = fi.LastWriteTimeUtc.Ticks.ToString(CultureInfo.InvariantCulture);
|
entity.LastModifiedDate = fileInfo.LastWriteTimeUtc.Ticks.ToString(CultureInfo.InvariantCulture);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using var db = new FileCacheContext();
|
using var db = new FileCacheContext();
|
||||||
@@ -91,10 +104,12 @@ public class FileDbManager
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Logger.Warn("Could not add " + path);
|
Logger.Warn("Could not add " + fileInfo.FullName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return GetFileCacheByPath(prefixedPath)!;
|
var result = GetFileCacheByPath(prefixedPath);
|
||||||
|
Logger.Debug("Creating file cache for " + fileInfo.FullName + " success: " + (result != null));
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private FileCache? GetValidatedFileCache(FileCacheEntity e)
|
private FileCache? GetValidatedFileCache(FileCacheEntity e)
|
||||||
|
|||||||
@@ -211,7 +211,8 @@ public class PeriodicFileScanner : IDisposable
|
|||||||
{
|
{
|
||||||
if (ct.IsCancellationRequested) return;
|
if (ct.IsCancellationRequested) return;
|
||||||
|
|
||||||
_ = _fileDbManager.CreateFileCacheEntity(file.Key);
|
var entry = _fileDbManager.CreateFileEntry(file.Key);
|
||||||
|
if (entry == null) _ = _fileDbManager.CreateCacheEntry(file.Key);
|
||||||
Interlocked.Increment(ref currentFileProgress);
|
Interlocked.Increment(ref currentFileProgress);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Authors></Authors>
|
<Authors></Authors>
|
||||||
<Company></Company>
|
<Company></Company>
|
||||||
<Version>0.4.13</Version>
|
<Version>0.4.14</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>
|
||||||
|
|||||||
@@ -1,13 +1,8 @@
|
|||||||
using Dalamud.Logging;
|
using System.Collections.Generic;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MareSynchronos.FileCacheDB;
|
|
||||||
using System.IO;
|
|
||||||
using MareSynchronos.API;
|
using MareSynchronos.API;
|
||||||
using MareSynchronos.Utils;
|
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using MareSynchronos.Managers;
|
using MareSynchronos.Managers;
|
||||||
|
|
||||||
@@ -42,7 +37,6 @@ namespace MareSynchronos.Models
|
|||||||
_ = Task.Run(() =>
|
_ = Task.Run(() =>
|
||||||
{
|
{
|
||||||
var cache = fileDbManager.GetFileCacheByPath(ResolvedPath);
|
var cache = fileDbManager.GetFileCacheByPath(ResolvedPath);
|
||||||
cache ??= fileDbManager.CreateFileCacheEntity(ResolvedPath);
|
|
||||||
Hash = cache.OriginalHash;
|
Hash = cache.OriginalHash;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ namespace MareSynchronos.WebAPI
|
|||||||
fi.LastWriteTime = RandomDayFunc().Invoke();
|
fi.LastWriteTime = RandomDayFunc().Invoke();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_ = _fileDbManager.CreateFileCacheEntity(filePath);
|
_ = _fileDbManager.CreateCacheEntry(filePath);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user