[Draft] Update 0.8 (#46)
* move stuff out into file transfer manager * obnoxious unsupported version text, adjustments to filetransfermanager * add back file upload transfer progress * restructure code * cleanup some more stuff I guess * downloadids by playername * individual anim/sound bs * fix migration stuff, finalize impl of individual sound/anim pause * fixes with logging stuff * move download manager to transient * rework dl ui first iteration * some refactoring and cleanup * more code cleanup * refactoring * switch to hostbuilder * some more rework I guess * more refactoring * clean up mediator calls and disposal * fun code cleanup * push error message when log level is set to anything but information in non-debug builds * remove notificationservice * move message to after login * add download bars to gameworld * fixes download progress bar * set gpose ui min and max size * remove unnecessary usings * adjustments to reconnection logic * add options to set visible/offline groups visibility * add impl of uploading display, transfer list in settings ui * attempt to fix issues with server selection * add back download status to compact ui * make dl bar fixed size based * some fixes for upload/download handling * adjust text from Syncing back to Uploading --------- Co-authored-by: rootdarkarchon <root.darkarchon@outlook.com> Co-authored-by: Stanley Dimant <stanley.dimant@varian.com>
This commit is contained in:
@@ -10,4 +10,4 @@ public static class ConfigurationExtensions
|
||||
&& !string.IsNullOrEmpty(configuration.CacheFolder)
|
||||
&& Directory.Exists(configuration.CacheFolder);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,12 +2,14 @@
|
||||
using MareSynchronos.MareConfiguration.Configurations;
|
||||
using MareSynchronos.MareConfiguration.Configurations.Obsolete;
|
||||
using MareSynchronos.MareConfiguration.Models;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace MareSynchronos.MareConfiguration;
|
||||
#pragma warning disable CS0618 // ignore Obsolete tag, the point of this migrator is to migrate obsolete configs to new ones
|
||||
|
||||
public class ConfigurationMigrator
|
||||
public class ConfigurationMigrator : IHostedService
|
||||
{
|
||||
private readonly ILogger<ConfigurationMigrator> _logger;
|
||||
private readonly DalamudPluginInterface _pi;
|
||||
@@ -20,7 +22,6 @@ public class ConfigurationMigrator
|
||||
|
||||
public void Migrate()
|
||||
{
|
||||
#pragma warning disable CS0618 // ignore Obsolete tag, the point of this migrator is to migrate obsolete configs to new ones
|
||||
if (_pi.GetPluginConfig() is Configuration oldConfig)
|
||||
{
|
||||
_logger.LogInformation("Migrating Configuration from old config style to 1");
|
||||
@@ -41,6 +42,24 @@ public class ConfigurationMigrator
|
||||
}
|
||||
}
|
||||
|
||||
public Task StartAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
Migrate();
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public Task StopAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private static void SaveConfig(IMareConfiguration config, string path)
|
||||
{
|
||||
File.WriteAllText(path, JsonConvert.SerializeObject(config, Formatting.Indented));
|
||||
}
|
||||
|
||||
private string ConfigurationPath(string configName) => Path.Combine(_pi.ConfigDirectory.FullName, configName);
|
||||
|
||||
private void MigrateMareConfigV0ToV1(MareConfigV0 mareConfigV0)
|
||||
{
|
||||
_logger.LogInformation("Migrating Configuration from version 0 to 1");
|
||||
@@ -82,13 +101,6 @@ public class ConfigurationMigrator
|
||||
SaveConfig(tagConfig, ConfigurationPath(ServerTagConfigService.ConfigName));
|
||||
SaveConfig(notesConfig, ConfigurationPath(NotesConfigService.ConfigName));
|
||||
}
|
||||
#pragma warning restore CS0618 // ignore Obsolete tag, the point of this migrator is to migrate obsolete configs to new ones
|
||||
}
|
||||
|
||||
private string ConfigurationPath(string configName) => Path.Combine(_pi.ConfigDirectory.FullName, configName);
|
||||
|
||||
|
||||
private void SaveConfig(IMareConfiguration config, string path)
|
||||
{
|
||||
File.WriteAllText(path, JsonConvert.SerializeObject(config, Formatting.Indented));
|
||||
}
|
||||
}
|
||||
#pragma warning restore CS0618 // ignore Obsolete tag, the point of this migrator is to migrate obsolete configs to new ones
|
||||
@@ -1,26 +1,18 @@
|
||||
using Dalamud.Plugin;
|
||||
using MareSynchronos.MareConfiguration.Configurations;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
using MareSynchronos.MareConfiguration.Configurations;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace MareSynchronos.MareConfiguration;
|
||||
|
||||
public abstract class ConfigurationServiceBase<T> : IDisposable where T : IMareConfiguration
|
||||
{
|
||||
protected abstract string ConfigurationName { get; }
|
||||
public string ConfigurationDirectory => _pluginInterface.ConfigDirectory.FullName;
|
||||
public T Current => _currentConfigInternal.Value;
|
||||
|
||||
protected readonly DalamudPluginInterface _pluginInterface;
|
||||
private readonly CancellationTokenSource _periodicCheckCts = new();
|
||||
private DateTime _configLastWriteTime;
|
||||
private bool _configIsDirty = false;
|
||||
private DateTime _configLastWriteTime;
|
||||
private Lazy<T> _currentConfigInternal;
|
||||
|
||||
protected string ConfigurationPath => Path.Combine(ConfigurationDirectory, ConfigurationName);
|
||||
protected ConfigurationServiceBase(DalamudPluginInterface pluginInterface)
|
||||
protected ConfigurationServiceBase(string configurationDirectory)
|
||||
{
|
||||
_pluginInterface = pluginInterface;
|
||||
ConfigurationDirectory = configurationDirectory;
|
||||
|
||||
Task.Run(CheckForConfigUpdatesInternal, _periodicCheckCts.Token);
|
||||
Task.Run(CheckForDirtyConfigInternal, _periodicCheckCts.Token);
|
||||
@@ -28,39 +20,26 @@ public abstract class ConfigurationServiceBase<T> : IDisposable where T : IMareC
|
||||
_currentConfigInternal = LazyConfig();
|
||||
}
|
||||
|
||||
private Lazy<T> LazyConfig()
|
||||
{
|
||||
_configLastWriteTime = GetConfigLastWriteTime();
|
||||
return new Lazy<T>(() => LoadConfig());
|
||||
}
|
||||
private DateTime GetConfigLastWriteTime() => new FileInfo(ConfigurationPath).LastWriteTimeUtc;
|
||||
public string ConfigurationDirectory { get; init; }
|
||||
public T Current => _currentConfigInternal.Value;
|
||||
protected abstract string ConfigurationName { get; }
|
||||
protected string ConfigurationPath => Path.Combine(ConfigurationDirectory, ConfigurationName);
|
||||
|
||||
private async Task CheckForConfigUpdatesInternal()
|
||||
public void Dispose()
|
||||
{
|
||||
while (!_periodicCheckCts.IsCancellationRequested)
|
||||
{
|
||||
await Task.Delay(TimeSpan.FromSeconds(5), _periodicCheckCts.Token).ConfigureAwait(false);
|
||||
|
||||
var lastWriteTime = GetConfigLastWriteTime();
|
||||
if (lastWriteTime != _configLastWriteTime)
|
||||
{
|
||||
//_logger.LogDebug($"Config {ConfigurationName} changed, reloading config");
|
||||
_currentConfigInternal = LazyConfig();
|
||||
}
|
||||
}
|
||||
Dispose(disposing: true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
private async Task CheckForDirtyConfigInternal()
|
||||
public void Save()
|
||||
{
|
||||
while (!_periodicCheckCts.IsCancellationRequested)
|
||||
{
|
||||
if (_configIsDirty)
|
||||
{
|
||||
SaveDirtyConfig();
|
||||
}
|
||||
_configIsDirty = true;
|
||||
}
|
||||
|
||||
await Task.Delay(TimeSpan.FromSeconds(1), _periodicCheckCts.Token).ConfigureAwait(false);
|
||||
}
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
_periodicCheckCts.Cancel();
|
||||
_periodicCheckCts.Dispose();
|
||||
}
|
||||
|
||||
protected T LoadConfig()
|
||||
@@ -73,7 +52,7 @@ public abstract class ConfigurationServiceBase<T> : IDisposable where T : IMareC
|
||||
}
|
||||
else
|
||||
{
|
||||
config = JsonConvert.DeserializeObject<T>(File.ReadAllText(ConfigurationPath));
|
||||
config = JsonSerializer.Deserialize<T>(File.ReadAllText(ConfigurationPath));
|
||||
if (config == null)
|
||||
{
|
||||
config = (T)Activator.CreateInstance(typeof(T))!;
|
||||
@@ -98,26 +77,54 @@ public abstract class ConfigurationServiceBase<T> : IDisposable where T : IMareC
|
||||
}
|
||||
}
|
||||
|
||||
//_logger.LogDebug("Saving dirty config " + ConfigurationName);
|
||||
|
||||
try
|
||||
{
|
||||
File.Copy(ConfigurationPath, ConfigurationPath + ".bak." + DateTime.Now.ToString("yyyyMMddHHmmss"), overwrite: true);
|
||||
}
|
||||
catch { }
|
||||
catch
|
||||
{
|
||||
// ignore if file cannot be backupped once
|
||||
}
|
||||
|
||||
File.WriteAllText(ConfigurationPath, JsonConvert.SerializeObject(Current, Formatting.Indented));
|
||||
File.WriteAllText(ConfigurationPath, JsonSerializer.Serialize(Current, new JsonSerializerOptions()
|
||||
{
|
||||
WriteIndented = true
|
||||
}));
|
||||
_configLastWriteTime = new FileInfo(ConfigurationPath).LastWriteTimeUtc;
|
||||
}
|
||||
|
||||
public void Save()
|
||||
private async Task CheckForConfigUpdatesInternal()
|
||||
{
|
||||
_configIsDirty = true;
|
||||
while (!_periodicCheckCts.IsCancellationRequested)
|
||||
{
|
||||
await Task.Delay(TimeSpan.FromSeconds(5), _periodicCheckCts.Token).ConfigureAwait(false);
|
||||
|
||||
var lastWriteTime = GetConfigLastWriteTime();
|
||||
if (lastWriteTime != _configLastWriteTime)
|
||||
{
|
||||
_currentConfigInternal = LazyConfig();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
private async Task CheckForDirtyConfigInternal()
|
||||
{
|
||||
//_logger.LogTrace($"Disposing {GetType()}");
|
||||
_periodicCheckCts.Cancel();
|
||||
while (!_periodicCheckCts.IsCancellationRequested)
|
||||
{
|
||||
if (_configIsDirty)
|
||||
{
|
||||
SaveDirtyConfig();
|
||||
}
|
||||
|
||||
await Task.Delay(TimeSpan.FromSeconds(1), _periodicCheckCts.Token).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private DateTime GetConfigLastWriteTime() => new FileInfo(ConfigurationPath).LastWriteTimeUtc;
|
||||
|
||||
private Lazy<T> LazyConfig()
|
||||
{
|
||||
_configLastWriteTime = GetConfigLastWriteTime();
|
||||
return new Lazy<T>(LoadConfig);
|
||||
}
|
||||
}
|
||||
@@ -6,25 +6,31 @@ namespace MareSynchronos.MareConfiguration.Configurations;
|
||||
[Serializable]
|
||||
public class MareConfig : IMareConfiguration
|
||||
{
|
||||
public int Version { get; set; } = 1;
|
||||
public bool AcceptedAgreement { get; set; } = false;
|
||||
public string CacheFolder { get; set; } = string.Empty;
|
||||
public double MaxLocalCacheInGiB { get; set; } = 20;
|
||||
public bool ReverseUserSort { get; set; } = false;
|
||||
public int TimeSpanBetweenScansInSeconds { get; set; } = 30;
|
||||
public bool FileScanPaused { get; set; } = false;
|
||||
public bool InitialScanComplete { get; set; } = false;
|
||||
public bool DisableOptionalPluginWarnings { get; set; } = false;
|
||||
public NotificationLocation ErrorNotification { get; set; } = NotificationLocation.Both;
|
||||
public bool FileScanPaused { get; set; } = false;
|
||||
public NotificationLocation InfoNotification { get; set; } = NotificationLocation.Toast;
|
||||
public bool InitialScanComplete { get; set; } = false;
|
||||
public LogLevel LogLevel { get; set; } = LogLevel.Information;
|
||||
public bool LogPerformance { get; set; } = false;
|
||||
public double MaxLocalCacheInGiB { get; set; } = 20;
|
||||
public bool OpenGposeImportOnGposeStart { get; set; } = false;
|
||||
public bool ShowTransferWindow { get; set; } = true;
|
||||
public bool OpenPopupOnAdd { get; set; } = true;
|
||||
public int ParallelDownloads { get; set; } = 10;
|
||||
public bool ReverseUserSort { get; set; } = false;
|
||||
public bool ShowCharacterNameInsteadOfNotesForVisible { get; set; } = false;
|
||||
public bool ShowOfflineUsersSeparately { get; set; } = true;
|
||||
public bool ShowOnlineNotifications { get; set; } = false;
|
||||
public bool ShowOnlineNotificationsOnlyForIndividualPairs { get; set; } = true;
|
||||
public bool ShowOnlineNotificationsOnlyForNamedPairs { get; set; } = false;
|
||||
public bool ShowCharacterNameInsteadOfNotesForVisible { get; set; } = false;
|
||||
public NotificationLocation InfoNotification { get; set; } = NotificationLocation.Toast;
|
||||
public bool ShowTransferBars { get; set; } = true;
|
||||
public bool ShowTransferWindow { get; set; } = false;
|
||||
public bool ShowUploading { get; set; } = true;
|
||||
public bool ShowUploadingBigText { get; set; } = true;
|
||||
public bool ShowVisibleUsersSeparately { get; set; } = true;
|
||||
public int TimeSpanBetweenScansInSeconds { get; set; } = 30;
|
||||
public int Version { get; set; } = 1;
|
||||
public NotificationLocation WarningNotification { get; set; } = NotificationLocation.Both;
|
||||
public NotificationLocation ErrorNotification { get; set; } = NotificationLocation.Both;
|
||||
public LogLevel LogLevel { get; set; } = LogLevel.Information;
|
||||
public bool LogPerformance { get; set; } = false;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
using Dalamud.Configuration;
|
||||
using Dalamud.Plugin;
|
||||
using MareSynchronos.MareConfiguration.Models;
|
||||
using MareSynchronos.MareConfiguration.Models.Obsolete;
|
||||
using MareSynchronos.WebAPI;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
@@ -46,12 +46,12 @@ public class Configuration : IPluginConfiguration
|
||||
/// The dictionary first maps a server URL to a dictionary, and that
|
||||
/// dictionary maps the OtherUID of the <see cref="ClientPairDto"/> to a list of tags.
|
||||
/// </summary>
|
||||
public Dictionary<string, Dictionary<string, List<string>>> UidServerPairedUserTags = new(StringComparer.Ordinal);
|
||||
public Dictionary<string, Dictionary<string, List<string>>> UidServerPairedUserTags { get; set; } = new(StringComparer.Ordinal);
|
||||
/// <summary>
|
||||
/// A dictionary that maps a server URL to the tags the user has added for that server.
|
||||
/// </summary>
|
||||
public Dictionary<string, HashSet<string>> ServerAvailablePairTags = new(StringComparer.Ordinal);
|
||||
public HashSet<string> OpenPairTags = new(StringComparer.Ordinal);
|
||||
public Dictionary<string, HashSet<string>> ServerAvailablePairTags { get; set; } = new(StringComparer.Ordinal);
|
||||
public HashSet<string> OpenPairTags { get; set; } = new(StringComparer.Ordinal);
|
||||
|
||||
public MareConfigV0 ToMareConfig(ILogger logger)
|
||||
{
|
||||
@@ -75,7 +75,7 @@ public class Configuration : IPluginConfiguration
|
||||
// create all server storage based on current clientsecret
|
||||
foreach (var secret in ClientSecret)
|
||||
{
|
||||
logger.LogDebug("Migrating " + secret.Key);
|
||||
logger.LogDebug("Migrating {key}", secret.Key);
|
||||
var apiuri = secret.Key;
|
||||
var secretkey = secret.Value;
|
||||
ServerStorageV0 toAdd = new();
|
||||
@@ -121,9 +121,4 @@ public class Configuration : IPluginConfiguration
|
||||
|
||||
return newConfig;
|
||||
}
|
||||
|
||||
public void Migrate()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using MareSynchronos.MareConfiguration.Models;
|
||||
using MareSynchronos.MareConfiguration.Models.Obsolete;
|
||||
|
||||
namespace MareSynchronos.MareConfiguration.Configurations.Obsolete;
|
||||
|
||||
|
||||
@@ -5,5 +5,5 @@ namespace MareSynchronos.MareConfiguration.Configurations;
|
||||
public class UidNotesConfig : IMareConfiguration
|
||||
{
|
||||
public int Version { get; set; } = 0;
|
||||
public Dictionary<string, ServerNotesStorage> ServerNotes = new(StringComparer.Ordinal);
|
||||
public Dictionary<string, ServerNotesStorage> ServerNotes { get; set; } = new(StringComparer.Ordinal);
|
||||
}
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
using Dalamud.Plugin;
|
||||
using MareSynchronos.MareConfiguration.Configurations;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MareSynchronos.MareConfiguration.Configurations;
|
||||
|
||||
namespace MareSynchronos.MareConfiguration;
|
||||
|
||||
public class MareConfigService : ConfigurationServiceBase<MareConfig>
|
||||
{
|
||||
public const string ConfigName = "config.json";
|
||||
protected override string ConfigurationName => ConfigName;
|
||||
|
||||
public MareConfigService(DalamudPluginInterface pluginInterface) : base(pluginInterface) { }
|
||||
}
|
||||
public MareConfigService(string configDir) : base(configDir)
|
||||
{
|
||||
}
|
||||
|
||||
protected override string ConfigurationName => ConfigName;
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace MareSynchronos.MareConfiguration.Models;
|
||||
namespace MareSynchronos.MareConfiguration.Models.Obsolete;
|
||||
|
||||
[Serializable]
|
||||
[Obsolete("Deprecated, use ServerStorage")]
|
||||
@@ -9,7 +9,7 @@ public class ServerStorageV0
|
||||
public List<Authentication> Authentications { get; set; } = new();
|
||||
public Dictionary<string, string> UidServerComments { get; set; } = new(StringComparer.Ordinal);
|
||||
public Dictionary<string, string> GidServerComments { get; set; } = new(StringComparer.Ordinal);
|
||||
public Dictionary<string, List<string>> UidServerPairedUserTags = new(StringComparer.Ordinal);
|
||||
public Dictionary<string, List<string>> UidServerPairedUserTags { get; set; } = new(StringComparer.Ordinal);
|
||||
public HashSet<string> ServerAvailablePairTags { get; set; } = new(StringComparer.Ordinal);
|
||||
public HashSet<string> OpenPairTags { get; set; } = new(StringComparer.Ordinal);
|
||||
public Dictionary<int, SecretKey> SecretKeys { get; set; } = new();
|
||||
@@ -19,11 +19,11 @@ public class ServerStorageV0
|
||||
{
|
||||
return new ServerStorage()
|
||||
{
|
||||
ServerUri = this.ServerUri,
|
||||
ServerName = this.ServerName,
|
||||
Authentications = this.Authentications.ToList(),
|
||||
FullPause = this.FullPause,
|
||||
SecretKeys = this.SecretKeys.ToDictionary(p => p.Key, p => p.Value)
|
||||
ServerUri = ServerUri,
|
||||
ServerName = ServerName,
|
||||
Authentications = Authentications.ToList(),
|
||||
FullPause = FullPause,
|
||||
SecretKeys = SecretKeys.ToDictionary(p => p.Key, p => p.Value)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
[Serializable]
|
||||
public class ServerTagStorage
|
||||
{
|
||||
public Dictionary<string, List<string>> UidServerPairedUserTags = new(StringComparer.Ordinal);
|
||||
public Dictionary<string, List<string>> UidServerPairedUserTags { get; set; } = new(StringComparer.Ordinal);
|
||||
public HashSet<string> ServerAvailablePairTags { get; set; } = new(StringComparer.Ordinal);
|
||||
public HashSet<string> OpenPairTags { get; set; } = new(StringComparer.Ordinal);
|
||||
}
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
using Dalamud.Plugin;
|
||||
using MareSynchronos.MareConfiguration.Configurations;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MareSynchronos.MareConfiguration.Configurations;
|
||||
|
||||
namespace MareSynchronos.MareConfiguration;
|
||||
|
||||
public class NotesConfigService : ConfigurationServiceBase<UidNotesConfig>
|
||||
{
|
||||
public const string ConfigName = "notes.json";
|
||||
|
||||
public NotesConfigService(string configDir) : base(configDir)
|
||||
{
|
||||
}
|
||||
|
||||
protected override string ConfigurationName => ConfigName;
|
||||
public NotesConfigService(DalamudPluginInterface pluginInterface) : base(pluginInterface) { }
|
||||
}
|
||||
@@ -1,12 +1,14 @@
|
||||
using Dalamud.Plugin;
|
||||
using MareSynchronos.MareConfiguration.Configurations;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MareSynchronos.MareConfiguration.Configurations;
|
||||
|
||||
namespace MareSynchronos.MareConfiguration;
|
||||
|
||||
public class ServerConfigService : ConfigurationServiceBase<ServerConfig>
|
||||
{
|
||||
public const string ConfigName = "server.json";
|
||||
|
||||
public ServerConfigService(string configDir) : base(configDir)
|
||||
{
|
||||
}
|
||||
|
||||
protected override string ConfigurationName => ConfigName;
|
||||
public ServerConfigService(DalamudPluginInterface pluginInterface) : base(pluginInterface) { }
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,14 @@
|
||||
using Dalamud.Plugin;
|
||||
using MareSynchronos.MareConfiguration.Configurations;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MareSynchronos.MareConfiguration.Configurations;
|
||||
|
||||
namespace MareSynchronos.MareConfiguration;
|
||||
|
||||
public class ServerTagConfigService : ConfigurationServiceBase<ServerTagConfig>
|
||||
{
|
||||
public const string ConfigName = "servertags.json";
|
||||
|
||||
public ServerTagConfigService(string configDir) : base(configDir)
|
||||
{
|
||||
}
|
||||
|
||||
protected override string ConfigurationName => ConfigName;
|
||||
public ServerTagConfigService(DalamudPluginInterface pluginInterface) : base(pluginInterface) { }
|
||||
}
|
||||
@@ -1,12 +1,14 @@
|
||||
using Dalamud.Plugin;
|
||||
using MareSynchronos.MareConfiguration.Configurations;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MareSynchronos.MareConfiguration.Configurations;
|
||||
|
||||
namespace MareSynchronos.MareConfiguration;
|
||||
|
||||
public class TransientConfigService : ConfigurationServiceBase<TransientConfig>
|
||||
{
|
||||
public const string ConfigName = "transient.json";
|
||||
|
||||
public TransientConfigService(string configDir) : base(configDir)
|
||||
{
|
||||
}
|
||||
|
||||
protected override string ConfigurationName => ConfigName;
|
||||
public TransientConfigService(DalamudPluginInterface pluginInterface) : base(pluginInterface) { }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user