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 bool DisableOptionalPluginWarnings { get; set; } = false;
public bool EnableRightClickMenus { get; set; } = true;
public bool EnableDtrEntry { get; set; } = false;
public NotificationLocation ErrorNotification { get; set; } = NotificationLocation.Both;
public string ExportFolder { get; set; } = string.Empty;
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 int GetVisibleUserCount() => _allClientPairs.Count(p => p.Value.IsVisible);
public void MarkPairOffline(UserData user)
{
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.Command;
using Dalamud.Game.Gui;
using Dalamud.Game.Gui.Dtr;
using Dalamud.Interface.ImGuiFileDialog;
using Dalamud.Interface.Windowing;
using Dalamud.Plugin;
@@ -36,7 +37,7 @@ public sealed class Plugin : IDalamudPlugin
public Plugin(DalamudPluginInterface pluginInterface, CommandManager commandManager, DataManager gameData,
Framework framework, ObjectTable objectTable, ClientState clientState, Condition condition, ChatGui chatGui,
GameGui gameGui)
GameGui gameGui, DtrBar dtrBar)
{
new HostBuilder()
.UseContentRoot(pluginInterface.ConfigDirectory.FullName)
@@ -75,6 +76,8 @@ public sealed class Plugin : IDalamudPlugin
collection.AddSingleton((s) => new DalamudUtilService(s.GetRequiredService<ILogger<DalamudUtilService>>(),
clientState, objectTable, framework, gameGui, condition, gameData,
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>>(),
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<DalamudUtilService>());
collection.AddHostedService(p => p.GetRequiredService<PerformanceCollectorService>());
collection.AddHostedService(p => p.GetRequiredService<DtrEntry>());
collection.AddHostedService(p => p.GetRequiredService<MarePlugin>());
})
.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.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.SameLine();
@@ -515,6 +515,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
var profileDelay = _configService.Current.ProfileDelay;
var profileOnRight = _configService.Current.ProfilePopoutRight;
var enableRightClickMenu = _configService.Current.EnableRightClickMenus;
var enableDtrEntry = _configService.Current.EnableDtrEntry;
var preferNotesInsteadOfName = _configService.Current.PreferNotesOverNamesForVisible;
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.");
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))
{
_configService.Current.ShowVisibleUsersSeparately = showVisibleSeparate;
@@ -995,4 +1003,4 @@ public class SettingsUi : WindowMediatorSubscriberBase
_wasOpen = IsOpen;
IsOpen = false;
}
}
}