Amélioration des pmoplaylist

This commit is contained in:
2025-12-17 08:31:47 +01:00
parent d6920703a1
commit ca36a102e5
11 changed files with 201 additions and 33 deletions

View File

@@ -67,9 +67,10 @@ impl ReadHandle {
if self.playlist.persistent {
if let Some(persistence) = crate::manager::PlaylistManager().persistence() {
let title = self.playlist.title().await;
let role = self.playlist.role().await;
let core = self.playlist.core.read().await;
let _ = persistence
.save_playlist(&self.playlist.id, &title, &core.config, &core.tracks)
.save_playlist(&self.playlist.id, &title, &role, &core.config, &core.tracks)
.await;
}
}

View File

@@ -1,7 +1,7 @@
//! WriteHandle : accès exclusif en écriture à une playlist
use crate::playlist::record::Record;
use crate::playlist::Playlist;
use crate::playlist::{Playlist, PlaylistRole};
use crate::Result;
use pmocache::cache_trait::FileCache;
use std::sync::Arc;
@@ -196,6 +196,23 @@ impl WriteHandle {
Ok(())
}
/// Modifie le rôle logique de la playlist
pub async fn set_role(&self, role: PlaylistRole) -> Result<()> {
if !self.playlist.is_alive() {
return Err(crate::Error::PlaylistDeleted(self.playlist.id.clone()));
}
self.playlist.set_role(role).await;
if self.playlist.persistent {
self.save_to_db().await?;
}
crate::manager::PlaylistManager().notify_playlist_changed(&self.playlist.id);
Ok(())
}
/// Change la capacité maximale
pub async fn set_capacity(&self, max_size: Option<usize>) -> Result<()> {
if !self.playlist.is_alive() {
@@ -266,6 +283,7 @@ impl WriteHandle {
// Récupérer les données actuelles
let title = self.playlist.title().await;
let role = self.playlist.role().await;
let core = self.playlist.core.read().await;
let config = core.config.clone();
let tracks = core.snapshot();
@@ -273,7 +291,9 @@ impl WriteHandle {
// Créer la nouvelle playlist persistante
let manager = crate::manager::PlaylistManager();
let new_handle = manager.create_persistent_playlist(new_id).await?;
let new_handle = manager
.create_persistent_playlist_with_role(new_id, role)
.await?;
// Copier le titre et la config
new_handle.set_title(title).await?;
@@ -297,6 +317,10 @@ impl WriteHandle {
self.playlist.title().await
}
pub async fn role(&self) -> PlaylistRole {
self.playlist.role().await
}
pub fn is_persistent(&self) -> bool {
self.playlist.persistent
}
@@ -474,12 +498,13 @@ impl WriteHandle {
.ok_or_else(|| crate::Error::PersistenceError("No persistence manager".into()))?;
let title = self.playlist.title().await;
let role = self.playlist.role().await;
let core = self.playlist.core.read().await;
let config = &core.config;
let tracks = &core.tracks;
persistence
.save_playlist(&self.playlist.id, &title, config, tracks)
.save_playlist(&self.playlist.id, &title, &role, config, tracks)
.await
}
}