diff --git a/www/daemon/worker.php b/www/daemon/worker.php index 1a8d1a800..d5be03c1a 100755 --- a/www/daemon/worker.php +++ b/www/daemon/worker.php @@ -1603,7 +1603,7 @@ phpSession('write', 'volknob', '0'); sysCmd('/var/www/util/vol.sh 0'); $result = sqlQuery("UPDATE cfg_system SET value='0' WHERE param='btactive' OR param='aplactive' OR - param='spotactive' OR param='qbzctive' OR param='slactive' OR param='paactive' OR param='rbactive' OR + param='spotactive' OR param='qbzactive' OR param='slactive' OR param='paactive' OR param='rbactive' OR param='inpactive'", $dbh); workerLog('worker: Active flags: at least one true'); workerLog('worker: Reset flags: all reset to false'); @@ -3301,9 +3301,20 @@ function runQueuedJob() { break; // Qobuz Connect case 'qobuzsvc': - stopQobuz(); - if ($_SESSION['qobuzsvc'] == 1) { - startQobuz(); + // A settings save does not need the daemon taken down: qbzd writes + // its own stores and nudges a running daemon through + // POST /api/settings/reload, which reloads in place. Restarting + // ends the Qobuz Connect session instead, and the app has to be + // pointed at the player again before anything plays. The service + // toggle and the manual restart button still go the long way. + if ($_SESSION['w_queueargs'] == 'apply_settings' && $_SESSION['qobuzsvc'] == 1 && + !empty(sysCmd('pgrep -x qbzd'))) { + cfgQobuz(); + } else { + stopQobuz(); + if ($_SESSION['qobuzsvc'] == 1) { + startQobuz(); + } } if ($_SESSION['w_queueargs'] == 'disconnect_renderer' && $_SESSION['rsmafterqbz'] == 'Yes') { sysCmd('mpc play'); diff --git a/www/inc/constants.php b/www/inc/constants.php index 9dac80352..6cc37d7f7 100755 --- a/www/inc/constants.php +++ b/www/inc/constants.php @@ -149,6 +149,7 @@ const NOTIFY_DURATION_INFINITE = 8640000; // 100 days const NOTIFY_MSG_SYSTEM_RESTART_REQD = 'Restart the system for the changes to take effect.'; const NOTIFY_MSG_SVC_RESTARTED = ' has been restarted to make the changes effective.'; +const NOTIFY_MSG_SVC_SETTINGS_APPLIED = ' settings have been applied.'; const NOTIFY_MSG_SVC_MANUAL_RESTART = ' has been restarted.'; const NOTIFY_MSG_LOCALDISPLAY_STARTING = 'Local display is starting...'; const NOTIFY_MSG_PEPPYDISPLAY_STARTING = 'Peppy display is starting...'; diff --git a/www/inc/renderer.php b/www/inc/renderer.php index 9c5f3d957..241ecbc02 100644 --- a/www/inc/renderer.php +++ b/www/inc/renderer.php @@ -264,9 +264,7 @@ function isSpotifyUpgradable() { // Qobuz Connect // Copyright 2026 @PhilipVinc qbz fork of moode / https://github.com/PhilipVinc/moode -function startQobuz() { - // Logging - $logging = $_SESSION['debuglog'] == '1' ? ' > ' . QBZD_LOG : ' > /dev/null'; +function cfgQobuz() { // Settings $result = sqlRead('cfg_qobuz', sqlConnect()); $cfgQobuz = array(); @@ -299,7 +297,7 @@ function startQobuz() { sysCmd('qbzd settings set audio.normalization_enabled ' . $cfgQobuz['normalization_enabled']); sysCmd('qbzd settings set audio.allow_quality_fallback true'); sysCmd('qbzd settings set audio.gapless_enabled ' . $cfgQobuz['gapless_enabled']); - sysCmd('qbzd settings set audio.quality_fallback_behavior ' . $cfgQobuz['quality_fallback_behaviour']); + sysCmd('qbzd settings set audio.quality_fallback_behavior ' . $cfgQobuz['quality_fallback_behavior']); sysCmd('qbzd settings set audio.streaming_only ' . $cfgQobuz['streaming_only']); sysCmd('qbzd settings set audio.stream_first_track ' . $cfgQobuz['stream_first_track']); sysCmd('qbzd settings set audio.cache_to_disk ' . $cfgQobuz['cache_to_disk']); @@ -307,6 +305,12 @@ function startQobuz() { sysCmd('qbzd settings set audio.alsa_buffer_ms ' . $cfgQobuz['alsa_buffer_ms']); // Event script sysCmd('qbzd settings set hooks.script /var/local/www/commandw/qbzevent.sh'); +} +function startQobuz() { + // Logging + $logging = $_SESSION['debuglog'] == '1' ? ' > ' . QBZD_LOG : ' > /dev/null'; + + cfgQobuz(); // Start the daemon $cmd = 'qbzd run' . $logging . ' 2>&1 &'; @@ -357,7 +361,7 @@ function isQobuzInstalled() { return empty($result) ? false : true; } function isQobuzUpgradable() { - $installedVersion = sysCmd('dpkg-query --showformat=\'${Version}\n\' --show librespot | grep moode')[0]; + $installedVersion = sysCmd('dpkg-query --showformat=\'${Version}\n\' --show qbzd | grep moode')[0]; $availableVersion = sqlQuery("SELECT version FROM cfg_plugin WHERE component='renderer' AND type='qobuz-connect'", sqlConnect())[0]['version']; return ($installedVersion == $availableVersion ? false : true); } diff --git a/www/qbz-config.php b/www/qbz-config.php index b5811c362..93e5de20e 100644 --- a/www/qbz-config.php +++ b/www/qbz-config.php @@ -27,8 +27,8 @@ sqlUpdate('cfg_qobuz', $dbh, $key, $value); } if ($_SESSION['qobuzsvc'] == '1') { - $notify = array('title' => NOTIFY_TITLE_INFO, 'msg' => NAME_QOBUZ . NOTIFY_MSG_SVC_RESTARTED); - submitJob('qobuzsvc', '', $notify['title'], $notify['msg']); + $notify = array('title' => NOTIFY_TITLE_INFO, 'msg' => NAME_QOBUZ . NOTIFY_MSG_SVC_SETTINGS_APPLIED); + submitJob('qobuzsvc', 'apply_settings', $notify['title'], $notify['msg']); } }