Add Group check, reworked world check for instances.

This commit is contained in:
CakeAndBanana
2025-09-29 23:56:11 +02:00
parent 8a9d4b8daa
commit 0b7b543dd7
2 changed files with 31 additions and 14 deletions

View File

@@ -22,7 +22,7 @@ namespace LightlessSync.UI
private IReadOnlyList<GroupFullInfoDto> _allSyncshells;
private string _userUid = string.Empty;
private List<(string Label, string? GID, bool IsAvailable)> _syncshellOptions = new();
private readonly List<(string Label, string? GID, bool IsAvailable)> _syncshellOptions = new();
public BroadcastUI(
ILogger<BroadcastUI> logger,
@@ -48,7 +48,7 @@ namespace LightlessSync.UI
MaximumSize = new(750, 400)
};
mediator.Subscribe<RefreshUiMessage>(this, async _ => await RefreshSyncshells());
mediator.Subscribe<RefreshUiMessage>(this, async _ => await RefreshSyncshells().ConfigureAwait(false));
}
private void RebuildSyncshellDropdownOptions()
@@ -62,7 +62,7 @@ namespace LightlessSync.UI
_syncshellOptions.Clear();
_syncshellOptions.Add(("None", null, true));
var addedGids = new HashSet<string>();
var addedGids = new HashSet<string>(StringComparer.Ordinal);
foreach (var shell in ownedSyncshells)
{
@@ -73,7 +73,7 @@ namespace LightlessSync.UI
if (!string.IsNullOrEmpty(selectedGid) && !addedGids.Contains(selectedGid))
{
var matching = allSyncshells.FirstOrDefault(g => g.GID == selectedGid);
var matching = allSyncshells.FirstOrDefault(g => string.Equals(g.GID, selectedGid, StringComparison.Ordinal));
if (matching != null)
{
var label = matching.GroupAliasOrGID ?? matching.GID;
@@ -97,7 +97,7 @@ namespace LightlessSync.UI
{
if (!_apiController.IsConnected)
{
_allSyncshells = Array.Empty<GroupFullInfoDto>();
_allSyncshells = [];
RebuildSyncshellDropdownOptions();
return;
}
@@ -109,7 +109,7 @@ namespace LightlessSync.UI
catch (Exception ex)
{
_logger.LogError(ex, "Failed to fetch Syncshells.");
_allSyncshells = Array.Empty<GroupFullInfoDto>();
_allSyncshells = [];
}
RebuildSyncshellDropdownOptions();
@@ -260,14 +260,14 @@ namespace LightlessSync.UI
}
var selectedGid = _configService.Current.SelectedFinderSyncshell;
var currentOption = _syncshellOptions.FirstOrDefault(o => o.GID == selectedGid);
var currentOption = _syncshellOptions.FirstOrDefault(o => string.Equals(o.GID, selectedGid, StringComparison.Ordinal));
var preview = currentOption.Label ?? "Select a Syncshell...";
if (ImGui.BeginCombo("##SyncshellDropdown", preview))
{
foreach (var (label, gid, available) in _syncshellOptions)
{
bool isSelected = gid == selectedGid;
bool isSelected = string.Equals(gid, selectedGid, StringComparison.Ordinal);
if (!available)
ImGui.PushStyleColor(ImGuiCol.Text, UIColors.Get("DimRed"));
@@ -373,10 +373,5 @@ namespace LightlessSync.UI
ImGui.EndTabBar();
}
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}
}
}

View File

@@ -9,6 +9,7 @@ using LightlessSync.WebAPI;
using Lumina.Excel.Sheets;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System.Linq;
namespace LightlessSync.UI;
@@ -141,8 +142,29 @@ internal class ContextMenu : IHostedService
private World GetWorld(uint worldId)
{
var sheet = _gameData.GetExcelSheet<World>()!;
return sheet.TryGetRow(worldId, out var world) ? world : sheet.First();
var luminaWorlds = sheet.Where(x =>
{
var dc = x.DataCenter.ValueNullable;
var name = x.Name.ExtractText();
var internalName = x.InternalName.ExtractText();
if (dc == null || dc.Value.Region == 0 || string.IsNullOrWhiteSpace(dc.Value.Name.ExtractText()))
return false;
if (string.IsNullOrWhiteSpace(name) || string.IsNullOrWhiteSpace(internalName))
return false;
if (name.Contains('-', StringComparison.Ordinal) || name.Contains('_', StringComparison.Ordinal))
return false;
return x.RowId > 3001 && IsChineseJapaneseKoreanString(name);
});
return luminaWorlds.FirstOrDefault(x => x.RowId == worldId);
}
private static bool IsChineseJapaneseKoreanString(string text) => text.All(IsChineseJapaneseKoreanCharacter);
private static bool IsChineseJapaneseKoreanCharacter(char c) => (c >= 0x4E00 && c <= 0x9FFF);
public bool IsWorldValid(uint worldId) => IsWorldValid(GetWorld(worldId));