fix: restore Laya language analysis and stream variants
Run Local AI language detection during full rebuilds after identity classification and restore variant expansion with a visible playing stream indicator. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -789,7 +789,7 @@ h4 {
|
||||
.channel-variant {
|
||||
width: 100%;
|
||||
display: grid;
|
||||
grid-template-columns: minmax(52px, auto) minmax(64px, auto) minmax(64px, auto) 1fr;
|
||||
grid-template-columns: minmax(52px, auto) minmax(64px, auto) minmax(64px, auto) 1fr auto;
|
||||
gap: var(--space-sm);
|
||||
padding: 6px var(--space-sm);
|
||||
border: 0;
|
||||
@ -813,6 +813,17 @@ h4 {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.variant-playing-badge {
|
||||
align-self: center;
|
||||
padding: 2px 6px;
|
||||
border-radius: 999px;
|
||||
background: var(--color-accent);
|
||||
color: var(--color-bg-primary);
|
||||
font-size: 0.68rem;
|
||||
font-weight: 700;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.variant-language {
|
||||
justify-self: start;
|
||||
padding: 1px 5px;
|
||||
|
||||
@ -891,13 +891,25 @@ class ChannelList {
|
||||
const languageDescription = language.code === 'unknown'
|
||||
? 'Unknown language'
|
||||
: `${language.label} — ${language.confidence}% confidence`;
|
||||
return `<button class="channel-variant ${hidden ? 'is-hidden' : ''}" type="button"
|
||||
const variantKey = `${variant.sourceId}:${variant.id}`;
|
||||
const playerVariant = window.app?.player?.currentChannel;
|
||||
const currentVariant = this.currentChannel?.preferredVariant;
|
||||
const playingKeys = new Set([
|
||||
channel.selectedVariantId,
|
||||
playerVariant?.sourceId !== undefined && playerVariant?.id !== undefined
|
||||
? `${playerVariant.sourceId}:${playerVariant.id}` : '',
|
||||
currentVariant?.sourceId !== undefined && currentVariant?.id !== undefined
|
||||
? `${currentVariant.sourceId}:${currentVariant.id}` : ''
|
||||
].filter(Boolean).map(String));
|
||||
const isPlaying = playingKeys.has(variantKey);
|
||||
return `<button class="channel-variant ${hidden ? 'is-hidden' : ''} ${isPlaying ? 'is-playing' : ''}" type="button"
|
||||
data-logical-id="${this.escapeHtml(channel.fingerprint)}" data-variant-id="${this.escapeHtml(String(variant.id))}"
|
||||
data-source-id="${variant.sourceId}" data-render-id="${renderId}" data-render-group="${this.escapeHtml(renderGroup)}">
|
||||
<span class="variant-quality">${ChannelVariantGrouping.getQuality(variant)}</span>
|
||||
<span class="variant-language" title="${this.escapeHtml(languageDescription)}" aria-label="${this.escapeHtml(languageDescription)}">${languageLabel}</span>
|
||||
<span class="variant-source">${this.escapeHtml(source?.name || variant.sourceType)}</span>
|
||||
<span class="variant-name">${this.escapeHtml(variant.name)}</span>
|
||||
${isPlaying ? '<span class="variant-playing-badge">Playing</span>' : ''}
|
||||
</button>`;
|
||||
}).join('') : '';
|
||||
const variantCount = Number(channel.variantCount) || channel.variants.length;
|
||||
@ -930,7 +942,7 @@ class ChannelList {
|
||||
const current = this.variantPages.get(logicalId);
|
||||
if (!append && current?.loaded) return;
|
||||
const offset = append ? (current?.page?.nextOffset || 0) : 0;
|
||||
const response = await API.live.getChannelVariants(logicalId, {
|
||||
const response = await API.live.getChannelVariants(channel.logicalChannelId || logicalId, {
|
||||
includeHidden: Boolean(this.showHiddenCheckbox?.checked),
|
||||
limit: 100,
|
||||
offset
|
||||
|
||||
@ -98,7 +98,7 @@
|
||||
visibleVariants: mappedVariants.filter(variant => !variant.isHidden),
|
||||
preferredVariant,
|
||||
language,
|
||||
selectedVariantId: `${preferredVariant.sourceId}:${preferredVariant.id}`,
|
||||
selectedVariantId: logicalChannel.selectedVariantId || `${preferredVariant.sourceId}:${preferredVariant.id}`,
|
||||
groupTitle: preferredVariant.groupTitle,
|
||||
tvgLogo: preferredVariant.tvgLogo,
|
||||
tvgId: logicalChannel.epg?.channelId || preferredVariant.tvgId,
|
||||
|
||||
Reference in New Issue
Block a user