feat(qconnect): handle ACTIVE_DISCONNECTED renderer status
The wire 'status' field on RENDERER_STATE_UPDATED was decoded into the adapter payload (decoder.rs:801) then dropped — a graceful peer disconnect was invisible and the controller kept showing stale 'playing'. Add a RendererStatus enum (UNKNOWN/UNRECOGNIZED -> INACTIVE collapse) and, on ACTIVE_DISCONNECTED for the active remote renderer (id != -1), freeze the projection to UNKNOWN and emit qconnect:renderer_disconnected. Svelte surfaces it as an error toast (rendererDisconnected, all 5 locales). Pure consumer-side: no protocol change. cc
This commit is contained in:
9 files changed
+110
-1
No files matched your search
@@ -1839,6 +1839,7 @@
|
||||
"remoteQueuedNext": "In Qobuz Connect zur nächsten Wiedergabe eingereiht.",
|
||||
"remoteQueuedLater": "Zur Qobuz Connect-Warteschlange hinzugefügt.",
|
||||
"remoteQueueFailed": "Aktualisierung der Qobuz Connect-Warteschlange fehlgeschlagen.",
|
||||
"rendererDisconnected": "Das entfernte Gerät hat die Verbindung zu Qobuz Connect getrennt.",
|
||||
"sessionTitle": "Sitzung",
|
||||
"sessionUuid": "Sitzungs-UUID",
|
||||
"activeRenderer": "Aktiver Renderer",
|
||||
|
||||
@@ -1839,6 +1839,7 @@
|
||||
"remoteQueuedNext": "Queued on Qobuz Connect to play next.",
|
||||
"remoteQueuedLater": "Added to Qobuz Connect queue.",
|
||||
"remoteQueueFailed": "Failed to update Qobuz Connect queue.",
|
||||
"rendererDisconnected": "The remote device disconnected from Qobuz Connect.",
|
||||
"sessionTitle": "Session",
|
||||
"sessionUuid": "Session UUID",
|
||||
"activeRenderer": "Active renderer",
|
||||
|
||||
@@ -1839,6 +1839,7 @@
|
||||
"remoteQueuedNext": "Agregada para reproducir a continuacion en Qobuz Connect.",
|
||||
"remoteQueuedLater": "Agregada a la cola de Qobuz Connect.",
|
||||
"remoteQueueFailed": "No se pudo actualizar la cola de Qobuz Connect.",
|
||||
"rendererDisconnected": "El dispositivo remoto se desconectó de Qobuz Connect.",
|
||||
"sessionTitle": "Sesion",
|
||||
"sessionUuid": "UUID de sesion",
|
||||
"activeRenderer": "Renderer activo",
|
||||
|
||||
@@ -1839,6 +1839,7 @@
|
||||
"remoteQueuedNext": "Ajouté à Qobuz Connect pour lecture suivante.",
|
||||
"remoteQueuedLater": "Ajouté à la file Qobuz Connect.",
|
||||
"remoteQueueFailed": "Échec de la mise à jour de la file Qobuz Connect.",
|
||||
"rendererDisconnected": "L'appareil distant s'est déconnecté de Qobuz Connect.",
|
||||
"sessionTitle": "Session",
|
||||
"sessionUuid": "UUID de session",
|
||||
"activeRenderer": "Rendu actif",
|
||||
|
||||
@@ -1839,6 +1839,7 @@
|
||||
"remoteQueuedNext": "Adicionado ao Qobuz Connect para reprodução seguinte.",
|
||||
"remoteQueuedLater": "Adicionado à fila do Qobuz Connect.",
|
||||
"remoteQueueFailed": "Falha ao atualizar a fila do Qobuz Connect.",
|
||||
"rendererDisconnected": "O dispositivo remoto desconectou-se do Qobuz Connect.",
|
||||
"sessionTitle": "Sessão",
|
||||
"sessionUuid": "UUID da sessão",
|
||||
"activeRenderer": "Renderer ativo",
|
||||
|
||||
@@ -5592,6 +5592,7 @@
|
||||
let unlistenQconnectError: UnlistenFn | null = null;
|
||||
let unlistenQconnectStatusChanged: UnlistenFn | null = null;
|
||||
let unlistenQconnectAdmissionBlocked: UnlistenFn | null = null;
|
||||
let unlistenQconnectRendererDisconnected: UnlistenFn | null = null;
|
||||
let unlistenQconnectDiagnostic: UnlistenFn | null = null;
|
||||
let unlistenQconnectRendererReportDebug: UnlistenFn | null = null;
|
||||
let unlistenAudioDeviceMissing: UnlistenFn | null = null;
|
||||
@@ -5831,6 +5832,17 @@
|
||||
if (disposed) { unlisten8(); return; }
|
||||
unlistenQconnectAdmissionBlocked = unlisten8;
|
||||
|
||||
const unlistenRendererDisconnected = await listen<{ renderer_id: number }>(
|
||||
'qconnect:renderer_disconnected',
|
||||
(event) => {
|
||||
pushQobuzConnectDiagnostic('qconnect:renderer_disconnected', 'warn', event.payload);
|
||||
void refreshQobuzConnectRuntimeState();
|
||||
showToast($t('qconnect.rendererDisconnected'), 'error');
|
||||
}
|
||||
);
|
||||
if (disposed) { unlistenRendererDisconnected(); return; }
|
||||
unlistenQconnectRendererDisconnected = unlistenRendererDisconnected;
|
||||
|
||||
const unlisten9 = await listen<QconnectDiagnosticsPayload>('qconnect:diagnostic', (event) => {
|
||||
pushQobuzConnectDiagnostic(
|
||||
event.payload.channel,
|
||||
@@ -5896,6 +5908,7 @@
|
||||
unlistenQconnectError?.();
|
||||
unlistenQconnectStatusChanged?.();
|
||||
unlistenQconnectAdmissionBlocked?.();
|
||||
unlistenQconnectRendererDisconnected?.();
|
||||
unlistenQconnectDiagnostic?.();
|
||||
unlistenQconnectRendererReportDebug?.();
|
||||
unlistenAudioDeviceMissing?.();
|
||||
|
||||
Reference in new issue
Block a user