fix: correct Settings actions in Laya ready state and clear stale AI warning (#12)

Offer the right actions in Settings when Laya is ready/available
instead of leaving irrelevant ones, and stop showing the ChannelList
local-AI warning once the runtime is actually available. Derive both
from layaStatusPresentation and cover the ready/available action set
with tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
blomios
2026-10-02 14:34:30 +02:00
parent 9a70d18d30
commit 4f65588893
5 changed files with 43 additions and 9 deletions

View File

@ -768,6 +768,10 @@ h4 {
background: var(--color-bg-tertiary);
}
.laya-model-panel [hidden] {
display: none !important;
}
.laya-model-heading,
.laya-model-actions {
display: flex;

View File

@ -10,7 +10,7 @@
<title>nodecast-tv | IPTV Player</title>
<meta name="description" content="Stream live TV, movies, and series with EPG support">
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<link rel="stylesheet" href="css/main.css?v=5">
<link rel="stylesheet" href="css/main.css?v=6">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Outfit:wght@800&display=swap"
@ -1184,9 +1184,9 @@
<script src="/js/components/VideoPlayer.js?v=5"></script>
<script src="/js/services/channelLanguageDetection.js?v=1"></script>
<script src="/js/services/channelLanguageFusion.js?v=1"></script>
<script src="/js/services/layaStatusPresentation.js?v=2"></script>
<script src="/js/services/layaStatusPresentation.js?v=3"></script>
<script src="/js/services/channelVariantGrouping.js?v=4"></script>
<script src="/js/components/ChannelList.js?v=8"></script>
<script src="/js/components/ChannelList.js?v=9"></script>
<script src="/js/components/SourceManager.js?v=2"></script>
<script src="/js/components/EpgGuide.js?v=2"></script>
<script src="/js/pages/HomePage.js?v=2"></script>

View File

@ -363,14 +363,19 @@ class ChannelList {
const results = new Map();
try {
const status = await API.laya.getStatus();
if (!status?.modelPresent || !status?.runtimeAvailable) {
const statusWarning = LayaStatusPresentation.channelListWarning(mode, status);
if (statusWarning) {
if (requestId !== this._languageDetectionRequest) return;
this.layaLanguageResults.clear();
this.languageDetectionFallback = true;
this.languageDetectionNotice = 'Local AI service is unavailable. Standard channel matching is being used.';
this.languageDetectionNotice = statusWarning;
this.render();
return;
}
if (requestId !== this._languageDetectionRequest) return;
this.languageDetectionNotice = '';
this.languageDetectionFallback = false;
this.render();
for (let index = 0; index < descriptors.length; index += 64) {
const response = await API.laya.detectLanguages(descriptors.slice(index, index + 64));
(response.results || []).forEach(result => results.set(String(result.id), result));
@ -383,7 +388,7 @@ class ChannelList {
if (requestId !== this._languageDetectionRequest) return;
this.layaLanguageResults.clear();
this.languageDetectionFallback = true;
this.languageDetectionNotice = 'Local AI service is unavailable. Standard channel matching is being used.';
this.languageDetectionNotice = LayaStatusPresentation.channelListWarning(mode, {}, true);
console.warn('[ChannelList] Local AI language detection unavailable:', err.message);
}
this.render();
@ -442,6 +447,7 @@ class ChannelList {
window.app?.navigateTo?.('settings');
window.app?.pages?.settings?.switchTab?.('player');
});
notice.appendChild(document.createTextNode(' '));
notice.appendChild(settingsButton);
this.container.appendChild(notice);
}

View File

@ -77,5 +77,13 @@
};
}
return { presentLayaStatus };
function channelListWarning(mode, status = {}, batchFailed = false) {
if (mode === 'algo') return '';
if (batchFailed || status.modelPresent !== true || status.runtimeAvailable !== true) {
return 'Local AI service is unavailable. Standard channel matching is being used.';
}
return '';
}
return { channelListWarning, presentLayaStatus };
});