fix(ui): remove per-source 'Allow quality fallback' checkboxes

Quality fallback is now a global setting in the Quality Profile
(ranked targets + fallback_enabled). The per-source allow_fallback
checkboxes on Tidal, Qobuz, HiFi, Deezer and Amazon were misleading —
they implied quality is still controlled per-source. Removed from HTML
and settings.js read/save. Backend defaults to allow_fallback=True
which is the correct behaviour.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
dev 2026-06-19 18:48:14 +02:00
parent b761229a00
commit bfc207f21a
2 changed files with 3 additions and 46 deletions

View file

@ -4743,13 +4743,6 @@
<div class="setting-help-text">
Quality is set globally in <strong>Quality Profile</strong> (ranked targets) — Tidal fetches the highest tier your profile accepts.
</div>
<label class="checkbox-inline" style="margin-top: 8px;">
<input type="checkbox" id="tidal-allow-fallback" checked>
Allow quality fallback
</label>
<div class="setting-help-text">
When disabled, only downloads at the exact derived quality. If unavailable, skips to the next source.
</div>
</div>
<div class="form-group">
<label>Tidal Download Auth:</label>
@ -4771,13 +4764,6 @@
<div class="setting-help-text">
Quality is set globally in <strong>Quality Profile</strong> (ranked targets) — Qobuz fetches the highest tier your profile accepts. Hi-Res requires a Qobuz Studio or Sublime subscription.
</div>
<label class="checkbox-inline" style="margin-top: 8px;">
<input type="checkbox" id="qobuz-allow-fallback" checked>
Allow quality fallback
</label>
<div class="setting-help-text">
When disabled, only downloads at the exact quality selected. If unavailable, skips to the next source.
</div>
</div>
<div class="form-group">
<label>Qobuz Account:</label>
@ -4831,13 +4817,6 @@
<div class="setting-help-text">
Quality is set globally in <strong>Quality Profile</strong> (ranked targets) — HiFi fetches the highest tier your profile accepts. Uses public API instances — no account required.
</div>
<label class="checkbox-inline" style="margin-top: 8px;">
<input type="checkbox" id="hifi-allow-fallback" checked>
Allow quality fallback
</label>
<div class="setting-help-text">
When disabled, only downloads at the exact quality selected. If unavailable, skips to the next source.
</div>
</div>
<div class="form-group">
<label>HiFi Status:</label>
@ -4873,13 +4852,6 @@
<div class="setting-help-text">
Quality is set globally in <strong>Quality Profile</strong> (ranked targets) — Deezer fetches the highest tier your profile accepts. FLAC requires a Deezer HiFi subscription.
</div>
<label class="checkbox-inline" style="margin-top: 8px;">
<input type="checkbox" id="deezer-allow-fallback" checked>
Allow quality fallback
</label>
<div class="setting-help-text">
When disabled, only downloads at the exact quality selected. If unavailable, skips to the next source.
</div>
</div>
<div class="form-group">
<label>Deezer ARL Token:</label>
@ -4909,13 +4881,6 @@
<div class="setting-help-text">
Quality is set globally in <strong>Quality Profile</strong> (ranked targets) — Amazon fetches FLAC (24-bit/48kHz Hi-Res) when your profile wants lossless, otherwise a lossy tier. Downloads via T2Tunes proxy.
</div>
<label class="checkbox-inline" style="margin-top: 8px;">
<input type="checkbox" id="amazon-allow-fallback" checked>
Allow quality fallback
</label>
<div class="setting-help-text">
Fall back to the next codec tier if the preferred one is unavailable.
</div>
</div>
<div class="form-group">
<label>Connection:</label>

View file

@ -1155,13 +1155,8 @@ async function loadSettingsData() {
loadArtSourceOrder(settings);
// Per-source download quality is now derived from the global Quality
// Profile (ranked targets) — the per-source quality selects were removed.
document.getElementById('tidal-allow-fallback').checked = settings.tidal_download?.allow_fallback !== false;
document.getElementById('qobuz-allow-fallback').checked = settings.qobuz?.allow_fallback !== false;
document.getElementById('hifi-allow-fallback').checked = settings.hifi_download?.allow_fallback !== false;
loadHiFiInstances();
document.getElementById('deezer-allow-fallback').checked = settings.deezer_download?.allow_fallback !== false;
document.getElementById('deezer-download-arl').value = settings.deezer_download?.arl || '';
document.getElementById('amazon-allow-fallback').checked = settings.amazon_download?.allow_fallback !== false;
document.getElementById('lidarr-url').value = settings.lidarr_download?.url || '';
document.getElementById('lidarr-api-key').value = settings.lidarr_download?.api_key || '';
const _prowUrl = document.getElementById('prowlarr-url');
@ -2978,11 +2973,10 @@ async function saveSettings(quiet = false) {
usenet_download_path: document.getElementById('usenet-download-path')?.value || '',
},
tidal_download: {
// quality derived from the global Quality Profile (ranked targets)
allow_fallback: document.getElementById('tidal-allow-fallback').checked,
// quality derived from the global Quality Profile (ranked targets); allow_fallback always true
},
hifi_download: {
allow_fallback: document.getElementById('hifi-allow-fallback').checked,
// quality derived from the global Quality Profile (ranked targets); allow_fallback always true
},
hifi: {
embed_tags: document.getElementById('embed-hifi').checked,
@ -2990,10 +2984,9 @@ async function saveSettings(quiet = false) {
},
deezer_download: {
arl: document.getElementById('deezer-download-arl').value || '',
allow_fallback: document.getElementById('deezer-allow-fallback').checked,
},
amazon_download: {
allow_fallback: document.getElementById('amazon-allow-fallback').checked,
// quality derived from the global Quality Profile (ranked targets); allow_fallback always true
},
lidarr_download: {
url: document.getElementById('lidarr-url').value || '',
@ -3028,7 +3021,6 @@ async function saveSettings(quiet = false) {
qobuz: {
embed_tags: document.getElementById('embed-qobuz').checked,
tags: _collectServiceTags('qobuz'),
allow_fallback: document.getElementById('qobuz-allow-fallback').checked,
},
database: {
max_workers: parseInt(document.getElementById('max-workers').value)