2025-10-27 12:32:31 +01:00
|
|
|
//! # pmoplaylist - Gestionnaire centralisé de playlists FIFO multi-consommateurs
|
2025-10-16 22:13:00 +02:00
|
|
|
//!
|
2025-10-27 12:32:31 +01:00
|
|
|
//! Cette crate fournit un gestionnaire centralisé de playlists avec :
|
|
|
|
|
//! - Gestion FIFO avec capacité et TTL configurables
|
|
|
|
|
//! - Multi-consommateurs indépendants
|
|
|
|
|
//! - Persistance optionnelle (SQLite)
|
|
|
|
|
//! - Intégration avec pmoaudiocache
|
|
|
|
|
//! - Génération DIDL-Lite pour UPnP
|
2025-10-16 22:13:00 +02:00
|
|
|
//!
|
2025-10-27 12:32:31 +01:00
|
|
|
//! # Architecture
|
2025-10-16 22:13:00 +02:00
|
|
|
//!
|
2025-10-27 12:32:31 +01:00
|
|
|
//! - **PlaylistManager** : Singleton central gérant toutes les playlists
|
|
|
|
|
//! - **WriteHandle** : Accès exclusif en écriture (push, flush, delete)
|
|
|
|
|
//! - **ReadHandle** : Accès en lecture avec curseur individuel (pop, peek)
|
|
|
|
|
//! - **PlaylistTrack** : Référence minimale vers pmoaudiocache
|
|
|
|
|
//!
|
|
|
|
|
//! # Exemple d'utilisation
|
|
|
|
|
//!
|
|
|
|
|
//! ```no_run
|
|
|
|
|
//! use pmoplaylist::PlaylistManager;
|
2025-10-16 22:13:00 +02:00
|
|
|
//!
|
|
|
|
|
//! # #[tokio::main]
|
2025-10-27 12:32:31 +01:00
|
|
|
//! # async fn main() -> pmoplaylist::Result<()> {
|
|
|
|
|
//! // Obtenir le gestionnaire (init automatique avec pmoconfig)
|
|
|
|
|
//! let manager = PlaylistManager();
|
2025-10-16 22:13:00 +02:00
|
|
|
//!
|
2025-10-27 12:32:31 +01:00
|
|
|
//! // Créer une playlist persistante
|
|
|
|
|
//! let mut writer = manager.create_persistent_playlist("radio-paradise".into())?;
|
|
|
|
|
//! writer.set_title("Radio Paradise - Main Mix".into()).await?;
|
2025-10-16 22:13:00 +02:00
|
|
|
//!
|
2025-10-27 12:32:31 +01:00
|
|
|
//! // Ajouter des morceaux (par cache_pk)
|
|
|
|
|
//! writer.push("abc123".into()).await?;
|
|
|
|
|
//! writer.push("def456".into()).await?;
|
2025-10-16 22:13:00 +02:00
|
|
|
//!
|
2025-10-27 12:32:31 +01:00
|
|
|
//! // Créer un consommateur
|
|
|
|
|
//! let mut reader = manager.get_read_handle("radio-paradise")?;
|
2025-10-16 22:13:00 +02:00
|
|
|
//!
|
2025-10-27 12:32:31 +01:00
|
|
|
//! // Consommer
|
|
|
|
|
//! while let Some(track) = reader.pop().await? {
|
|
|
|
|
//! let path = track.file_path()?;
|
|
|
|
|
//! println!("Playing: {:?}", path);
|
|
|
|
|
//! }
|
|
|
|
|
//! # Ok(())
|
2025-10-16 22:13:00 +02:00
|
|
|
//! # }
|
|
|
|
|
//! ```
|
|
|
|
|
|
2025-10-27 12:32:31 +01:00
|
|
|
mod error;
|
|
|
|
|
mod handle;
|
|
|
|
|
mod manager;
|
|
|
|
|
mod persistence;
|
|
|
|
|
mod playlist;
|
|
|
|
|
mod track;
|
2025-10-16 22:13:00 +02:00
|
|
|
|
2025-10-27 12:32:31 +01:00
|
|
|
#[cfg(feature = "pmoconfig")]
|
|
|
|
|
mod config_ext;
|
2025-10-16 22:13:00 +02:00
|
|
|
|
2025-10-27 12:32:31 +01:00
|
|
|
// Réexports publics
|
|
|
|
|
pub use error::{Error, Result};
|
|
|
|
|
pub use handle::{ReadHandle, WriteHandle};
|
|
|
|
|
pub use manager::{PlaylistManager, PlaylistManager as Manager};
|
|
|
|
|
pub use track::PlaylistTrack;
|
2025-10-16 22:13:00 +02:00
|
|
|
|
2025-10-27 12:32:31 +01:00
|
|
|
#[cfg(feature = "pmoconfig")]
|
|
|
|
|
pub use config_ext::PlaylistConfigExt;
|