From 49a9810fd8f9c3ca5cdd7a3285eb4abc3bd97ade Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bianca=20F=C3=BCrstenau?= Date: Sat, 22 Feb 2025 07:09:34 +0100 Subject: [PATCH] Something running --- Cargo.lock | 30 +++---- Cargo.toml | 7 +- {img => assets}/aldi.svg | 0 {img => assets}/angel.svg | 0 {img => assets}/cafe.svg | 0 {img => assets}/cash.svg | 0 {img => assets}/dm.svg | 0 {img => assets}/edeka.svg | 0 {font => assets}/hessen_sagt_nein.otf | Bin {img => assets}/icon.svg | 0 {img => assets}/lidl.svg | 0 {img => assets}/rewe.svg | 0 {img => assets}/tegut.svg | 0 src/bin/leptos.rs | 32 ++++++- src/commands.rs | 2 +- src/lib.rs | 32 ++++++- src/server/mod.rs | 117 ++------------------------ src/types.rs | 84 ++++++++++++++++++ trunk.html | 1 + 19 files changed, 173 insertions(+), 132 deletions(-) rename {img => assets}/aldi.svg (100%) rename {img => assets}/angel.svg (100%) rename {img => assets}/cafe.svg (100%) rename {img => assets}/cash.svg (100%) rename {img => assets}/dm.svg (100%) rename {img => assets}/edeka.svg (100%) rename {font => assets}/hessen_sagt_nein.otf (100%) rename {img => assets}/icon.svg (100%) rename {img => assets}/lidl.svg (100%) rename {img => assets}/rewe.svg (100%) rename {img => assets}/tegut.svg (100%) create mode 100644 src/types.rs diff --git a/Cargo.lock b/Cargo.lock index 9db229b..df3aedb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -350,6 +350,7 @@ name = "bkbh" version = "0.1.0" dependencies = [ "chrono", + "console_error_panic_hook", "curl", "leptos", "openssl", @@ -669,6 +670,16 @@ dependencies = [ "toml 0.8.20", ] +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + [[package]] name = "const-oid" version = "0.9.6" @@ -1987,13 +1998,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d35485b3dcbf7e044b8f28c73f04f13e7b509c2466fd10cb2a8a447e38f8a93a" dependencies = [ "futures", - "js-sys", "once_cell", "or_poisoned", "pin-project-lite", "serde", "throw_error", - "wasm-bindgen", ] [[package]] @@ -2267,15 +2276,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71dd52191aae121e8611f1e8dc3e324dd0dd1dee1e6dd91d10ee07a3cfb4d9d8" -[[package]] -name = "inventory" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b12ebb6799019b044deaf431eadfe23245b259bba5a2c0796acec3943a3cdb" -dependencies = [ - "rustversion", -] - [[package]] name = "ipnet" version = "2.11.0" @@ -2439,6 +2439,7 @@ dependencies = [ "cfg-if", "either_of", "futures", + "getrandom 0.2.15", "hydration_context", "leptos_config", "leptos_dom", @@ -4533,7 +4534,6 @@ dependencies = [ "futures", "gloo-net", "http", - "inventory", "js-sys", "once_cell", "pin-project-lite", @@ -5169,16 +5169,16 @@ dependencies = [ [[package]] name = "tauri-sys" -version = "0.1.0" -source = "git+https://github.com/JonasKruckenberg/tauri-sys#e953a9c912212d43fa42add71bc84c40c30140e0" +version = "0.2.0" dependencies = [ + "derive_more", + "futures", "js-sys", "log", "serde", "serde-wasm-bindgen", "serde_repr", "thiserror 1.0.69", - "url", "wasm-bindgen", "wasm-bindgen-futures", ] diff --git a/Cargo.toml b/Cargo.toml index f64612c..cceaad0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,10 +34,10 @@ crate-type = ["staticlib", "cdylib", "rlib"] tauri-build = { version = "2", features = [] } [dependencies] -leptos = { version = "^0.7", features = ["ssr"] } -tauri-sys = { git = "https://github.com/JonasKruckenberg/tauri-sys", features = ["tauri"] } +leptos = { version = "^0.7", features = ["csr"] } +tauri-sys = { path = "../tauri-sys", features = ["core"] } serde = { version = "1", features = ["derive"] } -serde_json = "1" +serde_json = { version = "1" } tauri = { version = "2", features = [], optional = true } tauri-plugin-opener = { version = "2", optional = true } @@ -49,3 +49,4 @@ tokio = {version = "^1.43", optional = true} curl = {version = "^0.4", optional = true} openssl = {version = "^0.10", features = ["vendored"], optional = true} ring-compat = {version = "^0.8", features = ["signature", "rand_core"], optional = true} +console_error_panic_hook = {version = "0.1.7"} diff --git a/img/aldi.svg b/assets/aldi.svg similarity index 100% rename from img/aldi.svg rename to assets/aldi.svg diff --git a/img/angel.svg b/assets/angel.svg similarity index 100% rename from img/angel.svg rename to assets/angel.svg diff --git a/img/cafe.svg b/assets/cafe.svg similarity index 100% rename from img/cafe.svg rename to assets/cafe.svg diff --git a/img/cash.svg b/assets/cash.svg similarity index 100% rename from img/cash.svg rename to assets/cash.svg diff --git a/img/dm.svg b/assets/dm.svg similarity index 100% rename from img/dm.svg rename to assets/dm.svg diff --git a/img/edeka.svg b/assets/edeka.svg similarity index 100% rename from img/edeka.svg rename to assets/edeka.svg diff --git a/font/hessen_sagt_nein.otf b/assets/hessen_sagt_nein.otf similarity index 100% rename from font/hessen_sagt_nein.otf rename to assets/hessen_sagt_nein.otf diff --git a/img/icon.svg b/assets/icon.svg similarity index 100% rename from img/icon.svg rename to assets/icon.svg diff --git a/img/lidl.svg b/assets/lidl.svg similarity index 100% rename from img/lidl.svg rename to assets/lidl.svg diff --git a/img/rewe.svg b/assets/rewe.svg similarity index 100% rename from img/rewe.svg rename to assets/rewe.svg diff --git a/img/tegut.svg b/assets/tegut.svg similarity index 100% rename from img/tegut.svg rename to assets/tegut.svg diff --git a/src/bin/leptos.rs b/src/bin/leptos.rs index 570d45c..4737730 100644 --- a/src/bin/leptos.rs +++ b/src/bin/leptos.rs @@ -1,5 +1,35 @@ use leptos::prelude::*; +use bkbh_lib::commands::*; +use leptos::task::spawn_local; + +use bkbh_lib::types::*; + +#[component] +fn SwapButton(store: Store, img_path: &'static str, pretty: &'static str) -> impl IntoView { + view! { + + } +} fn main() { - leptos::mount::mount_to_body(|| view! {

"Hello, world!"

}) + console_error_panic_hook::set_once(); + leptos::mount::mount_to_body(|| view! { + + }); } diff --git a/src/commands.rs b/src/commands.rs index 2b92214..d6e13ed 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -1,5 +1,5 @@ use tauri_sys::Error; -use tauri_sys::tauri::invoke; +use tauri_sys::core::invoke; #[derive(serde::Serialize)] pub struct Swap<'a> { diff --git a/src/lib.rs b/src/lib.rs index 2f8d086..366d39a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,9 +1,33 @@ -mod commands; +pub mod commands; #[cfg(feature = "server")] -mod server; +pub mod server; +pub mod types; -#[cfg(feature = "server")] +#[cfg(all(feature = "tauri", feature="server"))] #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { - server::run(); + use tauri::{Manager, State}; + use tauri_plugin_fs::FsExt; + use server::app_state::AppState; + use tokio::sync::Mutex; + + let state = AppState::new(); + tauri::Builder::default() + .plugin(tauri_plugin_fs::init()) + .setup(|app| { + app.manage(Mutex::new(state)); + let scope = app.fs_scope(); + let path = app.path(); + scope.allow_directory(path.temp_dir()?, false)?; + Ok(()) + }) + .invoke_handler(tauri::generate_handler![ + server::swap, + server::count, + server::inventory, + server::data_door::pull_data, + server::data_door::push_data, + ]) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); } diff --git a/src/server/mod.rs b/src/server/mod.rs index 70a9f56..1595f83 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -1,93 +1,16 @@ use chrono::offset::Utc; use rusqlite::{types::ToSqlOutput, ToSql}; -use tauri::{Manager, State}; -use tauri_plugin_fs::FsExt; -use tokio::sync::Mutex; use std::collections::HashMap; +use tokio::sync::Mutex; +use tauri::{Manager, State}; -mod app_state; -mod data_door; +use crate::types::*; + +pub mod app_state; +pub mod data_door; use app_state::AppState; -#[derive(Clone, Copy, Debug)] -enum Store { - Aldi, - Edeka, - Dm, - Lidl, - Rewe, - Tegut, -} - -#[derive(Clone, Copy, Debug)] -enum Account { - Sumpf, - Heinersyndikat, -} - -struct Inventory { - acc: Account, - cash: i64, - vouchers: Vec, -} - -#[derive(Debug)] -struct VoucherInventory { - store: Store, - count: i64, -} - -impl TryFrom<&str> for Store { - type Error = (); - - fn try_from(s: &str) -> Result { - match s { - "aldi" => Ok(Store::Aldi), - "edeka" => Ok(Store::Edeka), - "dm" => Ok(Store::Dm), - "lidl" => Ok(Store::Lidl), - "rewe" => Ok(Store::Rewe), - "tegut" => Ok(Store::Tegut), - _ => Err(()), - } - } -} - -impl TryFrom<&str> for Account { - type Error = (); - - fn try_from(s: &str) -> Result { - match s { - "sumpf" => Ok(Account::Sumpf), - "hs" => Ok(Account::Heinersyndikat), - _ => Err(()), - } - } -} - -impl ToSql for Store { - fn to_sql(&self) -> rusqlite::Result> { - match self { - Store::Aldi => 0.to_sql(), - Store::Edeka => 1.to_sql(), - Store::Dm => 2.to_sql(), - Store::Lidl => 3.to_sql(), - Store::Rewe => 4.to_sql(), - Store::Tegut => 5.to_sql(), - } - } -} - -impl ToSql for Account { - fn to_sql(&self) -> rusqlite::Result> { - match self { - Account::Sumpf => 0.to_sql(), - Account::Heinersyndikat => 1.to_sql(), - } - } -} - fn parse_inventory(data: HashMap) -> Result { let a = data.get("cafe-inventory-acc").ok_or(())?; let acc: Account = Account::try_from(a.as_ref())?; @@ -114,7 +37,7 @@ fn parse_inventory(data: HashMap) -> Result { } #[tauri::command] -async fn inventory( +pub async fn inventory( data: HashMap, state: State<'_, Mutex>, ) -> Result<(), ()> { @@ -137,7 +60,7 @@ async fn inventory( } #[tauri::command] -async fn swap( +pub async fn swap( store: &str, acc: i64, state: State<'_, Mutex>, @@ -159,7 +82,7 @@ async fn swap( } #[tauri::command] -async fn count(state: State<'_, Mutex>) -> Result { +pub async fn count(state: State<'_, Mutex>) -> Result { let state = state.lock().await; let mut stmt = state.db.prepare("SELECT COUNT(*) FROM swap") @@ -176,25 +99,3 @@ async fn count(state: State<'_, Mutex>) -> Result { let cnt: u64 = row.get(0).map_err(|e| println!("{:?}", e))?; Ok(cnt.to_string()) } - -pub fn run() { - let state = AppState::new(); - tauri::Builder::default() - .plugin(tauri_plugin_fs::init()) - .setup(|app| { - app.manage(Mutex::new(state)); - let scope = app.fs_scope(); - let path = app.path(); - scope.allow_directory(path.temp_dir()?, false)?; - Ok(()) - }) - .invoke_handler(tauri::generate_handler![ - swap, - count, - inventory, - data_door::pull_data, - data_door::push_data, - ]) - .run(tauri::generate_context!()) - .expect("error while running tauri application"); -} diff --git a/src/types.rs b/src/types.rs new file mode 100644 index 0000000..eb4ac68 --- /dev/null +++ b/src/types.rs @@ -0,0 +1,84 @@ +#[cfg(feature = "server")] +use rusqlite::{types::ToSqlOutput, ToSql}; +use serde::{Serialize, Deserialize}; + +#[derive(Clone, Copy, Debug, Serialize, Deserialize)] +pub enum Store { + Aldi, + Edeka, + Dm, + Lidl, + Rewe, + Tegut, +} + +#[derive(Clone, Copy, Debug, Serialize, Deserialize)] +pub enum Account { + Sumpf, + Heinersyndikat, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Inventory { + pub acc: Account, + pub cash: i64, + pub vouchers: Vec, +} + +#[derive(Clone, Copy, Debug, Serialize, Deserialize)] +pub struct VoucherInventory { + pub store: Store, + pub count: i64, +} + +impl TryFrom<&str> for Store { + type Error = (); + + fn try_from(s: &str) -> Result { + match s { + "aldi" => Ok(Store::Aldi), + "edeka" => Ok(Store::Edeka), + "dm" => Ok(Store::Dm), + "lidl" => Ok(Store::Lidl), + "rewe" => Ok(Store::Rewe), + "tegut" => Ok(Store::Tegut), + _ => Err(()), + } + } +} + +impl TryFrom<&str> for Account { + type Error = (); + + fn try_from(s: &str) -> Result { + match s { + "sumpf" => Ok(Account::Sumpf), + "hs" => Ok(Account::Heinersyndikat), + _ => Err(()), + } + } +} + +#[cfg(feature = "server")] +impl ToSql for Store { + fn to_sql(&self) -> rusqlite::Result> { + match self { + Store::Aldi => 0.to_sql(), + Store::Edeka => 1.to_sql(), + Store::Dm => 2.to_sql(), + Store::Lidl => 3.to_sql(), + Store::Rewe => 4.to_sql(), + Store::Tegut => 5.to_sql(), + } + } +} + +#[cfg(feature = "server")] +impl ToSql for Account { + fn to_sql(&self) -> rusqlite::Result> { + match self { + Account::Sumpf => 0.to_sql(), + Account::Heinersyndikat => 1.to_sql(), + } + } +} diff --git a/trunk.html b/trunk.html index 5562473..b03c4b3 100644 --- a/trunk.html +++ b/trunk.html @@ -3,6 +3,7 @@ + Darmstadt sagt Nein zur Bezahlkartei!