diff --git a/MareSynchronos/Interop/DalamudLoggingProviderExtensions.cs b/MareSynchronos/Interop/DalamudLoggingProviderExtensions.cs index 392e5d0..192f374 100644 --- a/MareSynchronos/Interop/DalamudLoggingProviderExtensions.cs +++ b/MareSynchronos/Interop/DalamudLoggingProviderExtensions.cs @@ -14,7 +14,6 @@ public static class DalamudLoggingProviderExtensions builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton (b => new DalamudLoggingProvider(b.GetRequiredService(), pluginLog))); - return builder; } } \ No newline at end of file diff --git a/MareSynchronos/MareSynchronos.csproj b/MareSynchronos/MareSynchronos.csproj index f37f45c..41b93ce 100644 --- a/MareSynchronos/MareSynchronos.csproj +++ b/MareSynchronos/MareSynchronos.csproj @@ -23,6 +23,7 @@ + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/MareSynchronos/PlayerData/Factories/PlayerDataFactory.cs b/MareSynchronos/PlayerData/Factories/PlayerDataFactory.cs index 6d8b22b..259779c 100644 --- a/MareSynchronos/PlayerData/Factories/PlayerDataFactory.cs +++ b/MareSynchronos/PlayerData/Factories/PlayerDataFactory.cs @@ -14,7 +14,6 @@ namespace MareSynchronos.PlayerData.Factories; public class PlayerDataFactory { - private static readonly string[] _allowedExtensionsForGamePaths = [".mdl", ".tex", ".mtrl", ".tmb", ".pap", ".avfx", ".atex", ".sklb", ".eid", ".phyb", ".pbd", ".scd", ".skp", ".shpk"]; private readonly DalamudUtilService _dalamudUtil; private readonly FileCacheManager _fileCacheManager; private readonly IpcManager _ipcManager; @@ -155,7 +154,7 @@ public class PlayerDataFactory previousData.FileReplacements[objectKind] = new HashSet(resolvedPaths.Select(c => new FileReplacement([.. c.Value], c.Key)), FileReplacementComparer.Instance) .Where(p => p.HasFileReplacement).ToHashSet(); - previousData.FileReplacements[objectKind].RemoveWhere(c => c.GamePaths.Any(g => !_allowedExtensionsForGamePaths.Any(e => g.EndsWith(e, StringComparison.OrdinalIgnoreCase)))); + previousData.FileReplacements[objectKind].RemoveWhere(c => c.GamePaths.Any(g => !CacheMonitor.AllowedFileExtensions.Any(e => g.EndsWith(e, StringComparison.OrdinalIgnoreCase)))); _logger.LogDebug("== Static Replacements =="); foreach (var replacement in previousData.FileReplacements[objectKind].Where(i => i.HasFileReplacement).OrderBy(i => i.GamePaths.First(), StringComparer.OrdinalIgnoreCase)) diff --git a/MareSynchronos/Plugin.cs b/MareSynchronos/Plugin.cs index 9944566..8c5b058 100644 --- a/MareSynchronos/Plugin.cs +++ b/MareSynchronos/Plugin.cs @@ -16,7 +16,6 @@ using MareSynchronos.Services.Events; using MareSynchronos.Services.Mediator; using MareSynchronos.Services.ServerConfiguration; using MareSynchronos.UI; -using MareSynchronos.UI.Components; using MareSynchronos.UI.Components.Popup; using MareSynchronos.UI.Handlers; using MareSynchronos.WebAPI; @@ -26,6 +25,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using MareSynchronos.Services.CharaData; +using NReco.Logging.File; using MareSynchronos; @@ -53,12 +53,47 @@ public sealed class Plugin : IDalamudPlugin INamePlateGui namePlateGui, IGameConfig gameConfig, IPartyList partyList) { Plugin.Self = this; + + if (!Directory.Exists(pluginInterface.ConfigDirectory.FullName)) + Directory.CreateDirectory(pluginInterface.ConfigDirectory.FullName); + var traceDir = Path.Join(pluginInterface.ConfigDirectory.FullName, "tracelog"); + if (!Directory.Exists(traceDir)) + Directory.CreateDirectory(traceDir); + + int deleteAttempts = 0; + foreach (var file in Directory.EnumerateFiles(traceDir) + .Select(f => new FileInfo(f)) + .OrderByDescending(f => f.LastWriteTimeUtc).Skip(9)) + { + bool deleted = false; + while (!deleted && deleteAttempts < 5) + { + try + { + file.Delete(); + deleted = true; + } + catch + { + deleteAttempts++; + Thread.Sleep(500); + } + } + } + _host = new HostBuilder() .UseContentRoot(pluginInterface.ConfigDirectory.FullName) .ConfigureLogging(lb => { lb.ClearProviders(); lb.AddDalamudLogging(pluginLog); + lb.AddFile(Path.Combine(traceDir, $"mare-trace-{DateTime.Now:yyyy-MM-dd-HH-mm-ss}.log"), (opt) => + { + opt.Append = true; + opt.RollingFilesConvention = FileLoggerOptions.FileRollingConvention.Ascending; + opt.MinLevel = LogLevel.Trace; + opt.FileSizeLimitBytes = 50 * 1024 * 1024; + }); lb.SetMinimumLevel(LogLevel.Trace); }) .ConfigureServices(collection =>