Añade soporte a temas en la API de extensiones

- Incluye una opción de configuración para definir el tema por defecto.
- Añade un tema básico predeterminado.
This commit is contained in:
Manuel Cillero 2025-07-20 23:51:15 +02:00
parent f4e142a242
commit 86e4c4f110
13 changed files with 148 additions and 5 deletions

View file

@ -1,4 +1,5 @@
use crate::core::extension::ExtensionRef;
use crate::core::theme::all::THEMES;
use crate::{service, trace};
use std::sync::{LazyLock, RwLock};
@ -17,6 +18,9 @@ pub fn register_extensions(root_extension: Option<ExtensionRef>) {
// Prepara la lista de extensiones habilitadas.
let mut enabled_list: Vec<ExtensionRef> = Vec::new();
// Primero añade el tema básico a la lista de extensiones habilitadas.
add_to_enabled(&mut enabled_list, &crate::base::theme::Basic);
// Si se proporciona una extensión raíz inicial, se añade a la lista de extensiones habilitadas.
if let Some(extension) = root_extension {
add_to_enabled(&mut enabled_list, extension);
@ -53,6 +57,21 @@ fn add_to_enabled(list: &mut Vec<ExtensionRef>, extension: ExtensionRef) {
// Añade la propia extensión a la lista.
list.push(extension);
// Comprueba si la extensión tiene un tema asociado que deba registrarse.
if let Some(theme) = extension.theme() {
let mut registered_themes = THEMES.write().unwrap();
// Asegura que el tema no esté ya registrado para evitar duplicados.
if !registered_themes
.iter()
.any(|t| t.type_id() == theme.type_id())
{
registered_themes.push(theme);
trace::debug!("Enabling \"{}\" theme", theme.short_name());
}
} else {
trace::debug!("Enabling \"{}\" extension", extension.short_name());
}
}
}