From 7d7920237f7320e496aa055aeeeba2dffe3492ae Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Mon, 28 Jul 2025 18:33:50 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8D=B1=20A=C3=B1ade=20gesti=C3=B3n=20de?= =?UTF-8?q?=20recursos=20est=C3=A1ticos=20de=20PageTop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 3 ++- Cargo.toml | 9 +++++++-- build.rs | 7 +++++++ src/core/extension/all.rs | 8 ++++---- src/global.rs | 18 ++++++++++++++++-- src/service.rs | 3 +++ 6 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 build.rs diff --git a/Cargo.lock b/Cargo.lock index b3cb7b2..20087bf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1569,7 +1569,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "pagetop" -version = "0.0.13" +version = "0.0.14" dependencies = [ "actix-files", "actix-session", @@ -1582,6 +1582,7 @@ dependencies = [ "figlet-rs", "fluent-templates", "itoa", + "pagetop-build", "pagetop-macros", "parking_lot", "pastey", diff --git a/Cargo.toml b/Cargo.toml index 87b7f69..476168d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pagetop" -version = "0.0.13" +version = "0.0.14" edition = "2021" description = """\ @@ -42,7 +42,7 @@ static-files.workspace = true serde = { version = "1.0", features = ["derive"] } -pagetop-macros = { version = "0.0", path = "helpers/pagetop-macros" } +pagetop-macros.workspace = true [features] default = [] @@ -51,6 +51,8 @@ testing = [] [dev-dependencies] tempfile = "3.20.0" +[build-dependencies] +pagetop-build.workspace = true [workspace] @@ -68,3 +70,6 @@ authors = ["Manuel Cillero "] [workspace.dependencies] static-files = "0.2.5" + +pagetop-build = { version = "0.0", path = "helpers/pagetop-build" } +pagetop-macros = { version = "0.0", path = "helpers/pagetop-macros" } diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..85e02e0 --- /dev/null +++ b/build.rs @@ -0,0 +1,7 @@ +use pagetop_build::StaticFilesBundle; + +fn main() -> std::io::Result<()> { + StaticFilesBundle::from_dir("./static", None) + .with_name("assets") + .build() +} diff --git a/src/core/extension/all.rs b/src/core/extension/all.rs index d5c452a..f061044 100644 --- a/src/core/extension/all.rs +++ b/src/core/extension/all.rs @@ -1,7 +1,7 @@ use crate::core::action::add_action; use crate::core::extension::ExtensionRef; use crate::core::theme::all::THEMES; -use crate::{/*global, include_files, include_files_service, */ service, trace}; +use crate::{global, include_files, include_files_service, service, trace}; use parking_lot::RwLock; @@ -125,13 +125,13 @@ pub fn initialize_extensions() { // CONFIGURA LOS SERVICIOS ************************************************************************* -//include_files!(assets); +include_files!(assets); pub fn configure_services(scfg: &mut service::web::ServiceConfig) { for extension in ENABLED_EXTENSIONS.read().iter() { extension.configure_service(scfg); } - /*include_files_service!( + include_files_service!( scfg, assets => "/", [&global::SETTINGS.dev.pagetop_project_dir, "static"] - );*/ + ); } diff --git a/src/global.rs b/src/global.rs index 3f78b50..faa9c2f 100644 --- a/src/global.rs +++ b/src/global.rs @@ -12,6 +12,9 @@ include_config!(SETTINGS: Settings => [ "app.language" => "en-US", "app.startup_banner" => "Slant", + // [dev] + "dev.pagetop_project_dir" => "", + // [log] "log.enabled" => true, "log.tracing" => "Info", @@ -27,10 +30,11 @@ include_config!(SETTINGS: Settings => [ ]); #[derive(Debug, Deserialize)] -/// Ajustes para las secciones globales [`[app]`](App), [`[log]`](Log) y [`[server]`](Server) de -/// [`SETTINGS`]. +/// Ajustes para las secciones globales [`[app]`](App), [`[dev]`](Dev), [`[log]`](Log) y +/// [`[server]`](Server) de [`SETTINGS`]. pub struct Settings { pub app: App, + pub dev: Dev, pub log: Log, pub server: Server, } @@ -54,6 +58,16 @@ pub struct App { pub run_mode: String, } +#[derive(Debug, Deserialize)] +/// Sección `[Dev]` de la configuración. Forma parte de [`Settings`]. +pub struct Dev { + /// Los archivos estáticos requeridos por `PageTop` se integran por defecto en el binario + /// ejecutable. Sin embargo, durante el desarrollo puede resultar útil servirlos desde su propio + /// directorio para evitar recompilar cada vez que se modifican. En ese caso, este ajuste debe + /// indicar la ruta absoluta al directorio raíz del proyecto. + pub pagetop_project_dir: String, +} + #[derive(Debug, Deserialize)] /// Sección `[log]` de la configuración. Forma parte de [`Settings`]. pub struct Log { diff --git a/src/service.rs b/src/service.rs index 6897a43..68c8d5d 100644 --- a/src/service.rs +++ b/src/service.rs @@ -9,6 +9,9 @@ pub use actix_web::dev::ServiceResponse as Response; pub use actix_web::{cookie, http, rt, web}; pub use actix_web::{App, Error, HttpMessage, HttpRequest, HttpResponse, HttpServer}; +pub use actix_web_files::Files as ActixFiles; +pub use actix_web_static_files::ResourceFiles; + #[doc(hidden)] pub use actix_web::test;