Skip to content

Commit 8392ec7

Browse files
committed
3.0.5
1 parent c522ef1 commit 8392ec7

5 files changed

Lines changed: 41 additions & 20 deletions

File tree

Snowcloak/Services/Mediator/Messages/Messages.Ui.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,23 @@ namespace Snowcloak.Services.Mediator;
99

1010
#pragma warning disable MA0048 // File name must match type name
1111
#pragma warning disable S2094
12-
public record OpenSettingsUiMessage : MessageBase;
12+
public record OpenSettingsUiMessage : SameThreadMessage;
1313
public record NotificationMessage
1414
(string Title, string Message, NotificationType Type, TimeSpan? TimeShownOnScreen = null) : MessageBase;
15-
public record UiToggleMessage(Type UiType) : MessageBase;
16-
public record ProfilePopoutToggle(Pair? Pair) : MessageBase;
15+
public record UiToggleMessage(Type UiType) : SameThreadMessage;
16+
public record ProfilePopoutToggle(Pair? Pair) : SameThreadMessage;
1717
public record CompactUiChange(Vector2 Size, Vector2 Position) : MessageBase;
1818
public record ProfileOpenStandaloneMessage(UserData UserData, Pair? Pair = null, ProfileVisibility? RequestedVisibility = null,
1919
string? Ident = null, string? FallbackName = null) : MessageBase;
2020
public record RemoveWindowMessage(WindowMediatorSubscriberBase Window) : MessageBase;
21-
public record OpenReportPopupMessage(Pair PairToReport, string Ident, ProfileVisibility Visibility, long Revision) : MessageBase;
22-
public record OpenBanUserPopupMessage(Pair PairToBan, GroupFullInfoDto GroupFullInfoDto) : MessageBase;
21+
public record OpenReportPopupMessage(Pair PairToReport, string Ident, ProfileVisibility Visibility, long Revision) : SameThreadMessage;
22+
public record OpenBanUserPopupMessage(Pair PairToBan, GroupFullInfoDto GroupFullInfoDto) : SameThreadMessage;
2323
public record OpenSyncshellAdminPanel(GroupFullInfoDto GroupInfo) : MessageBase;
2424
public record OpenSyncshellEventsWindow(GroupFullInfoDto GroupInfo) : MessageBase;
2525
public record OpenPermissionWindow(Pair Pair) : MessageBase;
2626
public record OpenPairAnalysisWindow(Pair Pair) : MessageBase;
2727
public record OpenSyncTroubleshootingWindow(Pair Pair) : MessageBase;
28-
public record OpenBbCodeLinkPopupMessage(string Url) : MessageBase;
29-
public record OpenFrostbrandUiMessage : MessageBase;
28+
public record OpenBbCodeLinkPopupMessage(string Url) : SameThreadMessage;
29+
public record OpenFrostbrandUiMessage : SameThreadMessage;
3030
#pragma warning restore S2094
3131
#pragma warning restore MA0048 // File name must match type name

Snowcloak/Services/Mediator/Messages/Messages.Venue.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ namespace Snowcloak.Services.Mediator;
55

66
#pragma warning disable MA0048 // File name must match type name
77
#pragma warning disable S2094
8-
public record OpenVenueSyncshellPopupMessage(VenueSyncshellPrompt Prompt) : MessageBase;
8+
public record OpenVenueSyncshellPopupMessage(VenueSyncshellPrompt Prompt) : SameThreadMessage;
99
public record VenueSyncshellJoinAcceptedMessage(VenueSyncshellDto Venue, VenueLocationDto Location) : MessageBase;
10-
public record OpenVenueRegistrationWindowMessage(VenueRegistrationContext Context) : MessageBase;
11-
public record OpenVenueRegistryWindowMessage : MessageBase;
12-
public record OpenVenueAdsWindowMessage(bool OpenCreate) : MessageBase;
10+
public record OpenVenueRegistrationWindowMessage(VenueRegistrationContext Context) : SameThreadMessage;
11+
public record OpenVenueRegistryWindowMessage : SameThreadMessage;
12+
public record OpenVenueAdsWindowMessage(bool OpenCreate) : SameThreadMessage;
1313
#pragma warning restore S2094
1414
#pragma warning restore MA0048 // File name must match type name

Snowcloak/Snowcloak.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<Project Sdk="Dalamud.NET.Sdk/15.0.0">
33
<PropertyGroup>
44
<AssemblyName>Snowcloak</AssemblyName>
5-
<Version>3.0.4.0</Version>
5+
<Version>3.0.5.0</Version>
66
<PackageProjectUrl>https://github.com/Eauldane/SnowcloakClient/</PackageProjectUrl>
77
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
88
<Configurations>Release;Debug</Configurations>

Snowcloak/UI/Components/DrawGroupPair.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ public class DrawGroupPair : DrawPairBase
2828
private readonly CharaDataManager _charaDataManager;
2929
private readonly SnowcloakConfigService _configService;
3030
public long VRAMUsage { get; set; }
31+
public GroupFullInfoDto Group => _group;
32+
public GroupPairFullInfoDto GroupPairInfo => _fullInfoDto;
3133

3234
public DrawGroupPair(string id, Pair entry, ApiController apiController,
3335
SnowMediator snowMediator, GroupFullInfoDto group, GroupPairFullInfoDto fullInfoDto,

Snowcloak/UI/Components/GroupPanel.cs

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ internal sealed class GroupPanel
5555
private string? _publicSyncshellAliasToJoin;
5656
private readonly ConcurrentDictionary<string, GroupCommunityDto> _communityCache = new(StringComparer.Ordinal);
5757
private readonly ConcurrentDictionary<string, bool> _communityLoading = new(StringComparer.Ordinal);
58+
private readonly Dictionary<string, DrawGroupPair> _groupPairRowCache = new(StringComparer.Ordinal);
5859

5960
public GroupPanel(SnowMediator mediator, ApiController apiController, DalamudUtilService dalamudUtilService, PairManager pairManager,
6061
UidDisplayHandler uidDisplayHandler, SnowcloakConfigService snowcloakConfig, NotesStore notesStore, ShellConfigStore shellConfigStore,
@@ -579,13 +580,7 @@ private void DrawSyncshell(GroupFullInfoDto groupDto, List<Pair> pairsInGroup)
579580
continue;
580581
}
581582

582-
var drawPair = new DrawGroupPair(
583-
groupDto.GID + pair.UserData.UID, pair,
584-
ApiController, _mediator, groupDto,
585-
groupPairInfo,
586-
_uidDisplayHandler,
587-
_charaDataManager,
588-
_snowcloakConfig);
583+
var drawPair = GetGroupPairRow(groupDto, pair, groupPairInfo);
589584

590585
bool pausedByYou;
591586
bool pausedByOther;
@@ -654,6 +649,28 @@ private void DrawSyncshell(GroupFullInfoDto groupDto, List<Pair> pairsInGroup)
654649
ImGui.Unindent(20);
655650
}
656651

652+
private DrawGroupPair GetGroupPairRow(GroupFullInfoDto groupDto, Pair pair, GroupPairFullInfoDto groupPairInfo)
653+
{
654+
var id = groupDto.GID + pair.UserData.UID;
655+
if (!_groupPairRowCache.TryGetValue(id, out var row)
656+
|| !ReferenceEquals(row.Pair, pair)
657+
|| !ReferenceEquals(row.Group, groupDto)
658+
|| !ReferenceEquals(row.GroupPairInfo, groupPairInfo))
659+
{
660+
row = new DrawGroupPair(id, pair, ApiController, _mediator, groupDto, groupPairInfo,
661+
_uidDisplayHandler, _charaDataManager, _snowcloakConfig);
662+
_groupPairRowCache[id] = row;
663+
}
664+
665+
return row;
666+
}
667+
668+
private void PruneGroupPairRowCache(int activeEntryCount)
669+
{
670+
if (_groupPairRowCache.Count > activeEntryCount * 4 + 64)
671+
_groupPairRowCache.Clear();
672+
}
673+
657674
private void DrawGroupCommunity(GroupFullInfoDto groupDto)
658675
{
659676
var community = GetCommunity(groupDto);
@@ -1066,15 +1083,17 @@ private void DrawSyncShellButtons(GroupFullInfoDto groupDto, List<Pair> groupPai
10661083
private void DrawSyncshellList(float contentWidth, float ySize)
10671084
{
10681085
ImGui.BeginChild("list", new Vector2(contentWidth, ySize), border: false);
1086+
var groups = _pairManager.GroupPairs.OrderBy(g => g.Key.Group.AliasOrGID, StringComparer.OrdinalIgnoreCase).ToList();
10691087
using (ImRaii.PushStyle(ImGuiStyleVar.FramePadding, new Vector2(ImGui.GetStyle().FramePadding.X, 7f * ImGuiHelpers.GlobalScale)))
10701088
using (ImRaii.PushStyle(ImGuiStyleVar.ItemSpacing, new Vector2(ImGui.GetStyle().ItemSpacing.X, 2f * ImGuiHelpers.GlobalScale)))
10711089
{
1072-
foreach (var entry in _pairManager.GroupPairs.OrderBy(g => g.Key.Group.AliasOrGID, StringComparer.OrdinalIgnoreCase).ToList())
1090+
foreach (var entry in groups)
10731091
{
10741092
using (ImRaii.PushId(entry.Key.Group.GID)) DrawSyncshell(entry.Key, entry.Value);
10751093
}
10761094
}
10771095
ImGui.EndChild();
1096+
PruneGroupPairRowCache(groups.Sum(g => g.Value.Count));
10781097
}
10791098

10801099
}

0 commit comments

Comments
 (0)