diff --git a/apps/desktop/package.json b/apps/desktop/package.json index bc33e50c..772855c1 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -44,6 +44,8 @@ "@tauri-apps/plugin-global-shortcut": "2.0.0-rc.0", "@tauri-apps/plugin-websocket": "2.0.0-rc.0", "@tauri-apps/plugin-window-state": "2.0.0-rc.0", + "@tauri-apps/plugin-store": "2.0.0-rc.0", + "@tauri-apps/plugin-log": "2.0.0-rc.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "date-fns": "^2.30.0", diff --git a/apps/desktop/src-tauri/Cargo.lock b/apps/desktop/src-tauri/Cargo.lock index 214e6e17..5c43f03e 100644 --- a/apps/desktop/src-tauri/Cargo.lock +++ b/apps/desktop/src-tauri/Cargo.lock @@ -17,6 +17,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "version_check", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -47,6 +58,23 @@ 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.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b07e8e73d720a1f2e4b6014766e6039fd2e96a4fa44e2a78d0e1fa2ff49826" +dependencies = [ + "android_log-sys", + "env_filter", + "log", +] + [[package]] name = "android_system_properties" version = "0.1.5" @@ -71,6 +99,12 @@ dependencies = [ "derive_arbitrary", ] +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + [[package]] name = "async-broadcast" version = "0.7.1" @@ -97,9 +131,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7" +checksum = "c8828ec6e544c02b0d6691d21ed9f9218d0384a82542855073c2a3f58304aaf0" dependencies = [ "async-task", "concurrent-queue", @@ -121,9 +155,9 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.4" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" +checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" dependencies = [ "async-lock", "cfg-if", @@ -135,7 +169,7 @@ dependencies = [ "rustix", "slab", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -151,9 +185,9 @@ dependencies = [ [[package]] name = "async-process" -version = "2.2.4" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a07789659a4d385b79b18b9127fc27e1a59e1e89117c78c5ea3b806f016374" +checksum = "f7eda79bbd84e29c2b308d1dc099d7de8dcc7035e48f4bf5dc4a531a44ff5e2a" dependencies = [ "async-channel", "async-io", @@ -166,7 +200,7 @@ dependencies = [ "futures-lite", "rustix", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -177,14 +211,14 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] name = "async-signal" -version = "0.2.10" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +checksum = "794f185324c2f00e771cd9f1ae8b5ac68be2ca7abb129a87afd6e86d228bc54d" dependencies = [ "async-io", "async-lock", @@ -195,7 +229,7 @@ dependencies = [ "rustix", "signal-hook-registry", "slab", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -206,13 +240,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.81" +version = "0.1.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -292,6 +326,18 @@ dependencies = [ "serde", ] +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + [[package]] name = "block" version = "0.1.6" @@ -329,6 +375,30 @@ dependencies = [ "piper", ] +[[package]] +name = "borsh" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d4d6dafc1a3bb54687538972158f07b2c948bc57d5890df22c0739098b3028" +dependencies = [ + "borsh-derive", + "cfg_aliases 0.1.1", +] + +[[package]] +name = "borsh-derive" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4918709cc4dd777ad2b6303ed03cb37f3ca0ccede8c1b0d28ac6db8f4710e0" +dependencies = [ + "once_cell", + "proc-macro-crate 2.0.2", + "proc-macro2", + "quote", + "syn 2.0.68", + "syn_derive", +] + [[package]] name = "brotli" version = "6.0.0" @@ -356,11 +426,44 @@ 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.17.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd4c6dcc3b0aea2f5c0b4b82c2b15fe39ddbc76041a310848f4706edf76bb31" +checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" [[package]] name = "byteorder" @@ -370,9 +473,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" dependencies = [ "serde", ] @@ -446,12 +549,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.13" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72db2f7947ecee9b03b510377e8bb9077afa27176fdbff55c51027e976fdcc48" -dependencies = [ - "shlex", -] +checksum = "779e6b7d17797c0b42023d417228c02889300190e700cb074c3438d9c541d332" [[package]] name = "cesu8" @@ -486,6 +586,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "cfg_aliases" version = "0.2.1" @@ -700,9 +806,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] @@ -765,7 +871,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -775,14 +881,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] name = "darling" -version = "0.20.10" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" dependencies = [ "darling_core", "darling_macro", @@ -790,27 +896,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" dependencies = [ "darling_core", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -854,7 +960,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -867,7 +973,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -915,7 +1021,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -938,7 +1044,7 @@ checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -967,9 +1073,9 @@ dependencies = [ [[package]] name = "dunce" -version = "1.0.5" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" [[package]] name = "dyn-clone" @@ -979,9 +1085,9 @@ checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "embed-resource" -version = "2.4.3" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4edcacde9351c33139a41e3c97eb2334351a81a2791bebb0b243df837128f602" +checksum = "c6985554d0688b687c5cb73898a34fbe3ad6c24c58c238a4d91d5e840670ee9d" dependencies = [ "cc", "memchr", @@ -1030,7 +1136,17 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", +] + +[[package]] +name = "env_filter" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" +dependencies = [ + "log", + "regex", ] [[package]] @@ -1095,6 +1211,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" @@ -1107,21 +1232,21 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.24" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf401df4a4e3872c4fe8151134cf483738e74b67fc934d6532c882b3d24a4550" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" dependencies = [ "cfg-if", "libc", - "libredox", - "windows-sys 0.59.0", + "redox_syscall 0.4.1", + "windows-sys 0.52.0", ] [[package]] name = "flate2" -version = "1.0.31" +version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" dependencies = [ "crc32fast", "miniz_oxide", @@ -1160,7 +1285,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -1178,6 +1303,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + [[package]] name = "futf" version = "0.1.5" @@ -1241,7 +1372,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -1508,7 +1639,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -1587,14 +1718,14 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] name = "h2" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ "atomic-waker", "bytes", @@ -1602,7 +1733,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.4.0", + "indexmap 2.2.6", "slab", "tokio", "tokio-util", @@ -1614,6 +1745,9 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] [[package]] name = "hashbrown" @@ -1848,9 +1982,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.4.0" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -1959,9 +2093,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] @@ -2045,9 +2179,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.157" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374af5f94e54fa97cf75e945cce8a6b201e88a1a07e688b47dfd2a59c66dbd86" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libloading" @@ -2067,9 +2201,14 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.6.0", "libc", - "redox_syscall", ] +[[package]] +name = "line-wrap" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd1bc4d24ad230d21fb898d1116b1801d7adfc449d42026475862ab48b11e70e" + [[package]] name = "linux-raw-sys" version = "0.4.14" @@ -2091,6 +2230,9 @@ name = "log" version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +dependencies = [ + "value-bag", +] [[package]] name = "loom" @@ -2190,21 +2332,20 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.2" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ - "hermit-abi 0.3.9", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "windows-sys 0.48.0", ] [[package]] name = "muda" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86c410a9d21523a819e84881603fbc00331c8001eb899964952046671deddb9c" +checksum = "ba8ac4080fb1e097c2c22acae467e46e4da72d941f02e82b67a87a2a89fa38b1" dependencies = [ "cocoa 0.26.0", "crossbeam-channel", @@ -2298,6 +2439,16 @@ dependencies = [ "autocfg", ] +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.9", + "libc", +] + [[package]] name = "num_enum" version = "0.7.3" @@ -2316,7 +2467,16 @@ dependencies = [ "proc-macro-crate 2.0.2", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", ] [[package]] @@ -2460,9 +2620,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.3" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" +checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" dependencies = [ "memchr", ] @@ -2527,6 +2687,7 @@ version = "0.0.0" dependencies = [ "anyhow", "cocoa 0.26.0", + "log", "objc", "serde", "serde_json", @@ -2536,10 +2697,12 @@ dependencies = [ "tauri-nspanel", "tauri-plugin-fs", "tauri-plugin-http", + "tauri-plugin-log", "tauri-plugin-os", "tauri-plugin-process", "tauri-plugin-shell", "tauri-plugin-single-instance", + "tauri-plugin-store", "tauri-plugin-updater", "tauri-plugin-websocket", "tauri-plugin-window-state", @@ -2601,7 +2764,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.5.2", "smallvec", "windows-targets 0.52.6", ] @@ -2722,7 +2885,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -2769,7 +2932,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -2786,9 +2949,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.4" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" dependencies = [ "atomic-waker", "fastrand", @@ -2803,12 +2966,13 @@ checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "plist" -version = "1.7.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" +checksum = "d9d34169e64b3c7a80c8621a48adaf44e0cf62c78a9b25dd9dd35f1881a17cf9" dependencies = [ - "base64 0.22.1", - "indexmap 2.4.0", + "base64 0.21.7", + "indexmap 2.2.6", + "line-wrap", "quick-xml", "serde", "time", @@ -2829,9 +2993,9 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.3" +version = "3.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" +checksum = "a3ed00ed3fbf728b5816498ecd316d1716eecaced9c0c8d2c5a6740ca214985b" dependencies = [ "cfg-if", "concurrent-queue", @@ -2839,7 +3003,7 @@ dependencies = [ "pin-project-lite", "rustix", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -2850,12 +3014,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" -dependencies = [ - "zerocopy", -] +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "precomputed-hash" @@ -2928,6 +3089,26 @@ version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" +[[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 = "publicsuffix" version = "2.2.3" @@ -2940,9 +3121,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.32.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" dependencies = [ "memchr", ] @@ -3004,6 +3185,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + [[package]] name = "rand" version = "0.7.3" @@ -3093,9 +3280,18 @@ checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" dependencies = [ "bitflags 2.6.0", ] @@ -3113,9 +3309,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.6" +version = "1.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" dependencies = [ "aho-corasick", "memchr", @@ -3155,11 +3351,20 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +[[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.12.5" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" dependencies = [ "base64 0.22.1", "bytes", @@ -3201,7 +3406,7 @@ dependencies = [ "wasm-streams", "web-sys", "webpki-roots", - "winreg", + "windows-registry", ] [[package]] @@ -3219,6 +3424,51 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rkyv" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rust_decimal" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" +dependencies = [ + "arrayvec", + "borsh", + "bytes", + "num-traits", + "rand 0.8.5", + "rkyv", + "serde", + "serde_json", +] + [[package]] name = "rustc-demangle" version = "0.1.24" @@ -3285,9 +3535,9 @@ checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" [[package]] name = "rustls-webpki" -version = "0.102.6" +version = "0.102.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" dependencies = [ "ring", "rustls-pki-types", @@ -3338,7 +3588,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -3353,6 +3603,12 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + [[package]] name = "selectors" version = "0.22.0" @@ -3384,9 +3640,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.208" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] @@ -3404,13 +3660,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.208" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -3421,17 +3677,16 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] name = "serde_json" -version = "1.0.125" +version = "1.0.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed" +checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" dependencies = [ "itoa 1.0.11", - "memchr", "ryu", "serde", ] @@ -3444,14 +3699,14 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" dependencies = [ "serde", ] @@ -3470,15 +3725,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.9.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.4.0", + "indexmap 2.2.6", "serde", "serde_derive", "serde_json", @@ -3488,14 +3743,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.9.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -3571,12 +3826,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -3592,6 +3841,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" @@ -3630,7 +3885,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d623bff5d06f60d738990980d782c8c866997d9194cfe79ecad00aa2f76826dd" dependencies = [ "bytemuck", - "cfg_aliases", + "cfg_aliases 0.2.1", "core-graphics 0.23.2", "foreign-types", "js-sys", @@ -3640,7 +3895,7 @@ dependencies = [ "objc2-foundation", "objc2-quartz-core", "raw-window-handle", - "redox_syscall", + "redox_syscall 0.5.2", "wasm-bindgen", "web-sys", "windows-sys 0.52.0", @@ -3739,9 +3994,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "swift-rs" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bbdb58577b6301f8d17ae2561f32002a5bae056d444e0f69e611e504a276204" +checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" dependencies = [ "base64 0.21.7", "serde", @@ -3761,20 +4016,35 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.75" +version = "2.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6af063034fc1935ede7be0122941bafa9bacb949334d090b77ca98b5817c7d9" +checksum = "901fa70d88b9d6c98022e23b4136f9f3e54e4662c3bc1bd1d84a42a9a0f0c1e9" dependencies = [ "proc-macro2", "quote", "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.68", +] + [[package]] name = "sync_wrapper" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] [[package]] name = "sys-locale" @@ -3787,20 +4057,20 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "core-foundation 0.9.4", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -3822,7 +4092,7 @@ dependencies = [ [[package]] name = "system-notification" version = "0.1.0" -source = "git+https://github.com/ahkohd/tauri-toolkit?branch=v2#9ba387cadcaf91dc0ec36673890849099c564622" +source = "git+https://github.com/ahkohd/tauri-toolkit?branch=v2#39b658f4c95dc2106a315d7582e854c88b4ed4b3" dependencies = [ "block", "cocoa 0.25.0", @@ -3832,9 +4102,9 @@ dependencies = [ [[package]] name = "tao" -version = "0.29.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6775bcf3c1da33f848ede9cff5883ed1e45a29f66533ce42ad06c93ae514ed59" +checksum = "d3a97abbc7d6cfd0720da3e06fcb1cf2ac87cbfdb5bbbce103a1279a211c4d81" dependencies = [ "bitflags 2.6.0", "cocoa 0.26.0", @@ -3880,6 +4150,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + [[package]] name = "tar" version = "0.4.41" @@ -3893,15 +4169,15 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.12.16" +version = "0.12.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" +checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" [[package]] name = "tauri" -version = "2.0.0-rc.3" +version = "2.0.0-rc.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79776954e2cd6b6c3b56e2cd99905a3a166017495a39ac8eb4c85dd8ea8704b4" +checksum = "e8345ccc676ef16e26b61fc0f5340b4e770678b1e1f53f08c69ebdac5e56b422" dependencies = [ "anyhow", "bytes", @@ -3949,9 +4225,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.0.0-rc.3" +version = "2.0.0-rc.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc103bde77870e08d5fc8765615b9615997827550b626fbc4ebbd7a1fbfe2a2" +checksum = "7d5ad5fcfaf02cf79aa6727f6c5df38567d8dce172b00b62690c6bc46c08b7ce" dependencies = [ "anyhow", "cargo_toml", @@ -3971,9 +4247,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.0.0-rc.3" +version = "2.0.0-rc.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea061e6be9b37ab455eadc189f45617deafc85c94f78f9cd584862a6deaa83d1" +checksum = "809ef6316726fc72593d296cf6f4e7461326e310c313d6a6c42b6e7f1e2671cf" dependencies = [ "base64 0.22.1", "brotli", @@ -3987,7 +4263,7 @@ dependencies = [ "serde", "serde_json", "sha2", - "syn 2.0.75", + "syn 2.0.68", "tauri-utils", "thiserror", "time", @@ -3998,14 +4274,14 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.0.0-rc.3" +version = "2.0.0-rc.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e20d6f6f96f55a43339c465b3c8205d71940372d54d7c665c5329e8e4ba35d0" +checksum = "1359e8861d210d25731f8b1bfbb4d111dd06406cf73c59659366ef450364d811" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", "tauri-codegen", "tauri-utils", ] @@ -4028,9 +4304,9 @@ dependencies = [ [[package]] name = "tauri-plugin" -version = "2.0.0-rc.3" +version = "2.0.0-rc.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec01af01098a286d3e430c1fa947bfd77bc8011ecb209438af4444b02d82b29e" +checksum = "a7dded420c86183f592d0fe925ef9447f41e26fa79f0bdfef8d3f17bfbcdbfb7" dependencies = [ "anyhow", "glob", @@ -4045,9 +4321,9 @@ dependencies = [ [[package]] name = "tauri-plugin-fs" -version = "2.0.0-rc.0" +version = "2.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5df6b25b1f2b7b61565e66c4dbee9eb39e5635d2a763206e380e07cc3f601a67" +checksum = "694a746b0e0c1d318198fabf4957800c42fb4b705e866e0eed7ec21476ef88db" dependencies = [ "anyhow", "glob", @@ -4064,9 +4340,9 @@ dependencies = [ [[package]] name = "tauri-plugin-http" -version = "2.0.0-rc.0" +version = "2.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1eef17218eaa8bd0fc6cafb7831c63d82ef83b3950d59dc817d92d5320c4f20c" +checksum = "7953c340b866393dc9935612ecabf2db361ebe0f39df020228021eaffe971b9b" dependencies = [ "data-url", "http", @@ -4084,11 +4360,33 @@ dependencies = [ "urlpattern", ] +[[package]] +name = "tauri-plugin-log" +version = "2.0.0-rc.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b57e4666c4a5d81f81b7bb8eacf51ae32c4e69c35071aabb480ad20a80836e4e" +dependencies = [ + "android_logger", + "byte-unit", + "cocoa 0.25.0", + "fern", + "log", + "objc", + "serde", + "serde_json", + "serde_repr", + "swift-rs", + "tauri", + "tauri-plugin", + "thiserror", + "time", +] + [[package]] name = "tauri-plugin-os" -version = "2.0.0-rc.0" +version = "2.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b54cfeb26356822d3be3db4282041b03552f573a694b6b28aded7d95c62a039" +checksum = "ebc4ee761edd532fce2232453e9c8e0f7d9c0b6fe125c4b90b3eb4362ee84224" dependencies = [ "gethostname", "log", @@ -4104,9 +4402,9 @@ dependencies = [ [[package]] name = "tauri-plugin-process" -version = "2.0.0-rc.0" +version = "2.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d3663df0cd3e96feb37d46aad5d499d2edfcca5c62548ad34f1684e0019168" +checksum = "9c9eb80b601682dcbd45dc5ed5f7cc214f1d994aeea730d500899cc616784559" dependencies = [ "tauri", "tauri-plugin", @@ -4114,9 +4412,9 @@ dependencies = [ [[package]] name = "tauri-plugin-shell" -version = "2.0.0-rc.1" +version = "2.0.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2133e5c6fe2ae0263ff5920feed477d3b1413f89033f537966831b0cb6f61f8e" +checksum = "e83800ddf78b820172efb5ed7310344e8e4f97fd30cd8237a3f20c12a79eb136" dependencies = [ "encoding_rs", "log", @@ -4135,24 +4433,39 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" -version = "2.0.0-rc.0" +version = "2.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de552151b4c9ba9ff72c7244dccaadd47f88d1f0d5caa2603c5c1c12b7636edc" +checksum = "d73c92c98d44d4daba0118d905f45243dfcd6eaac82216c3382a02d17cb74cf2" dependencies = [ "log", "serde", "serde_json", "tauri", "thiserror", - "windows-sys 0.52.0", + "windows-sys 0.59.0", "zbus", ] +[[package]] +name = "tauri-plugin-store" +version = "2.0.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e54ba1a0c0c60a6a08e711e184239f8a50354988b6fe1af8b5ce2215b2e79a2" +dependencies = [ + "dunce", + "log", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror", +] + [[package]] name = "tauri-plugin-updater" -version = "2.0.0-rc.1" +version = "2.0.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dfd104b50e1c17998fc131edd21ced948a9605bac7eb6827f94e099a644f924" +checksum = "f7048854b4271f3bc58ee850f0582f8d9bb0190118afa8397f36fc260daaa68b" dependencies = [ "base64 0.22.1", "dirs", @@ -4179,9 +4492,9 @@ dependencies = [ [[package]] name = "tauri-plugin-websocket" -version = "2.0.0-rc.0" +version = "2.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6a35f64f9cc7624a2645498825fcb91bab912c3e7450500ae8c363e5afdbfdf" +checksum = "0559ff75acabdd8a2d1bc1dee480d65d6760fd3b758916ff19db0bc1c1f19d7e" dependencies = [ "futures-util", "http", @@ -4212,9 +4525,9 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.0.0-rc.3" +version = "2.0.0-rc.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4e736d3293f8347e5d2c5b250fe0e5b873499f5483578b139445dbbf802e2e5" +checksum = "75c72b844f387bfc3341c355f3e16b8cbf4161848fa4e348670effb222cd3ba5" dependencies = [ "dpi", "gtk", @@ -4231,9 +4544,9 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.0.0-rc.3" +version = "2.0.0-rc.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fead81c1bd0205d5f02580e64f522704618274e784c2d1c127e4ba19acd0b79" +checksum = "73accf936a7cd01d1382de7850726fdf6c1f6ab3b01ccb7a0950cb852e332596" dependencies = [ "cocoa 0.26.0", "gtk", @@ -4255,9 +4568,9 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.0.0-rc.3" +version = "2.0.0-rc.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "285af18e09665ea15fdda04cb28fb579a4d71b4e1640628489fecca98838ca9a" +checksum = "d53d9fe87e985b273696ae22ce2b9f099a8f1b44bc8fb127467bda5fcb3e4371" dependencies = [ "brotli", "cargo_metadata", @@ -4300,15 +4613,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.12.0" +version = "3.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", "fastrand", - "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -4345,7 +4657,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -4366,7 +4678,9 @@ checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "itoa 1.0.11", + "libc", "num-conv", + "num_threads", "powerfmt", "serde", "time-core", @@ -4391,9 +4705,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "c55115c6fbe2d2bef26eb09ad74bde02d8255476fc0c7b515ef09fbb35742d82" dependencies = [ "tinyvec_macros", ] @@ -4406,31 +4720,32 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.3" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" dependencies = [ "backtrace", "bytes", "libc", "mio", + "num_cpus", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -4512,7 +4827,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.4.0", + "indexmap 2.2.6", "serde", "serde_spanned", "toml_datetime", @@ -4525,7 +4840,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.4.0", + "indexmap 2.2.6", "serde", "serde_spanned", "toml_datetime", @@ -4555,9 +4870,9 @@ checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" @@ -4578,7 +4893,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -4622,9 +4937,9 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b92252d649d771105448969f2b2dda4342ba48b77731b60d37c93665e26615b" +checksum = "131a65b2cef2081bc14dbcd414c906edbfa3bb5323dd7e748cc298614681196b" dependencies = [ "core-graphics 0.24.0", "crossbeam-channel", @@ -4795,11 +5110,17 @@ 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 = "uuid" -version = "1.10.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "5de17fd2f7da591098415cff336e12965a28061ddace43b59cb3c430179c9439" dependencies = [ "getrandom 0.2.15", ] @@ -4810,6 +5131,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" @@ -4818,9 +5145,9 @@ checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" [[package]] name = "version_check" -version = "0.9.5" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "vswhom" @@ -4875,35 +5202,34 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", - "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" dependencies = [ "cfg-if", "js-sys", @@ -4913,9 +5239,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4923,22 +5249,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "wasm-streams" @@ -4955,9 +5281,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" dependencies = [ "js-sys", "wasm-bindgen", @@ -5009,9 +5335,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.3" +version = "0.26.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" +checksum = "0bd24728e5af82c6c4ec1b66ac4844bdf8156257fccda846ec58b42cd0cdbe6a" dependencies = [ "rustls-pki-types", ] @@ -5038,7 +5364,7 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -5070,11 +5396,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -5145,7 +5471,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", ] [[package]] @@ -5156,7 +5482,18 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.68", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", ] [[package]] @@ -5460,6 +5797,15 @@ dependencies = [ "x11-dl", ] +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + [[package]] name = "x11" version = "2.21.0" @@ -5494,12 +5840,12 @@ dependencies = [ [[package]] name = "xdg-home" -version = "1.3.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" +checksum = "ca91dcf8f93db085f3a0a29358cd0b9d670915468f4290e8b85d118a34211ab8" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -5566,27 +5912,6 @@ dependencies = [ "zvariant", ] -[[package]] -name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "byteorder", - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.75", -] - [[package]] name = "zeroize" version = "1.8.1" @@ -5595,15 +5920,15 @@ checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" [[package]] name = "zip" -version = "2.1.6" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40dd8c92efc296286ce1fbd16657c5dbefff44f1b4ca01cc5f517d8b7b3d3e2e" +checksum = "dc5e4288ea4057ae23afc69a4472434a87a2495cafce6632fd1c4ec9f5cf3494" dependencies = [ "arbitrary", "crc32fast", "crossbeam-utils", "displaydoc", - "indexmap 2.4.0", + "indexmap 2.2.6", "memchr", "thiserror", ] diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml index 63b93a5f..0eb86c3b 100644 --- a/apps/desktop/src-tauri/Cargo.toml +++ b/apps/desktop/src-tauri/Cargo.toml @@ -34,8 +34,12 @@ tauri-plugin-process = "2.0.0-rc" tauri-plugin-shell = "2.0.0-rc" tauri-plugin-os = "2.0.0-rc" tauri-plugin-http = "2.0.0-rc" +tauri-plugin-log = "2.0.0-rc" +tauri-plugin-store = "2.0.0-rc" anyhow = "1.0.86" +log = "0.4.22" + # macos dependencies [target.'cfg(target_os = "macos")'.dependencies] objc = "0.2.7" diff --git a/apps/desktop/src-tauri/gen/schemas/acl-manifests.json b/apps/desktop/src-tauri/gen/schemas/acl-manifests.json index 9ddf2c37..6308e968 100644 --- a/apps/desktop/src-tauri/gen/schemas/acl-manifests.json +++ b/apps/desktop/src-tauri/gen/schemas/acl-manifests.json @@ -1889,451 +1889,451 @@ "identifier": "scope-app", "description": "This scope permits access to all files and list content of top level directories in the `$APP`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APP/*" }] } + "scope": { "allow": [{ "path": "$APP" }, { "path": "$APP/*" }] } }, "scope-app-index": { "identifier": "scope-app-index", "description": "This scope permits to list all files and folders in the `$APP`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APP/" }] } + "scope": { "allow": [{ "path": "$APP" }] } }, "scope-app-recursive": { "identifier": "scope-app-recursive", "description": "This scope permits recursive access to the complete `$APP` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APP/**" }] } + "scope": { "allow": [{ "path": "$APP" }, { "path": "$APP/**" }] } }, "scope-appcache": { "identifier": "scope-appcache", "description": "This scope permits access to all files and list content of top level directories in the `$APPCACHE`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APPCACHE/*" }] } + "scope": { "allow": [{ "path": "$APPCACHE" }, { "path": "$APPCACHE/*" }] } }, "scope-appcache-index": { "identifier": "scope-appcache-index", "description": "This scope permits to list all files and folders in the `$APPCACHE`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APPCACHE/" }] } + "scope": { "allow": [{ "path": "$APPCACHE" }] } }, "scope-appcache-recursive": { "identifier": "scope-appcache-recursive", "description": "This scope permits recursive access to the complete `$APPCACHE` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APPCACHE/**" }] } + "scope": { "allow": [{ "path": "$APPCACHE" }, { "path": "$APPCACHE/**" }] } }, "scope-appconfig": { "identifier": "scope-appconfig", "description": "This scope permits access to all files and list content of top level directories in the `$APPCONFIG`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APPCONFIG/*" }] } + "scope": { "allow": [{ "path": "$APPCONFIG" }, { "path": "$APPCONFIG/*" }] } }, "scope-appconfig-index": { "identifier": "scope-appconfig-index", "description": "This scope permits to list all files and folders in the `$APPCONFIG`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APPCONFIG/" }] } + "scope": { "allow": [{ "path": "$APPCONFIG" }] } }, "scope-appconfig-recursive": { "identifier": "scope-appconfig-recursive", "description": "This scope permits recursive access to the complete `$APPCONFIG` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APPCONFIG/**" }] } + "scope": { "allow": [{ "path": "$APPCONFIG" }, { "path": "$APPCONFIG/**" }] } }, "scope-appdata": { "identifier": "scope-appdata", "description": "This scope permits access to all files and list content of top level directories in the `$APPDATA`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APPDATA/*" }] } + "scope": { "allow": [{ "path": "$APPDATA" }, { "path": "$APPDATA/*" }] } }, "scope-appdata-index": { "identifier": "scope-appdata-index", "description": "This scope permits to list all files and folders in the `$APPDATA`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APPDATA/" }] } + "scope": { "allow": [{ "path": "$APPDATA" }] } }, "scope-appdata-recursive": { "identifier": "scope-appdata-recursive", "description": "This scope permits recursive access to the complete `$APPDATA` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APPDATA/**" }] } + "scope": { "allow": [{ "path": "$APPDATA" }, { "path": "$APPDATA/**" }] } }, "scope-applocaldata": { "identifier": "scope-applocaldata", "description": "This scope permits access to all files and list content of top level directories in the `$APPLOCALDATA`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APPLOCALDATA/*" }] } + "scope": { "allow": [{ "path": "$APPLOCALDATA" }, { "path": "$APPLOCALDATA/*" }] } }, "scope-applocaldata-index": { "identifier": "scope-applocaldata-index", "description": "This scope permits to list all files and folders in the `$APPLOCALDATA`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APPLOCALDATA/" }] } + "scope": { "allow": [{ "path": "$APPLOCALDATA" }] } }, "scope-applocaldata-recursive": { "identifier": "scope-applocaldata-recursive", "description": "This scope permits recursive access to the complete `$APPLOCALDATA` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APPLOCALDATA/**" }] } + "scope": { "allow": [{ "path": "$APPLOCALDATA" }, { "path": "$APPLOCALDATA/**" }] } }, "scope-applog": { "identifier": "scope-applog", "description": "This scope permits access to all files and list content of top level directories in the `$APPLOG`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APPLOG/*" }] } + "scope": { "allow": [{ "path": "$APPLOG" }, { "path": "$APPLOG/*" }] } }, "scope-applog-index": { "identifier": "scope-applog-index", "description": "This scope permits to list all files and folders in the `$APPLOG`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APPLOG/" }] } + "scope": { "allow": [{ "path": "$APPLOG" }] } }, "scope-applog-recursive": { "identifier": "scope-applog-recursive", "description": "This scope permits recursive access to the complete `$APPLOG` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$APPLOG/**" }] } + "scope": { "allow": [{ "path": "$APPLOG" }, { "path": "$APPLOG/**" }] } }, "scope-audio": { "identifier": "scope-audio", "description": "This scope permits access to all files and list content of top level directories in the `$AUDIO`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$AUDIO/*" }] } + "scope": { "allow": [{ "path": "$AUDIO" }, { "path": "$AUDIO/*" }] } }, "scope-audio-index": { "identifier": "scope-audio-index", "description": "This scope permits to list all files and folders in the `$AUDIO`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$AUDIO/" }] } + "scope": { "allow": [{ "path": "$AUDIO" }] } }, "scope-audio-recursive": { "identifier": "scope-audio-recursive", "description": "This scope permits recursive access to the complete `$AUDIO` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$AUDIO/**" }] } + "scope": { "allow": [{ "path": "$AUDIO" }, { "path": "$AUDIO/**" }] } }, "scope-cache": { "identifier": "scope-cache", "description": "This scope permits access to all files and list content of top level directories in the `$CACHE`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$CACHE/*" }] } + "scope": { "allow": [{ "path": "$CACHE" }, { "path": "$CACHE/*" }] } }, "scope-cache-index": { "identifier": "scope-cache-index", "description": "This scope permits to list all files and folders in the `$CACHE`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$CACHE/" }] } + "scope": { "allow": [{ "path": "$CACHE" }] } }, "scope-cache-recursive": { "identifier": "scope-cache-recursive", "description": "This scope permits recursive access to the complete `$CACHE` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$CACHE/**" }] } + "scope": { "allow": [{ "path": "$CACHE" }, { "path": "$CACHE/**" }] } }, "scope-config": { "identifier": "scope-config", "description": "This scope permits access to all files and list content of top level directories in the `$CONFIG`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$CONFIG/*" }] } + "scope": { "allow": [{ "path": "$CONFIG" }, { "path": "$CONFIG/*" }] } }, "scope-config-index": { "identifier": "scope-config-index", "description": "This scope permits to list all files and folders in the `$CONFIG`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$CONFIG/" }] } + "scope": { "allow": [{ "path": "$CONFIG" }] } }, "scope-config-recursive": { "identifier": "scope-config-recursive", "description": "This scope permits recursive access to the complete `$CONFIG` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$CONFIG/**" }] } + "scope": { "allow": [{ "path": "$CONFIG" }, { "path": "$CONFIG/**" }] } }, "scope-data": { "identifier": "scope-data", "description": "This scope permits access to all files and list content of top level directories in the `$DATA`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$DATA/*" }] } + "scope": { "allow": [{ "path": "$DATA" }, { "path": "$DATA/*" }] } }, "scope-data-index": { "identifier": "scope-data-index", "description": "This scope permits to list all files and folders in the `$DATA`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$DATA/" }] } + "scope": { "allow": [{ "path": "$DATA" }] } }, "scope-data-recursive": { "identifier": "scope-data-recursive", "description": "This scope permits recursive access to the complete `$DATA` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$DATA/**" }] } + "scope": { "allow": [{ "path": "$DATA" }, { "path": "$DATA/**" }] } }, "scope-desktop": { "identifier": "scope-desktop", "description": "This scope permits access to all files and list content of top level directories in the `$DESKTOP`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$DESKTOP/*" }] } + "scope": { "allow": [{ "path": "$DESKTOP" }, { "path": "$DESKTOP/*" }] } }, "scope-desktop-index": { "identifier": "scope-desktop-index", "description": "This scope permits to list all files and folders in the `$DESKTOP`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$DESKTOP/" }] } + "scope": { "allow": [{ "path": "$DESKTOP" }] } }, "scope-desktop-recursive": { "identifier": "scope-desktop-recursive", "description": "This scope permits recursive access to the complete `$DESKTOP` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$DESKTOP/**" }] } + "scope": { "allow": [{ "path": "$DESKTOP" }, { "path": "$DESKTOP/**" }] } }, "scope-document": { "identifier": "scope-document", "description": "This scope permits access to all files and list content of top level directories in the `$DOCUMENT`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$DOCUMENT/*" }] } + "scope": { "allow": [{ "path": "$DOCUMENT" }, { "path": "$DOCUMENT/*" }] } }, "scope-document-index": { "identifier": "scope-document-index", "description": "This scope permits to list all files and folders in the `$DOCUMENT`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$DOCUMENT/" }] } + "scope": { "allow": [{ "path": "$DOCUMENT" }] } }, "scope-document-recursive": { "identifier": "scope-document-recursive", "description": "This scope permits recursive access to the complete `$DOCUMENT` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$DOCUMENT/**" }] } + "scope": { "allow": [{ "path": "$DOCUMENT" }, { "path": "$DOCUMENT/**" }] } }, "scope-download": { "identifier": "scope-download", "description": "This scope permits access to all files and list content of top level directories in the `$DOWNLOAD`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$DOWNLOAD/*" }] } + "scope": { "allow": [{ "path": "$DOWNLOAD" }, { "path": "$DOWNLOAD/*" }] } }, "scope-download-index": { "identifier": "scope-download-index", "description": "This scope permits to list all files and folders in the `$DOWNLOAD`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$DOWNLOAD/" }] } + "scope": { "allow": [{ "path": "$DOWNLOAD" }] } }, "scope-download-recursive": { "identifier": "scope-download-recursive", "description": "This scope permits recursive access to the complete `$DOWNLOAD` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$DOWNLOAD/**" }] } + "scope": { "allow": [{ "path": "$DOWNLOAD" }, { "path": "$DOWNLOAD/**" }] } }, "scope-exe": { "identifier": "scope-exe", "description": "This scope permits access to all files and list content of top level directories in the `$EXE`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$EXE/*" }] } + "scope": { "allow": [{ "path": "$EXE" }, { "path": "$EXE/*" }] } }, "scope-exe-index": { "identifier": "scope-exe-index", "description": "This scope permits to list all files and folders in the `$EXE`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$EXE/" }] } + "scope": { "allow": [{ "path": "$EXE" }] } }, "scope-exe-recursive": { "identifier": "scope-exe-recursive", "description": "This scope permits recursive access to the complete `$EXE` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$EXE/**" }] } + "scope": { "allow": [{ "path": "$EXE" }, { "path": "$EXE/**" }] } }, "scope-font": { "identifier": "scope-font", "description": "This scope permits access to all files and list content of top level directories in the `$FONT`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$FONT/*" }] } + "scope": { "allow": [{ "path": "$FONT" }, { "path": "$FONT/*" }] } }, "scope-font-index": { "identifier": "scope-font-index", "description": "This scope permits to list all files and folders in the `$FONT`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$FONT/" }] } + "scope": { "allow": [{ "path": "$FONT" }] } }, "scope-font-recursive": { "identifier": "scope-font-recursive", "description": "This scope permits recursive access to the complete `$FONT` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$FONT/**" }] } + "scope": { "allow": [{ "path": "$FONT" }, { "path": "$FONT/**" }] } }, "scope-home": { "identifier": "scope-home", "description": "This scope permits access to all files and list content of top level directories in the `$HOME`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$HOME/*" }] } + "scope": { "allow": [{ "path": "$HOME" }, { "path": "$HOME/*" }] } }, "scope-home-index": { "identifier": "scope-home-index", "description": "This scope permits to list all files and folders in the `$HOME`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$HOME/" }] } + "scope": { "allow": [{ "path": "$HOME" }] } }, "scope-home-recursive": { "identifier": "scope-home-recursive", "description": "This scope permits recursive access to the complete `$HOME` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$HOME/**" }] } + "scope": { "allow": [{ "path": "$HOME" }, { "path": "$HOME/**" }] } }, "scope-localdata": { "identifier": "scope-localdata", "description": "This scope permits access to all files and list content of top level directories in the `$LOCALDATA`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$LOCALDATA/*" }] } + "scope": { "allow": [{ "path": "$LOCALDATA" }, { "path": "$LOCALDATA/*" }] } }, "scope-localdata-index": { "identifier": "scope-localdata-index", "description": "This scope permits to list all files and folders in the `$LOCALDATA`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$LOCALDATA/" }] } + "scope": { "allow": [{ "path": "$LOCALDATA" }] } }, "scope-localdata-recursive": { "identifier": "scope-localdata-recursive", "description": "This scope permits recursive access to the complete `$LOCALDATA` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$LOCALDATA/**" }] } + "scope": { "allow": [{ "path": "$LOCALDATA" }, { "path": "$LOCALDATA/**" }] } }, "scope-log": { "identifier": "scope-log", "description": "This scope permits access to all files and list content of top level directories in the `$LOG`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$LOG/*" }] } + "scope": { "allow": [{ "path": "$LOG" }, { "path": "$LOG/*" }] } }, "scope-log-index": { "identifier": "scope-log-index", "description": "This scope permits to list all files and folders in the `$LOG`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$LOG/" }] } + "scope": { "allow": [{ "path": "$LOG" }] } }, "scope-log-recursive": { "identifier": "scope-log-recursive", "description": "This scope permits recursive access to the complete `$LOG` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$LOG/**" }] } + "scope": { "allow": [{ "path": "$LOG" }, { "path": "$LOG/**" }] } }, "scope-picture": { "identifier": "scope-picture", "description": "This scope permits access to all files and list content of top level directories in the `$PICTURE`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$PICTURE/*" }] } + "scope": { "allow": [{ "path": "$PICTURE" }, { "path": "$PICTURE/*" }] } }, "scope-picture-index": { "identifier": "scope-picture-index", "description": "This scope permits to list all files and folders in the `$PICTURE`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$PICTURE/" }] } + "scope": { "allow": [{ "path": "$PICTURE" }] } }, "scope-picture-recursive": { "identifier": "scope-picture-recursive", "description": "This scope permits recursive access to the complete `$PICTURE` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$PICTURE/**" }] } + "scope": { "allow": [{ "path": "$PICTURE" }, { "path": "$PICTURE/**" }] } }, "scope-public": { "identifier": "scope-public", "description": "This scope permits access to all files and list content of top level directories in the `$PUBLIC`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$PUBLIC/*" }] } + "scope": { "allow": [{ "path": "$PUBLIC" }, { "path": "$PUBLIC/*" }] } }, "scope-public-index": { "identifier": "scope-public-index", "description": "This scope permits to list all files and folders in the `$PUBLIC`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$PUBLIC/" }] } + "scope": { "allow": [{ "path": "$PUBLIC" }] } }, "scope-public-recursive": { "identifier": "scope-public-recursive", "description": "This scope permits recursive access to the complete `$PUBLIC` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$PUBLIC/**" }] } + "scope": { "allow": [{ "path": "$PUBLIC" }, { "path": "$PUBLIC/**" }] } }, "scope-resource": { "identifier": "scope-resource", "description": "This scope permits access to all files and list content of top level directories in the `$RESOURCE`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$RESOURCE/*" }] } + "scope": { "allow": [{ "path": "$RESOURCE" }, { "path": "$RESOURCE/*" }] } }, "scope-resource-index": { "identifier": "scope-resource-index", "description": "This scope permits to list all files and folders in the `$RESOURCE`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$RESOURCE/" }] } + "scope": { "allow": [{ "path": "$RESOURCE" }] } }, "scope-resource-recursive": { "identifier": "scope-resource-recursive", "description": "This scope permits recursive access to the complete `$RESOURCE` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$RESOURCE/**" }] } + "scope": { "allow": [{ "path": "$RESOURCE" }, { "path": "$RESOURCE/**" }] } }, "scope-runtime": { "identifier": "scope-runtime", "description": "This scope permits access to all files and list content of top level directories in the `$RUNTIME`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$RUNTIME/*" }] } + "scope": { "allow": [{ "path": "$RUNTIME" }, { "path": "$RUNTIME/*" }] } }, "scope-runtime-index": { "identifier": "scope-runtime-index", "description": "This scope permits to list all files and folders in the `$RUNTIME`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$RUNTIME/" }] } + "scope": { "allow": [{ "path": "$RUNTIME" }] } }, "scope-runtime-recursive": { "identifier": "scope-runtime-recursive", "description": "This scope permits recursive access to the complete `$RUNTIME` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$RUNTIME/**" }] } + "scope": { "allow": [{ "path": "$RUNTIME" }, { "path": "$RUNTIME/**" }] } }, "scope-temp": { "identifier": "scope-temp", "description": "This scope permits access to all files and list content of top level directories in the `$TEMP`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$TEMP/*" }] } + "scope": { "allow": [{ "path": "$TEMP" }, { "path": "$TEMP/*" }] } }, "scope-temp-index": { "identifier": "scope-temp-index", "description": "This scope permits to list all files and folders in the `$TEMP`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$TEMP/" }] } + "scope": { "allow": [{ "path": "$TEMP" }] } }, "scope-temp-recursive": { "identifier": "scope-temp-recursive", "description": "This scope permits recursive access to the complete `$TEMP` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$TEMP/**" }] } + "scope": { "allow": [{ "path": "$TEMP" }, { "path": "$TEMP/**" }] } }, "scope-template": { "identifier": "scope-template", "description": "This scope permits access to all files and list content of top level directories in the `$TEMPLATE`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$TEMPLATE/*" }] } + "scope": { "allow": [{ "path": "$TEMPLATE" }, { "path": "$TEMPLATE/*" }] } }, "scope-template-index": { "identifier": "scope-template-index", "description": "This scope permits to list all files and folders in the `$TEMPLATE`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$TEMPLATE/" }] } + "scope": { "allow": [{ "path": "$TEMPLATE" }] } }, "scope-template-recursive": { "identifier": "scope-template-recursive", "description": "This scope permits recursive access to the complete `$TEMPLATE` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$TEMPLATE/**" }] } + "scope": { "allow": [{ "path": "$TEMPLATE" }, { "path": "$TEMPLATE/**" }] } }, "scope-video": { "identifier": "scope-video", "description": "This scope permits access to all files and list content of top level directories in the `$VIDEO`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$VIDEO/*" }] } + "scope": { "allow": [{ "path": "$VIDEO" }, { "path": "$VIDEO/*" }] } }, "scope-video-index": { "identifier": "scope-video-index", "description": "This scope permits to list all files and folders in the `$VIDEO`folder.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$VIDEO/" }] } + "scope": { "allow": [{ "path": "$VIDEO" }] } }, "scope-video-recursive": { "identifier": "scope-video-recursive", "description": "This scope permits recursive access to the complete `$VIDEO` folder, including sub directories and files.", "commands": { "allow": [], "deny": [] }, - "scope": { "allow": [{ "path": "$VIDEO/**" }] } + "scope": { "allow": [{ "path": "$VIDEO" }, { "path": "$VIDEO/**" }] } }, "write-all": { "identifier": "write-all", @@ -3215,6 +3215,27 @@ "title": "HttpScopeEntry" } }, + "log": { + "default_permission": { + "identifier": "default", + "description": "Allows the log command", + "permissions": ["allow-log"] + }, + "permissions": { + "allow-log": { + "identifier": "allow-log", + "description": "Enables the log command without any pre-configured scope.", + "commands": { "allow": ["log"], "deny": [] } + }, + "deny-log": { + "identifier": "deny-log", + "description": "Denies the log command without any pre-configured scope.", + "commands": { "allow": [], "deny": ["log"] } + } + }, + "permission_sets": {}, + "global_scope_schema": null + }, "os": { "default_permission": { "identifier": "default", @@ -3469,6 +3490,150 @@ "type": "object" } }, + "store": { + "default_permission": { + "identifier": "default", + "description": "This permission set configures what kind of\noperations are available from the store plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", + "permissions": [ + "allow-clear", + "allow-delete", + "allow-entries", + "allow-get", + "allow-has", + "allow-keys", + "allow-length", + "allow-load", + "allow-reset", + "allow-save", + "allow-set", + "allow-values" + ] + }, + "permissions": { + "allow-clear": { + "identifier": "allow-clear", + "description": "Enables the clear command without any pre-configured scope.", + "commands": { "allow": ["clear"], "deny": [] } + }, + "allow-delete": { + "identifier": "allow-delete", + "description": "Enables the delete command without any pre-configured scope.", + "commands": { "allow": ["delete"], "deny": [] } + }, + "allow-entries": { + "identifier": "allow-entries", + "description": "Enables the entries command without any pre-configured scope.", + "commands": { "allow": ["entries"], "deny": [] } + }, + "allow-get": { + "identifier": "allow-get", + "description": "Enables the get command without any pre-configured scope.", + "commands": { "allow": ["get"], "deny": [] } + }, + "allow-has": { + "identifier": "allow-has", + "description": "Enables the has command without any pre-configured scope.", + "commands": { "allow": ["has"], "deny": [] } + }, + "allow-keys": { + "identifier": "allow-keys", + "description": "Enables the keys command without any pre-configured scope.", + "commands": { "allow": ["keys"], "deny": [] } + }, + "allow-length": { + "identifier": "allow-length", + "description": "Enables the length command without any pre-configured scope.", + "commands": { "allow": ["length"], "deny": [] } + }, + "allow-load": { + "identifier": "allow-load", + "description": "Enables the load command without any pre-configured scope.", + "commands": { "allow": ["load"], "deny": [] } + }, + "allow-reset": { + "identifier": "allow-reset", + "description": "Enables the reset command without any pre-configured scope.", + "commands": { "allow": ["reset"], "deny": [] } + }, + "allow-save": { + "identifier": "allow-save", + "description": "Enables the save command without any pre-configured scope.", + "commands": { "allow": ["save"], "deny": [] } + }, + "allow-set": { + "identifier": "allow-set", + "description": "Enables the set command without any pre-configured scope.", + "commands": { "allow": ["set"], "deny": [] } + }, + "allow-values": { + "identifier": "allow-values", + "description": "Enables the values command without any pre-configured scope.", + "commands": { "allow": ["values"], "deny": [] } + }, + "deny-clear": { + "identifier": "deny-clear", + "description": "Denies the clear command without any pre-configured scope.", + "commands": { "allow": [], "deny": ["clear"] } + }, + "deny-delete": { + "identifier": "deny-delete", + "description": "Denies the delete command without any pre-configured scope.", + "commands": { "allow": [], "deny": ["delete"] } + }, + "deny-entries": { + "identifier": "deny-entries", + "description": "Denies the entries command without any pre-configured scope.", + "commands": { "allow": [], "deny": ["entries"] } + }, + "deny-get": { + "identifier": "deny-get", + "description": "Denies the get command without any pre-configured scope.", + "commands": { "allow": [], "deny": ["get"] } + }, + "deny-has": { + "identifier": "deny-has", + "description": "Denies the has command without any pre-configured scope.", + "commands": { "allow": [], "deny": ["has"] } + }, + "deny-keys": { + "identifier": "deny-keys", + "description": "Denies the keys command without any pre-configured scope.", + "commands": { "allow": [], "deny": ["keys"] } + }, + "deny-length": { + "identifier": "deny-length", + "description": "Denies the length command without any pre-configured scope.", + "commands": { "allow": [], "deny": ["length"] } + }, + "deny-load": { + "identifier": "deny-load", + "description": "Denies the load command without any pre-configured scope.", + "commands": { "allow": [], "deny": ["load"] } + }, + "deny-reset": { + "identifier": "deny-reset", + "description": "Denies the reset command without any pre-configured scope.", + "commands": { "allow": [], "deny": ["reset"] } + }, + "deny-save": { + "identifier": "deny-save", + "description": "Denies the save command without any pre-configured scope.", + "commands": { "allow": [], "deny": ["save"] } + }, + "deny-set": { + "identifier": "deny-set", + "description": "Denies the set command without any pre-configured scope.", + "commands": { "allow": [], "deny": ["set"] } + }, + "deny-values": { + "identifier": "deny-values", + "description": "Denies the values command without any pre-configured scope.", + "commands": { "allow": [], "deny": ["values"] } + } + }, + "permission_sets": {}, + "global_scope_schema": null + }, "updater": { "default_permission": { "identifier": "default", diff --git a/apps/desktop/src-tauri/gen/schemas/desktop-schema.json b/apps/desktop/src-tauri/gen/schemas/desktop-schema.json index 5d13c78b..97cc600e 100644 --- a/apps/desktop/src-tauri/gen/schemas/desktop-schema.json +++ b/apps/desktop/src-tauri/gen/schemas/desktop-schema.json @@ -4718,6 +4718,21 @@ "type": "string", "enum": ["http:deny-fetch-send"] }, + { + "description": "log:default -> Allows the log command", + "type": "string", + "enum": ["log:default"] + }, + { + "description": "log:allow-log -> Enables the log command without any pre-configured scope.", + "type": "string", + "enum": ["log:allow-log"] + }, + { + "description": "log:deny-log -> Denies the log command without any pre-configured scope.", + "type": "string", + "enum": ["log:deny-log"] + }, { "description": "os:default -> This permission set configures which\noperating system information are available\nto gather from the frontend.\n\n#### Granted Permissions\n\nAll information except the host name are available.\n\n", "type": "string", @@ -4883,6 +4898,131 @@ "type": "string", "enum": ["shell:deny-stdin-write"] }, + { + "description": "store:default -> This permission set configures what kind of\noperations are available from the store plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", + "type": "string", + "enum": ["store:default"] + }, + { + "description": "store:allow-clear -> Enables the clear command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-clear"] + }, + { + "description": "store:allow-delete -> Enables the delete command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-delete"] + }, + { + "description": "store:allow-entries -> Enables the entries command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-entries"] + }, + { + "description": "store:allow-get -> Enables the get command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-get"] + }, + { + "description": "store:allow-has -> Enables the has command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-has"] + }, + { + "description": "store:allow-keys -> Enables the keys command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-keys"] + }, + { + "description": "store:allow-length -> Enables the length command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-length"] + }, + { + "description": "store:allow-load -> Enables the load command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-load"] + }, + { + "description": "store:allow-reset -> Enables the reset command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-reset"] + }, + { + "description": "store:allow-save -> Enables the save command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-save"] + }, + { + "description": "store:allow-set -> Enables the set command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-set"] + }, + { + "description": "store:allow-values -> Enables the values command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-values"] + }, + { + "description": "store:deny-clear -> Denies the clear command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-clear"] + }, + { + "description": "store:deny-delete -> Denies the delete command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-delete"] + }, + { + "description": "store:deny-entries -> Denies the entries command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-entries"] + }, + { + "description": "store:deny-get -> Denies the get command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-get"] + }, + { + "description": "store:deny-has -> Denies the has command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-has"] + }, + { + "description": "store:deny-keys -> Denies the keys command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-keys"] + }, + { + "description": "store:deny-length -> Denies the length command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-length"] + }, + { + "description": "store:deny-load -> Denies the load command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-load"] + }, + { + "description": "store:deny-reset -> Denies the reset command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-reset"] + }, + { + "description": "store:deny-save -> Denies the save command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-save"] + }, + { + "description": "store:deny-set -> Denies the set command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-set"] + }, + { + "description": "store:deny-values -> Denies the values command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-values"] + }, { "description": "updater:default -> This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n", "type": "string", diff --git a/apps/desktop/src-tauri/gen/schemas/macOS-schema.json b/apps/desktop/src-tauri/gen/schemas/macOS-schema.json index 5d13c78b..97cc600e 100644 --- a/apps/desktop/src-tauri/gen/schemas/macOS-schema.json +++ b/apps/desktop/src-tauri/gen/schemas/macOS-schema.json @@ -4718,6 +4718,21 @@ "type": "string", "enum": ["http:deny-fetch-send"] }, + { + "description": "log:default -> Allows the log command", + "type": "string", + "enum": ["log:default"] + }, + { + "description": "log:allow-log -> Enables the log command without any pre-configured scope.", + "type": "string", + "enum": ["log:allow-log"] + }, + { + "description": "log:deny-log -> Denies the log command without any pre-configured scope.", + "type": "string", + "enum": ["log:deny-log"] + }, { "description": "os:default -> This permission set configures which\noperating system information are available\nto gather from the frontend.\n\n#### Granted Permissions\n\nAll information except the host name are available.\n\n", "type": "string", @@ -4883,6 +4898,131 @@ "type": "string", "enum": ["shell:deny-stdin-write"] }, + { + "description": "store:default -> This permission set configures what kind of\noperations are available from the store plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", + "type": "string", + "enum": ["store:default"] + }, + { + "description": "store:allow-clear -> Enables the clear command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-clear"] + }, + { + "description": "store:allow-delete -> Enables the delete command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-delete"] + }, + { + "description": "store:allow-entries -> Enables the entries command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-entries"] + }, + { + "description": "store:allow-get -> Enables the get command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-get"] + }, + { + "description": "store:allow-has -> Enables the has command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-has"] + }, + { + "description": "store:allow-keys -> Enables the keys command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-keys"] + }, + { + "description": "store:allow-length -> Enables the length command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-length"] + }, + { + "description": "store:allow-load -> Enables the load command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-load"] + }, + { + "description": "store:allow-reset -> Enables the reset command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-reset"] + }, + { + "description": "store:allow-save -> Enables the save command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-save"] + }, + { + "description": "store:allow-set -> Enables the set command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-set"] + }, + { + "description": "store:allow-values -> Enables the values command without any pre-configured scope.", + "type": "string", + "enum": ["store:allow-values"] + }, + { + "description": "store:deny-clear -> Denies the clear command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-clear"] + }, + { + "description": "store:deny-delete -> Denies the delete command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-delete"] + }, + { + "description": "store:deny-entries -> Denies the entries command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-entries"] + }, + { + "description": "store:deny-get -> Denies the get command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-get"] + }, + { + "description": "store:deny-has -> Denies the has command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-has"] + }, + { + "description": "store:deny-keys -> Denies the keys command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-keys"] + }, + { + "description": "store:deny-length -> Denies the length command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-length"] + }, + { + "description": "store:deny-load -> Denies the load command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-load"] + }, + { + "description": "store:deny-reset -> Denies the reset command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-reset"] + }, + { + "description": "store:deny-save -> Denies the save command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-save"] + }, + { + "description": "store:deny-set -> Denies the set command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-set"] + }, + { + "description": "store:deny-values -> Denies the values command without any pre-configured scope.", + "type": "string", + "enum": ["store:deny-values"] + }, { "description": "updater:default -> This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n", "type": "string", diff --git a/apps/desktop/src-tauri/src/commands.rs b/apps/desktop/src-tauri/src/commands.rs index 04c4ba36..8d14c434 100644 --- a/apps/desktop/src-tauri/src/commands.rs +++ b/apps/desktop/src-tauri/src/commands.rs @@ -3,6 +3,7 @@ use std::{ sync::{atomic::AtomicBool, Mutex}, }; +use log::debug; use tauri::{image::Image, menu::Menu, AppHandle, Emitter, Manager, State, WebviewWindow, Wry}; use crate::{constants::*, Pinned, TrayMenu}; @@ -21,6 +22,8 @@ pub fn open_settings(window: WebviewWindow, update: bool) { .unwrap(); } } + + debug!("Ran open settings command"); } #[tauri::command] @@ -30,16 +33,22 @@ pub fn close_settings(window: WebviewWindow) { if let Some(settings_windows) = settings_windows { settings_windows.hide(); } + + debug!("Ran close settings command"); } #[tauri::command] pub fn get_pin(storage: State) -> bool { - storage.0.load(std::sync::atomic::Ordering::Relaxed) + let pinned = storage.0.load(std::sync::atomic::Ordering::Relaxed); + debug!("Ran get_pinned command"); + + return pinned; } #[tauri::command] pub fn open_devtools(window: WebviewWindow) { window.open_devtools(); + debug!("Ran open_devtools command"); } #[tauri::command] @@ -55,6 +64,7 @@ pub fn set_pin(window: WebviewWindow, pin: State, menu: State, _set_pin(value, &window, pin, menu); } +// @d0nutptr cooked here to make it more concise to access the AtomicBool impl Deref for Pinned { type Target = AtomicBool; @@ -76,7 +86,10 @@ fn _set_pin(value: bool, window: &WebviewWindow, pinned: State, menu: St pinned.store(value, std::sync::atomic::Ordering::Relaxed); // let the client know - window.emit(TRAY_TOGGLE_PIN, value).unwrap(); + window.emit_to(SETTINGS_WINDOW_NAME, TRAY_TOGGLE_PIN, value).unwrap(); + + // persist to disk + // store.insert("pin".to_string(), json!(value)); // invert the label for the tray if let Some(toggle_pin_menu_item) = menu.lock().ok().and_then(|m| m.get(TRAY_TOGGLE_PIN)) { diff --git a/apps/desktop/src-tauri/src/config.rs b/apps/desktop/src-tauri/src/config.rs new file mode 100644 index 00000000..8a340c09 --- /dev/null +++ b/apps/desktop/src-tauri/src/config.rs @@ -0,0 +1,58 @@ +use log::debug; +use serde::{Deserialize, Serialize}; +use serde_json::json; +use tauri::{AppHandle, Manager, Wry}; +use tauri_plugin_store::{Store, StoreBuilder}; + +#[derive(Deserialize, Serialize, Debug, Copy, Clone)] +#[serde(rename_all = "SCREAMING_SNAKE_CASE")] +pub enum WindowLayout { + Left, + Right, + Center, +} + +#[derive(Deserialize, Serialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct FeatureFlags { + hide_overlay_on_mouseover: bool, +} + +#[derive(Deserialize, Serialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct Config { + pub pin: bool, + pub placment: WindowLayout, + pub telemetry: bool, + pub join_history_notifications: bool, + pub show_only_talking_users: bool, + pub feature_flags: FeatureFlags, +} + +// create a helper function to seed the config with values +pub fn create_or_get_config(app: &AppHandle) -> Store { + // create the store + let mut appdir = app.path().app_data_dir().expect("failed to get app data dir"); + appdir.push("config.json"); + let config_exists = (appdir.clone()).exists(); + + let mut store = StoreBuilder::new("config_v2.json").build(app.app_handle().clone()); + + // if the file exists we don't want to overwrite it + if config_exists { + debug!("Config file already exists, skipping creation"); + } else { + store.insert("pin".to_string(), json!(false)); + store.insert("placement".to_string(), json!(WindowLayout::Center)); + store.insert("telemetry".to_string(), json!(true)); + store.insert("joinHistoryNotifications".to_string(), json!(true)); + store.insert("showOnlyTalkingUsers".to_string(), json!(true)); + store.insert("featureFlags".to_string(), json!({})); + + store.save(); + debug!("Config file created successfully"); + } + + store +} + diff --git a/apps/desktop/src-tauri/src/main.rs b/apps/desktop/src-tauri/src/main.rs index 8e54e05a..49bd33e6 100644 --- a/apps/desktop/src-tauri/src/main.rs +++ b/apps/desktop/src-tauri/src/main.rs @@ -10,12 +10,16 @@ extern crate objc; mod app_handle; mod commands; +mod config; mod constants; mod tray; mod window_custom; use crate::commands::*; use constants::*; +use log::{info, debug}; +use tauri_plugin_log::{Target, TargetKind}; +use tauri_plugin_store::Store; use std::sync::{atomic::AtomicBool, Mutex}; use tauri::{generate_handler, menu::Menu, LogicalSize, Manager, Wry}; use tauri_plugin_window_state::StateFlags; @@ -35,6 +39,7 @@ use system_notification::WorkspaceListener; use tauri::WebviewWindow; pub struct Pinned(AtomicBool); +pub struct StoreWrapper(pub Mutex>); pub struct TrayMenu(Mutex>); @@ -44,6 +49,7 @@ fn apply_macos_specifics(window: &WebviewWindow) { use tauri_nspanel::ManagerExt; window.remove_shadow(); + debug!("macOS - Removed window shadow"); window.set_float_panel(constants::OVERLAYED_NORMAL_LEVEL); @@ -73,6 +79,12 @@ fn main() { let flags = StateFlags::POSITION | StateFlags::SIZE; let window_state_plugin = tauri_plugin_window_state::Builder::default().with_state_flags(flags); + let log_level = std::env::var("LOG_LEVEL") + .unwrap_or_else(|_| "info".to_string()); + + + info!("Log level set to: {:?}", log_level); + let mut app = tauri::Builder::default() .plugin(tauri_plugin_updater::Builder::new().build()) .plugin(window_state_plugin.build()) @@ -82,6 +94,13 @@ fn main() { .plugin(tauri_plugin_shell::init()) .plugin(tauri_plugin_os::init()) .plugin(tauri_plugin_http::init()) + .plugin( + tauri_plugin_log::Builder::new() + .targets([ + Target::new(TargetKind::LogDir { file_name: None }), + ]) + .build() + ) .plugin(tauri_plugin_single_instance::init(|app, argv, cwd| { println!("{}, {argv:?}, {cwd}", app.package_info().name); })); @@ -121,6 +140,7 @@ fn main() { { window.open_devtools(); settings.open_devtools(); + debug!("Opening devtools"); } // update the system tray @@ -132,6 +152,7 @@ fn main() { height: SETTINGS_WINDOW_HEIGHT, }); + info!("App setup completed successfully!"); Ok(()) }) .invoke_handler(generate_handler![ diff --git a/apps/desktop/src/components/nav-bar.tsx b/apps/desktop/src/components/nav-bar.tsx index 48f7eb05..04bb13c1 100644 --- a/apps/desktop/src/components/nav-bar.tsx +++ b/apps/desktop/src/components/nav-bar.tsx @@ -28,6 +28,8 @@ interface Alignment { icon: LucideIcon; } +const store = new Store("config.json"); + const horizontalAlignments: Alignment[] = [ { direction: "left", @@ -123,7 +125,7 @@ export const NavBar = ({ const newAlignment = (currentAlignment + 1) % horizontalAlignments.length; setCurrentAlignment(newAlignment); setAlignDirection(horizontalAlignments[newAlignment]?.direction || "center"); - await Config.set("horizontal", horizontalAlignments[newAlignment]?.direction || "center"); + await store.set("horizontal", horizontalAlignments[newAlignment]?.direction || "center"); }} /> @@ -132,7 +134,7 @@ export const NavBar = ({ size={20} onClick={async () => { await invoke("toggle_pin"); - await Config.set("pin", !pin); + await store.set("pin", !pin); // track if it gets pinned track(Metric.Pin, 1); navigate("/channel"); diff --git a/apps/desktop/src/config.ts b/apps/desktop/src/config.ts index 9fa2c99f..d05e8265 100644 --- a/apps/desktop/src/config.ts +++ b/apps/desktop/src/config.ts @@ -5,9 +5,6 @@ import * as Sentry from "@sentry/react"; export type DirectionLR = "left" | "right" | "center"; export type DirectionTB = "top" | "bottom"; -// TODO: this is hard to use we zzz -// NOTE: how can i handle versions updates where i add new keys -// NOTE: this looks cool https://github.com/harshkhandeparkar/tauri-settings/issues export interface OverlayedConfig { pin: boolean; horizontal: DirectionLR; diff --git a/apps/desktop/src/hooks/use-config-value.ts b/apps/desktop/src/hooks/use-config-value.ts index 54bdfb68..f219c366 100644 --- a/apps/desktop/src/hooks/use-config-value.ts +++ b/apps/desktop/src/hooks/use-config-value.ts @@ -1,9 +1,11 @@ -import Config, { DEFAULT_OVERLAYED_CONFIG, type OverlayedConfig, type OverlayedConfigKey } from "@/config"; -import { listen } from "@tauri-apps/api/event"; +import { Store } from "@tauri-apps/plugin-store"; import { useEffect, useState } from "react"; +import { DEFAULT_OVERLAYED_CONFIG, type OverlayedConfig, type OverlayedConfigKey } from "@/config"; +const store = new Store("config.json"); /** - * i want a single key from the config + * Let's you get the config value from disk or default for a given key + * each rerender it should fetch the latest value from disk too */ export const useConfigValue = ( key: T @@ -14,17 +16,17 @@ export const useConfigValue = ( useEffect(() => { const init = () => { - Config.get(key).then(setValue); + store.get<{ value: T }>(key).then(res => { + if (res?.value) { + setValue(res.value); + } + }); }; init(); - const listenFn = listen("config_update", event => { - const { payload } = event; - - // update the latest value - // TODO: fix - setValue(payload[key]); + const listenFn = store.onKeyChange(key, value => { + setValue(value); }); return () => { diff --git a/apps/desktop/src/hooks/use-pin.ts b/apps/desktop/src/hooks/use-pin.ts index 007f2e84..13af106d 100644 --- a/apps/desktop/src/hooks/use-pin.ts +++ b/apps/desktop/src/hooks/use-pin.ts @@ -9,7 +9,7 @@ export const usePin = () => { // sub if it changes from outside of tauri const unlisten = listen("toggle_pin", async event => { setPin(event.payload); - await Config.set("pin", event.payload); + await store.set("pin", event.payload); }); // This is so we can sync the state diff --git a/apps/desktop/src/metrics.ts b/apps/desktop/src/metrics.ts index c5affe53..fa2c9d6a 100644 --- a/apps/desktop/src/metrics.ts +++ b/apps/desktop/src/metrics.ts @@ -1,5 +1,7 @@ import { axiom } from "@/axiom"; -import Config from "@/config"; +import { Store } from "@tauri-apps/plugin-store"; + +const store = new Store("config.json"); export const OVERLAYED_DATASET = "overlayed-prod"; @@ -18,12 +20,12 @@ export const Metric = { type MetricNamesValues = (typeof Metric)[keyof typeof Metric]; // NOTE: allow opt-out of tracking from the settings UI -const isTelemetryEnabled = () => { - return import.meta.env.VITE_AXIOM_TOKEN && Config.get("telemetry"); +const isTelemetryEnabled = async () => { + return import.meta.env.VITE_AXIOM_TOKEN && (await store.get<{ value: boolean }>("telemetry"))?.value; }; // tell the user if they have telemetry disabled -if (!(await Config.get("telemetry"))) { +if (!(await store.get<{ value: boolean }>("telemetry"))?.value) { console.warn("[TELEMETRY] Disabling axiom telemetry because the user has disabled it"); } else { console.log("[TELEMETRY] Axiom telemetry is enabled!"); diff --git a/apps/desktop/src/rpc/event.ts b/apps/desktop/src/rpc/event.ts index 74dd6bfe..0b0dfa3c 100644 --- a/apps/desktop/src/rpc/event.ts +++ b/apps/desktop/src/rpc/event.ts @@ -2,6 +2,7 @@ export enum RPCEvent { /** non-subscription event sent immediately after connecting, contains server information */ READY = "READY", /** non-subscription event sent when there is an error, including command responses */ + ERROR = "ERROR", /** sent when a user in a subscribed voice channel speaks */ SPEAKING_START = "SPEAKING_START", diff --git a/apps/desktop/src/rpc/manager.ts b/apps/desktop/src/rpc/manager.ts index fb68fae3..f8a5c24c 100644 --- a/apps/desktop/src/rpc/manager.ts +++ b/apps/desktop/src/rpc/manager.ts @@ -103,7 +103,7 @@ class SocketManager { * Setup the websocket connection and listen for messages */ async init(navigate: NavigateFunction) { - console.log("Init web socket manager"); + info("[WEBSOCKET] Init manager"); this.disconnect(); this._navigate = navigate; @@ -137,6 +137,7 @@ class SocketManager { } public disconnect() { + debug("[WEBSOCKET] Disconnecting socket"); this.socket?.disconnect(); this.isConnected = false; } @@ -196,6 +197,7 @@ class SocketManager { // TODO: this has to be a bug in the upstream lib, we should get a proper code // and not have to check the raw dawg string to see if something is wrong if (typeof event === "string" && (event as string).includes("Connection reset without closing handshake")) { + error("[WEBSOCKET] Connection reset without closing handshake"); this.navigate("/error"); await this.unpin(); @@ -216,8 +218,10 @@ class SocketManager { const acessToken = this.userdataStore.accessToken; if (acessToken) { + debug("[WEBSOCKET] Found access token and attempting to login with it"); this.login(acessToken); } else { + debug("[WEBSOCKET] No access token found attempting to login"); this.authenticate(); } } @@ -296,6 +300,7 @@ class SocketManager { // we got a token back from discord let's fetch an access token if (payload.cmd === RPCCommand.AUTHORIZE) { + debug("[WEBSOCKET] Got valid code back from discord, fetching access token..."); const { code } = payload.data; const res = await fetch(`${API_URL}/token`, { method: "POST", @@ -323,9 +328,9 @@ class SocketManager { } } - // console.log(payload); - // we are ready to do things cause we are fully authed + // we hit an auth error with discord if (payload.cmd === RPCCommand.AUTHENTICATE && payload.evt === RPCEvent.ERROR) { + error(`[WEBSOCKET] Error authenticating with discord: ${JSON.stringify(payload.data)}`); // they have a token from the old client id if (payload.data.code === RPCErrors.INVALID_CLIENTID) { this.userdataStore.removeAccessToken(); @@ -344,6 +349,7 @@ class SocketManager { // track error metric track(Metric.DiscordAuthed, 0); } else if (payload?.cmd === RPCCommand.AUTHENTICATE) { + info("[WEBSOCKET] Logged into discord successfully"); // track success metric track(Metric.DiscordAuthed, 1); @@ -383,6 +389,7 @@ class SocketManager { // when we move channels we get a new list of users if (payload.cmd === RPCCommand.GET_CHANNEL) { + debug("[WEBSOCKET] Requesting channel for user"); this.requestUserChannel(); } } @@ -448,12 +455,12 @@ export const useSocket = () => { return; } + // if the socket is already initialized return if (socketRef.current) { - console.log("Socket already initialized"); return; } - console.log("Initializing websocket..."); + info("[WEBSOCKET] Initializing websocket..."); const socketManager = new SocketManager(); socketManager.init(navigate); diff --git a/apps/desktop/src/views/settings/account.tsx b/apps/desktop/src/views/settings/account.tsx index 32467efd..972f23bf 100644 --- a/apps/desktop/src/views/settings/account.tsx +++ b/apps/desktop/src/views/settings/account.tsx @@ -5,7 +5,7 @@ import { saveWindowState, StateFlags } from "@tauri-apps/plugin-window-state"; import { invoke } from "@tauri-apps/api/core"; import { usePlatformInfo } from "@/hooks/use-platform-info"; -import Config from "@/config"; +import { Store } from "@tauri-apps/plugin-store"; import { Dialog, @@ -19,12 +19,12 @@ import { } from "@/components/ui/dialog"; import { useEffect, useState } from "react"; import { Checkbox } from "@/components/ui/checkbox"; -import { emit } from "@tauri-apps/api/event"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import type { VoiceUser } from "@/types"; import { useConfigValue } from "@/hooks/use-config-value"; import * as shell from "@tauri-apps/plugin-shell"; +const store = new Store("config.json"); export const Developer = () => { const platformInfo = usePlatformInfo(); return ( @@ -82,9 +82,8 @@ export const AppInfo = () => { checked={showOnlyTalkingUsers} onCheckedChange={async () => { const newBool = !showOnlyTalkingUsers; - await Config.set("showOnlyTalkingUsers", newBool); - - await emit("config_update", await Config.getConfig()); + await store.set("showOnlyTalkingUsers", newBool); + await store.save(); }} />