more cleanup

This commit is contained in:
rootdarkarchon
2023-10-27 18:15:44 +02:00
parent f8ad8f3d79
commit c1a3efe066

View File

@@ -409,22 +409,36 @@ public class CompactUi : WindowMediatorSubscriberBase
bool FilterOnlineOrPausedSelf(KeyValuePair<Pair, List<GroupFullInfoDto>> u) bool FilterOnlineOrPausedSelf(KeyValuePair<Pair, List<GroupFullInfoDto>> u)
=> (u.Key.IsOnline || (!u.Key.IsOnline && !_configService.Current.ShowOfflineUsersSeparately) => (u.Key.IsOnline || (!u.Key.IsOnline && !_configService.Current.ShowOfflineUsersSeparately)
|| u.Key.UserPair.OwnPermissions.IsPaused()); || u.Key.UserPair.OwnPermissions.IsPaused());
Dictionary<Pair, List<GroupFullInfoDto>> BasicSortedDictionary(IEnumerable<KeyValuePair<Pair, List<GroupFullInfoDto>>> u)
=> u.OrderByDescending(u => u.Key.IsVisible)
.ThenByDescending(u => u.Key.IsOnline)
.ThenBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase)
.ToDictionary(u => u.Key, u => u.Value);
ImmutableList<Pair> ImmutablePairList(IEnumerable<KeyValuePair<Pair, List<GroupFullInfoDto>>> u)
=> u.Select(k => k.Key).ToImmutableList();
bool FilterVisibleUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u)
=> u.Key.IsVisible
&& (_configService.Current.ShowSyncshellUsersInVisible || !(!_configService.Current.ShowSyncshellUsersInVisible && !u.Key.IsDirectlyPaired));
bool FilterTagusers(KeyValuePair<Pair, List<GroupFullInfoDto>> u, string tag)
=> u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && _tagHandler.HasTag(u.Key.UserData.UID, tag);
bool FilterGroupUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u, GroupFullInfoDto group)
=> u.Value.Exists(g => string.Equals(g.GID, group.GID, StringComparison.Ordinal));
bool FilterNotTaggedUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u)
=> u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && !_tagHandler.HasAnyTag(u.Key.UserData.UID);
bool FilterOfflineUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u)
=> ((u.Key.IsDirectlyPaired && _configService.Current.ShowSyncshellOfflineUsersSeparately)
|| !_configService.Current.ShowSyncshellOfflineUsersSeparately)
&& (!u.Key.IsOneSidedPair || u.Value.Any()) && !u.Key.IsOnline && !u.Key.UserPair.OwnPermissions.IsPaused();
bool FilterOfflineSyncshellUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u)
=> (!u.Key.IsDirectlyPaired && !u.Key.IsOnline && !u.Key.UserPair.OwnPermissions.IsPaused());
if (_configService.Current.ShowVisibleUsersSeparately) if (_configService.Current.ShowVisibleUsersSeparately)
{ {
bool BaseFilterVisibleUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u) => var allVisiblePairs = ImmutablePairList(allPairs
u.Key.IsVisible .Where(FilterVisibleUsers));
&& (_configService.Current.ShowSyncshellUsersInVisible || !(!_configService.Current.ShowSyncshellUsersInVisible && !u.Key.IsDirectlyPaired)); var filteredVisiblePairs = BasicSortedDictionary(filteredPairs
.Where(FilterVisibleUsers));
var allVisiblePairs = allPairs
.Where(BaseFilterVisibleUsers)
.Select(k => k.Key)
.ToImmutableList();
var filteredVisiblePairs = filteredPairs
.Where(BaseFilterVisibleUsers)
.OrderBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase)
.ToDictionary(k => k.Key, k => k.Value);
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomVisibleTag, filteredVisiblePairs, allVisiblePairs)); drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomVisibleTag, filteredVisiblePairs, allVisiblePairs));
} }
@@ -432,16 +446,11 @@ public class CompactUi : WindowMediatorSubscriberBase
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))
{ {
bool BaseFilterGroupUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u, GroupFullInfoDto group) => var allGroupPairs = ImmutablePairList(allPairs
u.Value.Exists(g => string.Equals(g.GID, group.GID, StringComparison.Ordinal)); .Where(u => FilterGroupUsers(u, group)));
var allGroupPairs = allPairs
.Where(u => BaseFilterGroupUsers(u, group))
.Select(k => k.Key)
.ToImmutableList();
var filteredGroupPairs = filteredPairs var filteredGroupPairs = filteredPairs
.Where(u => BaseFilterGroupUsers(u, group) && FilterOnlineOrPausedSelf(u)) .Where(u => FilterGroupUsers(u, group) && FilterOnlineOrPausedSelf(u))
.OrderByDescending(u => u.Key.IsOnline) .OrderByDescending(u => u.Key.IsOnline)
.ThenBy(u => .ThenBy(u =>
{ {
@@ -465,80 +474,38 @@ public class CompactUi : WindowMediatorSubscriberBase
drawFolders.AddRange(groupFolders); drawFolders.AddRange(groupFolders);
var tags = _tagHandler.GetAllTagsSorted(); var tags = _tagHandler.GetAllTagsSorted();
HashSet<Pair> alreadyInTags = [];
foreach (var tag in tags) foreach (var tag in tags)
{ {
bool BaseFilterTagUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u, string tag) => var allTagPairs = ImmutablePairList(allPairs
u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && _tagHandler.HasTag(u.Key.UserData.UID, tag); .Where(u => FilterTagusers(u, tag)));
var filteredTagPairs = BasicSortedDictionary(filteredPairs
.Where(u => FilterTagusers(u, tag) && FilterOnlineOrPausedSelf(u)));
var allTagPairs = allPairs drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(tag, filteredTagPairs, allTagPairs));
.Where(u => BaseFilterTagUsers(u, tag))
.Select(k => k.Key)
.ToImmutableList();
var filteredTagPairs = filteredPairs
.Where(u => BaseFilterTagUsers(u, tag) && FilterOnlineOrPausedSelf(u))
.OrderByDescending(u => u.Key.IsVisible)
.ThenByDescending(u => u.Key.IsOnline)
.ThenBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase);
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(tag, filteredTagPairs.Select(u =>
{
alreadyInTags.Add(u.Key);
return (u.Key, u.Value);
}).ToDictionary(u => u.Key, u => u.Value), allTagPairs));
} }
bool BaseFilterNotTaggedUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u) => var allOnlineNotTaggedPairs = ImmutablePairList(allPairs
u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && !_tagHandler.HasAnyTag(u.Key.UserData.UID); .Where(FilterNotTaggedUsers));
var onlineNotTaggedPairs = BasicSortedDictionary(filteredPairs
var allOnlineNotTaggedPairs = allPairs .Where(u => FilterNotTaggedUsers(u) && FilterOnlineOrPausedSelf(u)));
.Where(BaseFilterNotTaggedUsers)
.Select(k => k.Key)
.ToImmutableList();
var onlineNotTaggedPairs = filteredPairs
.Where(u => BaseFilterNotTaggedUsers(u) && FilterOnlineOrPausedSelf(u))
.OrderByDescending(u => u.Key.IsVisible)
.ThenByDescending(u => u.Key.IsOnline)
.ThenBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase)
.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),
onlineNotTaggedPairs, allOnlineNotTaggedPairs)); onlineNotTaggedPairs, allOnlineNotTaggedPairs));
if (_configService.Current.ShowOfflineUsersSeparately) if (_configService.Current.ShowOfflineUsersSeparately)
{ {
bool BaseFilterOfflineUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u) => var allOfflinePairs = ImmutablePairList(allPairs
((u.Key.IsDirectlyPaired && _configService.Current.ShowSyncshellOfflineUsersSeparately) .Where(FilterOfflineUsers));
|| !_configService.Current.ShowSyncshellOfflineUsersSeparately) var filteredOfflinePairs = BasicSortedDictionary(filteredPairs
&& (!u.Key.IsOneSidedPair || u.Value.Any()) && !u.Key.IsOnline && !u.Key.UserPair.OwnPermissions.IsPaused(); .Where(FilterOfflineUsers));
var allOfflinePairs = allPairs
.Where(BaseFilterOfflineUsers)
.Select(k => k.Key)
.ToImmutableList();
var filteredOfflinePairs = filteredPairs
.Where(BaseFilterOfflineUsers)
.OrderBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase)
.ToDictionary(u => u.Key, u => u.Value);
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomOfflineTag, filteredOfflinePairs, allOfflinePairs)); drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomOfflineTag, filteredOfflinePairs, allOfflinePairs));
if (_configService.Current.ShowSyncshellOfflineUsersSeparately) if (_configService.Current.ShowSyncshellOfflineUsersSeparately)
{ {
bool BaseFilterOfflineSyncshellUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u) => var allOfflineSyncshellUsers = ImmutablePairList(allPairs
(!u.Key.IsDirectlyPaired && !u.Key.IsOnline && !u.Key.UserPair.OwnPermissions.IsPaused()); .Where(FilterOfflineSyncshellUsers));
var filteredOfflineSyncshellUsers = BasicSortedDictionary(filteredPairs
var allOfflineSyncshellUsers = allPairs .Where(FilterOfflineSyncshellUsers));
.Where(BaseFilterOfflineSyncshellUsers)
.Select(k => k.Key)
.ToImmutableList();
var filteredOfflineSyncshellUsers = filteredPairs
.Where(BaseFilterOfflineSyncshellUsers)
.OrderBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase)
.ToDictionary(k => k.Key, k => k.Value);
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomOfflineSyncshellTag, drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomOfflineSyncshellTag,
filteredOfflineSyncshellUsers, filteredOfflineSyncshellUsers,
@@ -547,8 +514,8 @@ public class CompactUi : WindowMediatorSubscriberBase
} }
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomUnpairedTag, drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomUnpairedTag,
filteredPairs.Where(u => u.Key.IsOneSidedPair).ToDictionary(u => u.Key, u => u.Value), BasicSortedDictionary(filteredPairs.Where(u => u.Key.IsOneSidedPair)),
allPairs.Where(u => u.Key.IsOneSidedPair).Select(k => k.Key).ToImmutableList())); ImmutablePairList(allPairs.Where(u => u.Key.IsOneSidedPair))));
return drawFolders; return drawFolders;
} }