This commit is contained in:
rootdarkarchon
2023-06-18 23:02:06 +02:00
5 changed files with 117 additions and 3 deletions

View File

@@ -10,6 +10,7 @@ public class MareConfig : IMareConfiguration
public string CacheFolder { get; set; } = string.Empty; public string CacheFolder { get; set; } = string.Empty;
public bool DisableOptionalPluginWarnings { get; set; } = false; public bool DisableOptionalPluginWarnings { get; set; } = false;
public bool EnableRightClickMenus { get; set; } = true; public bool EnableRightClickMenus { get; set; } = true;
public bool EnableDtrEntry { get; set; } = false;
public NotificationLocation ErrorNotification { get; set; } = NotificationLocation.Both; public NotificationLocation ErrorNotification { get; set; } = NotificationLocation.Both;
public string ExportFolder { get; set; } = string.Empty; public string ExportFolder { get; set; } = string.Empty;
public bool FileScanPaused { get; set; } = false; public bool FileScanPaused { get; set; } = false;

View File

@@ -90,6 +90,8 @@ public sealed class PairManager : DisposableMediatorSubscriberBase
public List<UserData> GetVisibleUsers() => _allClientPairs.Where(p => p.Value.IsVisible).Select(p => p.Key).ToList(); public List<UserData> GetVisibleUsers() => _allClientPairs.Where(p => p.Value.IsVisible).Select(p => p.Key).ToList();
public int GetVisibleUserCount() => _allClientPairs.Count(p => p.Value.IsVisible);
public void MarkPairOffline(UserData user) public void MarkPairOffline(UserData user)
{ {
if (_allClientPairs.TryGetValue(user, out var pair)) if (_allClientPairs.TryGetValue(user, out var pair))

View File

@@ -6,6 +6,7 @@ using Dalamud.Game.ClientState.Conditions;
using Dalamud.Game.ClientState.Objects; using Dalamud.Game.ClientState.Objects;
using Dalamud.Game.Command; using Dalamud.Game.Command;
using Dalamud.Game.Gui; using Dalamud.Game.Gui;
using Dalamud.Game.Gui.Dtr;
using Dalamud.Interface.ImGuiFileDialog; using Dalamud.Interface.ImGuiFileDialog;
using Dalamud.Interface.Windowing; using Dalamud.Interface.Windowing;
using Dalamud.Plugin; using Dalamud.Plugin;
@@ -36,7 +37,7 @@ public sealed class Plugin : IDalamudPlugin
public Plugin(DalamudPluginInterface pluginInterface, CommandManager commandManager, DataManager gameData, public Plugin(DalamudPluginInterface pluginInterface, CommandManager commandManager, DataManager gameData,
Framework framework, ObjectTable objectTable, ClientState clientState, Condition condition, ChatGui chatGui, Framework framework, ObjectTable objectTable, ClientState clientState, Condition condition, ChatGui chatGui,
GameGui gameGui) GameGui gameGui, DtrBar dtrBar)
{ {
new HostBuilder() new HostBuilder()
.UseContentRoot(pluginInterface.ConfigDirectory.FullName) .UseContentRoot(pluginInterface.ConfigDirectory.FullName)
@@ -75,6 +76,8 @@ public sealed class Plugin : IDalamudPlugin
collection.AddSingleton((s) => new DalamudUtilService(s.GetRequiredService<ILogger<DalamudUtilService>>(), collection.AddSingleton((s) => new DalamudUtilService(s.GetRequiredService<ILogger<DalamudUtilService>>(),
clientState, objectTable, framework, gameGui, condition, gameData, clientState, objectTable, framework, gameGui, condition, gameData,
s.GetRequiredService<MareMediator>(), s.GetRequiredService<PerformanceCollectorService>())); s.GetRequiredService<MareMediator>(), s.GetRequiredService<PerformanceCollectorService>()));
collection.AddSingleton((s) => new DtrEntry(dtrBar, s.GetRequiredService<MareConfigService>(),
s.GetRequiredService<PairManager>(), s.GetRequiredService<ApiController>()));
collection.AddSingleton((s) => new IpcManager(s.GetRequiredService<ILogger<IpcManager>>(), collection.AddSingleton((s) => new IpcManager(s.GetRequiredService<ILogger<IpcManager>>(),
pluginInterface, s.GetRequiredService<DalamudUtilService>(), s.GetRequiredService<MareMediator>())); pluginInterface, s.GetRequiredService<DalamudUtilService>(), s.GetRequiredService<MareMediator>()));
@@ -124,6 +127,7 @@ public sealed class Plugin : IDalamudPlugin
collection.AddHostedService(p => p.GetRequiredService<ConfigurationMigrator>()); collection.AddHostedService(p => p.GetRequiredService<ConfigurationMigrator>());
collection.AddHostedService(p => p.GetRequiredService<DalamudUtilService>()); collection.AddHostedService(p => p.GetRequiredService<DalamudUtilService>());
collection.AddHostedService(p => p.GetRequiredService<PerformanceCollectorService>()); collection.AddHostedService(p => p.GetRequiredService<PerformanceCollectorService>());
collection.AddHostedService(p => p.GetRequiredService<DtrEntry>());
collection.AddHostedService(p => p.GetRequiredService<MarePlugin>()); collection.AddHostedService(p => p.GetRequiredService<MarePlugin>());
}) })
.Build() .Build()

View File

@@ -0,0 +1,99 @@
using Dalamud.Game.Gui.Dtr;
using MareSynchronos.MareConfiguration;
using MareSynchronos.MareConfiguration.Configurations;
using MareSynchronos.PlayerData.Pairs;
using MareSynchronos.Utils;
using MareSynchronos.WebAPI;
using Microsoft.Extensions.Hosting;
namespace MareSynchronos.UI;
public sealed class DtrEntry : IDisposable, IHostedService
{
private readonly DtrBarEntry _entry;
private readonly ConfigurationServiceBase<MareConfig> _configService;
private readonly PairManager _pairManager;
private readonly ApiController _apiController;
private readonly CancellationTokenSource _cancellationTokenSource = new();
private Task? _runTask;
private string? _text;
public DtrEntry(DtrBar dtrBar, ConfigurationServiceBase<MareConfig> configService, PairManager pairManager, ApiController apiController)
{
_entry = dtrBar.Get("Mare Synchronos");
_configService = configService;
_pairManager = pairManager;
_apiController = apiController;
Clear();
}
public void Dispose()
{
_entry.Dispose();
}
private void Update()
{
if (!_configService.Current.EnableDtrEntry)
{
if (_entry.Shown)
{
Clear();
}
return;
}
if (!_entry.Shown)
{
_entry.Shown = true;
}
string text;
if (_apiController.IsConnected)
{
text = $"\uE044 {_pairManager.GetVisibleUserCount()}";
}
else
{
text = "\uE044 \uE04C";
}
if (!string.Equals(text, _text, StringComparison.Ordinal))
{
_text = text;
_entry.Text = text;
}
}
private void Clear()
{
_text = null;
_entry.Shown = false;
_entry.Text = null;
}
private async Task RunAsync()
{
while (!_cancellationTokenSource.IsCancellationRequested)
{
Update();
await Task.Delay(1000, _cancellationTokenSource.Token).ConfigureAwait(false);
}
}
public Task StartAsync(CancellationToken cancellationToken)
{
_runTask = Task.Run(RunAsync, _cancellationTokenSource.Token);
return Task.CompletedTask;
}
public async Task StopAsync(CancellationToken cancellationToken)
{
_cancellationTokenSource.Cancel();
await _runTask!.ConfigureAwait(false);
_cancellationTokenSource.Dispose();
Clear();
}
}

View File

@@ -365,7 +365,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
UiSharedService.FontText("Export MCDF", _uiShared.UidFont); UiSharedService.FontText("Export MCDF", _uiShared.UidFont);
UiSharedService.TextWrapped("This feature allows you to pack your character into a MCDF file and manually send it to other people. MCDF files can officially only be imported during GPose through Mare. " + UiSharedService.TextWrapped("This feature allows you to pack your character into a MCDF file and manually send it to other people. MCDF files can officially only be imported during GPose through Mare. " +
"Be aware that the possibility exists that people write unoffocial custom exporters to extract the containing data."); "Be aware that the possibility exists that people write unofficial custom exporters to extract the containing data.");
ImGui.Checkbox("##readExport", ref _readExport); ImGui.Checkbox("##readExport", ref _readExport);
ImGui.SameLine(); ImGui.SameLine();
@@ -515,6 +515,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
var profileDelay = _configService.Current.ProfileDelay; var profileDelay = _configService.Current.ProfileDelay;
var profileOnRight = _configService.Current.ProfilePopoutRight; var profileOnRight = _configService.Current.ProfilePopoutRight;
var enableRightClickMenu = _configService.Current.EnableRightClickMenus; var enableRightClickMenu = _configService.Current.EnableRightClickMenus;
var enableDtrEntry = _configService.Current.EnableDtrEntry;
var preferNotesInsteadOfName = _configService.Current.PreferNotesOverNamesForVisible; var preferNotesInsteadOfName = _configService.Current.PreferNotesOverNamesForVisible;
if (ImGui.Checkbox("Enable Game Right Click Menu Entries", ref enableRightClickMenu)) if (ImGui.Checkbox("Enable Game Right Click Menu Entries", ref enableRightClickMenu))
@@ -524,6 +525,13 @@ public class SettingsUi : WindowMediatorSubscriberBase
} }
UiSharedService.DrawHelpText("This will add Mare related right click menu entries in the game UI on paired players."); UiSharedService.DrawHelpText("This will add Mare related right click menu entries in the game UI on paired players.");
if (ImGui.Checkbox("Display status and visible pair count in Server Info Bar", ref enableDtrEntry))
{
_configService.Current.EnableDtrEntry = enableDtrEntry;
_configService.Save();
}
UiSharedService.DrawHelpText("This will add Mare connection status and visible pair count in the Server Info Bar.\nYou can further configure this through your Dalamud Settings.");
if (ImGui.Checkbox("Show separate Visible group", ref showVisibleSeparate)) if (ImGui.Checkbox("Show separate Visible group", ref showVisibleSeparate))
{ {
_configService.Current.ShowVisibleUsersSeparately = showVisibleSeparate; _configService.Current.ShowVisibleUsersSeparately = showVisibleSeparate;
@@ -995,4 +1003,4 @@ public class SettingsUi : WindowMediatorSubscriberBase
_wasOpen = IsOpen; _wasOpen = IsOpen;
IsOpen = false; IsOpen = false;
} }
} }