Added all functions required for the syncshell folder system

This commit is contained in:
CakeAndBanana
2025-09-08 06:49:40 +02:00
parent 806a4baf1a
commit 75d23021ef
15 changed files with 290 additions and 93 deletions

View File

@@ -462,12 +462,14 @@ public class CompactUi : WindowMediatorSubscriberBase
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 FilterTagUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u, string tag)
=> u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && _tagHandler.HasPairTag(u.Key.UserData.UID, tag);
bool FilterTagSyncshells(KeyValuePair<Pair, List<GroupFullInfoDto>> u, string tag)
=> u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && _tagHandler.HasSyncshellTag(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);
=> u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && !_tagHandler.HasAnyPairTag(u.Key.UserData.UID);
bool FilterOfflineUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u)
=> ((u.Key.IsDirectlyPaired && _configService.Current.ShowSyncshellOfflineUsersSeparately)
|| !_configService.Current.ShowSyncshellOfflineUsersSeparately)
@@ -521,9 +523,9 @@ public class CompactUi : WindowMediatorSubscriberBase
foreach (var tag in tags)
{
var allTagPairs = ImmutablePairList(allPairs
.Where(u => FilterTagusers(u, tag)));
.Where(u => FilterTagUsers(u, tag)));
var filteredTagPairs = BasicSortedDictionary(filteredPairs
.Where(u => FilterTagusers(u, tag) && FilterOnlineOrPausedSelf(u)));
.Where(u => FilterTagUsers(u, tag) && FilterOnlineOrPausedSelf(u)));
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(tag, filteredTagPairs, allTagPairs));
}
@@ -533,9 +535,9 @@ public class CompactUi : WindowMediatorSubscriberBase
foreach (var syncshelltag in syncshellTags)
{
var allTagPairs = ImmutablePairList(allPairs
.Where(u => FilterTagusers(u, syncshelltag)));
.Where(u => FilterTagUsers(u, syncshelltag)));
var filteredTagPairs = BasicSortedDictionary(filteredPairs
.Where(u => FilterTagusers(u, syncshelltag) && FilterOnlineOrPausedSelf(u)));
.Where(u => FilterTagUsers(u, syncshelltag) && FilterOnlineOrPausedSelf(u)));
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(syncshelltag, filteredTagPairs, allTagPairs));
}

View File

@@ -112,7 +112,7 @@ public class DrawFolderTag : DrawFolderBase
}
if (_uiSharedService.IconTextButton(FontAwesomeIcon.Trash, "Delete Pair Group", menuWidth, isInPopup: true) && UiSharedService.CtrlPressed())
{
_tagHandler.RemoveTag(_id);
_tagHandler.RemovePairTag(_id);
}
UiSharedService.AttachToolTip("Hold CTRL to remove this Group permanently." + Environment.NewLine +
"Note: this will not unpair with users in this Group.");

View File

@@ -77,7 +77,7 @@ public class RenameTagUi
public void RenameTag(List<Pair> pairs, string oldTag, string newTag)
{
//Removal of old tag
_tagHandler.RemoveTag(oldTag);
_tagHandler.RemovePairTag(oldTag);
//Creation of new tag and adding of old group pairs in new one.
_tagHandler.AddPairTag(newTag);
@@ -86,7 +86,7 @@ public class RenameTagUi
var isInTag = _peopleInGroup.Contains(pair.UserData.UID);
if (isInTag)
{
_tagHandler.AddTagToPairedUid(pair.UserData.UID, newTag);
_tagHandler.AddPairTagToPairedUid(pair.UserData.UID, newTag);
}
}
}

View File

@@ -60,7 +60,7 @@ public class SelectPairForTagUi
{
if (isInGroup)
{
_tagHandler.AddTagToPairedUid(item.UserData.UID, _tag);
_tagHandler.AddPairTagToPairedUid(item.UserData.UID, _tag);
_peopleInGroup.Add(item.UserData.UID);
}
else

View File

@@ -101,13 +101,13 @@ public class SelectTagForPairUi
private void DrawGroupName(Pair pair, string name)
{
var hasTagBefore = _tagHandler.HasTag(pair.UserData.UID, name);
var hasTagBefore = _tagHandler.HasPairTag(pair.UserData.UID, name);
var hasTag = hasTagBefore;
if (ImGui.Checkbox(name, ref hasTag))
{
if (hasTag)
{
_tagHandler.AddTagToPairedUid(pair.UserData.UID, name);
_tagHandler.AddPairTagToPairedUid(pair.UserData.UID, name);
}
else
{
@@ -123,7 +123,7 @@ public class SelectTagForPairUi
_tagHandler.AddPairTag(_tagNameToAdd);
if (_pair != null)
{
_tagHandler.AddTagToPairedUid(_pair.UserData.UID, _tagNameToAdd);
_tagHandler.AddPairTagToPairedUid(_pair.UserData.UID, _tagNameToAdd);
}
_tagNameToAdd = string.Empty;
}

View File

@@ -43,9 +43,9 @@ public class IdDisplayHandler
if (ImGui.IsItemClicked(ImGuiMouseButton.Left))
{
var prevState = textIsUid;
if (_showIdForEntry.ContainsKey(group.GID))
if (_showIdForEntry.TryGetValue(group.GID, out bool value))
{
prevState = _showIdForEntry[group.GID];
prevState = value;
}
_showIdForEntry[group.GID] = !prevState;
}

View File

@@ -17,57 +17,146 @@ public class TagHandler
_serverConfigurationManager = serverConfigurationManager;
}
/// <summary>
/// Creation of an pair tag
/// </summary>
/// <param name="tag">Name of the tag</param>
public void AddPairTag(string tag) => _serverConfigurationManager.AddPairTag(tag);
public void AddSyncshellTag(string tag) => _serverConfigurationManager.AddSyncshellTag(tag);
public void AddTagToPairedUid(string uid, string tagName) => _serverConfigurationManager.AddTagForUid(uid, tagName);
/// <summary>
/// Creation of an syncshell tag
/// </summary>
/// <param name="tag">Name of the tag</param>
public void AddSyncshellTag(string tag) => _serverConfigurationManager.AddSyncshellTag(tag);
/// <summary>
/// Add pair to tag
/// </summary>
/// <param name="uid">UID that will be added to tag/param>
/// <param name="tagName">Name of the tag</param>
public void AddPairTagToPairedUid(string uid, string tagName) => _serverConfigurationManager.AddTagForUid(uid, tagName);
/// <summary>
/// Add syncshell to tag
/// </summary>
/// <param name="name">Syncshell that will be added to tag/param>
/// <param name="tagName">Name of the tag</param>
public void AddTagToSyncshell(string name, string tagName) => _serverConfigurationManager.AddTagForSyncshell(name, tagName);
/// <summary>
/// Get all pair tags
/// </summary>
public List<string> GetAllPairTagsSorted() => [
.. _serverConfigurationManager.GetServerAvailablePairTags()
.OrderBy(s => s, StringComparer.OrdinalIgnoreCase)
.Order(StringComparer.OrdinalIgnoreCase)
,
];
/// <summary>
/// Get all syncshell tags
/// </summary>
public List<string> GetAllSyncshellTagsSorted() => [
.. _serverConfigurationManager.GetServerAvailableSyncshellTags()
.OrderBy(s => s, StringComparer.OrdinalIgnoreCase)
.Order(StringComparer.OrdinalIgnoreCase)
,
];
public HashSet<string> GetOtherUidsForTag(string tag)
{
return _serverConfigurationManager.GetUidsForTag(tag);
}
/// <summary>
/// Get all UIDs bound to an given tag
/// </summary>
/// <param name="name">Name of the tag</param>
public HashSet<string> GetOtherUidsForTag(string tag) => _serverConfigurationManager.GetUidsForPairTag(tag);
public bool HasAnyTag(string uid)
{
return _serverConfigurationManager.HasTags(uid);
}
/// <summary>
/// Get all syncshells bound to an given tag
/// </summary>
/// <param name="name">Name of the tag</param>
public HashSet<string> GetOtherSyncshellsForTag(string tag) => _serverConfigurationManager.GetNamesForSyncshellTag(tag);
public bool HasTag(string uid, string tagName)
{
return _serverConfigurationManager.ContainsTag(uid, tagName);
}
/// <summary>
/// Checking if the UID is connected to any tag
/// </summary>
/// <param name="uid">Syncshell that needs to be checked</param>
public bool HasAnyPairTag(string uid) => _serverConfigurationManager.HasPairTags(uid);
/// <summary>
/// Checking if the syncshell is connected to the tag
/// </summary>
/// <param name="name">Syncshell that needs to be checked</param>
public bool HasAnySyncshellTag(string name) => _serverConfigurationManager.HasSyncshellTags(name);
/// <summary>
/// Checking if the UID is connected to the tag
/// </summary>
/// <param name="uid">UID that needs to be checked</param>
/// <param name="tagName">Name of the tag</param>
public bool HasPairTag(string uid, string tagName) => _serverConfigurationManager.ContainsPairTag(uid, tagName);
/// <summary>
/// Checking if the syncshell is connected to the tag
/// </summary>
/// <param name="name">Syncshell that needs to be checked</param>
/// <param name="tagName">Name of the tag</param>
public bool HasSyncshellTag(string name, string tagName) => _serverConfigurationManager.ContainsSyncshellTag(name, tagName);
/// <summary>
/// Is this tag opened in the paired clients UI?
/// </summary>
/// <param name="tag">the tag</param>
/// <returns>open true/false</returns>
public bool IsTagOpen(string tag)
public bool IsTagOpen(string tag) => _serverConfigurationManager.ContainsOpenPairTag(tag);
/// <summary>
/// Removal of Pair Tags from Storage
/// </summary>
/// <param name="tag">Name of the tag</param>
public void RemovePairTag(string tag) => _serverConfigurationManager.RemovePairTag(tag);
/// <summary>
/// Removal of Syncshell Tags from Storage
/// </summary>
/// <param name="tag">Name of the tag</param>
public void RemoveSyncshellTag(string tag) => _serverConfigurationManager.RemoveSyncshellTag(tag);
/// <summary>
/// Removal of UID in a Tag
/// </summary>
/// <param name="uid">UID of user thats bound to the tag</param>
/// <param name="tagName">Name of the tag</param>
public void RemoveTagFromPairedUid(string uid, string tagName) => _serverConfigurationManager.RemoveTagForUid(uid, tagName);
/// <summary>
/// Removal of Syncshell in a Tag
/// </summary>
/// <param name="name">Syncshell thats bound to the tag</param>
/// <param name="tagName">Name of the tag</param>
public void RemoveTagFromSyncshell(string name, string tagName) => _serverConfigurationManager.RemoveTagForSyncshell(name, tagName);
/// <summary>
/// Rename of a pair tag
/// </summary>
/// <param name="oldName">Old pair tag name</param>
/// <param name="newName">New pair tag name</param>
public void RenamePairTag(string oldName, string newName)
{
return _serverConfigurationManager.ContainsOpenPairTag(tag);
_serverConfigurationManager.RenamePairTag(oldName, newName);
}
public void RemoveTag(string tag)
/// <summary>
/// Rename of a syncshell tag
/// </summary>
/// <param name="oldName">Old syncshell tag name</param>
/// <param name="newName">New syncshell tag name</param>
public void RenameSyncshellTag(string oldName, string newName)
{
_serverConfigurationManager.RemoveTag(tag);
}
public void RemoveTagFromPairedUid(string uid, string tagName)
{
_serverConfigurationManager.RemoveTagForUid(uid, tagName);
_serverConfigurationManager.RenameSyncshellTag(oldName, newName);
}
/// <summary>
/// Changes the tag to open/close
/// </summary>
/// <param name="tag">The Tag that will be modified</param>
/// <param name="open">True/False</param>
public void SetTagOpen(string tag, bool open)
{
if (open)