This commit is contained in:
2025-11-25 07:14:59 +09:00
parent 9c794137c1
commit ef592032b3
111 changed files with 20622 additions and 3476 deletions

View File

@@ -12,11 +12,16 @@ using LightlessSync.Services;
using LightlessSync.Services.Mediator;
using LightlessSync.Services.ServerConfiguration;
using LightlessSync.UI.Handlers;
using LightlessSync.UI.Models;
using LightlessSync.UI.Style;
using LightlessSync.Utils;
using LightlessSync.WebAPI;
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Text;
using LightlessSync.UI;
namespace LightlessSync.UI.Components;
@@ -27,29 +32,41 @@ public class DrawUserPair
protected readonly LightlessMediator _mediator;
protected readonly List<GroupFullInfoDto> _syncedGroups;
private readonly GroupFullInfoDto? _currentGroup;
protected Pair _pair;
protected Pair? _pair;
private PairUiEntry _uiEntry;
protected PairDisplayEntry _displayEntry;
private readonly string _id;
private readonly SelectTagForPairUi _selectTagForPairUi;
private readonly ServerConfigurationManager _serverConfigurationManager;
private readonly UiSharedService _uiSharedService;
private readonly PlayerPerformanceConfigService _performanceConfigService;
private readonly CharaDataManager _charaDataManager;
private readonly PairLedger _pairLedger;
private float _menuWidth = -1;
private bool _wasHovered = false;
private TooltipSnapshot _tooltipSnapshot = TooltipSnapshot.Empty;
private string _cachedTooltip = string.Empty;
public DrawUserPair(string id, Pair entry, List<GroupFullInfoDto> syncedGroups,
public DrawUserPair(
string id,
PairUiEntry uiEntry,
Pair? legacyPair,
GroupFullInfoDto? currentGroup,
ApiController apiController, IdDisplayHandler uIDDisplayHandler,
LightlessMediator lightlessMediator, SelectTagForPairUi selectTagForPairUi,
ApiController apiController,
IdDisplayHandler uIDDisplayHandler,
LightlessMediator lightlessMediator,
SelectTagForPairUi selectTagForPairUi,
ServerConfigurationManager serverConfigurationManager,
UiSharedService uiSharedService, PlayerPerformanceConfigService performanceConfigService,
CharaDataManager charaDataManager)
UiSharedService uiSharedService,
PlayerPerformanceConfigService performanceConfigService,
CharaDataManager charaDataManager,
PairLedger pairLedger)
{
_id = id;
_pair = entry;
_syncedGroups = syncedGroups;
_uiEntry = uiEntry;
_displayEntry = uiEntry.DisplayEntry;
_pair = legacyPair ?? throw new ArgumentNullException(nameof(legacyPair));
_syncedGroups = uiEntry.DisplayEntry.Groups.ToList();
_currentGroup = currentGroup;
_apiController = apiController;
_displayHandler = uIDDisplayHandler;
@@ -59,6 +76,18 @@ public class DrawUserPair
_uiSharedService = uiSharedService;
_performanceConfigService = performanceConfigService;
_charaDataManager = charaDataManager;
_pairLedger = pairLedger;
}
public PairDisplayEntry DisplayEntry => _displayEntry;
public PairUiEntry UiEntry => _uiEntry;
public void UpdateDisplayEntry(PairUiEntry entry)
{
_uiEntry = entry;
_displayEntry = entry.DisplayEntry;
_syncedGroups.Clear();
_syncedGroups.AddRange(entry.DisplayEntry.Groups);
}
public Pair Pair => _pair;
@@ -77,6 +106,10 @@ public class DrawUserPair
DrawName(posX, rightSide);
}
_wasHovered = ImGui.IsItemHovered();
if (_wasHovered)
{
Selune.RegisterHighlight(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), spanFullWidth: true);
}
color.Dispose();
}
@@ -103,7 +136,7 @@ public class DrawUserPair
if (_uiSharedService.IconTextButton(FontAwesomeIcon.PlayCircle, "Cycle pause state", _menuWidth, true))
{
_ = _apiController.CyclePauseAsync(_pair.UserData);
_ = _apiController.CyclePauseAsync(_pair);
ImGui.CloseCurrentPopup();
}
ImGui.Separator();
@@ -313,6 +346,7 @@ public class DrawUserPair
_pair.PlayerName ?? string.Empty,
_pair.LastAppliedDataBytes,
_pair.LastAppliedApproximateVRAMBytes,
_pair.LastAppliedApproximateEffectiveVRAMBytes,
_pair.LastAppliedDataTris,
_pair.IsPaired,
groupDisplays is null ? ImmutableArray<string>.Empty : ImmutableArray.CreateRange(groupDisplays));
@@ -381,7 +415,14 @@ public class DrawUserPair
{
builder.Append(Environment.NewLine);
builder.Append("Approx. VRAM Usage: ");
builder.Append(UiSharedService.ByteToString(snapshot.LastAppliedApproximateVRAMBytes, true));
var originalText = UiSharedService.ByteToString(snapshot.LastAppliedApproximateVRAMBytes, true);
builder.Append(originalText);
if (snapshot.LastAppliedApproximateEffectiveVRAMBytes >= 0)
{
builder.Append(" (Effective: ");
builder.Append(UiSharedService.ByteToString(snapshot.LastAppliedApproximateEffectiveVRAMBytes, true));
builder.Append(')');
}
}
if (snapshot.LastAppliedDataTris >= 0)
@@ -420,12 +461,13 @@ public class DrawUserPair
string PlayerName,
long LastAppliedDataBytes,
long LastAppliedApproximateVRAMBytes,
long LastAppliedApproximateEffectiveVRAMBytes,
long LastAppliedDataTris,
bool IsPaired,
ImmutableArray<string> GroupDisplays)
{
public static TooltipSnapshot Empty { get; } =
new(false, false, false, IndividualPairStatus.None, string.Empty, string.Empty, -1, -1, -1, false, ImmutableArray<string>.Empty);
new(false, false, false, IndividualPairStatus.None, string.Empty, string.Empty, -1, -1, -1, -1, false, ImmutableArray<string>.Empty);
}
private void DrawPairedClientMenu()
@@ -647,7 +689,13 @@ public class DrawUserPair
private void DrawSyncshellMenu(GroupFullInfoDto group, bool selfIsOwner, bool selfIsModerator, bool userIsPinned, bool userIsModerator)
{
if (selfIsOwner || ((selfIsModerator) && (!userIsModerator)))
var showModeratorActions = selfIsOwner || (selfIsModerator && !userIsModerator);
var showOwnerActions = selfIsOwner;
if (showModeratorActions || showOwnerActions)
ImGui.Separator();
if (showModeratorActions)
{
ImGui.TextUnformatted("Syncshell Moderator Functions");
var pinText = userIsPinned ? "Unpin user" : "Pin user";
@@ -683,7 +731,7 @@ public class DrawUserPair
ImGui.Separator();
}
if (selfIsOwner)
if (showOwnerActions)
{
ImGui.TextUnformatted("Syncshell Owner Functions");
string modText = userIsModerator ? "Demod user" : "Mod user";