fix: preserve Twitch display name casing in queue details
Windows CI / verify (push) Canceled after 0s

This commit is contained in:
Sucukdeluxe
2026-09-06 13:36:29 +02:00
parent 3584556114
commit c130642911
7 changed files with 17 additions and 4 deletions
+1 -1
View File
@@ -503,7 +503,7 @@ describe('renderer queue production paths', () => {
const fingerprints = evaluate(
fragment('function getQueueRenderFingerprint', 'function hasActiveQueueDuplicate'),
'getQueueRenderFingerprint',
{ currentLanguage: 'en', selectedQueueIds: [], expandedQueueIds: new Set<string>() }
{ currentLanguage: 'en', selectedQueueIds: [], expandedQueueIds: new Set<string>(), getStreamerDisplayName: (login: string) => login }
);
const base = { id: 'live-1', status: 'downloading', progress: 1, isLive: true };
const unknown = fingerprints.exposed.getQueueRenderFingerprint([{ ...base, recordingHealth: 'unknown' }]) as string;
+2 -1
View File
@@ -193,6 +193,7 @@ function getQueueRenderFingerprint(items: QueueItem[]): string {
const lang = typeof currentLanguage === 'string' ? currentLanguage : 'en';
const pieces = items.map((item) => [
item.id,
getStreamerDisplayName(item.streamer),
item.status,
Math.round((Number(item.progress) || 0) * 10),
item.currentPart || 0,
@@ -732,7 +733,7 @@ function renderQueue(): void {
<div class="queue-details${expandedQueueIds.has(item.id) ? ' expanded' : ''}" id="${detailsId}"${expandedQueueIds.has(item.id) ? '' : ' inert'}>
<div class="queue-details-clip"><div class="queue-details-content">
<div class="queue-url-row"><span class="queue-detail-label">URL:</span><button class="queue-url-copy" type="button" data-queue-action="copy-url" aria-label="${escapeHtml(UI_TEXT.queue.ctxCopyUrl)}" title="${escapeHtml(UI_TEXT.queue.ctxCopyUrl)}: ${escapeHtml(item.url)}">${escapeHtml(item.url)}</button></div>
<div><span class="queue-detail-label">${escapeHtml(UI_TEXT.queue.detailStreamer)}</span> ${escapeHtml(item.streamer)}</div>
<div><span class="queue-detail-label">${escapeHtml(UI_TEXT.queue.detailStreamer)}</span> <span class="queue-streamer-name">${escapeHtml(getStreamerDisplayName(item.streamer))}</span></div>
<div><span class="queue-detail-label">${escapeHtml(UI_TEXT.queue.detailDuration)}</span> ${escapeHtml(item.duration_str)}</div>
<div><span class="queue-detail-label">${escapeHtml(UI_TEXT.queue.detailDate)}</span> ${escapeHtml(formatUiDateTime(item.date))}</div>
${renderQueueItemFileActions(item)}
@@ -417,6 +417,7 @@ describe('renderer streamer and VOD state regressions', () => {
config: { streamers: ['nightbot'], streamer_display_names: { nightbot: 'NightBot' } },
currentStreamer: 'nightbot',
renderStreamers: vi.fn(),
renderQueue: vi.fn(),
api: { getStreamerDisplayNames: () => new Promise<Record<string, string>>((resolve) => { resolveNames = resolve; }) },
byId: (id: string) => elements.get(id) ?? element(),
queryAll: () => [],
@@ -440,6 +441,7 @@ describe('renderer streamer and VOD state regressions', () => {
expect(displayRuntime.exposed.getStreamerDisplayName('nightbot')).toBe('NightBot');
expect((displayRuntime.window as Record<string, unknown>).getStreamerDisplayName).toBe(displayRuntime.exposed.getStreamerDisplayName);
expect(displayRuntime.renderStreamers).toHaveBeenCalledOnce();
expect(displayRuntime.renderQueue).toHaveBeenCalledOnce();
const tabRuntime = evaluate(
fragment(rendererSource, 'function showTab', 'function parseDurationToSeconds'),
+5 -1
View File
@@ -45,7 +45,10 @@ function rememberStreamerDisplayName(login: string, displayName: string): void {
const setTitle = (window as unknown as { setPageTitle?: (text: string) => void }).setPageTitle;
if (typeof setTitle === 'function') setTitle(normalizedDisplayName);
}
if (changed) renderStreamers();
if (changed) {
renderStreamers();
renderQueue();
}
}
(window as unknown as { rememberStreamerDisplayName: typeof rememberStreamerDisplayName }).rememberStreamerDisplayName = rememberStreamerDisplayName;
@@ -56,6 +59,7 @@ function renderHydratedStreamerDisplayNames(): void {
if (typeof setTitle === 'function') setTitle(getStreamerDisplayName(currentStreamer));
}
renderStreamers();
renderQueue();
}
async function hydrateStreamerDisplayNames(): Promise<void> {