fix connectivity issue on server loss, fix filecache not updating on changed files, fix crash on exception in character data factory

This commit is contained in:
Stanley Dimant
2022-07-12 01:29:22 +02:00
parent 4959633242
commit 0ba07b9b67
5 changed files with 18 additions and 7 deletions

View File

@@ -29,15 +29,25 @@ public class CharacterDataFactory
_ipcManager = ipcManager; _ipcManager = ipcManager;
} }
public CharacterData BuildCharacterData() public CharacterData? BuildCharacterData()
{ {
if (!_ipcManager.Initialized) if (!_ipcManager.Initialized)
{ {
throw new ArgumentException("Penumbra is not connected"); throw new ArgumentException("Penumbra is not connected");
} }
try
{
return CreateCharacterData(); return CreateCharacterData();
} }
catch (Exception e)
{
Logger.Warn("Failed to create character data");
Logger.Warn(e.Message);
Logger.Warn(e.StackTrace ?? string.Empty);
return null;
}
}
private (string, string) GetIndentationForInheritanceLevel(int inheritanceLevel) private (string, string) GetIndentationForInheritanceLevel(int inheritanceLevel)
{ {

View File

@@ -211,7 +211,7 @@ namespace MareSynchronos.Managers
var fileCache = Create(item, _rescanTaskCancellationTokenSource.Token); var fileCache = Create(item, _rescanTaskCancellationTokenSource.Token);
if (fileCache != null) if (fileCache != null)
{ {
db.RemoveRange(db.FileCaches.Where(f => f.Hash == fileCache.Hash)); db.RemoveRange(db.FileCaches.Where(f => f.Filepath.ToLower() == fileCache.Filepath.ToLower()));
await db.AddAsync(fileCache, _rescanTaskCancellationTokenSource.Token); await db.AddAsync(fileCache, _rescanTaskCancellationTokenSource.Token);
} }
} }

View File

@@ -96,6 +96,7 @@ namespace MareSynchronos.Managers
private async Task<CharacterCacheDto?> CreateFullCharacterCache(CancellationToken token) private async Task<CharacterCacheDto?> CreateFullCharacterCache(CancellationToken token)
{ {
var cache = _characterDataFactory.BuildCharacterData(); var cache = _characterDataFactory.BuildCharacterData();
if (cache == null) return null;
CharacterCacheDto? cacheDto = null; CharacterCacheDto? cacheDto = null;
await Task.Run(async () => await Task.Run(async () =>
@@ -165,9 +166,9 @@ namespace MareSynchronos.Managers
_dalamudUtil.WaitWhileSelfIsDrawing(token); _dalamudUtil.WaitWhileSelfIsDrawing(token);
var characterCache = (await CreateFullCharacterCache(token))!; var characterCache = (await CreateFullCharacterCache(token));
if (token.IsCancellationRequested) return; if (characterCache == null || token.IsCancellationRequested) return;
if (characterCache.Hash == (LastSentCharacterData?.Hash ?? "-")) if (characterCache.Hash == (LastSentCharacterData?.Hash ?? "-"))
{ {

View File

@@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<Authors></Authors> <Authors></Authors>
<Company></Company> <Company></Company>
<Version>0.1.9.0</Version> <Version>0.1.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

@@ -292,7 +292,7 @@ namespace MareSynchronos.WebAPI
{ {
Logger.Debug("Connection restored"); Logger.Debug("Connection restored");
await Task.Delay(TimeSpan.FromSeconds(new Random().Next(5, 10))); await Task.Delay(TimeSpan.FromSeconds(new Random().Next(5, 10)));
_connectionDto = _connectionHub!.InvokeAsync<ConnectionDto>(ConnectionHubAPI.InvokeHeartbeat, _dalamudUtil.PlayerNameHashed).Result; _connectionDto = await _connectionHub!.InvokeAsync<ConnectionDto>(ConnectionHubAPI.InvokeHeartbeat, _dalamudUtil.PlayerNameHashed);
Connected?.Invoke(); Connected?.Invoke();
} }