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!