Ajout de la fonctionnalité de transfert de queue entre renderers

Implémentation complète de la fonctionnalité de transfert de queue entre renderers :
- Ajout d'une nouvelle API POST /renderers/{id}/queue/transfer
- Intégration dans le backend avec la méthode transfer_queue dans ControlPoint
- Mise à jour des structures de données pour inclure l'ID de playlist dans les snapshots
- Ajout d'une interface utilisateur dans RendererDrawer avec menu déroulant pour le transfert
- Gestion des écouteurs d'événements pour fermer le menu en dehors
- Support du transfert de la queue avec préservation de la playlist binding
- Ajout de tests et documentation OpenAPI
This commit is contained in:
2026-01-09 21:35:00 +01:00
parent 58ac28489c
commit bd8f87fbe4
10 changed files with 466 additions and 6 deletions

View File

@@ -166,6 +166,7 @@ pub trait QueueBackend {
let QueueSnapshot {
items,
current_index,
..
} = snapshot;
if items.is_empty() {
@@ -198,6 +199,7 @@ pub trait QueueBackend {
let QueueSnapshot {
items,
current_index,
..
} = snapshot;
if items.is_empty() {

View File

@@ -97,6 +97,7 @@ impl QueueBackend for InternalQueue {
Ok(QueueSnapshot {
items,
current_index: self.current_index,
playlist_id: None,
})
}

View File

@@ -549,6 +549,7 @@ impl QueueBackend for OpenHomeQueue {
Ok(QueueSnapshot {
items: items,
current_index: current_index,
playlist_id: None,
})
}

View File

@@ -63,7 +63,6 @@ impl PlaybackItem {
}
}
/// Logical snapshot of a renderer queue.
///
/// This is the canonical view used by the ControlPoint and the REST/API
@@ -76,6 +75,10 @@ pub struct QueueSnapshot {
/// Index (0-based) of the current item in `items`, or `None` if
/// no item is currently selected.
pub current_index: Option<usize>,
/// Optional playlist ID if the queue is bound to a specific playlist.
/// This allows reconstructing a queue from a snapshot by referencing
/// the source playlist, enabling transfer between renderers.
pub playlist_id: Option<String>,
}
impl QueueSnapshot {