From d47b4f52ec42eabe38f7017f383193638a453ebf Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Sun, 29 Jan 2023 17:38:01 +0100 Subject: [PATCH] fix sorting in syncshells, display owner properly, display mod popup for syncshells, order world list by name --- MareSynchronos/MareSynchronos.csproj | 2 +- MareSynchronos/UI/CompactUI.cs | 4 +- MareSynchronos/UI/GroupPanel.cs | 55 ++++++++++++++++++---------- MareSynchronos/UI/SettingsUi.cs | 2 +- 4 files changed, 40 insertions(+), 23 deletions(-) diff --git a/MareSynchronos/MareSynchronos.csproj b/MareSynchronos/MareSynchronos.csproj index b88a944..5af7d23 100644 --- a/MareSynchronos/MareSynchronos.csproj +++ b/MareSynchronos/MareSynchronos.csproj @@ -3,7 +3,7 @@ - 0.7.4 + 0.7.5 https://github.com/Penumbra-Sync/client diff --git a/MareSynchronos/UI/CompactUI.cs b/MareSynchronos/UI/CompactUI.cs index be99721..289eb12 100644 --- a/MareSynchronos/UI/CompactUI.cs +++ b/MareSynchronos/UI/CompactUI.cs @@ -62,6 +62,8 @@ public class CompactUi : Window, IDisposable #if DEBUG string dateTime = "DEV VERSION"; + var ver = Assembly.GetExecutingAssembly().GetName().Version; + this.WindowName = "Mare Synchronos " + ver.Major + "." + ver.Minor + "." + ver.Build + "###MareSynchronosMainUI"; try { dateTime = VariousExtensions.GetLinkerTime(Assembly.GetCallingAssembly()).ToString("yyyyMMddHHmmss"); @@ -72,7 +74,7 @@ public class CompactUi : Window, IDisposable Logger.Warn(ex.Message); Logger.Warn(ex.StackTrace); } - this.WindowName = "Mare Synchronos " + dateTime + "###MareSynchronosMainUI"; + this.WindowName = $"Mare Synchronos {dateTime} ({ver.Major}.{ver.Minor}.{ver.Build})###MareSynchronosMainUI"; Toggle(); #else var ver = Assembly.GetExecutingAssembly().GetName().Version; diff --git a/MareSynchronos/UI/GroupPanel.cs b/MareSynchronos/UI/GroupPanel.cs index ac91caf..6a38bb7 100644 --- a/MareSynchronos/UI/GroupPanel.cs +++ b/MareSynchronos/UI/GroupPanel.cs @@ -415,10 +415,25 @@ namespace MareSynchronos.UI ImGui.Indent(collapseButton.X); if (_expandedGroupState[groupDto.GID]) { - var visibleUsers = pairsInGroup.Where(u => u.IsVisible).OrderBy(u => u.GetNote() ?? u.UserData.AliasOrUID, StringComparer.OrdinalIgnoreCase).ToList(); - var onlineUsers = pairsInGroup.Where(u => u.IsOnline && !u.IsVisible).OrderBy(u => u.GetNote() ?? u.UserData.AliasOrUID, StringComparer.OrdinalIgnoreCase).ToList(); - var offlineUsers = pairsInGroup.Where(u => !u.IsOnline && !u.IsVisible).OrderBy(u => u.GetNote() ?? u.UserData.AliasOrUID, StringComparer.OrdinalIgnoreCase).ToList(); - + var visibleUsers = pairsInGroup.Where(u => u.IsVisible) + .OrderByDescending(u => string.Equals(u.UserData.UID, groupDto.OwnerUID, StringComparison.Ordinal)) + .ThenByDescending(u => u.GroupPair[groupDto].GroupPairStatusInfo.IsModerator()) + .ThenByDescending(u => u.GroupPair[groupDto].GroupPairStatusInfo.IsPinned()) + .ThenBy(u => u.GetNote() ?? u.UserData.AliasOrUID, StringComparer.OrdinalIgnoreCase) + .ToList(); + var onlineUsers = pairsInGroup.Where(u => u.IsOnline && !u.IsVisible) + .OrderByDescending(u => string.Equals(u.UserData.UID, groupDto.OwnerUID, StringComparison.Ordinal)) + .ThenByDescending(u => u.GroupPair[groupDto].GroupPairStatusInfo.IsModerator()) + .ThenByDescending(u => u.GroupPair[groupDto].GroupPairStatusInfo.IsPinned()) + .ThenBy(u => u.GetNote() ?? u.UserData.AliasOrUID, StringComparer.OrdinalIgnoreCase) + .ToList(); + var offlineUsers = pairsInGroup.Where(u => !u.IsOnline && !u.IsVisible) + .OrderByDescending(u => string.Equals(u.UserData.UID, groupDto.OwnerUID, StringComparison.Ordinal)) + .ThenByDescending(u => u.GroupPair[groupDto].GroupPairStatusInfo.IsModerator()) + .ThenByDescending(u => u.GroupPair[groupDto].GroupPairStatusInfo.IsPinned()) + .ThenBy(u => u.GetNote() ?? u.UserData.AliasOrUID, StringComparer.OrdinalIgnoreCase) + .ToList(); + if (visibleUsers.Any()) { ImGui.Text("Visible"); @@ -426,11 +441,11 @@ namespace MareSynchronos.UI foreach (var entry in visibleUsers) { UiShared.DrawWithID(groupDto.GID + entry.UserData.UID, () => DrawSyncshellPairedClient( - entry, - entry.GroupPair.Single(g => GroupDataComparer.Instance.Equals(g.Key.Group, groupDto.Group)).Value, - groupDto.OwnerUID, - string.Equals(groupDto.OwnerUID, ApiController.UID, StringComparison.Ordinal), - groupDto.GroupUserInfo.IsModerator())); + entry, + entry.GroupPair.Single(g => GroupDataComparer.Instance.Equals(g.Key.Group, groupDto.Group)).Value, + groupDto.OwnerUID, + string.Equals(groupDto.OwnerUID, ApiController.UID, StringComparison.Ordinal), + groupDto.GroupUserInfo.IsModerator())); } } @@ -442,10 +457,10 @@ namespace MareSynchronos.UI { UiShared.DrawWithID(groupDto.GID + entry.UserData.UID, () => DrawSyncshellPairedClient( entry, - entry.GroupPair.Single(g => GroupDataComparer.Instance.Equals(g.Key.Group, groupDto.Group)).Value, - groupDto.OwnerUID, - string.Equals(groupDto.OwnerUID, ApiController.UID, StringComparison.Ordinal), - groupDto.GroupUserInfo.IsModerator())); + entry.GroupPair.Single(g => GroupDataComparer.Instance.Equals(g.Key.Group, groupDto.Group)).Value, + groupDto.OwnerUID, + string.Equals(groupDto.OwnerUID, ApiController.UID, StringComparison.Ordinal), + groupDto.GroupUserInfo.IsModerator())); } } @@ -456,11 +471,11 @@ namespace MareSynchronos.UI foreach (var entry in offlineUsers) { UiShared.DrawWithID(groupDto.GID + entry.UserData.UID, () => DrawSyncshellPairedClient( - entry, - entry.GroupPair.Single(g => GroupDataComparer.Instance.Equals(g.Key.Group, groupDto.Group)).Value, - groupDto.OwnerUID, - string.Equals(groupDto.OwnerUID, ApiController.UID, StringComparison.Ordinal), - groupDto.GroupUserInfo.IsModerator())); + entry, + entry.GroupPair.Single(g => GroupDataComparer.Instance.Equals(g.Key.Group, groupDto.Group)).Value, + groupDto.OwnerUID, + string.Equals(groupDto.OwnerUID, ApiController.UID, StringComparison.Ordinal), + groupDto.GroupUserInfo.IsModerator())); } } @@ -729,7 +744,7 @@ namespace MareSynchronos.UI var textSize = ImGui.CalcTextSize(entryUID); var originalY = ImGui.GetCursorPosY(); var userIsMod = entry.GroupPairStatusInfo.IsModerator(); - var userIsOwner = string.Equals(entryUID, ownerUid, StringComparison.Ordinal); + var userIsOwner = string.Equals(pair.UserData.UID, ownerUid, StringComparison.Ordinal); var isPinned = entry.GroupPairStatusInfo.IsPinned(); var isPaused = pair.IsPaused; var presenceIcon = pair.IsVisible ? FontAwesomeIcon.Eye : (pair.IsOnline ? FontAwesomeIcon.Link : FontAwesomeIcon.Unlink); @@ -942,7 +957,7 @@ namespace MareSynchronos.UI if (ImGui.BeginPopup("Popup")) { - if ((!isModerator) && !(userIsMod || userIsOwner)) + if ((isModerator) && !(userIsMod || userIsOwner)) { var pinText = isPinned ? "Unpin user" : "Pin user"; if (UiShared.IconTextButton(FontAwesomeIcon.Thumbtack, pinText)) diff --git a/MareSynchronos/UI/SettingsUi.cs b/MareSynchronos/UI/SettingsUi.cs index d20e72e..c07d335 100644 --- a/MareSynchronos/UI/SettingsUi.cs +++ b/MareSynchronos/UI/SettingsUi.cs @@ -259,7 +259,7 @@ public class SettingsUi : Window, IDisposable _serverConfigurationManager.Save(); } var worldIdx = (ushort)item.WorldId; - var data = _uiShared.WorldData; + var data = _uiShared.WorldData.OrderBy(u => u.Value, StringComparer.Ordinal).ToDictionary(k => k.Key, k => k.Value); if (!data.TryGetValue(worldIdx, out string? worldPreview)) { worldPreview = data.First().Value;