Fix some issues in syncshell admin panel, removed flag row and added it in user name. updated banned list to remove from imgui table.

This commit is contained in:
cake
2025-12-15 20:15:54 +01:00
parent ee1fcb5661
commit eb11ff0b4c

View File

@@ -14,6 +14,7 @@ using LightlessSync.Services.Profiles;
using LightlessSync.UI.Services; using LightlessSync.UI.Services;
using LightlessSync.WebAPI; using LightlessSync.WebAPI;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using SharpDX.DirectWrite;
using SixLabors.ImageSharp; using SixLabors.ImageSharp;
using System.Globalization; using System.Globalization;
using System.Numerics; using System.Numerics;
@@ -556,7 +557,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
+ UiSharedService.TooltipSeparator + "Hold CTRL to enable this button"); + UiSharedService.TooltipSeparator + "Hold CTRL to enable this button");
ImGuiHelpers.ScaledDummy(2f); ImGuiHelpers.ScaledDummy(2f);
UiSharedService.ColoredSeparator(UIColors.Get("LightlessPurple"), 1.0f); UiSharedService.ColoredSeparator(UIColors.Get("DimRed"), 1.0f);
ImGuiHelpers.ScaledDummy(2f); ImGuiHelpers.ScaledDummy(2f);
if (_uiSharedService.IconTextButton(FontAwesomeIcon.Unlink, "Check for Inactive Users")) if (_uiSharedService.IconTextButton(FontAwesomeIcon.Unlink, "Check for Inactive Users"))
@@ -621,7 +622,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
} }
ImGuiHelpers.ScaledDummy(4f); ImGuiHelpers.ScaledDummy(4f);
UiSharedService.ColoredSeparator(UIColors.Get("LightlessPurple"), 1.0f); UiSharedService.ColoredSeparator(UIColors.Get("DimRed"), 1.0f);
ImGuiHelpers.ScaledDummy(2f); ImGuiHelpers.ScaledDummy(2f);
DrawAutoPruneSettings(); DrawAutoPruneSettings();
@@ -636,50 +637,28 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
{ {
_bannedUsers = _apiController.GroupGetBannedUsers(new GroupDto(GroupFullInfo.Group)).Result; _bannedUsers = _apiController.GroupGetBannedUsers(new GroupDto(GroupFullInfo.Group)).Result;
} }
ImGuiHelpers.ScaledDummy(2f);
var tableFlags = ImGuiTableFlags.RowBg | ImGuiTableFlags.SizingStretchProp; ImGui.BeginChild("bannedListScroll#" + GroupFullInfo.GID, new Vector2(0, 0), true);
if (_bannedUsers.Count > 10)
tableFlags |= ImGuiTableFlags.ScrollY;
if (ImGui.BeginTable("bannedusertable" + GroupFullInfo.GID, 6, tableFlags)) var style = ImGui.GetStyle();
float fullW = ImGui.GetContentRegionAvail().X;
float colIdentity = fullW * 0.45f;
float colMeta = fullW * 0.35f;
float colActions = fullW - colIdentity - colMeta - style.ItemSpacing.X * 2.0f;
// Header
DrawBannedListHeader(colIdentity, colMeta);
int rowIndex = 0;
foreach (var bannedUser in _bannedUsers.ToList())
{ {
ImGui.TableSetupColumn("UID", ImGuiTableColumnFlags.None, 1); // Each row
ImGui.TableSetupColumn("Alias", ImGuiTableColumnFlags.None, 1); DrawBannedRow(bannedUser, rowIndex++, colIdentity, colMeta, colActions);
ImGui.TableSetupColumn("By", ImGuiTableColumnFlags.None, 1);
ImGui.TableSetupColumn("Date", ImGuiTableColumnFlags.None, 2);
ImGui.TableSetupColumn("Reason", ImGuiTableColumnFlags.None, 3);
ImGui.TableSetupColumn("Actions", ImGuiTableColumnFlags.None, 1);
ImGui.TableHeadersRow();
foreach (var bannedUser in _bannedUsers.ToList())
{
ImGui.TableNextColumn();
ImGui.TextUnformatted(bannedUser.UID);
ImGui.TableNextColumn();
ImGui.TextUnformatted(bannedUser.UserAlias ?? string.Empty);
ImGui.TableNextColumn();
ImGui.TextUnformatted(bannedUser.BannedBy);
ImGui.TableNextColumn();
ImGui.TextUnformatted(bannedUser.BannedOn.ToLocalTime().ToString(CultureInfo.CurrentCulture));
ImGui.TableNextColumn();
UiSharedService.TextWrapped(bannedUser.Reason);
ImGui.TableNextColumn();
using var _ = ImRaii.PushId(bannedUser.UID);
if (_uiSharedService.IconTextButton(FontAwesomeIcon.Check, "Unban"))
{
_apiController.GroupUnbanUser(bannedUser);
_bannedUsers.RemoveAll(b => string.Equals(b.UID, bannedUser.UID, StringComparison.Ordinal));
}
}
ImGui.EndTable();
} }
ImGui.EndChild();
} }
private void DrawInvites(GroupPermissions perm) private void DrawInvites(GroupPermissions perm)
@@ -729,7 +708,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
private void DrawUserListCustom(IReadOnlyList<Pair> pairs, GroupFullInfoDto GroupFullInfo) private void DrawUserListCustom(IReadOnlyList<Pair> pairs, GroupFullInfoDto GroupFullInfo)
{ {
// Search bar (unchanged) // Search bar
ImGui.PushItemWidth(0); ImGui.PushItemWidth(0);
_uiSharedService.IconText(FontAwesomeIcon.Search, UIColors.Get("LightlessPurple")); _uiSharedService.IconText(FontAwesomeIcon.Search, UIColors.Get("LightlessPurple"));
ImGui.SameLine(); ImGui.SameLine();
@@ -768,78 +747,105 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
.ThenBy(p => p.Key.GetNote() ?? p.Key.UserData.AliasOrUID, StringComparer.OrdinalIgnoreCase) .ThenBy(p => p.Key.GetNote() ?? p.Key.UserData.AliasOrUID, StringComparer.OrdinalIgnoreCase)
.ToList(); .ToList();
DrawUserListHeader();
ImGui.BeginChild("userListScroll#" + GroupFullInfo.Group.AliasOrGID, new Vector2(0, 0), true); ImGui.BeginChild("userListScroll#" + GroupFullInfo.Group.AliasOrGID, new Vector2(0, 0), true);
var style = ImGui.GetStyle();
float fullW = ImGui.GetContentRegionAvail().X;
float colUid = fullW * 0.50f;
float colFlags = fullW * 0.10f;
float colActions = fullW - colUid - colFlags - style.ItemSpacing.X * 2.0f;
DrawUserListHeader(colUid, colFlags);
int rowIndex = 0; int rowIndex = 0;
foreach (var kv in orderedPairs) foreach (var kv in orderedPairs)
{ {
var pair = kv.Key; var pair = kv.Key;
var userInfoOpt = kv.Value; var userInfoOpt = kv.Value;
DrawUserRowCustom(pair, userInfoOpt, GroupFullInfo, rowIndex++, colUid, colFlags, colActions); DrawUserRowCustom(pair, userInfoOpt, GroupFullInfo, rowIndex++);
} }
ImGui.EndChild(); ImGui.EndChild();
} }
private static void DrawUserListHeader(float colUid, float colFlags) private static void DrawUserListHeader()
{ {
var style = ImGui.GetStyle(); var style = ImGui.GetStyle();
float x0 = ImGui.GetCursorPosX(); float x0 = ImGui.GetCursorPosX();
float fullW = ImGui.GetContentRegionAvail().X;
ImGui.PushStyleColor(ImGuiCol.Text, UIColors.Get("LightlessPurple")); ImGui.PushStyleColor(ImGuiCol.Text, UIColors.Get("LightlessPurple"));
// Alias / UID / Note
ImGui.SetCursorPosX(x0); ImGui.SetCursorPosX(x0);
ImGui.TextUnformatted("Alias / UID / Note"); ImGui.TextUnformatted("User");
// Flags const string actionsLabel = "Actions";
ImGui.SameLine(); float labelWidth = ImGui.CalcTextSize(actionsLabel).X;
ImGui.SetCursorPosX(x0 + colUid + style.ItemSpacing.X);
ImGui.TextUnformatted("Flags");
// Actions
ImGui.SameLine(); ImGui.SameLine();
ImGui.SetCursorPosX(x0 + colUid + colFlags + style.ItemSpacing.X * 2.0f); ImGui.SetCursorPosX(x0 + fullW - labelWidth);
ImGui.TextUnformatted("Actions"); ImGui.TextUnformatted(actionsLabel);
ImGui.PopStyleColor(); ImGui.PopStyleColor();
UiSharedService.ColoredSeparator(UIColors.Get("LightlessPurple"), 1.0f); UiSharedService.ColoredSeparator(UIColors.Get("LightlessPurple"), 1.0f);
} }
private void DrawUserRowCustom(Pair pair, GroupPairUserInfo? userInfoOpt, GroupFullInfoDto GroupFullInfo, int rowIndex, float colUid, float colFlags, float colActions) private void DrawUserRowCustom(Pair pair, GroupPairUserInfo? userInfoOpt, GroupFullInfoDto GroupFullInfo, int rowIndex)
{ {
using var id = ImRaii.PushId("userRow_" + pair.UserData.UID); using var id = ImRaii.PushId("userRow_" + pair.UserData.UID);
var style = ImGui.GetStyle(); var style = ImGui.GetStyle();
float x0 = ImGui.GetCursorPosX(); Vector2 rowStart = ImGui.GetCursorPos();
Vector2 rowStartScr = ImGui.GetCursorScreenPos();
float fullW = ImGui.GetContentRegionAvail().X;
float frameH = ImGui.GetFrameHeight();
float textH = ImGui.GetTextLineHeight();
float rowHeight = frameH;
if (rowIndex % 2 == 0) if (rowIndex % 2 == 0)
{ {
var drawList = ImGui.GetWindowDrawList(); var drawList = ImGui.GetWindowDrawList();
var pMin = ImGui.GetCursorScreenPos(); var pMin = rowStartScr;
var rowHeight = ImGui.GetTextLineHeightWithSpacing() * 2.5f; var pMax = new Vector2(pMin.X + fullW, pMin.Y + rowHeight);
var pMax = new Vector2(pMin.X + colUid + colFlags + colActions + style.ItemSpacing.X * 2.0f,
pMin.Y + rowHeight);
var bgColor = UIColors.Get("FullBlack") with { W = 0.0f }; var bgColor = UIColors.Get("FullBlack").WithAlpha(0.05f);
drawList.AddRectFilled(pMin, pMax, ImGui.ColorConvertFloat4ToU32(bgColor)); drawList.AddRectFilled(pMin, pMax, ImGui.ColorConvertFloat4ToU32(bgColor));
} }
var isUserOwner = string.Equals(pair.UserData.UID, GroupFullInfo.OwnerUID, StringComparison.Ordinal); var isUserOwner = string.Equals(pair.UserData.UID, GroupFullInfo.OwnerUID, StringComparison.Ordinal);
var userInfo = userInfoOpt ?? GroupPairUserInfo.None; var userInfo = userInfoOpt ?? GroupPairUserInfo.None;
ImGui.SetCursorPosX(x0); float baselineY = rowStart.Y + (rowHeight - textH) / 2f;
ImGui.AlignTextToFramePadding();
ImGui.SetCursorPos(new Vector2(rowStart.X, baselineY));
bool hasFlag = false;
if (userInfoOpt != null && (userInfo.IsModerator() || userInfo.IsPinned() || isUserOwner))
{
if (userInfo.IsModerator())
{
_uiSharedService.IconText(FontAwesomeIcon.UserShield, UIColors.Get("LightlessPurple"));
UiSharedService.AttachToolTip("Moderator");
hasFlag = true;
}
if (userInfo.IsPinned() && !isUserOwner)
{
if (hasFlag) ImGui.SameLine(0f, style.ItemSpacing.X);
_uiSharedService.IconText(FontAwesomeIcon.Thumbtack);
UiSharedService.AttachToolTip("Pinned");
hasFlag = true;
}
if (isUserOwner)
{
if (hasFlag) ImGui.SameLine(0f, style.ItemSpacing.X);
_uiSharedService.IconText(FontAwesomeIcon.Crown, UIColors.Get("LightlessYellow"));
UiSharedService.AttachToolTip("Owner");
hasFlag = true;
}
}
if (hasFlag)
ImGui.SameLine(0f, style.ItemSpacing.X);
ImGui.SetCursorPosY(baselineY);
var note = pair.GetNote(); var note = pair.GetNote();
var text = note == null var text = note == null
@@ -848,55 +854,47 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
var boolcolor = UiSharedService.GetBoolColor(pair.IsOnline); var boolcolor = UiSharedService.GetBoolColor(pair.IsOnline);
UiSharedService.ColorText(text, boolcolor); UiSharedService.ColorText(text, boolcolor);
if (ImGui.IsItemClicked()) if (ImGui.IsItemClicked())
{
ImGui.SetClipboardText(text); ImGui.SetClipboardText(text);
}
if (!string.IsNullOrEmpty(pair.PlayerName)) if (!string.IsNullOrEmpty(pair.PlayerName))
{
UiSharedService.AttachToolTip(pair.PlayerName); UiSharedService.AttachToolTip(pair.PlayerName);
}
ImGui.SameLine(); DrawUserActions(pair, GroupFullInfo, userInfo, isUserOwner, baselineY);
ImGui.SetCursorPosX(x0 + colUid + style.ItemSpacing.X);
if (userInfoOpt != null && (userInfo.IsModerator() || userInfo.IsPinned() || isUserOwner)) // Move cursor to next row
{ ImGui.SetCursorPos(new Vector2(rowStart.X, rowStart.Y + rowHeight + style.ItemSpacing.Y));
if (userInfo.IsModerator())
{
_uiSharedService.IconText(FontAwesomeIcon.UserShield, UIColors.Get("LightlessPurple"));
UiSharedService.AttachToolTip("Moderator");
}
if (userInfo.IsPinned() && !isUserOwner)
{
_uiSharedService.IconText(FontAwesomeIcon.Thumbtack);
UiSharedService.AttachToolTip("Pinned");
}
if (isUserOwner)
{
_uiSharedService.IconText(FontAwesomeIcon.Crown, UIColors.Get("LightlessYellow"));
UiSharedService.AttachToolTip("Owner");
}
}
else
{
_uiSharedService.IconText(FontAwesomeIcon.None);
}
ImGui.SameLine();
ImGui.SetCursorPosX(x0 + colUid + colFlags + style.ItemSpacing.X * 2.0f);
DrawUserActions(pair, GroupFullInfo, userInfo, isUserOwner);
ImGui.Dummy(new Vector2(0, 4 * ImGuiHelpers.GlobalScale));
} }
private void DrawUserActions(Pair pair, GroupFullInfoDto GroupFullInfo, GroupPairUserInfo userInfo, bool isUserOwner) private void DrawUserActions(Pair pair, GroupFullInfoDto GroupFullInfo, GroupPairUserInfo userInfo, bool isUserOwner, float baselineY)
{ {
var style = ImGui.GetStyle();
float frameH = ImGui.GetFrameHeight();
int buttonCount = 0;
if (_isOwner)
buttonCount += 2; // Crown + Mod
if (userInfo == GroupPairUserInfo.None || (!userInfo.IsModerator() && !isUserOwner))
buttonCount += 3; // Pin + Trash + Ban
if (buttonCount == 0)
return;
float totalWidth = buttonCount * frameH + (buttonCount - 1) * style.ItemSpacing.X;
float curX = ImGui.GetCursorPosX();
float avail = ImGui.GetContentRegionAvail().X;
float startX = curX + MathF.Max(0, avail - (totalWidth + 30f));
ImGui.SetCursorPos(new Vector2(startX, baselineY));
bool first = true;
if (_isOwner) if (_isOwner)
{ {
// Transfer ownership to user // Transfer ownership
using (ImRaii.PushColor(ImGuiCol.Text, UIColors.Get("LightlessYellow"))) using (ImRaii.PushColor(ImGuiCol.Text, UIColors.Get("LightlessYellow")))
using (ImRaii.Disabled(!UiSharedService.ShiftPressed())) using (ImRaii.Disabled(!UiSharedService.ShiftPressed()))
{ {
@@ -910,12 +908,15 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
UiSharedService.AttachToolTip("Hold SHIFT and click to transfer ownership of this Syncshell to " UiSharedService.AttachToolTip("Hold SHIFT and click to transfer ownership of this Syncshell to "
+ pair.UserData.AliasOrUID + Environment.NewLine + pair.UserData.AliasOrUID + Environment.NewLine
+ "WARNING: This action is irreversible and will close screen."); + "WARNING: This action is irreversible and will close screen.");
ImGui.SameLine();
// Mod / Demod user first = false;
// Mod / Demod
using (ImRaii.PushColor(ImGuiCol.Text, using (ImRaii.PushColor(ImGuiCol.Text,
userInfo.IsModerator() ? UIColors.Get("DimRed") : UIColors.Get("PairBlue"))) userInfo.IsModerator() ? UIColors.Get("DimRed") : UIColors.Get("PairBlue")))
{ {
if (!first) ImGui.SameLine(0f, style.ItemSpacing.X);
if (_uiSharedService.IconButton(FontAwesomeIcon.UserShield)) if (_uiSharedService.IconButton(FontAwesomeIcon.UserShield))
{ {
userInfo.SetModerator(!userInfo.IsModerator()); userInfo.SetModerator(!userInfo.IsModerator());
@@ -926,15 +927,17 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
UiSharedService.AttachToolTip( UiSharedService.AttachToolTip(
userInfo.IsModerator() ? $"Demod {pair.UserData.AliasOrUID}" : $"Mod {pair.UserData.AliasOrUID}"); userInfo.IsModerator() ? $"Demod {pair.UserData.AliasOrUID}" : $"Mod {pair.UserData.AliasOrUID}");
ImGui.SameLine(); first = false;
} }
if (userInfo == GroupPairUserInfo.None || (!userInfo.IsModerator() && !isUserOwner)) if (userInfo == GroupPairUserInfo.None || (!userInfo.IsModerator() && !isUserOwner))
{ {
// Pin user // Pin
using (ImRaii.PushColor(ImGuiCol.Text, using (ImRaii.PushColor(ImGuiCol.Text,
userInfo.IsPinned() ? UIColors.Get("DimRed") : UIColors.Get("PairBlue"))) userInfo.IsPinned() ? UIColors.Get("DimRed") : UIColors.Get("PairBlue")))
{ {
if (!first) ImGui.SameLine(0f, style.ItemSpacing.X);
if (_uiSharedService.IconButton(FontAwesomeIcon.Thumbtack)) if (_uiSharedService.IconButton(FontAwesomeIcon.Thumbtack))
{ {
userInfo.SetPinned(!userInfo.IsPinned()); userInfo.SetPinned(!userInfo.IsPinned());
@@ -946,12 +949,14 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
UiSharedService.AttachToolTip( UiSharedService.AttachToolTip(
userInfo.IsPinned() ? $"Unpin {pair.UserData.AliasOrUID}" : $"Pin {pair.UserData.AliasOrUID}"); userInfo.IsPinned() ? $"Unpin {pair.UserData.AliasOrUID}" : $"Pin {pair.UserData.AliasOrUID}");
ImGui.SameLine(); first = false;
// Remove user // Trash
using (ImRaii.PushColor(ImGuiCol.Text, UIColors.Get("DimRed"))) using (ImRaii.PushColor(ImGuiCol.Text, UIColors.Get("DimRed")))
using (ImRaii.Disabled(!UiSharedService.CtrlPressed())) using (ImRaii.Disabled(!UiSharedService.CtrlPressed()))
{ {
if (!first) ImGui.SameLine(0f, style.ItemSpacing.X);
if (_uiSharedService.IconButton(FontAwesomeIcon.Trash)) if (_uiSharedService.IconButton(FontAwesomeIcon.Trash))
{ {
_ = _apiController.GroupRemoveUser(new GroupPairDto(GroupFullInfo.Group, pair.UserData)); _ = _apiController.GroupRemoveUser(new GroupPairDto(GroupFullInfo.Group, pair.UserData));
@@ -960,12 +965,14 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
UiSharedService.AttachToolTip($"Remove {pair.UserData.AliasOrUID} from Syncshell" UiSharedService.AttachToolTip($"Remove {pair.UserData.AliasOrUID} from Syncshell"
+ UiSharedService.TooltipSeparator + "Hold CTRL to enable this button"); + UiSharedService.TooltipSeparator + "Hold CTRL to enable this button");
ImGui.SameLine(); first = false;
// Ban user // Ban
using (ImRaii.PushColor(ImGuiCol.Text, UIColors.Get("DimRed"))) using (ImRaii.PushColor(ImGuiCol.Text, UIColors.Get("DimRed")))
using (ImRaii.Disabled(!UiSharedService.CtrlPressed())) using (ImRaii.Disabled(!UiSharedService.CtrlPressed()))
{ {
if (!first) ImGui.SameLine(0f, style.ItemSpacing.X);
if (_uiSharedService.IconButton(FontAwesomeIcon.Ban)) if (_uiSharedService.IconButton(FontAwesomeIcon.Ban))
{ {
Mediator.Publish(new OpenBanUserPopupMessage(pair, GroupFullInfo)); Mediator.Publish(new OpenBanUserPopupMessage(pair, GroupFullInfo));
@@ -977,6 +984,96 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
} }
} }
private static void DrawBannedListHeader(float colIdentity, float colMeta)
{
var style = ImGui.GetStyle();
float x0 = ImGui.GetCursorPosX();
ImGui.PushStyleColor(ImGuiCol.Text, UIColors.Get("LightlessYellow"));
// User and reason
ImGui.SetCursorPosX(x0);
ImGui.TextUnformatted("User / Reason");
// Moderator and Date
ImGui.SameLine();
ImGui.SetCursorPosX(x0 + colIdentity + style.ItemSpacing.X);
ImGui.TextUnformatted("Moderator / Date");
// Actions
ImGui.SameLine();
ImGui.SetCursorPosX(x0 + colIdentity + colMeta + style.ItemSpacing.X * 2.0f);
ImGui.TextUnformatted("Actions");
ImGui.PopStyleColor();
UiSharedService.ColoredSeparator(UIColors.Get("LightlessYellow"), 1.0f);
}
private void DrawBannedRow(BannedGroupUserDto bannedUser, int rowIndex, float colIdentity, float colMeta, float colActions)
{
using var id = ImRaii.PushId("banRow_" + bannedUser.UID);
var style = ImGui.GetStyle();
float x0 = ImGui.GetCursorPosX();
if (rowIndex % 2 == 0)
{
var drawList = ImGui.GetWindowDrawList();
var pMin = ImGui.GetCursorScreenPos();
var rowHeight = ImGui.GetTextLineHeightWithSpacing() * 2.6f;
var pMax = new Vector2(
pMin.X + colIdentity + colMeta + colActions + style.ItemSpacing.X * 2.0f,
pMin.Y + rowHeight);
var bgColor = UIColors.Get("FullBlack").WithAlpha(0.10f);
drawList.AddRectFilled(pMin, pMax, ImGui.ColorConvertFloat4ToU32(bgColor));
}
ImGui.SetCursorPosX(x0);
ImGui.AlignTextToFramePadding();
string alias = bannedUser.UserAlias ?? string.Empty;
string line1 = string.IsNullOrEmpty(alias)
? bannedUser.UID
: $"{alias} ({bannedUser.UID})";
ImGui.TextUnformatted(line1);
var reason = bannedUser.Reason ?? string.Empty;
if (!string.IsNullOrWhiteSpace(reason))
{
var reasonPos = new Vector2(x0, ImGui.GetCursorPosY());
ImGui.SetCursorPos(reasonPos);
ImGui.PushStyleColor(ImGuiCol.Text, ImGuiColors.DalamudGrey);
UiSharedService.TextWrapped(reason);
ImGui.PopStyleColor();
}
ImGui.SameLine();
ImGui.SetCursorPosX(x0 + colIdentity + style.ItemSpacing.X);
ImGui.AlignTextToFramePadding();
ImGui.TextUnformatted($"By: {bannedUser.BannedBy}");
var dateText = bannedUser.BannedOn.ToLocalTime().ToString(CultureInfo.CurrentCulture);
ImGui.PushStyleColor(ImGuiCol.Text, ImGuiColors.DalamudGrey);
ImGui.TextUnformatted(dateText);
ImGui.PopStyleColor();
ImGui.SameLine();
ImGui.SetCursorPosX(x0 + colIdentity + colMeta + style.ItemSpacing.X * 2.0f);
if (_uiSharedService.IconTextButton(FontAwesomeIcon.Check, "Unban"))
{
_apiController.GroupUnbanUser(bannedUser);
_bannedUsers.RemoveAll(b => string.Equals(b.UID, bannedUser.UID, StringComparison.Ordinal));
}
UiSharedService.AttachToolTip($"Unban {alias} ({bannedUser.UID}) from this Syncshell");
ImGui.Dummy(new Vector2(0, 4 * ImGuiHelpers.GlobalScale));
}
private void SavePruneSettings() private void SavePruneSettings()
{ {
if (_autoPruneDays <= 0) if (_autoPruneDays <= 0)