Changed profile opening to use GroupData instead of full info, Added opening of syncshell profile from finder.
This commit is contained in:
@@ -84,7 +84,7 @@ public record PauseMessage(UserData UserData) : MessageBase;
|
||||
public record ProfilePopoutToggle(Pair? Pair) : MessageBase;
|
||||
public record CompactUiChange(Vector2 Size, Vector2 Position) : MessageBase;
|
||||
public record ProfileOpenStandaloneMessage(Pair Pair) : MessageBase;
|
||||
public record GroupProfileOpenStandaloneMessage(GroupFullInfoDto Group) : MessageBase;
|
||||
public record GroupProfileOpenStandaloneMessage(GroupData Group) : MessageBase;
|
||||
public record OpenGroupProfileEditorMessage(GroupFullInfoDto Group) : MessageBase;
|
||||
public record CloseGroupProfilePreviewMessage(GroupFullInfoDto Group) : MessageBase;
|
||||
public record ActiveServerChangedMessage(string ServerUrl) : MessageBase;
|
||||
|
||||
@@ -113,7 +113,7 @@ public class UiFactory
|
||||
_performanceCollectorService);
|
||||
}
|
||||
|
||||
public StandaloneProfileUi CreateStandaloneGroupProfileUi(GroupFullInfoDto groupInfo)
|
||||
public StandaloneProfileUi CreateStandaloneGroupProfileUi(GroupData groupInfo)
|
||||
{
|
||||
return new StandaloneProfileUi(
|
||||
_loggerFactory.CreateLogger<StandaloneProfileUi>(),
|
||||
|
||||
@@ -64,7 +64,7 @@ public sealed class UiService : DisposableMediatorSubscriberBase
|
||||
var existingWindow = _createdWindows.Find(p => p is StandaloneProfileUi ui
|
||||
&& ui.IsGroupProfile
|
||||
&& ui.ProfileGroupData is not null
|
||||
&& string.Equals(ui.ProfileGroupData.GID, msg.Group.Group.GID, StringComparison.Ordinal));
|
||||
&& string.Equals(ui.ProfileGroupData.GID, msg.Group.GID, StringComparison.Ordinal));
|
||||
|
||||
if (existingWindow is StandaloneProfileUi existing)
|
||||
{
|
||||
|
||||
@@ -91,7 +91,7 @@ public class DrawFolderGroup : DrawFolderBase
|
||||
if (_uiSharedService.IconTextButton(FontAwesomeIcon.AddressCard, "Open Syncshell Profile", menuWidth, true))
|
||||
{
|
||||
ImGui.CloseCurrentPopup();
|
||||
_lightlessMediator.Publish(new GroupProfileOpenStandaloneMessage(_groupFullInfoDto));
|
||||
_lightlessMediator.Publish(new GroupProfileOpenStandaloneMessage(_groupFullInfoDto.Group));
|
||||
}
|
||||
UiSharedService.AttachToolTip("Opens the profile for this syncshell in a new window.");
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ public partial class EditProfileUi
|
||||
var viewport = ImGui.GetMainViewport();
|
||||
ProfileEditorLayoutCoordinator.Enable(groupInfo.Group.GID);
|
||||
ProfileEditorLayoutCoordinator.EnsureAnchor(viewport.WorkPos, scale);
|
||||
Mediator.Publish(new GroupProfileOpenStandaloneMessage(groupInfo));
|
||||
Mediator.Publish(new GroupProfileOpenStandaloneMessage(groupInfo.Group));
|
||||
|
||||
IsOpen = true;
|
||||
_wasOpen = true;
|
||||
@@ -246,7 +246,7 @@ public partial class EditProfileUi
|
||||
|
||||
ImGui.Dummy(new Vector2(0f, 4f * scale));
|
||||
ImGui.TextColored(UIColors.Get("LightlessBlue"), "Saved Tags");
|
||||
var savedTags = _profileTagService.ResolveTags(_profileTagIds);
|
||||
var savedTags = ProfileTagService.ResolveTags(_profileTagIds);
|
||||
if (savedTags.Count == 0)
|
||||
{
|
||||
ImGui.TextDisabled("-- No tags set --");
|
||||
|
||||
@@ -434,7 +434,7 @@ public partial class EditProfileUi : WindowMediatorSubscriberBase
|
||||
|
||||
ImGui.Dummy(new Vector2(0f, 4f * scale));
|
||||
ImGui.TextColored(UIColors.Get("LightlessBlue"), "Saved Tags");
|
||||
var savedTags = _profileTagService.ResolveTags(_profileTagIds);
|
||||
var savedTags = ProfileTagService.ResolveTags(_profileTagIds);
|
||||
if (savedTags.Count == 0)
|
||||
{
|
||||
ImGui.TextDisabled("-- No tags set --");
|
||||
@@ -675,7 +675,7 @@ public partial class EditProfileUi : WindowMediatorSubscriberBase
|
||||
bool sortPayloadBeforeSubmit,
|
||||
Action<int[]>? onPayloadPrepared = null)
|
||||
{
|
||||
var tagLibrary = _profileTagService.GetTagLibrary();
|
||||
var tagLibrary = ProfileTagService.GetTagLibrary();
|
||||
if (tagLibrary.Count == 0)
|
||||
{
|
||||
ImGui.TextDisabled("No profile tags are available.");
|
||||
|
||||
@@ -91,7 +91,7 @@ public class IdDisplayHandler
|
||||
|
||||
if (ImGui.IsItemClicked(ImGuiMouseButton.Middle))
|
||||
{
|
||||
_mediator.Publish(new GroupProfileOpenStandaloneMessage(group));
|
||||
_mediator.Publish(new GroupProfileOpenStandaloneMessage(group.Group));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -24,7 +24,6 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
|
||||
private readonly ProfileTagService _profileTagService;
|
||||
private readonly UiSharedService _uiSharedService;
|
||||
private readonly UserData? _userData;
|
||||
private readonly GroupFullInfoDto? _groupInfo;
|
||||
private readonly GroupData? _groupData;
|
||||
private readonly bool _isGroupProfile;
|
||||
private readonly bool _isLightfinderContext;
|
||||
@@ -55,11 +54,11 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
|
||||
PairUiService pairUiService,
|
||||
Pair? pair,
|
||||
UserData? userData,
|
||||
GroupFullInfoDto? groupInfo,
|
||||
GroupData? groupData,
|
||||
bool isLightfinderContext,
|
||||
string? lightfinderCid,
|
||||
PerformanceCollectorService performanceCollector)
|
||||
: base(logger, mediator, BuildWindowTitle(userData, groupInfo, isLightfinderContext), performanceCollector)
|
||||
: base(logger, mediator, BuildWindowTitle(userData, groupData, isLightfinderContext), performanceCollector)
|
||||
{
|
||||
_uiSharedService = uiBuilder;
|
||||
_serverManager = serverManager;
|
||||
@@ -68,9 +67,8 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
|
||||
Pair = pair;
|
||||
_pairUiService = pairUiService;
|
||||
_userData = userData;
|
||||
_groupInfo = groupInfo;
|
||||
_groupData = groupInfo?.Group;
|
||||
_isGroupProfile = groupInfo is not null;
|
||||
_groupData = groupData;
|
||||
_isGroupProfile = groupData is not null;
|
||||
_isLightfinderContext = isLightfinderContext;
|
||||
_lightfinderCid = lightfinderCid;
|
||||
|
||||
@@ -117,12 +115,12 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
|
||||
return fallback;
|
||||
}
|
||||
|
||||
private static string BuildWindowTitle(UserData? userData, GroupFullInfoDto? groupInfo, bool isLightfinderContext)
|
||||
private static string BuildWindowTitle(UserData? userData, GroupData? groupData, bool isLightfinderContext)
|
||||
{
|
||||
if (groupInfo is not null)
|
||||
if (groupData is not null)
|
||||
{
|
||||
var alias = groupInfo.GroupAliasOrGID;
|
||||
return $"Syncshell Profile of {alias}##LightlessSyncStandaloneGroupProfileUI{groupInfo.Group.GID}";
|
||||
var alias = groupData.AliasOrGID;
|
||||
return $"Syncshell Profile of {alias}##LightlessSyncStandaloneGroupProfileUI{groupData.GID}";
|
||||
}
|
||||
|
||||
if (userData is null)
|
||||
@@ -185,7 +183,7 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
|
||||
|
||||
var profile = _lightlessProfileManager.GetLightlessProfile(userData);
|
||||
IReadOnlyList<ProfileTagDefinition> profileTags = profile.Tags.Count > 0
|
||||
? _profileTagService.ResolveTags(profile.Tags)
|
||||
? ProfileTagService.ResolveTags(profile.Tags)
|
||||
: Array.Empty<ProfileTagDefinition>();
|
||||
|
||||
if (_textureWrap == null || !profile.ImageData.Value.SequenceEqual(_lastProfilePicture))
|
||||
@@ -705,7 +703,7 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
|
||||
|
||||
private void DrawGroupProfileWindow()
|
||||
{
|
||||
if (_groupInfo is null || _groupData is null)
|
||||
if (_groupData is null)
|
||||
return;
|
||||
|
||||
var scale = ImGuiHelpers.GlobalScale;
|
||||
@@ -745,7 +743,7 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
|
||||
|
||||
var profile = _lightlessProfileManager.GetLightlessGroupProfile(_groupData);
|
||||
IReadOnlyList<ProfileTagDefinition> profileTags = profile.Tags.Count > 0
|
||||
? _profileTagService.ResolveTags(profile.Tags)
|
||||
? ProfileTagService.ResolveTags(profile.Tags)
|
||||
: Array.Empty<ProfileTagDefinition>();
|
||||
|
||||
if (_textureWrap == null || !profile.ProfileImageData.Value.SequenceEqual(_lastProfilePicture))
|
||||
@@ -787,8 +785,8 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
|
||||
int memberCount = 0;
|
||||
List<Pair>? groupMembers = null;
|
||||
var snapshot = _pairUiService.GetSnapshot();
|
||||
var groupInfo = _groupInfo;
|
||||
if (groupInfo is not null && snapshot.GroupsByGid.TryGetValue(groupInfo.GID, out var refreshedGroupInfo))
|
||||
GroupFullInfoDto groupInfo = null;
|
||||
if (_groupData is not null && snapshot.GroupsByGid.TryGetValue(_groupData.GID, out var refreshedGroupInfo))
|
||||
{
|
||||
groupInfo = refreshedGroupInfo;
|
||||
}
|
||||
@@ -912,15 +910,17 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
|
||||
bool useVanityColors = false;
|
||||
Vector4? vanityTextColor = null;
|
||||
Vector4? vanityGlowColor = null;
|
||||
string primaryHeaderText = _groupInfo.GroupAliasOrGID;
|
||||
|
||||
List<(string Text, bool UseVanityColor, bool Disabled)> secondaryHeaderLines = new()
|
||||
if (_groupData is not null && groupInfo is not null)
|
||||
{
|
||||
(_groupData.GID, false, true)
|
||||
};
|
||||
string primaryHeaderText = _groupData.AliasOrGID;
|
||||
|
||||
if (_groupInfo.Owner is not null)
|
||||
secondaryHeaderLines.Add(($"Owner: {_groupInfo.Owner.AliasOrUID}", false, true));
|
||||
List<(string Text, bool UseVanityColor, bool Disabled)> secondaryHeaderLines =
|
||||
[
|
||||
(_groupData.GID, false, true)
|
||||
];
|
||||
|
||||
if (groupInfo.Owner is not null)
|
||||
secondaryHeaderLines.Add(($"Owner: {groupInfo.Owner.AliasOrUID}", false, true));
|
||||
|
||||
var infoStartY = MathF.Max(contentStartY, bannerHeight + style.WindowPadding.Y);
|
||||
var aliasColumnX = infoOffsetX + 18f * scale;
|
||||
@@ -969,7 +969,7 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
|
||||
|
||||
var descriptionSeparatorSpacing = style.ItemSpacing.Y * 0.35f;
|
||||
var descriptionSeparatorThickness = MathF.Max(1f, scale);
|
||||
var descriptionExtraOffset = _groupInfo.Owner is not null ? style.ItemSpacing.Y * 0.6f : 0f;
|
||||
var descriptionExtraOffset = groupInfo.Owner is not null ? style.ItemSpacing.Y * 0.6f : 0f;
|
||||
var descriptionStartLocal = new Vector2(aliasColumnX, aliasAndTagsBottomLocal + descriptionSeparatorSpacing + descriptionExtraOffset);
|
||||
var horizontalInset = style.ItemSpacing.X * 0.5f;
|
||||
var descriptionSeparatorStart = windowPos + new Vector2(aliasColumnX - horizontalInset, descriptionStartLocal.Y);
|
||||
@@ -1079,6 +1079,7 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
|
||||
Size = finalSize;
|
||||
ImGui.SetWindowSize(finalSize, ImGuiCond.Always);
|
||||
}
|
||||
}
|
||||
|
||||
private IDalamudTextureWrap? GetBannerTexture(byte[] bannerBytes)
|
||||
{
|
||||
|
||||
@@ -235,7 +235,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase
|
||||
|
||||
if (_uiSharedService.IconTextButton(FontAwesomeIcon.AddressCard, "Open Syncshell Profile"))
|
||||
{
|
||||
Mediator.Publish(new GroupProfileOpenStandaloneMessage(GroupFullInfo));
|
||||
Mediator.Publish(new GroupProfileOpenStandaloneMessage(GroupFullInfo.Group));
|
||||
}
|
||||
UiSharedService.AttachToolTip("Opens the standalone Syncshell profile window for this group.");
|
||||
|
||||
|
||||
@@ -220,11 +220,19 @@ public class SyncshellFinderUI : WindowMediatorSubscriberBase
|
||||
float rightTxtW = ImGui.CalcTextSize(broadcasterName).X;
|
||||
|
||||
_uiSharedService.MediumText(displayName, UIColors.Get("LightlessPurple"));
|
||||
if (ImGui.IsItemHovered())
|
||||
ImGui.SetTooltip("Click to open profile.");
|
||||
if (ImGui.IsItemClicked())
|
||||
{
|
||||
Mediator.Publish(new GroupProfileOpenStandaloneMessage(shell.Group));
|
||||
}
|
||||
|
||||
float rightX = startX + regionW - rightTxtW - style.ItemSpacing.X;
|
||||
ImGui.SameLine();
|
||||
ImGui.SetCursorPosX(rightX);
|
||||
ImGui.TextUnformatted(broadcasterName);
|
||||
if (ImGui.IsItemHovered())
|
||||
ImGui.SetTooltip("Broadcaster of the syncshell.");
|
||||
|
||||
UiSharedService.ColoredSeparator(UIColors.Get("LightlessPurpleDefault"));
|
||||
|
||||
@@ -293,7 +301,7 @@ public class SyncshellFinderUI : WindowMediatorSubscriberBase
|
||||
ImGui.SetTooltip("Click to open profile.");
|
||||
if (ImGui.IsItemClicked())
|
||||
{
|
||||
//open profile of syncshell
|
||||
Mediator.Publish(new GroupProfileOpenStandaloneMessage(shell.Group));
|
||||
}
|
||||
|
||||
ImGui.SameLine();
|
||||
|
||||
@@ -9,10 +9,10 @@ public sealed class ProfileTagService
|
||||
{
|
||||
private static readonly IReadOnlyDictionary<int, ProfileTagDefinition> TagLibrary = CreateTagLibrary();
|
||||
|
||||
public IReadOnlyDictionary<int, ProfileTagDefinition> GetTagLibrary()
|
||||
public static IReadOnlyDictionary<int, ProfileTagDefinition> GetTagLibrary()
|
||||
=> TagLibrary;
|
||||
|
||||
public IReadOnlyList<ProfileTagDefinition> ResolveTags(IReadOnlyList<int>? tagIds)
|
||||
public static IReadOnlyList<ProfileTagDefinition> ResolveTags(IReadOnlyList<int>? tagIds)
|
||||
{
|
||||
if (tagIds is null || tagIds.Count == 0)
|
||||
return Array.Empty<ProfileTagDefinition>();
|
||||
|
||||
Reference in New Issue
Block a user