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"> <div class="setting-help-text">
Quality is set globally in <strong>Quality Profile</strong> (ranked targets) — Tidal fetches the highest tier your profile accepts. Quality is set globally in <strong>Quality Profile</strong> (ranked targets) — Tidal fetches the highest tier your profile accepts.
</div> </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>
<div class="form-group"> <div class="form-group">
<label>Tidal Download Auth:</label> <label>Tidal Download Auth:</label>
@ -4771,13 +4764,6 @@
<div class="setting-help-text"> <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. 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> </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>
<div class="form-group"> <div class="form-group">
<label>Qobuz Account:</label> <label>Qobuz Account:</label>
@ -4831,13 +4817,6 @@
<div class="setting-help-text"> <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. 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> </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>
<div class="form-group"> <div class="form-group">
<label>HiFi Status:</label> <label>HiFi Status:</label>
@ -4873,13 +4852,6 @@
<div class="setting-help-text"> <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. 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> </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>
<div class="form-group"> <div class="form-group">
<label>Deezer ARL Token:</label> <label>Deezer ARL Token:</label>
@ -4909,13 +4881,6 @@
<div class="setting-help-text"> <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. 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> </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>
<div class="form-group"> <div class="form-group">
<label>Connection:</label> <label>Connection:</label>

View file

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