diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 7988d15a6..22a1441d7 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -38,6 +38,17 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.14", + "once_cell", + "version_check", +] + [[package]] name = "ahash" version = "0.8.11" @@ -81,6 +92,24 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" +[[package]] +name = "android_log-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937" + +[[package]] +name = "android_logger" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c494134f746c14dc653a35a4ea5aca24ac368529da5370ecf41fe0341c35772f" +dependencies = [ + "android_log-sys", + "env_logger", + "log", + "once_cell", +] + [[package]] name = "android_system_properties" version = "0.1.5" @@ -154,6 +183,7 @@ dependencies = [ "anyhow", "kcl-lib", "kittycad", + "log", "oauth2", "serde_json", "tauri", @@ -163,6 +193,7 @@ dependencies = [ "tauri-plugin-dialog", "tauri-plugin-fs", "tauri-plugin-http", + "tauri-plugin-log", "tauri-plugin-os", "tauri-plugin-process", "tauri-plugin-shell", @@ -181,6 +212,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + [[package]] name = "ashpd" version = "0.8.1" @@ -507,6 +544,30 @@ dependencies = [ "tracing", ] +[[package]] +name = "borsh" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbe5b10e214954177fb1dc9fbd20a1a2608fe99e6c832033bdc7cea287a20d77" +dependencies = [ + "borsh-derive", + "cfg_aliases 0.1.1", +] + +[[package]] +name = "borsh-derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7a8646f94ab393e43e8b35a2558b1624bed28b97ee09c5d15456e3c9463f46d" +dependencies = [ + "once_cell", + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 2.0.60", + "syn_derive", +] + [[package]] name = "brotli" version = "3.5.0" @@ -534,7 +595,7 @@ version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d43b38e074cc0de2957f10947e376a1d88b9c4dbab340b590800cc1b2e066b2" dependencies = [ - "ahash", + "ahash 0.8.11", "base64 0.13.1", "bitvec", "chrono", @@ -556,6 +617,39 @@ version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +[[package]] +name = "byte-unit" +version = "5.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ac19bdf0b2665407c39d82dbc937e951e7e2001609f0fb32edd0af45a2d63e" +dependencies = [ + "rust_decimal", + "serde", + "utf8-width", +] + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "bytemuck" version = "1.15.0" @@ -1294,6 +1388,16 @@ dependencies = [ "syn 2.0.60", ] +[[package]] +name = "env_logger" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +dependencies = [ + "log", + "regex", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -1367,6 +1471,15 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "fern" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee" +dependencies = [ + "log", +] + [[package]] name = "field-offset" version = "0.3.6" @@ -1964,6 +2077,9 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] [[package]] name = "hashbrown" @@ -2658,6 +2774,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" dependencies = [ "serde", + "value-bag", ] [[package]] @@ -2970,6 +3087,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + [[package]] name = "oauth2" version = "4.4.2" @@ -3619,6 +3745,26 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "quick-xml" version = "0.31.0" @@ -3836,6 +3982,15 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + [[package]] name = "reqwest" version = "0.11.27" @@ -4044,6 +4199,35 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rkyv" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "ropey" version = "1.6.1" @@ -4054,6 +4238,22 @@ dependencies = [ "str_indices", ] +[[package]] +name = "rust_decimal" +version = "1.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1790d1c4c0ca81211399e0e0af16333276f375209e71a37b67698a373db5b47a" +dependencies = [ + "arrayvec", + "borsh", + "bytes", + "num-traits", + "rand 0.8.5", + "rkyv", + "serde", + "serde_json", +] + [[package]] name = "rustc-demangle" version = "0.1.23" @@ -4249,6 +4449,12 @@ dependencies = [ "untrusted", ] +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + [[package]] name = "security-framework" version = "2.10.0" @@ -4537,6 +4743,12 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +[[package]] +name = "simdutf8" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" + [[package]] name = "siphasher" version = "0.3.11" @@ -4794,6 +5006,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.60", +] + [[package]] name = "sync_wrapper" version = "0.1.2" @@ -4938,9 +5162,9 @@ dependencies = [ [[package]] name = "tauri" -version = "2.0.0-beta.16" +version = "2.0.0-beta.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d411ebb670bbe5cf948f6c24978632937329748b499de1619ab55ad31512652" +checksum = "5fedd5490eddf117253945f0baedafded43474c971cba546a818f527d5c26266" dependencies = [ "anyhow", "bytes", @@ -4952,7 +5176,7 @@ dependencies = [ "getrandom 0.2.14", "glob", "gtk", - "heck 0.4.1", + "heck 0.5.0", "http 1.1.0", "jni", "libc", @@ -5153,6 +5377,27 @@ dependencies = [ "urlpattern", ] +[[package]] +name = "tauri-plugin-log" +version = "2.0.0-beta.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97718db0d981b03b7b1257c22f699ff46639220c5acb4510ac9696437afc93f8" +dependencies = [ + "android_logger", + "byte-unit", + "cocoa", + "fern", + "log", + "objc", + "serde", + "serde_json", + "serde_repr", + "swift-rs", + "tauri", + "tauri-plugin", + "time", +] + [[package]] name = "tauri-plugin-os" version = "2.0.0-beta.3" @@ -5231,9 +5476,9 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.0.0-beta.13" +version = "2.0.0-beta.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7439729d0107c9797764919c39c4a4cc3af64306faaa48271da50d8eb4c0283" +checksum = "148b6e6aff8e63fe5d4ae1d50159d50cfc0b4309abdeca64833c887c6b5631ef" dependencies = [ "dpi", "gtk", @@ -5250,9 +5495,9 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.0.0-beta.13" +version = "2.0.0-beta.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c38dcfa7f8c2b2e344c7401972e0ddaaec4fa655666788d94b1852d6c4a7fe8" +checksum = "398d065c6e0fbf3c4304583759b6e153bc1e0daeb033bede6834ebe4df371fc3" dependencies = [ "cocoa", "gtk", @@ -5393,7 +5638,9 @@ checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "itoa 1.0.11", + "libc", "num-conv", + "num_threads", "powerfmt", "serde", "time-core", @@ -5963,6 +6210,12 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf8-width" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" + [[package]] name = "utf8parse" version = "0.2.1" @@ -6017,6 +6270,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "value-bag" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" + [[package]] name = "version-compare" version = "0.2.0" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index ca7dfcebf..c6e92efe6 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -17,6 +17,7 @@ tauri-build = { version = "2.0.0-beta.13", features = [] } anyhow = "1" kcl-lib = { version = "0.1.53", path = "../src/wasm-lib/kcl" } kittycad = "0.3.0" +log = "0.4.21" oauth2 = "4.4.2" serde_json = "1.0" tauri = { version = "2.0.0-beta.15", features = [ "devtools", "unstable"] } @@ -25,6 +26,7 @@ tauri-plugin-deep-link = { version = "2.0.0-beta.3" } tauri-plugin-dialog = { version = "2.0.0-beta.6" } tauri-plugin-fs = { version = "2.0.0-beta.6" } tauri-plugin-http = { version = "2.0.0-beta.6" } +tauri-plugin-log = { version = "2.0.0-beta.4" } tauri-plugin-os = { version = "2.0.0-beta.2" } tauri-plugin-process = { version = "2.0.0-beta.2" } tauri-plugin-shell = { version = "2.0.0-beta.2" } diff --git a/src-tauri/capabilities/desktop.json b/src-tauri/capabilities/desktop.json index a5883f6d8..ad6b23a49 100644 --- a/src-tauri/capabilities/desktop.json +++ b/src-tauri/capabilities/desktop.json @@ -9,6 +9,7 @@ "permissions": [ "cli:default", "deep-link:default", + "log:default", "path:default", "event:default", "window:default", diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index dde6eabd3..0e1551906 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -226,7 +226,7 @@ async fn read_dir_recursive(path: &str) -> Result { /// The string returned from this method is the access token. #[tauri::command] async fn login(app: tauri::AppHandle, host: &str) -> Result { - println!("Logging in..."); + log::debug!("Logging in..."); // Do an OAuth 2.0 Device Authorization Grant dance to get a token. let device_auth_url = oauth2::DeviceAuthorizationUrl::new(format!("{host}/oauth2/device/auth")) .map_err(|e| InvokeError::from_anyhow(e.into()))?; @@ -265,7 +265,7 @@ async fn login(app: tauri::AppHandle, host: &str) -> Result // and bypass the shell::open call as it fails on GitHub Actions. let e2e_tauri_enabled = env::var("E2E_TAURI_ENABLED").is_ok(); if e2e_tauri_enabled { - println!("E2E_TAURI_ENABLED is set, won't open {} externally", auth_uri.secret()); + log::warn!("E2E_TAURI_ENABLED is set, won't open {} externally", auth_uri.secret()); tokio::fs::write("/tmp/kittycad_user_code", details.user_code().secret()) .await .map_err(|e| InvokeError::from_anyhow(e.into()))?; @@ -308,7 +308,7 @@ async fn get_user(token: &str, hostname: &str) -> Result Result<(), InvokeError> { #[allow(dead_code)] fn open_url_sync(app: &tauri::AppHandle, url: &url::Url) { - println!("Opening URL: {:?}", url); + log::debug!("Opening URL: {:?}", url); let cloned_url = url.clone(); let runner: tauri::async_runtime::JoinHandle> = tauri::async_runtime::spawn(async move { - let url_str = cloned_url.to_string(); + let url_str = cloned_url.path().to_string(); + log::debug!("Opening URL path : {}", url_str); let path = Path::new(url_str.as_str()); ProjectState::new_from_path(path.to_path_buf()).await }); @@ -367,10 +368,10 @@ fn open_url_sync(app: &tauri::AppHandle, url: &url::Url) { app.manage(state::Store::new(store)); } Err(e) => { - println!("Error opening URL:{} {:?}", url, e); + log::warn!("Error opening URL:{} {:?}", url, e); } Ok(Err(e)) => { - println!("Error opening URL:{} {:?}", url, e); + log::warn!("Error opening URL:{} {:?}", url, e); } } } @@ -400,6 +401,15 @@ fn main() -> Result<()> { .plugin(tauri_plugin_dialog::init()) .plugin(tauri_plugin_fs::init()) .plugin(tauri_plugin_http::init()) + .plugin( + tauri_plugin_log::Builder::new() + .targets([ + tauri_plugin_log::Target::new(tauri_plugin_log::TargetKind::Stdout), + tauri_plugin_log::Target::new(tauri_plugin_log::TargetKind::LogDir { file_name: None }), + ]) + .level(log::LevelFilter::Debug) + .build(), + ) .plugin(tauri_plugin_os::init()) .plugin(tauri_plugin_process::init()) .plugin(tauri_plugin_shell::init()) @@ -435,7 +445,7 @@ fn main() -> Result<()> { if let Some(source_arg) = matches.args.get("source") { // We don't do an else here because this can be null. if let Some(value) = source_arg.value.as_str() { - println!("Got path in cli argument: {}", value); + log::info!("Got path in cli argument: {}", value); source_path = Some(Path::new(value).to_path_buf()); } } @@ -446,7 +456,7 @@ fn main() -> Result<()> { } if verbose { - println!("Verbose mode enabled."); + log::debug!("Verbose mode enabled."); } // If we have a source path to open, make sure it exists. @@ -476,7 +486,7 @@ fn main() -> Result<()> { // Listen on the deep links. app.listen("deep-link://new-url", |event| { - println!("got deep-link url: {:?}", event); + log::info!("got deep-link url: {:?}", event); // TODO: open_url_sync(app.handle(), event.url); }); @@ -488,10 +498,7 @@ fn main() -> Result<()> { |app, event| { #[cfg(any(target_os = "macos", target_os = "ios"))] if let tauri::RunEvent::Opened { urls } = event { - if let Some(w) = app.get_webview_window("main") { - let _ = w.eval(&format!("console.log(`[tauri] Opened URLs: {:?}`)", urls)); - } - println!("Opened URLs: {:?}", urls); + log::info!("Opened URLs: {:?}", urls); // Handle the first URL. // TODO: do we want to handle more than one URL?