Apply client settings without reloading the plugin
This commit is contained in:
parent
ec814f7ca6
commit
533b87118e
@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net7.0-windows</TargetFramework>
|
<TargetFramework>net7.0-windows</TargetFramework>
|
||||||
<Version>0.5</Version>
|
<Version>0.6</Version>
|
||||||
<LangVersion>11.0</LangVersion>
|
<LangVersion>11.0</LangVersion>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
|
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
|
||||||
|
@ -15,21 +15,23 @@ namespace Influx.Influx;
|
|||||||
|
|
||||||
internal sealed class InfluxStatisticsClient : IDisposable
|
internal sealed class InfluxStatisticsClient : IDisposable
|
||||||
{
|
{
|
||||||
private readonly InfluxDBClient _influxClient;
|
private InfluxDBClient? _influxClient;
|
||||||
private readonly IChatGui _chatGui;
|
private readonly IChatGui _chatGui;
|
||||||
private readonly Configuration _configuration;
|
private readonly Configuration _configuration;
|
||||||
private readonly IClientState _clientState;
|
private readonly IClientState _clientState;
|
||||||
|
private readonly IPluginLog _pluginLog;
|
||||||
private readonly IReadOnlyDictionary<byte, byte> _classJobToArrayIndex;
|
private readonly IReadOnlyDictionary<byte, byte> _classJobToArrayIndex;
|
||||||
private readonly IReadOnlyDictionary<byte, string> _classJobNames;
|
private readonly IReadOnlyDictionary<byte, string> _classJobNames;
|
||||||
private readonly Dictionary<sbyte, string> _expToJobs;
|
private readonly Dictionary<sbyte, string> _expToJobs;
|
||||||
|
|
||||||
public InfluxStatisticsClient(IChatGui chatGui, Configuration configuration, IDataManager dataManager,
|
public InfluxStatisticsClient(IChatGui chatGui, Configuration configuration, IDataManager dataManager,
|
||||||
IClientState clientState)
|
IClientState clientState, IPluginLog pluginLog)
|
||||||
{
|
{
|
||||||
_influxClient = new InfluxDBClient(configuration.Server.Server, configuration.Server.Token);
|
|
||||||
_chatGui = chatGui;
|
_chatGui = chatGui;
|
||||||
_configuration = configuration;
|
_configuration = configuration;
|
||||||
_clientState = clientState;
|
_clientState = clientState;
|
||||||
|
_pluginLog = pluginLog;
|
||||||
|
UpdateClient();
|
||||||
|
|
||||||
_classJobToArrayIndex = dataManager.GetExcelSheet<ClassJob>()!.Where(x => x.RowId > 0)
|
_classJobToArrayIndex = dataManager.GetExcelSheet<ClassJob>()!.Where(x => x.RowId > 0)
|
||||||
.ToDictionary(x => (byte)x.RowId, x => (byte)x.ExpArrayIndex);
|
.ToDictionary(x => (byte)x.RowId, x => (byte)x.ExpArrayIndex);
|
||||||
@ -41,7 +43,20 @@ internal sealed class InfluxStatisticsClient : IDisposable
|
|||||||
.ToDictionary(x => x.ExpArrayIndex, x => x.Abbreviation.ToString());
|
.ToDictionary(x => x.ExpArrayIndex, x => x.Abbreviation.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Enabled => _configuration.Server.Enabled;
|
public bool Enabled => _configuration.Server.Enabled &&
|
||||||
|
!string.IsNullOrEmpty(_configuration.Server.Server) &&
|
||||||
|
!string.IsNullOrEmpty(_configuration.Server.Token) &&
|
||||||
|
!string.IsNullOrEmpty(_configuration.Server.Organization) &&
|
||||||
|
!string.IsNullOrEmpty(_configuration.Server.Bucket);
|
||||||
|
|
||||||
|
public void UpdateClient()
|
||||||
|
{
|
||||||
|
_influxClient?.Dispose();
|
||||||
|
_influxClient = null;
|
||||||
|
|
||||||
|
if (Enabled)
|
||||||
|
_influxClient = new InfluxDBClient(_configuration.Server.Server, _configuration.Server.Token);
|
||||||
|
}
|
||||||
|
|
||||||
public void OnStatisticsUpdate(StatisticsUpdate update)
|
public void OnStatisticsUpdate(StatisticsUpdate update)
|
||||||
{
|
{
|
||||||
@ -53,9 +68,13 @@ internal sealed class InfluxStatisticsClient : IDisposable
|
|||||||
|
|
||||||
var validFcIds = currencyStats.Keys
|
var validFcIds = currencyStats.Keys
|
||||||
.Where(x => x.CharacterType == CharacterType.Character)
|
.Where(x => x.CharacterType == CharacterType.Character)
|
||||||
.Where(x => _configuration.IncludedCharacters.SingleOrDefault(config => config.LocalContentId == x.CharacterId)?.IncludeFreeCompany == true)
|
.Where(x => _configuration.IncludedCharacters
|
||||||
|
.SingleOrDefault(config => config.LocalContentId == x.CharacterId)?.IncludeFreeCompany == true)
|
||||||
.Select(x => x.FreeCompanyId)
|
.Select(x => x.FreeCompanyId)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
var client = _influxClient;
|
||||||
|
if (client == null)
|
||||||
|
return;
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -124,7 +143,8 @@ internal sealed class InfluxStatisticsClient : IDisposable
|
|||||||
.Tag("id", character.CharacterId.ToString())
|
.Tag("id", character.CharacterId.ToString())
|
||||||
.Tag("player_name", character.Name)
|
.Tag("player_name", character.Name)
|
||||||
.Tag("type", character.CharacterType.ToString())
|
.Tag("type", character.CharacterType.ToString())
|
||||||
.Tag("fc_id", character.FreeCompanyId > 0 ? character.FreeCompanyId.ToString() : null)
|
.Tag("fc_id",
|
||||||
|
character.FreeCompanyId > 0 ? character.FreeCompanyId.ToString() : null)
|
||||||
.Tag("job", abbreviation)
|
.Tag("job", abbreviation)
|
||||||
.Field("level", level)
|
.Field("level", level)
|
||||||
.Timestamp(date, WritePrecision.S));
|
.Timestamp(date, WritePrecision.S));
|
||||||
@ -225,7 +245,7 @@ internal sealed class InfluxStatisticsClient : IDisposable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var writeApi = _influxClient.GetWriteApiAsync();
|
var writeApi = client.GetWriteApiAsync();
|
||||||
await writeApi.WritePointsAsync(
|
await writeApi.WritePointsAsync(
|
||||||
values,
|
values,
|
||||||
_configuration.Server.Bucket, _configuration.Server.Organization);
|
_configuration.Server.Bucket, _configuration.Server.Organization);
|
||||||
@ -234,6 +254,7 @@ internal sealed class InfluxStatisticsClient : IDisposable
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
_pluginLog.Error(e, "Unable to update statistics");
|
||||||
_chatGui.PrintError(e.Message);
|
_chatGui.PrintError(e.Message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -241,6 +262,6 @@ internal sealed class InfluxStatisticsClient : IDisposable
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
_influxClient.Dispose();
|
_influxClient?.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -58,12 +58,13 @@ public class InfluxPlugin : IDalamudPlugin
|
|||||||
_submarineTrackerIpc = new SubmarineTrackerIpc(dalamudReflector);
|
_submarineTrackerIpc = new SubmarineTrackerIpc(dalamudReflector);
|
||||||
_localStatsCalculator = new LocalStatsCalculator(pluginInterface, clientState, addonLifecycle, pluginLog, dataManager);
|
_localStatsCalculator = new LocalStatsCalculator(pluginInterface, clientState, addonLifecycle, pluginLog, dataManager);
|
||||||
_fcStatsCalculator = new FcStatsCalculator(this, pluginInterface, clientState, addonLifecycle, gameGui, framework, pluginLog);
|
_fcStatsCalculator = new FcStatsCalculator(this, pluginInterface, clientState, addonLifecycle, gameGui, framework, pluginLog);
|
||||||
_influxStatisticsClient = new InfluxStatisticsClient(chatGui, _configuration, dataManager, clientState);
|
_influxStatisticsClient = new InfluxStatisticsClient(chatGui, _configuration, dataManager, clientState, _pluginLog);
|
||||||
|
|
||||||
_windowSystem = new WindowSystem(typeof(InfluxPlugin).FullName);
|
_windowSystem = new WindowSystem(typeof(InfluxPlugin).FullName);
|
||||||
_statisticsWindow = new StatisticsWindow();
|
_statisticsWindow = new StatisticsWindow();
|
||||||
_windowSystem.AddWindow(_statisticsWindow);
|
_windowSystem.AddWindow(_statisticsWindow);
|
||||||
_configurationWindow = new ConfigurationWindow(_pluginInterface, clientState, _configuration);
|
_configurationWindow = new ConfigurationWindow(_pluginInterface, clientState, _configuration);
|
||||||
|
_configurationWindow.ConfigUpdated += (_, _) => _influxStatisticsClient.UpdateClient();
|
||||||
_windowSystem.AddWindow(_configurationWindow);
|
_windowSystem.AddWindow(_configurationWindow);
|
||||||
|
|
||||||
_commandManager.AddHandler("/influx", new CommandInfo(ProcessCommand));
|
_commandManager.AddHandler("/influx", new CommandInfo(ProcessCommand));
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System.Linq;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
using Dalamud.Interface.Colors;
|
using Dalamud.Interface.Colors;
|
||||||
using Dalamud.Interface.Utility.Raii;
|
using Dalamud.Interface.Utility.Raii;
|
||||||
using Dalamud.Interface.Windowing;
|
using Dalamud.Interface.Windowing;
|
||||||
@ -23,6 +24,8 @@ internal sealed class ConfigurationWindow : Window
|
|||||||
_configuration = configuration;
|
_configuration = configuration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public event EventHandler? ConfigUpdated;
|
||||||
|
|
||||||
public override void Draw()
|
public override void Draw()
|
||||||
{
|
{
|
||||||
using var tabBar = ImRaii.TabBar("InfluxConfigTabs");
|
using var tabBar = ImRaii.TabBar("InfluxConfigTabs");
|
||||||
@ -43,35 +46,35 @@ internal sealed class ConfigurationWindow : Window
|
|||||||
if (ImGui.Checkbox("Enable Server Connection", ref enabled))
|
if (ImGui.Checkbox("Enable Server Connection", ref enabled))
|
||||||
{
|
{
|
||||||
_configuration.Server.Enabled = enabled;
|
_configuration.Server.Enabled = enabled;
|
||||||
Save();
|
Save(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
string server = _configuration.Server.Server;
|
string server = _configuration.Server.Server;
|
||||||
if (ImGui.InputText("InfluxDB URL", ref server, 128))
|
if (ImGui.InputText("InfluxDB URL", ref server, 128))
|
||||||
{
|
{
|
||||||
_configuration.Server.Server = server;
|
_configuration.Server.Server = server;
|
||||||
Save();
|
Save(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
string token = _configuration.Server.Token;
|
string token = _configuration.Server.Token;
|
||||||
if (ImGui.InputText("Token", ref token, 128, ImGuiInputTextFlags.Password))
|
if (ImGui.InputText("Token", ref token, 128, ImGuiInputTextFlags.Password))
|
||||||
{
|
{
|
||||||
_configuration.Server.Token = token;
|
_configuration.Server.Token = token;
|
||||||
Save();
|
Save(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
string organization = _configuration.Server.Organization;
|
string organization = _configuration.Server.Organization;
|
||||||
if (ImGui.InputText("Organization", ref organization, 128))
|
if (ImGui.InputText("Organization", ref organization, 128))
|
||||||
{
|
{
|
||||||
_configuration.Server.Organization = organization;
|
_configuration.Server.Organization = organization;
|
||||||
Save();
|
Save(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
string bucket = _configuration.Server.Bucket;
|
string bucket = _configuration.Server.Bucket;
|
||||||
if (ImGui.InputText("Bucket", ref bucket, 128))
|
if (ImGui.InputText("Bucket", ref bucket, 128))
|
||||||
{
|
{
|
||||||
_configuration.Server.Bucket = bucket;
|
_configuration.Server.Bucket = bucket;
|
||||||
Save();
|
Save(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,8 +163,11 @@ internal sealed class ConfigurationWindow : Window
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Save()
|
private void Save(bool sendEvent = false)
|
||||||
{
|
{
|
||||||
_pluginInterface.SavePluginConfig(_configuration);
|
_pluginInterface.SavePluginConfig(_configuration);
|
||||||
|
|
||||||
|
if (sendEvent)
|
||||||
|
ConfigUpdated?.Invoke(this, EventArgs.Empty);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user