diff --git a/package.json b/package.json index 76514e8..e645cd4 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "private": true, "type": "module", "scripts": { - "build": "nuxt build", + "build": "tauri build", "dev": "tauri dev", "generate": "nuxt generate", "preview": "nuxt preview", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 0c829f8..7b73983 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -39,6 +39,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "aligned-vec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" + [[package]] name = "alloc-no-stdlib" version = "2.0.4" @@ -81,6 +87,12 @@ version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" + [[package]] name = "arboard" version = "3.4.0" @@ -99,6 +111,23 @@ dependencies = [ "x11rb", ] +[[package]] +name = "arg_enum_proc_macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.68", +] + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + [[package]] name = "atk" version = "0.18.0" @@ -148,6 +177,29 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +[[package]] +name = "av1-grain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" +dependencies = [ + "anyhow", + "arrayvec", + "log", + "nom", + "num-rational", + "v_frame", +] + +[[package]] +name = "avif-serialize" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" +dependencies = [ + "arrayvec", +] + [[package]] name = "backtrace" version = "0.3.73" @@ -202,6 +254,12 @@ dependencies = [ "serde", ] +[[package]] +name = "bitstream-io" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c12d1856e42f0d817a835fe55853957c85c8c8a470114029143d3f12671446e" + [[package]] name = "block" version = "0.1.6" @@ -247,6 +305,12 @@ dependencies = [ "alloc-stdlib", ] +[[package]] +name = "built" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41bfbdb21256b87a8b5e80fab81a8eed158178e812fd7ba451907518b2742f16" + [[package]] name = "bumpalo" version = "3.16.0" @@ -265,6 +329,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + [[package]] name = "bytes" version = "1.6.0" @@ -346,6 +416,11 @@ name = "cc" version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74b6a57f98764a267ff415d50a25e6e166f3831a5071af4995296ea97d210490" +dependencies = [ + "jobserver", + "libc", + "once_cell", +] [[package]] name = "cesu8" @@ -403,6 +478,9 @@ dependencies = [ name = "clipboard-manager" version = "0.1.0" dependencies = [ + "arboard", + "base64 0.22.1", + "image 0.25.1", "rand 0.8.5", "rdev", "serde", @@ -411,7 +489,6 @@ dependencies = [ "tauri", "tauri-build", "tauri-plugin-autostart", - "tauri-plugin-clipboard-manager", "tauri-plugin-global-shortcut", "tauri-plugin-os", "tauri-plugin-sql", @@ -1779,13 +1856,8 @@ dependencies = [ "bytemuck", "byteorder", "color_quant", - "exr", - "gif", - "jpeg-decoder", "num-traits", "png", - "qoi", - "tiff", ] [[package]] @@ -1796,11 +1868,37 @@ checksum = "fd54d660e773627692c524beaad361aca785a4f9f5730ce91f42aabe5bce3d11" dependencies = [ "bytemuck", "byteorder", + "color_quant", + "exr", + "gif", + "image-webp", "num-traits", "png", + "qoi", + "ravif", + "rayon", + "rgb", "tiff", + "zune-core", + "zune-jpeg", ] +[[package]] +name = "image-webp" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d730b085583c4d789dfd07fdcf185be59501666a90c97c40162b37e4fdad272d" +dependencies = [ + "byteorder-lite", + "thiserror", +] + +[[package]] +name = "imgref" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" + [[package]] name = "indexmap" version = "1.9.3" @@ -1841,12 +1939,32 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "interpolate_name" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.68", +] + [[package]] name = "ipnet" version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "0.4.8" @@ -1904,14 +2022,20 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + [[package]] name = "jpeg-decoder" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" -dependencies = [ - "rayon", -] [[package]] name = "js-sys" @@ -2002,6 +2126,17 @@ version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +[[package]] +name = "libfuzzer-sys" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" +dependencies = [ + "arbitrary", + "cc", + "once_cell", +] + [[package]] name = "libloading" version = "0.7.4" @@ -2076,6 +2211,15 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "loop9" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + [[package]] name = "mac" version = "0.1.1" @@ -2120,6 +2264,16 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" +[[package]] +name = "maybe-rayon" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if", + "rayon", +] + [[package]] name = "md-5" version = "0.10.6" @@ -2265,6 +2419,12 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -2275,6 +2435,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + [[package]] name = "num-bigint-dig" version = "0.8.4" @@ -2298,6 +2468,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.68", +] + [[package]] name = "num-integer" version = "0.1.46" @@ -2318,6 +2499,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -2934,6 +3126,25 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "profiling" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" +dependencies = [ + "quote", + "syn 2.0.68", +] + [[package]] name = "qoi" version = "0.4.1" @@ -2943,6 +3154,12 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + [[package]] name = "quick-xml" version = "0.32.0" @@ -3042,6 +3259,56 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rav1e" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +dependencies = [ + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io", + "built", + "cfg-if", + "interpolate_name", + "itertools", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive", + "num-traits", + "once_cell", + "paste", + "profiling", + "rand 0.8.5", + "rand_chacha 0.3.1", + "simd_helpers", + "system-deps", + "thiserror", + "v_frame", + "wasm-bindgen", +] + +[[package]] +name = "ravif" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc13288f5ab39e6d7c9d501759712e6969fcc9734220846fc9ed26cae2cc4234" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e", + "rayon", + "rgb", +] + [[package]] name = "raw-window-handle" version = "0.5.2" @@ -3200,6 +3467,15 @@ dependencies = [ "winreg 0.52.0", ] +[[package]] +name = "rgb" +version = "0.8.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +dependencies = [ + "bytemuck", +] + [[package]] name = "rsa" version = "0.9.6" @@ -3571,6 +3847,15 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +[[package]] +name = "simd_helpers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" +dependencies = [ + "quote", +] + [[package]] name = "siphasher" version = "0.3.11" @@ -4205,22 +4490,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "tauri-plugin-clipboard-manager" -version = "2.1.0-beta.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d111ff331a3ef150a02eab7d7e8350bb7f92495ee272d6f22179b2e03feb66" -dependencies = [ - "arboard", - "image 0.24.9", - "log", - "serde", - "serde_json", - "tauri", - "tauri-plugin", - "thiserror", -] - [[package]] name = "tauri-plugin-global-shortcut" version = "2.0.0-beta.7" @@ -4857,6 +5126,17 @@ dependencies = [ "getrandom 0.2.15", ] +[[package]] +name = "v_frame" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" +dependencies = [ + "aligned-vec", + "num-traits", + "wasm-bindgen", +] + [[package]] name = "valuable" version = "0.1.0" @@ -5586,6 +5866,12 @@ version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + [[package]] name = "zune-inflate" version = "0.2.54" @@ -5594,3 +5880,12 @@ checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" dependencies = [ "simd-adler32", ] + +[[package]] +name = "zune-jpeg" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec866b44a2a1fd6133d363f073ca1b179f438f99e7e5bfb1e33f7181facfe448" +dependencies = [ + "zune-core", +] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index e60b116..3b3e13b 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -11,7 +11,6 @@ tauri-build = { version = "2.0.0-beta.18", features = [] } [dependencies] tauri = { version = "2.0.0-beta.23", features = ["unstable", "tray-icon", "image-png"] } -tauri-plugin-clipboard-manager = "2.1.0-beta.5" tauri-plugin-window-state = "2.0.0-beta.10" tauri-plugin-sql = {version = "2.0.0-beta.8", features = ["sqlite"] } tauri-plugin-global-shortcut = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } @@ -23,3 +22,6 @@ tokio = { version = "1.0", features = ["full"] } serde_json = "1.0" rdev = "0.5.3" rand = "0.8" +base64 = "0.22.1" +arboard = "3.4.0" +image = "0.25.1" \ No newline at end of file diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index 20a43ed..e12bedf 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -15,12 +15,6 @@ "image:default", "menu:default", "tray:default", - "clipboard-manager:default", - "clipboard-manager:allow-read-text", - "clipboard-manager:allow-write-text", - "clipboard-manager:allow-read-image", - "clipboard-manager:allow-write-html", - "clipboard-manager:allow-write-image", "sql:allow-load", "sql:allow-select", "sql:allow-execute", diff --git a/src-tauri/src/clipboard.rs b/src-tauri/src/clipboard.rs new file mode 100644 index 0000000..2176470 --- /dev/null +++ b/src-tauri/src/clipboard.rs @@ -0,0 +1,96 @@ +use rdev::{listen, simulate, EventType, Key}; +use std::sync::mpsc; +use std::thread; +use std::time::Duration; +use tauri::Manager; +use arboard::{Clipboard, ImageData}; +use sqlx::SqlitePool; +use tokio::runtime::Runtime; +use rand::{thread_rng, Rng}; +use rand::distributions::Alphanumeric; +use base64::engine::general_purpose::STANDARD; +use base64::Engine; + +#[tauri::command] +pub fn simulate_paste() { + let mut events = vec![ + EventType::KeyPress(Key::MetaLeft), + EventType::KeyPress(Key::KeyV), + EventType::KeyRelease(Key::KeyV), + EventType::KeyRelease(Key::MetaLeft), + ]; + + thread::sleep(Duration::from_millis(100)); + + for event in events.drain(..) { + simulate(&event).unwrap(); + thread::sleep(Duration::from_millis(20)); + } +} + +pub fn setup(app_handle: tauri::AppHandle) { + let (tx, rx) = mpsc::channel(); + + std::thread::spawn(move || { + listen(move |event| match event.event_type { + EventType::KeyPress(Key::ControlLeft | Key::ControlRight) => { + let _ = tx.send(true); + } + EventType::KeyRelease(Key::KeyC) => { + if rx.try_recv().is_ok() { + let mut clipboard = Clipboard::new().unwrap(); + let pool = app_handle.state::(); + let rt = app_handle.state::(); + + if let Ok(content) = clipboard.get_text() { + rt.block_on(async { + insert_content_if_not_exists(&pool, "text", content).await; + }); + } + + match clipboard.get_image() { + Ok(image) => { + println!("Image found in clipboard"); + rt.block_on(async { + let base64_image = STANDARD.encode(&image.bytes); + println!("Image encoded to base64"); + insert_content_if_not_exists(&pool, "image", base64_image).await; + println!("Image inserted into database"); + }); + }, + Err(e) => { + println!("Error reading image from clipboard: {:?}", e); + } + } + } + } + _ => {} + }) + .unwrap(); + }); +} + +async fn insert_content_if_not_exists(pool: &SqlitePool, content_type: &str, content: String) { + // Check if content already exists + let exists: bool = sqlx::query_scalar("SELECT EXISTS(SELECT 1 FROM history WHERE content_type = ? AND content = ?)") + .bind(content_type) + .bind(&content) + .fetch_one(pool) + .await + .unwrap_or(false); + + if !exists { + let id: String = thread_rng() + .sample_iter(&Alphanumeric) + .take(16) + .map(char::from) + .collect(); + + let _ = sqlx::query("INSERT INTO history (id, content_type, content) VALUES (?, ?, ?)") + .bind(id) + .bind(content_type) + .bind(content) + .execute(pool) + .await; + } +} \ No newline at end of file diff --git a/src-tauri/src/clipboard_listener.rs b/src-tauri/src/clipboard_listener.rs deleted file mode 100644 index fd4abb7..0000000 --- a/src-tauri/src/clipboard_listener.rs +++ /dev/null @@ -1,72 +0,0 @@ -use rdev::{listen, simulate, EventType, Key}; -use std::sync::mpsc; -use std::thread; -use std::time::Duration; -use tauri::Manager; -use tauri_plugin_clipboard_manager::ClipboardExt; -use sqlx::SqlitePool; -use tokio::runtime::Runtime; -use rand::{thread_rng, Rng}; -use rand::distributions::Alphanumeric; - -#[tauri::command] -pub fn simulate_paste() { - let mut events = vec![ - EventType::KeyPress(Key::MetaLeft), - EventType::KeyPress(Key::KeyV), - EventType::KeyRelease(Key::KeyV), - EventType::KeyRelease(Key::MetaLeft), - ]; - - thread::sleep(Duration::from_millis(100)); - - for event in events.drain(..) { - simulate(&event).unwrap(); - thread::sleep(Duration::from_millis(20)); - } -} - -pub fn setup(app_handle: tauri::AppHandle) { - let (tx, rx) = mpsc::channel(); - - std::thread::spawn(move || { - listen(move |event| match event.event_type { - EventType::KeyPress(Key::ControlLeft | Key::ControlRight) => { - let _ = tx.send(true); - } - EventType::KeyRelease(Key::KeyC) => { - if rx.try_recv().is_ok() { - match app_handle.clipboard().read_text() { - Ok(content) => { - let pool = app_handle.state::(); - let rt = app_handle.state::(); - rt.block_on(async { - let exists = sqlx::query_scalar::<_, bool>("SELECT EXISTS(SELECT 1 FROM history WHERE content = ?)") - .bind(&content) - .fetch_one(&*pool) - .await - .unwrap_or(false); - - if !exists { - let id: String = thread_rng() - .sample_iter(&Alphanumeric) - .take(16) - .map(char::from) - .collect(); - let _ = sqlx::query("INSERT INTO history (id, content) VALUES (?, ?)") - .bind(id) - .bind(content) - .execute(&*pool) - .await; - } - }); - }, - Err(e) => eprintln!("Error reading clipboard: {:?}", e), - } - } - } - _ => {} - }) - .unwrap(); - }); -} diff --git a/src-tauri/src/database.rs b/src-tauri/src/database.rs index 62eb205..2226b29 100644 --- a/src-tauri/src/database.rs +++ b/src-tauri/src/database.rs @@ -30,6 +30,7 @@ pub fn setup(app: &mut tauri::App) -> Result<(), Box> { sqlx::query( "CREATE TABLE IF NOT EXISTS history ( id TEXT PRIMARY KEY, + content_type TEXT NOT NULL, content TEXT NOT NULL, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP )" @@ -44,7 +45,7 @@ pub fn setup(app: &mut tauri::App) -> Result<(), Box> { .take(16) .map(char::from) .collect(); - sqlx::query("INSERT INTO history (id, content) VALUES (?, ?)") + sqlx::query("INSERT INTO history (id, content_type, content) VALUES (?, text, ?)") .bind(id) .bind("Welcome to your clipboard history!") .execute(&pool) diff --git a/src-tauri/src/global_shortcut.rs b/src-tauri/src/hotkeys.rs similarity index 100% rename from src-tauri/src/global_shortcut.rs rename to src-tauri/src/hotkeys.rs diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 77965df..ee7bcfe 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -3,9 +3,9 @@ windows_subsystem = "windows" )] -mod clipboard_listener; +mod clipboard; mod database; -mod global_shortcut; +mod hotkeys; mod tray; use tauri::Manager; @@ -20,16 +20,15 @@ fn main() { Some(vec![]), )) .plugin(tauri_plugin_global_shortcut::Builder::new().build()) - .plugin(tauri_plugin_clipboard_manager::init()) .plugin(tauri_plugin_window_state::Builder::default().build()) .plugin(tauri_plugin_sql::Builder::default().build()) .setup(|app| { let app_handle = app.handle().clone(); - global_shortcut::setup(app_handle.clone()); + hotkeys::setup(app_handle.clone()); tray::setup(app)?; database::setup(app)?; - clipboard_listener::setup(app_handle); + clipboard::setup(app_handle); if let Some(window) = app.get_window("main") { let _ = window.restore_state(StateFlags::POSITION); @@ -46,7 +45,7 @@ fn main() { } _ => {} }) - .invoke_handler(tauri::generate_handler![clipboard_listener::simulate_paste]) + .invoke_handler(tauri::generate_handler![clipboard::simulate_paste]) .run(tauri::generate_context!()) .expect("error while running tauri application"); }