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:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user