UI for Server base code #1

Merged
g4borg merged 6 commits from server-ui into main 2024-06-08 00:22:53 +02:00
8 changed files with 398 additions and 777 deletions
Showing only changes of commit fe3700b751 - Show all commits

1092
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -7,13 +7,13 @@ default-run = "soundboard"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
axum = "0.6.18" axum = "0.7.5"
axum-template = { version = "0.19.0", features = ["minijinja"] } axum-template = { version = "2.3.0", features = ["minijinja"] }
cpal = "0.15.2" cpal = "0.15.2"
dotenvy = "0.15.7" dotenvy = "0.15.7"
enigo = "0.1.3" enigo = "0.2.1"
log = "0.4.20" log = "0.4.20"
minijinja = { version = "1.0.3", features = ["loader"] } minijinja = { version = "2.0.1", features = ["loader"] }
minimp3 = "0.5.1" minimp3 = "0.5.1"
mp3-duration = "0.1.10" mp3-duration = "0.1.10"
regex = "1.9.0" regex = "1.9.0"
@ -24,7 +24,7 @@ xxhash-rust = { version = "0.8.6", features = ["xxh3", "const_xxh3"] }
strinto = { path = "./strinto" } strinto = { path = "./strinto" }
eframe = "0.27.2" eframe = "0.27.2"
tray-item = "0.10" tray-item = "0.10"
winit = "0.25" winit = "0.30"
once_cell = "1.19.0" once_cell = "1.19.0"
tray-icon = "0.14.3" tray-icon = "0.14.3"
raw-window-handle = "0.6.2" raw-window-handle = "0.6.2"
@ -33,7 +33,7 @@ raw-window-handle = "0.6.2"
embed-resource = "2.3" embed-resource = "2.3"
[dependencies.windows] [dependencies.windows]
version = "0.56.0" version = "0.57.0"
features = [ features = [
"Data_Xml_Dom", "Data_Xml_Dom",
"Win32_Foundation", "Win32_Foundation",

View File

@ -9,7 +9,7 @@ use std::{
sync::{Arc, Mutex}, sync::{Arc, Mutex},
thread, thread,
}; };
use tokio::sync::mpsc; use tokio::{net::TcpListener, sync::mpsc};
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
struct AppState { struct AppState {
@ -64,15 +64,10 @@ async fn run_server(app_state: AppState, mut rx: mpsc::Receiver<ServerSettings>)
println!("listening on {}", addr); println!("listening on {}", addr);
let server = axum::Server::bind(&addr).serve(app.into_make_service()); let listener = TcpListener::bind(&addr).await.unwrap();
let server = axum::serve(listener, app.into_make_service());
tokio::select! { server.await.unwrap();
_ = server => {},
Some(new_settings) = rx.recv() => {
println!("Received new settings: {:?}", new_settings);
// Here you can handle updates to server settings as needed
}
}
} }
} }

View File

@ -9,8 +9,8 @@ use std::{
sync::{Arc, Mutex}, sync::{Arc, Mutex},
thread, thread,
}; };
use tokio::sync::mpsc;
use tokio::task::JoinHandle; use tokio::task::JoinHandle;
use tokio::{net::TcpListener, sync::mpsc};
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
struct AppState { struct AppState {
@ -105,15 +105,10 @@ fn start_server(app_state: &AppState) -> JoinHandle<()> {
let app = Router::new() let app = Router::new()
.route("/", get(home)) .route("/", get(home))
.with_state(server_app_state.clone()); .with_state(server_app_state.clone());
let server = axum::Server::bind(&addr).serve(app.into_make_service()); let listener = TcpListener::bind(&addr).await.unwrap();
let server = axum::serve(listener, app.into_make_service());
// Run the server and monitor the should_run flag server.await.unwrap();
tokio::select! {
_ = server => {},
_ = monitor_shutdown(server_app_state.should_run.clone()) => {
println!("Server shutdown signal received");
}
}
}) })
} }

View File

@ -12,8 +12,8 @@ use std::{
}, },
thread, thread,
}; };
use tokio::sync::mpsc;
use tokio::task::JoinHandle; use tokio::task::JoinHandle;
use tokio::{net::TcpListener, sync::mpsc};
use tray_item::TrayItem; use tray_item::TrayItem;
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
@ -148,15 +148,10 @@ fn start_server(app_state: &AppState) -> JoinHandle<()> {
let app = Router::new() let app = Router::new()
.route("/", get(home)) .route("/", get(home))
.with_state(server_app_state.clone()); .with_state(server_app_state.clone());
let server = axum::Server::bind(&addr).serve(app.into_make_service()); let listener = TcpListener::bind(&addr).await.unwrap();
let server = axum::serve(listener, app.into_make_service());
// Run the server and monitor the should_run flag server.await.unwrap();
tokio::select! {
_ = server => {},
_ = monitor_shutdown(server_app_state.should_run.clone()) => {
println!("Server shutdown signal received");
}
}
}) })
} }

View File

@ -7,8 +7,8 @@ use std::{
sync::{Arc, Mutex}, sync::{Arc, Mutex},
thread, thread,
}; };
use tokio::sync::mpsc;
use tokio::task::JoinHandle; use tokio::task::JoinHandle;
use tokio::{net::TcpListener, sync::mpsc};
use tray_item::TrayItem; use tray_item::TrayItem;
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
@ -116,15 +116,10 @@ fn start_server(app_state: &AppState) -> JoinHandle<()> {
let app = Router::new() let app = Router::new()
.route("/", get(home)) .route("/", get(home))
.with_state(server_app_state.clone()); .with_state(server_app_state.clone());
let server = axum::Server::bind(&addr).serve(app.into_make_service()); let listener = TcpListener::bind(&addr).await.unwrap();
let server = axum::serve(listener, app.into_make_service());
// Run the server and monitor the should_run flag server.await;
tokio::select! {
_ = server => {},
_ = monitor_shutdown(server_app_state.should_run.clone()) => {
println!("Server shutdown signal received");
}
}
}) })
} }

View File

@ -3,7 +3,7 @@ use crate::state::AppState;
use axum::{routing, Router}; use axum::{routing, Router};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::net::SocketAddr; use std::net::SocketAddr;
use tokio::sync::mpsc; use tokio::{net::TcpListener, sync::mpsc};
#[derive(Debug, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ServerSettings { pub struct ServerSettings {
@ -45,10 +45,8 @@ pub async fn run_server(app_state: AppState, mut rx: mpsc::Receiver<ServerMessag
.route("/play/:hash", routing::get(handlers::play_handler)) .route("/play/:hash", routing::get(handlers::play_handler))
.route("/stop", routing::get(handlers::stop_handler)) .route("/stop", routing::get(handlers::stop_handler))
.with_state(server_app_state.clone()); .with_state(server_app_state.clone());
let listener = TcpListener::bind(&addr).await.unwrap();
axum::Server::bind(&addr) axum::serve(listener, app.into_make_service()).await
.serve(app.into_make_service())
.await
}); });
let server_abort_handle = server_handle.abort_handle(); let server_abort_handle = server_handle.abort_handle();

View File

@ -136,18 +136,23 @@ pub mod example_handler {
impl PressMouseForward { impl PressMouseForward {
pub fn new() -> Self { pub fn new() -> Self {
let enigo = Enigo::new(); let enigo_settings = Settings::default();
let enigo = Enigo::new(&enigo_settings).unwrap();
PressMouseForward { enigo: enigo } PressMouseForward { enigo: enigo }
} }
} }
impl super::PlaybackAction for PressMouseForward { impl super::PlaybackAction for PressMouseForward {
fn before_playback(&mut self) { fn before_playback(&mut self) {
self.enigo.mouse_down(MouseButton::Forward); self.enigo
.button(Button::Forward, Direction::Press)
.unwrap();
} }
fn after_playback(&mut self) { fn after_playback(&mut self) {
self.enigo.mouse_up(MouseButton::Forward); self.enigo
.button(Button::Forward, Direction::Release)
.unwrap();
} }
} }
} }