refactor: Simplify RadioParadiseConfigExt - remove history methods

Remove all history-related configuration methods from config_ext.rs:
- get_paradise_history_database() / set_paradise_history_database()
- get_paradise_history_size() / set_paradise_history_size()
- DEFAULT_HISTORY_DATABASE_DIR constant
- HISTORY_DEFAULT_MAX_TRACKS import

Keep only essential methods:
- get_paradise_enabled() / set_paradise_enabled()

Result: 264 lines → 115 lines (-149 lines, -56%)
This commit is contained in:
Claude
2025-11-05 09:07:12 +00:00
parent 74d8788463
commit 9b45be87d6

View File

@@ -5,11 +5,6 @@
//!
//! La configuration est minimale - seulement ce qui doit vraiment être configurable :
//! - Activation/désactivation de la source
//! - Chemin de la base de données d'historique
//! - Taille maximale de l'historique
//!
//! Tous les autres paramètres (polling, timeouts, etc.) sont des constantes
//! définies dans `paradise::constants`.
//!
//! # Exemple
//!
@@ -24,24 +19,11 @@
//! println!("Radio Paradise is disabled");
//! return Ok(());
//! }
//!
//! // Get configuration
//! let db_path = config.get_paradise_history_database()?;
//! let max_tracks = config.get_paradise_history_size()?;
//! ```
use std::path::PathBuf;
use anyhow::{anyhow, Result};
use anyhow::Result;
use pmoconfig::Config;
use serde_yaml::{Number, Value};
use crate::channels::HISTORY_DEFAULT_MAX_TRACKS;
/// Nom du répertoire pour Radio Paradise (relatif au config_dir)
///
/// La base de données sera stockée dans `<config_dir>/paradise/history.db`
const DEFAULT_HISTORY_DATABASE_DIR: &str = "paradise";
use serde_yaml::Value;
/// Trait d'extension pour gérer la configuration Radio Paradise dans pmoconfig
///
@@ -50,7 +32,7 @@ const DEFAULT_HISTORY_DATABASE_DIR: &str = "paradise";
///
/// # Auto-persist des valeurs par défaut
///
/// Tous les getters persistent automatiquement la valeur par défaut dans la
/// Le getter persiste automatiquement la valeur par défaut dans la
/// configuration si elle n'existe pas encore. Cela permet à l'utilisateur de
/// voir la configuration effective dans le fichier YAML et de la modifier facilement.
///
@@ -65,10 +47,7 @@ const DEFAULT_HISTORY_DATABASE_DIR: &str = "paradise";
/// // Premier appel : persiste "enabled: true" dans la config et retourne true
/// let enabled = config.get_paradise_enabled()?;
///
/// // Premier appel : persiste "max_tracks: 100" dans la config et retourne 100
/// let max_tracks = config.get_paradise_history_size()?;
///
/// // L'utilisateur peut maintenant éditer ces valeurs dans le fichier YAML
/// // L'utilisateur peut maintenant éditer cette valeur dans le fichier YAML
/// ```
pub trait RadioParadiseConfigExt {
/// Vérifie si Radio Paradise est activé
@@ -102,71 +81,6 @@ pub trait RadioParadiseConfigExt {
/// config.set_paradise_enabled(false)?;
/// ```
fn set_paradise_enabled(&self, enabled: bool) -> Result<()>;
/// Récupère le chemin de la base de données d'historique
///
/// Le chemin retourné est absolu et pointe vers `<config_dir>/paradise/history.db`.
/// Le répertoire `paradise` est créé automatiquement s'il n'existe pas.
///
/// # Returns
///
/// Le chemin absolu vers la base de données SQLite d'historique.
/// Exemple: `/home/user/.config/pmo/paradise/history.db`
///
/// # Exemple
///
/// ```rust,ignore
/// let db_path = config.get_paradise_history_database()?;
/// let backend = SqliteHistoryBackend::new(&db_path)?;
/// ```
fn get_paradise_history_database(&self) -> Result<String>;
/// Définit le chemin de la base de données d'historique
///
/// # Arguments
///
/// * `path` - Chemin complet vers la base de données (doit inclure le nom du fichier)
///
/// Le répertoire parent sera extrait et stocké dans la configuration.
///
/// # Exemple
///
/// ```rust,ignore
/// // Set custom path
/// config.set_paradise_history_database("/var/lib/pmo/paradise.db".to_string())?;
/// ```
fn set_paradise_history_database(&self, path: String) -> Result<()>;
/// Récupère le nombre maximal de pistes dans l'historique
///
/// # Returns
///
/// Le nombre maximal de pistes à conserver dans l'historique.
///
/// Si la valeur n'existe pas dans la configuration, elle est automatiquement
/// définie à la constante `HISTORY_DEFAULT_MAX_TRACKS` (100) et persistée.
///
/// # Exemple
///
/// ```rust,ignore
/// let max_tracks = config.get_paradise_history_size()?;
/// println!("Keeping last {} tracks", max_tracks);
/// ```
fn get_paradise_history_size(&self) -> Result<usize>;
/// Définit le nombre maximal de pistes dans l'historique
///
/// # Arguments
///
/// * `size` - Nombre maximal de pistes à conserver
///
/// # Exemple
///
/// ```rust,ignore
/// // Keep last 200 tracks
/// config.set_paradise_history_size(200)?;
/// ```
fn set_paradise_history_size(&self, size: usize) -> Result<()>;
}
impl RadioParadiseConfigExt for Config {
@@ -187,55 +101,6 @@ impl RadioParadiseConfigExt for Config {
Value::Bool(enabled),
)
}
fn get_paradise_history_database(&self) -> Result<String> {
// Get managed directory: ~/.config/pmo/paradise/
let dir = self.get_managed_dir(
&["sources", "radio_paradise", "database"],
DEFAULT_HISTORY_DATABASE_DIR,
)?;
// Ensure directory exists
std::fs::create_dir_all(&dir)?;
// Build full path: ~/.config/pmo/paradise/history.db
let mut path = PathBuf::from(dir);
path.push("history.db");
Ok(path.to_string_lossy().to_string())
}
fn set_paradise_history_database(&self, path: String) -> Result<()> {
// Extract parent directory from the full path
match PathBuf::from(&path).parent() {
Some(dir) => self.set_managed_dir(
&["sources", "radio_paradise", "database"],
dir.to_string_lossy().to_string(),
),
None => Err(anyhow!("Invalid database path: no parent directory")),
}
}
fn get_paradise_history_size(&self) -> Result<usize> {
match self.get_value(&["sources", "radio_paradise", "history", "max_tracks"]) {
Ok(Value::Number(n)) if n.is_u64() => Ok(n.as_u64().unwrap() as usize),
Ok(Value::Number(n)) if n.is_i64() => Ok(n.as_i64().unwrap() as usize),
_ => {
// Use default and persist it
let default = HISTORY_DEFAULT_MAX_TRACKS;
self.set_paradise_history_size(default)?;
Ok(default)
}
}
}
fn set_paradise_history_size(&self, size: usize) -> Result<()> {
let n = Number::from(size);
self.set_value(
&["sources", "radio_paradise", "history", "max_tracks"],
Value::Number(n),
)
}
}
#[cfg(test)]
@@ -243,21 +108,7 @@ mod tests {
use super::*;
#[test]
fn test_default_values() {
assert_eq!(DEFAULT_HISTORY_DATABASE_DIR, "paradise");
assert_eq!(HISTORY_DEFAULT_MAX_TRACKS, 100);
}
#[test]
fn test_database_path_construction() {
// Simulating path construction
let base = "/home/user/.config/pmo/paradise";
let mut path = PathBuf::from(base);
path.push("history.db");
assert_eq!(
path.to_string_lossy(),
"/home/user/.config/pmo/paradise/history.db"
);
fn test_trait_exists() {
// Simple test to ensure the trait compiles
}
}