Elnu's code check
This commit is contained in:
parent
8d532ffd82
commit
cf6528285c
6 changed files with 79 additions and 49 deletions
39
Cargo.lock
generated
39
Cargo.lock
generated
|
@ -323,6 +323,20 @@ version = "1.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "err-derive"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c34a887c8df3ed90498c1c437ce21f211c8e27672921a8ffa293cb8d6d4caa9e"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro-error",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"rustversion",
|
||||||
|
"syn 1.0.109",
|
||||||
|
"synstructure",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "event-listener"
|
name = "event-listener"
|
||||||
version = "5.2.0"
|
version = "5.2.0"
|
||||||
|
@ -871,6 +885,7 @@ version = "1.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-channel",
|
"async-channel",
|
||||||
"config",
|
"config",
|
||||||
|
"err-derive",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"gilrs",
|
"gilrs",
|
||||||
|
@ -1294,6 +1309,12 @@ dependencies = [
|
||||||
"semver",
|
"semver",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustversion"
|
||||||
|
version = "1.0.15"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ryu"
|
name = "ryu"
|
||||||
version = "1.0.17"
|
version = "1.0.17"
|
||||||
|
@ -1426,6 +1447,18 @@ dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "synstructure"
|
||||||
|
version = "0.12.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 1.0.109",
|
||||||
|
"unicode-xid",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "system-deps"
|
name = "system-deps"
|
||||||
version = "6.2.1"
|
version = "6.2.1"
|
||||||
|
@ -1673,6 +1706,12 @@ version = "1.11.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202"
|
checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-xid"
|
||||||
|
version = "0.2.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "url"
|
name = "url"
|
||||||
version = "2.5.0"
|
version = "2.5.0"
|
||||||
|
|
|
@ -8,6 +8,7 @@ edition = "2021"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
async-channel = "2.2.0"
|
async-channel = "2.2.0"
|
||||||
config = "0.14.0"
|
config = "0.14.0"
|
||||||
|
err-derive = "0.3.1"
|
||||||
futures-core = "0.3.30"
|
futures-core = "0.3.30"
|
||||||
futures-util = { version = "0.3.30", features = ["tokio-io"] }
|
futures-util = { version = "0.3.30", features = ["tokio-io"] }
|
||||||
gilrs = "0.10.6"
|
gilrs = "0.10.6"
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
use config::{Config, FileFormat};
|
use config::{Config, FileFormat};
|
||||||
|
use err_derive::Error;
|
||||||
use log::{error, info};
|
use log::{error, info};
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
@ -10,34 +11,23 @@ pub fn load_config() -> AppState {
|
||||||
.add_source(config::File::new("./settings.toml", FileFormat::Toml))
|
.add_source(config::File::new("./settings.toml", FileFormat::Toml))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
if let Ok(val) = settings {
|
settings
|
||||||
if let Ok(state) = val.try_deserialize() {
|
.and_then(|val| val.try_deserialize())
|
||||||
state
|
.unwrap_or_default()
|
||||||
} else {
|
|
||||||
AppState::default()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
AppState::default()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn save_config(config: &AppState) {
|
#[derive(Error, Debug)]
|
||||||
match toml::to_string(&config) {
|
pub enum SaveConfigError {
|
||||||
Ok(toml_str) => match File::create("./settings.toml") {
|
#[error(display = "Could not serialize app state: {:?}", _0)]
|
||||||
Ok(mut file) => match file.write_all(toml_str.as_bytes()) {
|
SerdeError(#[cause] toml::ser::Error),
|
||||||
Ok(_) => {
|
#[error(display = "Could not write app state to file: {:?}", _0)]
|
||||||
info!("Config file saved succesfully");
|
IoError(#[cause] std::io::Error),
|
||||||
}
|
}
|
||||||
Err(e) => {
|
|
||||||
error!("Couldn't write config file contents to open file: {e}");
|
pub fn save_config(config: &AppState) -> Result<(), SaveConfigError> {
|
||||||
}
|
let toml_str = toml::to_string(&config)?;
|
||||||
},
|
let mut file = File::create("./settings.toml")?;
|
||||||
Err(e) => {
|
file.write_all(toml_str.as_bytes())?;
|
||||||
error!("Couldn't open settings file: {e}");
|
info!("Config file saved successfully");
|
||||||
}
|
Ok(())
|
||||||
},
|
|
||||||
Err(e) => {
|
|
||||||
error!("Could not serialize app state: {e}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
use gtk::gdk::Display;
|
use gtk::gdk::Display;
|
||||||
use gtk::{glib, Application};
|
use gtk::{glib, Application};
|
||||||
use gtk::{prelude::*, CssProvider};
|
use gtk::{prelude::*, CssProvider};
|
||||||
use log::info;
|
use log::{error, info};
|
||||||
use simplelog::SimpleLogger;
|
use simplelog::SimpleLogger;
|
||||||
use std::env;
|
use std::env;
|
||||||
use tokio::runtime;
|
use tokio::runtime;
|
||||||
|
@ -16,11 +16,8 @@ const APP_ID: &str = "net.nickiel.joystick-controller-client";
|
||||||
fn main() -> glib::ExitCode {
|
fn main() -> glib::ExitCode {
|
||||||
env::set_var("gtk_csd", "0");
|
env::set_var("gtk_csd", "0");
|
||||||
|
|
||||||
match SimpleLogger::init(simplelog::LevelFilter::Debug, simplelog::Config::default()) {
|
if let Err(e) = SimpleLogger::init(simplelog::LevelFilter::Debug, simplelog::Config::default()) {
|
||||||
Ok(_) => {}
|
error!("Failed to init the simplelogger!: {e}");
|
||||||
Err(e) => {
|
|
||||||
println!("Failed to init the simplelogger!: {}", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let rt = runtime::Runtime::new().expect("Could not start tokio runtime");
|
let rt = runtime::Runtime::new().expect("Could not start tokio runtime");
|
||||||
|
|
|
@ -54,14 +54,14 @@ async fn socket_write(
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
// Channel closed, exit loop
|
// Channel closed, exit loop
|
||||||
error!("To Socket channel is closed! Exiting: {}", e);
|
error!("To Socket channel is closed! Exiting: {e}");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
socket_send_is_alive.store(false, Ordering::SeqCst);
|
socket_send_is_alive.store(false, Ordering::SeqCst);
|
||||||
if let Err(e) = sender.close().await {
|
if let Err(e) = sender.close().await {
|
||||||
error!("Error closing websocket sender: {}", e);
|
error!("Error closing websocket sender: {e}");
|
||||||
}
|
}
|
||||||
info!("Closed socket writing thread");
|
info!("Closed socket writing thread");
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,20 +92,23 @@ pub fn build_ui(app: &Application, runtime: Handle) {
|
||||||
let ip_text = ip_entry.text();
|
let ip_text = ip_entry.text();
|
||||||
let port_text = port_entry.text();
|
let port_text = port_entry.text();
|
||||||
|
|
||||||
if ip_text.len() > 0 {
|
if ip_text.len() == 0 {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if let Ok(val) = port_text.parse::<u32>() {
|
if let Ok(val) = port_text.parse::<u32>() {
|
||||||
save_config(&AppState {
|
if let Err(error) = save_config(&AppState {
|
||||||
ip: ip_text.to_string(),
|
ip: ip_text.to_string(),
|
||||||
port: val
|
port: val
|
||||||
});
|
}) {
|
||||||
|
error!("{error}");
|
||||||
|
};
|
||||||
|
|
||||||
match to_mec.try_send(ApplicationEvent::StartSocket(
|
match to_mec.try_send(ApplicationEvent::StartSocket(
|
||||||
format!("ws://{}:{}", ip_text, val),
|
format!("ws://{}:{}", ip_text, val),
|
||||||
)) {
|
)) {
|
||||||
Ok(_) => { }
|
Ok(_) => {},
|
||||||
Err(async_channel::TrySendError::Closed(_)) => {panic!("Coordinator MEC is closed. Unrecoverable error.")}
|
Err(async_channel::TrySendError::Closed(_)) => panic!("Coordinator MEC is closed. Unrecoverable error."),
|
||||||
Err(e) => {error!("There was an error sending to the MEC: {}", e)}
|
Err(e) => error!("There was an error sending to the MEC: {}", e),
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
Loading…
Reference in a new issue