Refactoring manuel

This commit is contained in:
2025-10-17 14:36:39 +02:00
parent 2eec78ab4f
commit 082914cf8c
18 changed files with 664 additions and 334 deletions

View File

@@ -11,7 +11,7 @@ pmocache = { path = "../pmocache" }
pmodidl = { path = "../pmodidl" }
# Base de données
rusqlite = { version = "0.32", features = ["bundled"] }
rusqlite = { version = "0.37", features = ["bundled"] }
chrono = "0.4"
# Métadonnées audio

View File

@@ -234,7 +234,9 @@
//! - [`pmocovers`] : Cache d'images
//! - [`pmoserver`] : Serveur HTTP
pub mod cache;
mod pmoserver_ext;
mod cache;
pub mod metadata;
pub mod flac;
pub mod db;
@@ -243,29 +245,9 @@ pub use cache::AudioCache;
pub use metadata::AudioMetadata;
pub use db::{AudioDB, AudioCacheEntry};
/// Trait pour étendre un serveur HTTP avec des fonctionnalités de cache audio.
///
/// Ce trait permet à `pmoaudiocache` d'ajouter des méthodes d'extension sur des types
/// de serveurs externes (comme `pmoserver::Server`) sans que ces crates dépendent de `pmoaudiocache`.
#[cfg(feature = "pmoserver")]
pub trait AudioCacheExt {
/// Initialise le cache audio et enregistre les routes HTTP.
///
/// # Arguments
///
/// * `cache_dir` - Répertoire de stockage du cache
/// * `limit` - Limite de taille du cache (en nombre de pistes)
///
/// # Returns
///
/// * `Arc<AudioCache>` - Instance partagée du cache
async fn init_audio_cache(&mut self, cache_dir: &str, limit: usize) -> anyhow::Result<std::sync::Arc<AudioCache>>;
pub use pmoserver_ext::AudioCacheExt;
/// Initialise le cache audio avec la configuration par défaut.
///
/// Utilise automatiquement les paramètres de `pmoconfig::Config`.
async fn init_audio_cache_configured(&mut self) -> anyhow::Result<std::sync::Arc<AudioCache>>;
}
// Implémentation du trait pour pmoserver::Server (feature-gated)
#[cfg(feature = "pmoserver")]

View File

@@ -0,0 +1,26 @@
#[cfg(feature = "pmoserver")]
use crate::AudioCache;
/// Trait pour étendre un serveur HTTP avec des fonctionnalités de cache audio.
///
/// Ce trait permet à `pmoaudiocache` d'ajouter des méthodes d'extension sur des types
/// de serveurs externes (comme `pmoserver::Server`) sans que ces crates dépendent de `pmoaudiocache`.
#[cfg(feature = "pmoserver")]
pub trait AudioCacheExt {
/// Initialise le cache audio et enregistre les routes HTTP.
///
/// # Arguments
///
/// * `cache_dir` - Répertoire de stockage du cache
/// * `limit` - Limite de taille du cache (en nombre de pistes)
///
/// # Returns
///
/// * `Arc<AudioCache>` - Instance partagée du cache
async fn init_audio_cache(&mut self, cache_dir: &str, limit: usize) -> anyhow::Result<std::sync::Arc<AudioCache>>;
/// Initialise le cache audio avec la configuration par défaut.
///
/// Utilise automatiquement les paramètres de `pmoconfig::Config`.
async fn init_audio_cache_configured(&mut self) -> anyhow::Result<std::sync::Arc<AudioCache>>;
}

View File

@@ -1,6 +1,6 @@
//! Implémentation du trait AudioCacheExt pour le serveur pmoserver
use crate::{api, AudioCache, AudioCacheExt};
use axum::{
body::Body,
extract::State,
@@ -142,6 +142,7 @@ async fn list_collections(State(cache): State<Arc<AudioCache>>) -> Response {
}
}
#[cfg(feature = "pmoserver")]
impl AudioCacheExt for Server {
async fn init_audio_cache(
&mut self,