2 Commits

Author SHA1 Message Date
2453c34fb9 Sort webapp du pmoserver dans la crate pmoapp 2025-10-06 11:52:53 +02:00
6c13e8cb8e Sort le serveur dans une crate pmoserver 2025-10-06 11:52:53 +02:00
1251 changed files with 744 additions and 13021 deletions

141
Cargo.lock generated
View File

@@ -7,7 +7,9 @@ name = "PMOMusic"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"axum", "axum",
"pmoapp",
"pmoconfig", "pmoconfig",
"pmoserver",
"pmoupnp", "pmoupnp",
"serde_json", "serde_json",
"tokio", "tokio",
@@ -467,41 +469,6 @@ dependencies = [
"typenum", "typenum",
] ]
[[package]]
name = "darling"
version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
dependencies = [
"darling_core",
"darling_macro",
]
[[package]]
name = "darling_core"
version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
"strsim",
"syn",
]
[[package]]
name = "darling_macro"
version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
dependencies = [
"darling_core",
"quote",
"syn",
]
[[package]] [[package]]
name = "derive_arbitrary" name = "derive_arbitrary"
version = "1.4.2" version = "1.4.2"
@@ -1129,12 +1096,6 @@ dependencies = [
"zerovec", "zerovec",
] ]
[[package]]
name = "ident_case"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]] [[package]]
name = "idna" name = "idna"
version = "1.1.0" version = "1.1.0"
@@ -1483,6 +1444,13 @@ version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
[[package]]
name = "pmoapp"
version = "0.1.0"
dependencies = [
"rust-embed",
]
[[package]] [[package]]
name = "pmoconfig" name = "pmoconfig"
version = "0.1.0" version = "0.1.0"
@@ -1511,41 +1479,50 @@ dependencies = [
] ]
[[package]] [[package]]
name = "pmoupnp" name = "pmoserver"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"anyhow",
"async-stream", "async-stream",
"axum", "axum",
"axum-embed", "axum-embed",
"axum-server", "axum-server",
"futures",
"futures-util",
"pmoconfig",
"pmoupnp",
"rust-embed",
"serde",
"serde_json",
"tokio",
"tokio-stream",
"tracing",
"tracing-subscriber",
"utoipa",
"utoipa-swagger-ui",
]
[[package]]
name = "pmoupnp"
version = "0.1.0"
dependencies = [
"axum",
"base64", "base64",
"bevy_reflect", "bevy_reflect",
"bevy_reflect_derive", "bevy_reflect_derive",
"chrono", "chrono",
"futures",
"futures-util",
"get_if_addrs",
"hex", "hex",
"log",
"once_cell", "once_cell",
"parking_lot", "parking_lot",
"pmoconfig", "pmoconfig",
"pmodidl", "pmodidl",
"reqwest", "reqwest",
"rust-embed",
"serde", "serde",
"serde_json", "serde_json",
"thiserror", "thiserror",
"tokio", "tokio",
"tokio-stream",
"tracing", "tracing",
"tracing-subscriber",
"url", "url",
"utoipa",
"utoipa-swagger-ui",
"uuid", "uuid",
"validator",
"xmltree", "xmltree",
] ]
@@ -1580,28 +1557,6 @@ dependencies = [
"zerovec", "zerovec",
] ]
[[package]]
name = "proc-macro-error-attr2"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5"
dependencies = [
"proc-macro2",
"quote",
]
[[package]]
name = "proc-macro-error2"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802"
dependencies = [
"proc-macro-error-attr2",
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.101" version = "1.0.101"
@@ -2050,12 +2005,6 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]]
name = "strsim"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]] [[package]]
name = "subtle" name = "subtle"
version = "2.6.1" version = "2.6.1"
@@ -2492,36 +2441,6 @@ dependencies = [
"wasm-bindgen", "wasm-bindgen",
] ]
[[package]]
name = "validator"
version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43fb22e1a008ece370ce08a3e9e4447a910e92621bb49b85d6e48a45397e7cfa"
dependencies = [
"idna",
"once_cell",
"regex",
"serde",
"serde_derive",
"serde_json",
"url",
"validator_derive",
]
[[package]]
name = "validator_derive"
version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7df16e474ef958526d1205f6dda359fdfab79d9aa6d54bafcb92dcd07673dca"
dependencies = [
"darling",
"once_cell",
"proc-macro-error2",
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "valuable" name = "valuable"
version = "0.1.1" version = "0.1.1"

View File

@@ -1,3 +1,3 @@
[workspace] [workspace]
resolver = "3" resolver = "3"
members = ["PMOMusic", "pmoupnp","pmoconfig", "pmoutils", "pmodidl"] members = ["PMOMusic", "pmoupnp","pmoconfig", "pmoutils", "pmodidl", "pmoserver", "pmoapp"]

View File

@@ -2,7 +2,7 @@
# Variables de configuration # Variables de configuration
CARGO = cargo CARGO = cargo
NPM = npm NPM = npm
WEBAPP_DIR = pmoupnp/webapp WEBAPP_DIR = pmoapp/webapp
DIST_DIR = $(WEBAPP_DIR)/dist DIST_DIR = $(WEBAPP_DIR)/dist
RUST_TARGET = target/release RUST_TARGET = target/release
DOC_DIR = target/doc DOC_DIR = target/doc
@@ -29,13 +29,13 @@ build: webapp release
@echo "$(GREEN)✓ Build complet terminé$(NC)" @echo "$(GREEN)✓ Build complet terminé$(NC)"
## release: Compile le binaire Rust en mode release ## release: Compile le binaire Rust en mode release
release: release: webapp
@echo "$(YELLOW)→ Compilation Rust (release)...$(NC)" @echo "$(YELLOW)→ Compilation Rust (release)...$(NC)"
$(CARGO) build --release $(CARGO) build --release
@echo "$(GREEN)✓ Binaire disponible : $(RUST_TARGET)/$(BINARY_NAME)$(NC)" @echo "$(GREEN)✓ Binaire disponible : $(RUST_TARGET)/$(BINARY_NAME)$(NC)"
## debug: Compile le binaire Rust en mode debug ## debug: Compile le binaire Rust en mode debug
debug: debug: webapp
@echo "$(YELLOW)→ Compilation Rust (debug)...$(NC)" @echo "$(YELLOW)→ Compilation Rust (debug)...$(NC)"
$(CARGO) build $(CARGO) build
@echo "$(GREEN)✓ Binaire disponible : target/debug/$(BINARY_NAME)$(NC)" @echo "$(GREEN)✓ Binaire disponible : target/debug/$(BINARY_NAME)$(NC)"

View File

@@ -6,6 +6,8 @@ edition = "2024"
[dependencies] [dependencies]
pmoconfig = { path = "../pmoconfig" } pmoconfig = { path = "../pmoconfig" }
pmoupnp = { path = "../pmoupnp"} pmoupnp = { path = "../pmoupnp"}
pmoserver = { path = "../pmoserver" }
pmoapp = { path = "../pmoapp" }
tokio = { version = "1.35", features = ["rt-multi-thread", "macros", "sync", "time","signal"] } tokio = { version = "1.35", features = ["rt-multi-thread", "macros", "sync", "time","signal"] }

View File

@@ -1,6 +1,9 @@
use pmoupnp::{mediarenderer::avtransport::{actions::SETAVTRANSPORTURI, AVTTRANSPORT}, server::{ use pmoupnp::{mediarenderer::avtransport::AVTTRANSPORT, UpnpObject};
logs::{log_dump, log_sse, LogState, SseLayer}, ServerBuilder, Webapp use pmoserver::{
}, UpnpObject}; // ton module pmoupnp::server logs::{log_dump, log_sse, LogState, SseLayer},
ServerBuilder
};
use pmoapp::Webapp;
use tracing_subscriber::Registry; use tracing_subscriber::Registry;
use tracing_subscriber::prelude::*; use tracing_subscriber::prelude::*;
use tracing::info; use tracing::info;

7
pmoapp/Cargo.toml Normal file
View File

@@ -0,0 +1,7 @@
[package]
name = "pmoapp"
version = "0.1.0"
edition = "2021"
[dependencies]
rust-embed = "8.5.0"

51
pmoapp/src/lib.rs Normal file
View File

@@ -0,0 +1,51 @@
//! # pmoapp - Application web UPnP pour PMOMusic
//!
//! Cette crate fournit l'application web frontend pour le contrôle UPnP,
//! intégrée via RustEmbed pour être servie par pmoserver.
//!
//! ## Fonctionnalités
//!
//! - 📦 **Frontend intégré** : Application web compilée et embarquée dans le binaire
//! - 🎨 **Interface de contrôle** : UI pour gérer les devices UPnP MediaRenderer
//! - 🚀 **Zero configuration** : Pas besoin de servir des fichiers statiques séparés
//!
//! ## Utilisation
//!
//! ```rust,no_run
//! use pmoapp::Webapp;
//! use pmoserver::ServerBuilder;
//!
//! # async fn example() {
//! let mut server = ServerBuilder::new("MyApp").build();
//! server.add_spa::<Webapp>("/app").await;
//! # }
//! ```
//!
//! ## Structure
//!
//! La webapp est construite avec Vite et Vue.js, et les fichiers statiques
//! sont embarqués dans le binaire au moment de la compilation via `RustEmbed`.
use rust_embed::RustEmbed;
/// Structure représentant l'application web embarquée.
///
/// Cette structure utilise `RustEmbed` pour inclure tous les fichiers
/// du répertoire `webapp/dist` dans le binaire au moment de la compilation.
///
/// ## Exemple
///
/// ```rust,no_run
/// use pmoapp::Webapp;
/// use pmoserver::ServerBuilder;
///
/// # async fn example() {
/// let mut server = ServerBuilder::new("MyApp").build();
///
/// // Ajouter la webapp comme SPA sur le chemin /app
/// server.add_spa::<Webapp>("/app").await;
/// # }
/// ```
#[derive(RustEmbed, Clone)]
#[folder = "webapp/dist"]
pub struct Webapp;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

14
pmoapp/webapp/dist/index.html vendored Normal file
View File

@@ -0,0 +1,14 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/app/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>webapp</title>
<script type="module" crossorigin src="/app/assets/index-dpjDzo83.js"></script>
<link rel="stylesheet" crossorigin href="/app/assets/index-C_vitQ9d.css">
</head>
<body>
<div id="app"></div>
</body>
</html>

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Some files were not shown because too many files have changed in this diff Show More