From 2473087da497785bf0ca3d5b04e57a342ba2537a Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Tue, 27 Jun 2023 18:56:05 +0200 Subject: [PATCH] fix group panel, restarts with dtr entry --- MareSynchronos/UI/Components/GroupPanel.cs | 8 ++- MareSynchronos/UI/DtrEntry.cs | 76 ++++++++++++---------- 2 files changed, 47 insertions(+), 37 deletions(-) diff --git a/MareSynchronos/UI/Components/GroupPanel.cs b/MareSynchronos/UI/Components/GroupPanel.cs index e56db5f..0c16fb2 100644 --- a/MareSynchronos/UI/Components/GroupPanel.cs +++ b/MareSynchronos/UI/Components/GroupPanel.cs @@ -74,11 +74,13 @@ internal sealed class GroupPanel bool userCanJoinMoreGroups = _pairManager.GroupPairs.Count < ApiController.ServerInfo.MaxGroupsJoinedByUser; bool userCanCreateMoreGroups = _pairManager.GroupPairs.Count(u => string.Equals(u.Key.Owner.UID, ApiController.UID, StringComparison.Ordinal)) < ApiController.ServerInfo.MaxGroupsCreatedByUser; + bool alreadyInGroup = _pairManager.GroupPairs.Select(p => p.Key).Any(p => string.Equals(p.Group.Alias, _syncShellToJoin, StringComparison.Ordinal) + || string.Equals(p.Group.GID, _syncShellToJoin, StringComparison.Ordinal)); + if (alreadyInGroup) ImGui.BeginDisabled(); if (ImGuiComponents.IconButton(FontAwesomeIcon.Plus)) { - if (_pairManager.GroupPairs.All(w => !string.Equals(w.Key.Group.GID, _syncShellToJoin, StringComparison.Ordinal) && !string.Equals(w.Key.Group.Alias, _syncShellToJoin, StringComparison.Ordinal)) - && !string.IsNullOrEmpty(_syncShellToJoin)) + if (!string.IsNullOrEmpty(_syncShellToJoin)) { if (userCanJoinMoreGroups) { @@ -102,6 +104,8 @@ internal sealed class GroupPanel ? (userCanCreateMoreGroups ? "Create Syncshell" : $"You cannot create more than {ApiController.ServerInfo.MaxGroupsCreatedByUser} Syncshells") : (userCanJoinMoreGroups ? "Join Syncshell" + _syncShellToJoin : $"You cannot join more than {ApiController.ServerInfo.MaxGroupsJoinedByUser} Syncshells")); + if (alreadyInGroup) ImGui.EndDisabled(); + if (ImGui.BeginPopupModal("Enter Syncshell Password", ref _showModalEnterPassword, UiSharedService.PopupWindowFlags)) { UiSharedService.TextWrapped("Before joining any Syncshells please be aware that you will be automatically paired with everyone in the Syncshell."); diff --git a/MareSynchronos/UI/DtrEntry.cs b/MareSynchronos/UI/DtrEntry.cs index 11223d0..768738e 100644 --- a/MareSynchronos/UI/DtrEntry.cs +++ b/MareSynchronos/UI/DtrEntry.cs @@ -10,12 +10,11 @@ namespace MareSynchronos.UI; public sealed class DtrEntry : IDisposable, IHostedService { - private readonly DtrBarEntry _entry; - private readonly ConfigurationServiceBase _configService; - private readonly PairManager _pairManager; private readonly ApiController _apiController; - private readonly CancellationTokenSource _cancellationTokenSource = new(); + private readonly ConfigurationServiceBase _configService; + private readonly DtrBarEntry _entry; + private readonly PairManager _pairManager; private Task? _runTask; private string? _text; @@ -34,6 +33,44 @@ public sealed class DtrEntry : IDisposable, IHostedService _entry.Dispose(); } + public Task StartAsync(CancellationToken cancellationToken) + { + _runTask = Task.Run(RunAsync, _cancellationTokenSource.Token); + return Task.CompletedTask; + } + + public async Task StopAsync(CancellationToken cancellationToken) + { + _cancellationTokenSource.Cancel(); + try + { + await _runTask!.ConfigureAwait(false); + } + catch (OperationCanceledException) { } + finally + { + _cancellationTokenSource.Dispose(); + Clear(); + } + } + + 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); + } + } + private void Update() { if (!_configService.Current.EnableDtrEntry) @@ -65,35 +102,4 @@ public sealed class DtrEntry : IDisposable, IHostedService _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(); - } } \ No newline at end of file