fix sorting and cleanup
This commit is contained in:
@@ -29,8 +29,6 @@ namespace MareSynchronos.UI;
|
|||||||
|
|
||||||
public class CompactUi : WindowMediatorSubscriberBase
|
public class CompactUi : WindowMediatorSubscriberBase
|
||||||
{
|
{
|
||||||
public float TransferPartHeight;
|
|
||||||
public float WindowContentWidth;
|
|
||||||
private readonly ApiController _apiController;
|
private readonly ApiController _apiController;
|
||||||
private readonly MareConfigService _configService;
|
private readonly MareConfigService _configService;
|
||||||
private readonly ConcurrentDictionary<GameObjectHandler, Dictionary<string, FileDownloadStatus>> _currentDownloads = new();
|
private readonly ConcurrentDictionary<GameObjectHandler, Dictionary<string, FileDownloadStatus>> _currentDownloads = new();
|
||||||
@@ -39,8 +37,8 @@ public class CompactUi : WindowMediatorSubscriberBase
|
|||||||
private readonly PairManager _pairManager;
|
private readonly PairManager _pairManager;
|
||||||
private readonly SelectTagForPairUi _selectGroupForPairUi;
|
private readonly SelectTagForPairUi _selectGroupForPairUi;
|
||||||
private readonly SelectPairForTagUi _selectPairsForGroupUi;
|
private readonly SelectPairForTagUi _selectPairsForGroupUi;
|
||||||
private readonly TopTabMenu _tabMenu;
|
|
||||||
private readonly ServerConfigurationManager _serverManager;
|
private readonly ServerConfigurationManager _serverManager;
|
||||||
|
private readonly TopTabMenu _tabMenu;
|
||||||
private readonly TagHandler _tagHandler;
|
private readonly TagHandler _tagHandler;
|
||||||
private readonly UiSharedService _uiShared;
|
private readonly UiSharedService _uiShared;
|
||||||
private List<IDrawFolder> _drawFolders;
|
private List<IDrawFolder> _drawFolders;
|
||||||
@@ -50,8 +48,9 @@ public class CompactUi : WindowMediatorSubscriberBase
|
|||||||
private Vector2 _lastSize = Vector2.One;
|
private Vector2 _lastSize = Vector2.One;
|
||||||
private int _secretKeyIdx = -1;
|
private int _secretKeyIdx = -1;
|
||||||
private bool _showModalForUserAddition;
|
private bool _showModalForUserAddition;
|
||||||
|
private float _transferPartHeight;
|
||||||
private bool _wasOpen;
|
private bool _wasOpen;
|
||||||
|
private float _windowContentWidth;
|
||||||
|
|
||||||
public CompactUi(ILogger<CompactUi> logger, UiSharedService uiShared, MareConfigService configService, ApiController apiController, PairManager pairManager,
|
public CompactUi(ILogger<CompactUi> logger, UiSharedService uiShared, MareConfigService configService, ApiController apiController, PairManager pairManager,
|
||||||
ServerConfigurationManager serverManager, MareMediator mediator, FileUploadManager fileTransferManager,
|
ServerConfigurationManager serverManager, MareMediator mediator, FileUploadManager fileTransferManager,
|
||||||
@@ -100,7 +99,7 @@ public class CompactUi : WindowMediatorSubscriberBase
|
|||||||
|
|
||||||
public override void Draw()
|
public override void Draw()
|
||||||
{
|
{
|
||||||
WindowContentWidth = UiSharedService.GetWindowContentRegionWidth();
|
_windowContentWidth = UiSharedService.GetWindowContentRegionWidth();
|
||||||
if (!_apiController.IsCurrentVersion)
|
if (!_apiController.IsCurrentVersion)
|
||||||
{
|
{
|
||||||
var ver = _apiController.CurrentClientVersion;
|
var ver = _apiController.CurrentClientVersion;
|
||||||
@@ -125,11 +124,10 @@ public class CompactUi : WindowMediatorSubscriberBase
|
|||||||
{
|
{
|
||||||
using (ImRaii.PushId("global-topmenu")) _tabMenu.Draw();
|
using (ImRaii.PushId("global-topmenu")) _tabMenu.Draw();
|
||||||
using (ImRaii.PushId("pairlist")) DrawPairs();
|
using (ImRaii.PushId("pairlist")) DrawPairs();
|
||||||
TransferPartHeight = ImGui.GetCursorPosY();
|
|
||||||
|
|
||||||
ImGui.Separator();
|
ImGui.Separator();
|
||||||
|
float pairlistEnd = ImGui.GetCursorPosY();
|
||||||
using (ImRaii.PushId("transfers")) DrawTransfers();
|
using (ImRaii.PushId("transfers")) DrawTransfers();
|
||||||
TransferPartHeight = ImGui.GetCursorPosY() - TransferPartHeight - ImGui.GetTextLineHeight();
|
_transferPartHeight = ImGui.GetCursorPosY() - pairlistEnd - ImGui.GetTextLineHeight();
|
||||||
using (ImRaii.PushId("group-user-popup")) _selectPairsForGroupUi.Draw(_pairManager.DirectPairs);
|
using (ImRaii.PushId("group-user-popup")) _selectPairsForGroupUi.Draw(_pairManager.DirectPairs);
|
||||||
using (ImRaii.PushId("grouping-popup")) _selectGroupForPairUi.Draw();
|
using (ImRaii.PushId("grouping-popup")) _selectGroupForPairUi.Draw();
|
||||||
}
|
}
|
||||||
@@ -175,23 +173,6 @@ public class CompactUi : WindowMediatorSubscriberBase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DrawPairs()
|
|
||||||
{
|
|
||||||
var ySize = TransferPartHeight == 0
|
|
||||||
? 1
|
|
||||||
: (ImGui.GetWindowContentRegionMax().Y - ImGui.GetWindowContentRegionMin().Y
|
|
||||||
+ ImGui.GetTextLineHeight() - ImGui.GetStyle().WindowPadding.Y - ImGui.GetStyle().WindowBorderSize) - TransferPartHeight - ImGui.GetCursorPosY();
|
|
||||||
|
|
||||||
ImGui.BeginChild("list", new Vector2(WindowContentWidth, ySize), border: false);
|
|
||||||
|
|
||||||
foreach (var item in _drawFolders)
|
|
||||||
{
|
|
||||||
item.Draw();
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui.EndChild();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DrawAddCharacter()
|
private void DrawAddCharacter()
|
||||||
{
|
{
|
||||||
ImGui.Dummy(new(10));
|
ImGui.Dummy(new(10));
|
||||||
@@ -221,6 +202,22 @@ public class CompactUi : WindowMediatorSubscriberBase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void DrawPairs()
|
||||||
|
{
|
||||||
|
var ySize = _transferPartHeight == 0
|
||||||
|
? 1
|
||||||
|
: (ImGui.GetWindowContentRegionMax().Y - ImGui.GetWindowContentRegionMin().Y
|
||||||
|
+ ImGui.GetTextLineHeight() - ImGui.GetStyle().WindowPadding.Y - ImGui.GetStyle().WindowBorderSize) - _transferPartHeight - ImGui.GetCursorPosY();
|
||||||
|
|
||||||
|
ImGui.BeginChild("list", new Vector2(_windowContentWidth, ySize), border: false);
|
||||||
|
|
||||||
|
foreach (var item in _drawFolders)
|
||||||
|
{
|
||||||
|
item.Draw();
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui.EndChild();
|
||||||
|
}
|
||||||
private void DrawServerStatus()
|
private void DrawServerStatus()
|
||||||
{
|
{
|
||||||
var buttonSize = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Link);
|
var buttonSize = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Link);
|
||||||
@@ -304,7 +301,7 @@ public class CompactUi : WindowMediatorSubscriberBase
|
|||||||
ImGui.TextUnformatted($"{doneUploads}/{totalUploads}");
|
ImGui.TextUnformatted($"{doneUploads}/{totalUploads}");
|
||||||
var uploadText = $"({UiSharedService.ByteToString(totalUploaded)}/{UiSharedService.ByteToString(totalToUpload)})";
|
var uploadText = $"({UiSharedService.ByteToString(totalUploaded)}/{UiSharedService.ByteToString(totalToUpload)})";
|
||||||
var textSize = ImGui.CalcTextSize(uploadText);
|
var textSize = ImGui.CalcTextSize(uploadText);
|
||||||
ImGui.SameLine(WindowContentWidth - textSize.X);
|
ImGui.SameLine(_windowContentWidth - textSize.X);
|
||||||
ImGui.TextUnformatted(uploadText);
|
ImGui.TextUnformatted(uploadText);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -327,7 +324,7 @@ public class CompactUi : WindowMediatorSubscriberBase
|
|||||||
var downloadText =
|
var downloadText =
|
||||||
$"({UiSharedService.ByteToString(totalDownloaded)}/{UiSharedService.ByteToString(totalToDownload)})";
|
$"({UiSharedService.ByteToString(totalDownloaded)}/{UiSharedService.ByteToString(totalToDownload)})";
|
||||||
var textSize = ImGui.CalcTextSize(downloadText);
|
var textSize = ImGui.CalcTextSize(downloadText);
|
||||||
ImGui.SameLine(WindowContentWidth - textSize.X);
|
ImGui.SameLine(_windowContentWidth - textSize.X);
|
||||||
ImGui.TextUnformatted(downloadText);
|
ImGui.TextUnformatted(downloadText);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -394,8 +391,8 @@ public class CompactUi : WindowMediatorSubscriberBase
|
|||||||
List<IDrawFolder> drawFolders = [];
|
List<IDrawFolder> drawFolders = [];
|
||||||
|
|
||||||
var allPairs = _pairManager.PairsWithGroups
|
var allPairs = _pairManager.PairsWithGroups
|
||||||
.ToImmutableDictionary(k => k.Key, k => k.Value);
|
.ToDictionary(k => k.Key, k => k.Value);
|
||||||
var filteredUsers = allPairs
|
var filteredPairs = allPairs
|
||||||
.Where(p =>
|
.Where(p =>
|
||||||
{
|
{
|
||||||
if (_tabMenu.Filter.IsNullOrEmpty()) return true;
|
if (_tabMenu.Filter.IsNullOrEmpty()) return true;
|
||||||
@@ -403,42 +400,48 @@ public class CompactUi : WindowMediatorSubscriberBase
|
|||||||
(p.Key.GetNote()?.Contains(_tabMenu.Filter, StringComparison.OrdinalIgnoreCase) ?? false) ||
|
(p.Key.GetNote()?.Contains(_tabMenu.Filter, StringComparison.OrdinalIgnoreCase) ?? false) ||
|
||||||
(p.Key.PlayerName?.Contains(_tabMenu.Filter, StringComparison.OrdinalIgnoreCase) ?? false);
|
(p.Key.PlayerName?.Contains(_tabMenu.Filter, StringComparison.OrdinalIgnoreCase) ?? false);
|
||||||
})
|
})
|
||||||
.ToImmutableDictionary(k => k.Key, k => k.Value);
|
.ToDictionary(k => k.Key, k => k.Value);
|
||||||
|
|
||||||
string? alphabeticalSortFunc(KeyValuePair<Pair, List<GroupFullInfoDto>> u)
|
string? AlphabeticalSort(KeyValuePair<Pair, List<GroupFullInfoDto>> u)
|
||||||
=> (_configService.Current.ShowCharacterNameInsteadOfNotesForVisible && !string.IsNullOrEmpty(u.Key.PlayerName)
|
=> (_configService.Current.ShowCharacterNameInsteadOfNotesForVisible && !string.IsNullOrEmpty(u.Key.PlayerName)
|
||||||
? (_configService.Current.PreferNotesOverNamesForVisible ? u.Key.GetNote() : u.Key.PlayerName)
|
? (_configService.Current.PreferNotesOverNamesForVisible ? u.Key.GetNote() : u.Key.PlayerName)
|
||||||
: (u.Key.GetNote() ?? u.Key.UserData.AliasOrUID));
|
: (u.Key.GetNote() ?? u.Key.UserData.AliasOrUID));
|
||||||
|
bool FilterOnlineOrPausedSelf(KeyValuePair<Pair, List<GroupFullInfoDto>> u)
|
||||||
|
=> (u.Key.IsOnline || (!u.Key.IsOnline && !_configService.Current.ShowOfflineUsersSeparately)
|
||||||
|
|| u.Key.UserPair.OwnPermissions.IsPaused());
|
||||||
|
|
||||||
if (_configService.Current.ShowVisibleUsersSeparately)
|
if (_configService.Current.ShowVisibleUsersSeparately)
|
||||||
{
|
{
|
||||||
var allUsers = allPairs
|
bool BaseFilterVisibleUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u) =>
|
||||||
.Where(u => u.Key.IsVisible
|
u.Key.IsVisible
|
||||||
&& (_configService.Current.ShowSyncshellUsersInVisible || !(!_configService.Current.ShowSyncshellUsersInVisible && !u.Key.IsDirectlyPaired)))
|
&& (_configService.Current.ShowSyncshellUsersInVisible || !(!_configService.Current.ShowSyncshellUsersInVisible && !u.Key.IsDirectlyPaired));
|
||||||
|
|
||||||
|
var allVisiblePairs = allPairs
|
||||||
|
.Where(BaseFilterVisibleUsers)
|
||||||
.Select(k => k.Key)
|
.Select(k => k.Key)
|
||||||
.ToImmutableList();
|
.ToImmutableList();
|
||||||
|
|
||||||
var visibleUsers = filteredUsers
|
var filteredVisiblePairs = filteredPairs
|
||||||
.Where(u => u.Key.IsVisible
|
.Where(BaseFilterVisibleUsers)
|
||||||
&& (_configService.Current.ShowSyncshellUsersInVisible || !(!_configService.Current.ShowSyncshellUsersInVisible && !u.Key.IsDirectlyPaired)))
|
.OrderBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase)
|
||||||
.OrderBy(alphabeticalSortFunc, StringComparer.OrdinalIgnoreCase)
|
.ToDictionary(k => k.Key, k => k.Value);
|
||||||
.ToImmutableDictionary(k => k.Key, k => k.Value);
|
|
||||||
|
|
||||||
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomVisibleTag, visibleUsers, allUsers));
|
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomVisibleTag, filteredVisiblePairs, allVisiblePairs));
|
||||||
}
|
}
|
||||||
|
|
||||||
List<IDrawFolder> groupFolders = new();
|
List<IDrawFolder> groupFolders = new();
|
||||||
foreach (var group in _pairManager.GroupPairs.Select(g => g.Key).OrderBy(g => g.GroupAliasOrGID, StringComparer.OrdinalIgnoreCase))
|
foreach (var group in _pairManager.GroupPairs.Select(g => g.Key).OrderBy(g => g.GroupAliasOrGID, StringComparer.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
var allUsers = allPairs
|
bool BaseFilterGroupUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u, GroupFullInfoDto group) =>
|
||||||
.Where(v => v.Value.Exists(g => string.Equals(g.GID, group.GID, StringComparison.Ordinal)))
|
u.Value.Exists(g => string.Equals(g.GID, group.GID, StringComparison.Ordinal));
|
||||||
|
|
||||||
|
var allGroupPairs = allPairs
|
||||||
|
.Where(u => BaseFilterGroupUsers(u, group))
|
||||||
.Select(k => k.Key)
|
.Select(k => k.Key)
|
||||||
.ToImmutableList();
|
.ToImmutableList();
|
||||||
|
|
||||||
var groupUsers = filteredUsers
|
var filteredGroupPairs = filteredPairs
|
||||||
.Where(v => v.Value.Exists(g => string.Equals(g.GID, group.GID, StringComparison.Ordinal))
|
.Where(u => BaseFilterGroupUsers(u, group) && FilterOnlineOrPausedSelf(u))
|
||||||
&& (v.Key.IsOnline || (!v.Key.IsOnline && !_configService.Current.ShowOfflineUsersSeparately)
|
|
||||||
|| v.Key.UserPair.OwnPermissions.IsPaused()))
|
|
||||||
.OrderByDescending(u => u.Key.IsOnline)
|
.OrderByDescending(u => u.Key.IsOnline)
|
||||||
.ThenBy(u =>
|
.ThenBy(u =>
|
||||||
{
|
{
|
||||||
@@ -450,10 +453,10 @@ public class CompactUi : WindowMediatorSubscriberBase
|
|||||||
}
|
}
|
||||||
return u.Key.IsVisible ? 3 : 4;
|
return u.Key.IsVisible ? 3 : 4;
|
||||||
})
|
})
|
||||||
.ThenBy(alphabeticalSortFunc, StringComparer.OrdinalIgnoreCase)
|
.ThenBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase)
|
||||||
.ToImmutableDictionary(k => k.Key, k => k.Value);
|
.ToDictionary(k => k.Key, k => k.Value);
|
||||||
|
|
||||||
groupFolders.Add(_drawEntityFactory.CreateDrawGroupFolder(group, groupUsers, allUsers));
|
groupFolders.Add(_drawEntityFactory.CreateDrawGroupFolder(group, filteredGroupPairs, allGroupPairs));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_configService.Current.GroupUpSyncshells)
|
if (_configService.Current.GroupUpSyncshells)
|
||||||
@@ -465,80 +468,86 @@ public class CompactUi : WindowMediatorSubscriberBase
|
|||||||
HashSet<Pair> alreadyInTags = [];
|
HashSet<Pair> alreadyInTags = [];
|
||||||
foreach (var tag in tags)
|
foreach (var tag in tags)
|
||||||
{
|
{
|
||||||
var allUsers = allPairs
|
bool BaseFilterTagUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u, string tag) =>
|
||||||
.Where(u => u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && _tagHandler.HasTag(u.Key.UserData.UID, tag))
|
u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && _tagHandler.HasTag(u.Key.UserData.UID, tag);
|
||||||
|
|
||||||
|
var allTagPairs = allPairs
|
||||||
|
.Where(u => BaseFilterTagUsers(u, tag))
|
||||||
.Select(k => k.Key)
|
.Select(k => k.Key)
|
||||||
.ToImmutableList();
|
.ToImmutableList();
|
||||||
|
|
||||||
var tagUsers = filteredUsers
|
var filteredTagPairs = filteredPairs
|
||||||
.Where(u => u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && _tagHandler.HasTag(u.Key.UserData.UID, tag)
|
.Where(u => BaseFilterTagUsers(u, tag) && FilterOnlineOrPausedSelf(u))
|
||||||
&& (u.Key.IsOnline || (!u.Key.IsOnline && !_configService.Current.ShowOfflineUsersSeparately)
|
|
||||||
|| u.Key.UserPair.OwnPermissions.IsPaused()))
|
|
||||||
.OrderByDescending(u => u.Key.IsVisible)
|
.OrderByDescending(u => u.Key.IsVisible)
|
||||||
.ThenByDescending(u => u.Key.IsOnline)
|
.ThenByDescending(u => u.Key.IsOnline)
|
||||||
.ThenBy(alphabeticalSortFunc, StringComparer.OrdinalIgnoreCase);
|
.ThenBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase);
|
||||||
|
|
||||||
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(tag, tagUsers.Select(u =>
|
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(tag, filteredTagPairs.Select(u =>
|
||||||
{
|
{
|
||||||
alreadyInTags.Add(u.Key);
|
alreadyInTags.Add(u.Key);
|
||||||
return (u.Key, u.Value);
|
return (u.Key, u.Value);
|
||||||
}).ToImmutableDictionary(u => u.Key, u => u.Value), allUsers));
|
}).ToDictionary(u => u.Key, u => u.Value), allTagPairs));
|
||||||
}
|
}
|
||||||
|
|
||||||
var onlineAllPairedUsersNotInTags = allPairs
|
bool BaseFilterNotTaggedUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u) =>
|
||||||
.Where(u => u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && !_tagHandler.HasAnyTag(u.Key.UserData.UID))
|
u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && !_tagHandler.HasAnyTag(u.Key.UserData.UID);
|
||||||
|
|
||||||
|
var allOnlineNotTaggedPairs = allPairs
|
||||||
|
.Where(BaseFilterNotTaggedUsers)
|
||||||
.Select(k => k.Key)
|
.Select(k => k.Key)
|
||||||
.ToImmutableList();
|
.ToImmutableList();
|
||||||
|
|
||||||
var onlineDirectPairedUsersNotInTags = filteredUsers
|
var onlineNotTaggedPairs = filteredPairs
|
||||||
.Where(u => u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && !_tagHandler.HasAnyTag(u.Key.UserData.UID)
|
.Where(u => BaseFilterNotTaggedUsers(u) && FilterOnlineOrPausedSelf(u))
|
||||||
&& (u.Key.IsOnline || (!u.Key.IsOnline && !_configService.Current.ShowOfflineUsersSeparately)
|
|
||||||
|| u.Key.UserPair.OwnPermissions.IsPaused()))
|
|
||||||
.OrderByDescending(u => u.Key.IsVisible)
|
.OrderByDescending(u => u.Key.IsVisible)
|
||||||
.ThenByDescending(u => u.Key.IsOnline)
|
.ThenByDescending(u => u.Key.IsOnline)
|
||||||
.ThenBy(alphabeticalSortFunc, StringComparer.OrdinalIgnoreCase)
|
.ThenBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase)
|
||||||
.ToImmutableDictionary(u => u.Key, u => u.Value);
|
.ToDictionary(u => u.Key, u => u.Value);
|
||||||
|
|
||||||
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder((_configService.Current.ShowOfflineUsersSeparately ? TagHandler.CustomOnlineTag : TagHandler.CustomAllTag),
|
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder((_configService.Current.ShowOfflineUsersSeparately ? TagHandler.CustomOnlineTag : TagHandler.CustomAllTag),
|
||||||
onlineDirectPairedUsersNotInTags, onlineAllPairedUsersNotInTags));
|
onlineNotTaggedPairs, allOnlineNotTaggedPairs));
|
||||||
|
|
||||||
if (_configService.Current.ShowOfflineUsersSeparately)
|
if (_configService.Current.ShowOfflineUsersSeparately)
|
||||||
{
|
{
|
||||||
var allOfflineUsersEntries = allPairs
|
bool BaseFilterOfflineUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u) =>
|
||||||
.Where(u => ((u.Key.IsDirectlyPaired && _configService.Current.ShowSyncshellOfflineUsersSeparately)
|
((u.Key.IsDirectlyPaired && _configService.Current.ShowSyncshellOfflineUsersSeparately)
|
||||||
|| !_configService.Current.ShowSyncshellOfflineUsersSeparately)
|
|| !_configService.Current.ShowSyncshellOfflineUsersSeparately)
|
||||||
&& (!u.Key.IsOneSidedPair || u.Value.Any()) && !u.Key.IsOnline && !u.Key.UserPair.OwnPermissions.IsPaused())
|
&& (!u.Key.IsOneSidedPair || u.Value.Any()) && !u.Key.IsOnline && !u.Key.UserPair.OwnPermissions.IsPaused();
|
||||||
|
|
||||||
|
var allOfflinePairs = allPairs
|
||||||
|
.Where(BaseFilterOfflineUsers)
|
||||||
.Select(k => k.Key)
|
.Select(k => k.Key)
|
||||||
.ToImmutableList();
|
.ToImmutableList();
|
||||||
|
|
||||||
var offlineUsersEntries = filteredUsers
|
var filteredOfflinePairs = filteredPairs
|
||||||
.Where(u => ((u.Key.IsDirectlyPaired && _configService.Current.ShowSyncshellOfflineUsersSeparately)
|
.Where(BaseFilterOfflineUsers)
|
||||||
|| !_configService.Current.ShowSyncshellOfflineUsersSeparately)
|
.OrderBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase)
|
||||||
&& (!u.Key.IsOneSidedPair || u.Value.Any()) && !u.Key.IsOnline && !u.Key.UserPair.OwnPermissions.IsPaused())
|
.ToDictionary(u => u.Key, u => u.Value);
|
||||||
.OrderBy(alphabeticalSortFunc, StringComparer.OrdinalIgnoreCase)
|
|
||||||
.ToImmutableDictionary(u => u.Key, u => u.Value);
|
|
||||||
|
|
||||||
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomOfflineTag, offlineUsersEntries, allOfflineUsersEntries));
|
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomOfflineTag, filteredOfflinePairs, allOfflinePairs));
|
||||||
if (_configService.Current.ShowSyncshellOfflineUsersSeparately)
|
if (_configService.Current.ShowSyncshellOfflineUsersSeparately)
|
||||||
{
|
{
|
||||||
|
bool BaseFilterOfflineSyncshellUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u) =>
|
||||||
|
(!u.Key.IsDirectlyPaired && !u.Key.IsOnline && !u.Key.UserPair.OwnPermissions.IsPaused());
|
||||||
|
|
||||||
var allOfflineSyncshellUsers = allPairs
|
var allOfflineSyncshellUsers = allPairs
|
||||||
.Where(u => !u.Key.IsDirectlyPaired && !u.Key.IsOnline && !u.Key.UserPair.OwnPermissions.IsPaused())
|
.Where(BaseFilterOfflineSyncshellUsers)
|
||||||
.Select(k => k.Key)
|
.Select(k => k.Key)
|
||||||
.ToImmutableList();
|
.ToImmutableList();
|
||||||
|
|
||||||
var offlineSyncshellUsers = allPairs
|
var filteredOfflineSyncshellUsers = filteredPairs
|
||||||
.Where(u => !u.Key.IsDirectlyPaired && !u.Key.IsOnline && !u.Key.UserPair.OwnPermissions.IsPaused())
|
.Where(BaseFilterOfflineSyncshellUsers)
|
||||||
.OrderBy(alphabeticalSortFunc, StringComparer.OrdinalIgnoreCase)
|
.OrderBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase)
|
||||||
.ToImmutableDictionary(k => k.Key, k => k.Value);
|
.ToDictionary(k => k.Key, k => k.Value);
|
||||||
|
|
||||||
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomOfflineSyncshellTag,
|
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomOfflineSyncshellTag,
|
||||||
offlineSyncshellUsers,
|
filteredOfflineSyncshellUsers,
|
||||||
allOfflineSyncshellUsers));
|
allOfflineSyncshellUsers));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomUnpairedTag,
|
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomUnpairedTag,
|
||||||
filteredUsers.Where(u => u.Key.IsOneSidedPair).ToImmutableDictionary(u => u.Key, u => u.Value),
|
filteredPairs.Where(u => u.Key.IsOneSidedPair).ToDictionary(u => u.Key, u => u.Value),
|
||||||
allPairs.Where(u => u.Key.IsOneSidedPair).Select(k => k.Key).ToImmutableList()));
|
allPairs.Where(u => u.Key.IsOneSidedPair).Select(k => k.Key).ToImmutableList()));
|
||||||
|
|
||||||
return drawFolders;
|
return drawFolders;
|
||||||
|
|||||||
@@ -36,18 +36,20 @@ public class DrawEntityFactory
|
|||||||
_serverConfigurationManager = serverConfigurationManager;
|
_serverConfigurationManager = serverConfigurationManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DrawFolderGroup CreateDrawGroupFolder(GroupFullInfoDto groupFullInfoDto, IImmutableDictionary<Pair, List<GroupFullInfoDto>> pairs,
|
public DrawFolderGroup CreateDrawGroupFolder(GroupFullInfoDto groupFullInfoDto,
|
||||||
|
Dictionary<Pair, List<GroupFullInfoDto>> filteredPairs,
|
||||||
IImmutableList<Pair> allPairs)
|
IImmutableList<Pair> allPairs)
|
||||||
{
|
{
|
||||||
return new DrawFolderGroup(groupFullInfoDto.Group.GID, groupFullInfoDto, _apiController,
|
return new DrawFolderGroup(groupFullInfoDto.Group.GID, groupFullInfoDto, _apiController,
|
||||||
pairs.Select(p => CreateDrawPair(groupFullInfoDto.Group.GID + p.Key.UserData.UID, p.Key, p.Value)).ToImmutableList(),
|
filteredPairs.Select(p => CreateDrawPair(groupFullInfoDto.Group.GID + p.Key.UserData.UID, p.Key, p.Value)).ToImmutableList(),
|
||||||
allPairs, _tagHandler, _uidDisplayHandler, _mediator);
|
allPairs, _tagHandler, _uidDisplayHandler, _mediator);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DrawFolderTag CreateDrawTagFolder(string tag, IImmutableDictionary<Pair, List<GroupFullInfoDto>> pairs,
|
public DrawFolderTag CreateDrawTagFolder(string tag,
|
||||||
|
Dictionary<Pair, List<GroupFullInfoDto>> filteredPairs,
|
||||||
IImmutableList<Pair> allPairs)
|
IImmutableList<Pair> allPairs)
|
||||||
{
|
{
|
||||||
return new(tag, pairs.Select(u => CreateDrawPair(tag, u.Key, u.Value)).ToImmutableList(),
|
return new(tag, filteredPairs.Select(u => CreateDrawPair(tag, u.Key, u.Value)).ToImmutableList(),
|
||||||
allPairs, _tagHandler, _apiController, _selectPairForTagUi);
|
allPairs, _tagHandler, _apiController, _selectPairForTagUi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user