diff --git a/core/imports/pipeline.py b/core/imports/pipeline.py index 50c774b2..57b551d0 100644 --- a/core/imports/pipeline.py +++ b/core/imports/pipeline.py @@ -529,7 +529,7 @@ def post_process_matched_download(context_key, context, file_path, runtime, meta context, verification_msg, automation_engine, - trigger='acoustid', + trigger='acoustid_unverified' if _skip_as_fail else 'acoustid', ) _mark_task_quarantined(context, quarantine_path) logger.error(f"File quarantined due to verification failure: {quarantine_path}") diff --git a/web_server.py b/web_server.py index abab67c6..1e5cc862 100644 --- a/web_server.py +++ b/web_server.py @@ -7783,7 +7783,8 @@ def get_verification_config(): queue collapses to quarantine-only in the UI.""" try: enabled = bool(config_manager.get('acoustid.enabled', False)) - return jsonify({"success": True, "acoustid_enabled": enabled}) + require_verified = bool(config_manager.get('acoustid.require_verified', False)) + return jsonify({"success": True, "acoustid_enabled": enabled, "require_verified": require_verified}) except Exception as e: return jsonify({"success": True, "acoustid_enabled": True, "error": str(e)}) diff --git a/webui/static/pages-extra.js b/webui/static/pages-extra.js index 6de7de97..5b7fbe35 100644 --- a/webui/static/pages-extra.js +++ b/webui/static/pages-extra.js @@ -2619,6 +2619,10 @@ async function _verifLoadConfig() { const r = await fetch('/api/verification/config'); const d = await r.json(); _verifAcoustidEnabled = !!(d && d.acoustid_enabled); + // When require_verified is on, nothing ever lands in the library as + // "unverified" — unconfirmed tracks go straight to quarantine instead. + // Collapse the sub-view to quarantine-only just like the no-AcoustID case. + if (_verifAcoustidEnabled && d && d.require_verified) _verifAcoustidEnabled = false; } catch (e) { _verifAcoustidEnabled = true; } _verifConfigLoading = false; if (_verifAcoustidEnabled === false) { @@ -2626,7 +2630,7 @@ async function _verifLoadConfig() { const pill = document.querySelector('.adl-pill[data-filter="unverified"]'); if (pill) { pill.textContent = '🛡 Quarantine'; - pill.title = 'Files that failed import checks and were NOT imported. (AcoustID is not configured, so there is no unverified review queue.)'; + pill.title = 'Files that failed import checks and were NOT imported. (AcoustID is not configured or require-verified is on, so there is no unverified review queue.)'; } if (_adlFilter === 'unverified') { _verifLoadQuarantine(true); _adlRender(); } } @@ -2655,6 +2659,7 @@ async function _verifLoadQuarantine(force) { const _VERIF_QUAR_TRIGGERS = { integrity: ['DURATION / INTEGRITY', 'verif-rb-int'], acoustid: ['ACOUSTID MISMATCH', 'verif-rb-force'], + acoustid_unverified: ['ACOUSTID UNVERIFIED', 'verif-rb-unv'], bit_depth: ['BIT DEPTH FILTER', 'verif-rb-int'], };