diff --git a/.changes/api-path-cwd.md b/.changes/api-path-cwd.md index 7bf8dde2902..3ee933e8a7e 100644 --- a/.changes/api-path-cwd.md +++ b/.changes/api-path-cwd.md @@ -1,5 +1,4 @@ --- "api": minor -"tauri-api": minor --- Add current working directory to the path api module. diff --git a/.changes/config-refactor.md b/.changes/config-refactor.md index 7092b97d4c6..4a40a4e9b14 100644 --- a/.changes/config-refactor.md +++ b/.changes/config-refactor.md @@ -1,6 +1,5 @@ --- "tauri-utils": minor -"tauri-api": minor "tauri": minor --- diff --git a/.changes/config.json b/.changes/config.json index 674e7f17823..2c3abbb2fed 100644 --- a/.changes/config.json +++ b/.changes/config.json @@ -156,12 +156,18 @@ "tauri-cli": { "path": "./cli/core", "manager": "rust", - "dependencies": ["api", "tauri-bundler", "tauri"] + "dependencies": [ + "api", + "tauri-bundler", + "tauri" + ] }, "tauri.js": { "path": "./cli/tauri.js", "manager": "javascript", - "dependencies": ["tauri-cli"], + "dependencies": [ + "tauri-cli" + ], "assets": [ { "path": "./cli/tauri.js/tauri-${ pkgFile.version }.tgz", @@ -172,25 +178,20 @@ "create-tauri-app": { "path": "./cli/create-tauri-app", "manager": "javascript", - "dependencies": ["tauri.js"] + "dependencies": [ + "tauri.js" + ] }, "tauri-utils": { "path": "./core/tauri-utils", "manager": "rust" }, - "tauri-api": { - "path": "./core/tauri-api", - "manager": "rust", - "dependencies": ["tauri-utils"] - }, "tauri-macros": { "path": "./core/tauri-macros", "manager": "rust", - "dependencies": ["tauri-utils"] - }, - "tauri-updater": { - "path": "./core/tauri-updater", - "manager": "rust" + "dependencies": [ + "tauri-utils" + ] }, "tauri-build": { "path": "./core/tauri-build", @@ -203,7 +204,10 @@ "tauri": { "path": "./core/tauri", "manager": "rust", - "dependencies": ["api", "tauri-api", "tauri-macros", "tauri-updater"] + "dependencies": [ + "api", + "tauri-macros" + ] } } -} +} \ No newline at end of file diff --git a/.changes/correct-http-api-types.md b/.changes/correct-http-api-types.md index eac77e2c909..0c7a4750516 100644 --- a/.changes/correct-http-api-types.md +++ b/.changes/correct-http-api-types.md @@ -1,5 +1,5 @@ --- -"tauri-api": patch +"tauri": patch --- Align HTTP API types with the [documentation](https://tauri.studio/en/docs/api/js#http). diff --git a/.changes/dialog-api.md b/.changes/dialog-api.md index f61f3ccdf94..406135e4ec3 100644 --- a/.changes/dialog-api.md +++ b/.changes/dialog-api.md @@ -1,5 +1,5 @@ --- -"tauri-api": minor +"tauri": minor --- The `message` and `ask` dialogs now use `tinyfiledialogs-rs` instead of `tauri-dialog-rs`. diff --git a/.changes/event-unlisten-js.md b/.changes/event-unlisten-js.md index 5fe775e8ef3..3c4d32adddd 100644 --- a/.changes/event-unlisten-js.md +++ b/.changes/event-unlisten-js.md @@ -1,5 +1,4 @@ --- -"tauri-api": minor "tauri": minor --- diff --git a/.changes/file-dialog-refactor.md b/.changes/file-dialog-refactor.md index f7149e5d5a2..9ebd253c934 100644 --- a/.changes/file-dialog-refactor.md +++ b/.changes/file-dialog-refactor.md @@ -1,5 +1,5 @@ --- -"tauri-api": minor +"tauri": minor "api": minor --- diff --git a/.changes/http-api-refactor.md b/.changes/http-api-refactor.md index 99a5ee554e1..7f1fdff44bd 100644 --- a/.changes/http-api-refactor.md +++ b/.changes/http-api-refactor.md @@ -1,6 +1,5 @@ --- "api": minor -"tauri-api": minor "tauri": minor --- diff --git a/.changes/js-app-metadata.md b/.changes/js-app-metadata.md index 675fb0d4ed3..d985099d166 100644 --- a/.changes/js-app-metadata.md +++ b/.changes/js-app-metadata.md @@ -1,5 +1,4 @@ --- -"tauri-api": minor "tauri": minor --- diff --git a/.changes/js-event-once.md b/.changes/js-event-once.md index ecd847cc45b..d39c65835ba 100644 --- a/.changes/js-event-once.md +++ b/.changes/js-event-once.md @@ -1,5 +1,5 @@ --- -"tauri-api": minor +"tauri": minor --- The event listener `once` kind was moved to a dedicated function. diff --git a/.changes/json-parse-rpc.md b/.changes/json-parse-rpc.md index 3a9709fb398..6bbeabcae0c 100644 --- a/.changes/json-parse-rpc.md +++ b/.changes/json-parse-rpc.md @@ -1,5 +1,5 @@ --- -"tauri-api": patch +"tauri": patch --- Use ``JSON.parse(String.raw`{arg}`)`` for communicating serialized JSON objects and arrays < 1 GB to the Webview from Rust. diff --git a/.changes/license.md b/.changes/license.md index f97b0dcf859..8c66413e467 100644 --- a/.changes/license.md +++ b/.changes/license.md @@ -4,9 +4,7 @@ "tauri-cli": patch "tauri.js": patch "tauri-utils": patch -"tauri-api": patch "tauri-macros": patch -"tauri-updater": patch "tauri-build": patch "tauri-codegen": patch "tauri": patch diff --git a/.changes/readme.md b/.changes/readme.md index 86c17abbc8a..09af985a7a0 100644 --- a/.changes/readme.md +++ b/.changes/readme.md @@ -15,9 +15,7 @@ Use the following format: "tauri-cli": patch "tauri.js": patch "tauri-utils": patch -"tauri-api": patch "tauri-macros": patch -"tauri-updater": patch "tauri-build": patch "tauri-codegen": patch "tauri": patch diff --git a/.changes/shortcut-api.md b/.changes/shortcut-api.md index 48361ff2be3..fe8e25f55be 100644 --- a/.changes/shortcut-api.md +++ b/.changes/shortcut-api.md @@ -1,6 +1,5 @@ --- "api": minor -"tauri-api": minor "tauri": minor --- diff --git a/.changes/updater-alpha.md b/.changes/updater-alpha.md index c551e4258c6..b92704e7534 100644 --- a/.changes/updater-alpha.md +++ b/.changes/updater-alpha.md @@ -1,5 +1,4 @@ --- -"tauri-updater": minor "tauri-cli": minor "tauri-bundler": minor "tauri": minor diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 85efb1dac9e..49d83932477 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -19,8 +19,4 @@ /cli/tauri.js/ @tauri-apps/js-cli -/tauri-update/ @tauri-apps/core - -/tauri-api/ @tauri-apps/core - -/tauri/ @tauri-apps/core +/core/** @tauri-apps/core diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 6d8ac0a742a..b0ba43bdb98 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -53,7 +53,6 @@ Some Tauri packages will be automatically built when running one of the examples ### Packages Overview - The JS API (`/api`) contains JS bindings to the builtin Rust functions in the Rust API. -- The Rust API (`/core/tauri-api`) contains the Rust functions used by the JS API. - Tauri.js (`/cli/tauri.js`) is the primary CLI for creating and developing Tauri apps. - The Rust CLI (`/cli/core`) is a new version of the CLI that will replace Tauri.js, but now it only supports build and dev commands. Tauri.js will automatically use the Rust CLI for these commands. - Tauri Bundler (`/cli/tauri-bundler`) is used by the Rust CLI to package executables into installers. diff --git a/.github/workflows/artifacts-updater.yml b/.github/workflows/artifacts-updater.yml index daabad91012..d40c9e1a838 100644 --- a/.github/workflows/artifacts-updater.yml +++ b/.github/workflows/artifacts-updater.yml @@ -8,7 +8,6 @@ on: paths: - '.github/workflows/artifacts-updater.yml' - 'core/tauri/**' - - 'core/tauri-updater/**' - 'cli/core/**' - 'cli/tauri-bundler/**' - 'examples/updater/**' diff --git a/.github/workflows/covector-version-or-publish.yml b/.github/workflows/covector-version-or-publish.yml index 0ff22941ac6..a6781107b10 100644 --- a/.github/workflows/covector-version-or-publish.yml +++ b/.github/workflows/covector-version-or-publish.yml @@ -112,10 +112,6 @@ jobs: registryName: tauri-bundler - name: tauri-utils registryName: tauri-utils - - name: tauri-api - registryName: tauri-api - - name: tauri-updater - registryName: tauri-updater - name: tauri-core registryName: tauri diff --git a/Cargo.toml b/Cargo.toml index 68bf4f2e14c..9b852ff21d3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,6 @@ members = [ # core "core/tauri", - "core/tauri-api", "core/tauri-macros", "core/tauri-utils", "core/tauri-build", diff --git a/README.md b/README.md index b00b9f1e6ed..908690b49c5 100644 --- a/README.md +++ b/README.md @@ -24,10 +24,8 @@ Tauri Apps |-----------|---------|------|-----|-----|-----| | [**tauri.js CLI**](https://github.com/tauri-apps/tauri/tree/dev/cli/tauri.js) | create, develop and build apps | [![](https://img.shields.io/npm/v/tauri.svg)](https://www.npmjs.com/package/tauri) |✅|✅|✅| | [**tauri core**](https://github.com/tauri-apps/tauri/tree/dev/tauri) | binding to the low level WEBVIEW | [![](https://img.shields.io/crates/v/tauri.svg)](https://crates.io/crates/tauri)|✅|✅|✅| -| [**tauri api**](https://github.com/tauri-apps/tauri/tree/dev/tauri-api) | interface with the underlying OS | [![](https://img.shields.io/crates/v/tauri-api.svg)](https://crates.io/crates/tauri-api) |✅|✅|✅ | | [**tauri bundler**](https://github.com/tauri-apps/tauri/tree/dev/cli/tauri-bundler) | manufacture the final binaries | [![](https://img.shields.io/crates/v/tauri-bundler.svg)](https://crates.io/crates/tauri-bundler) |✅|✅|✅ | | [**tauri utils**](https://github.com/tauri-apps/tauri/tree/dev/tauri-utils) | common tools for tauri| [![](https://img.shields.io/crates/v/tauri-utils.svg)](https://crates.io/crates/tauri-utils) |✅|✅|✅ | -| [**tauri updater**](https://github.com/tauri-apps/tauri/tree/dev/tauri-updater) [WIP] | update the userland app | [![](https://img.shields.io/crates/v/tauri-updater.svg)](https://crates.io/crates/tauri-updater) | | | | ## Introduction diff --git a/core/tauri-api/.license_template b/core/tauri-api/.license_template deleted file mode 100644 index 6641e11a136..00000000000 --- a/core/tauri-api/.license_template +++ /dev/null @@ -1 +0,0 @@ -../../.license_template \ No newline at end of file diff --git a/core/tauri-api/CHANGELOG.md b/core/tauri-api/CHANGELOG.md deleted file mode 100644 index 355a56c69f1..00000000000 --- a/core/tauri-api/CHANGELOG.md +++ /dev/null @@ -1,48 +0,0 @@ -# Changelog - -## [0.7.5] - -- `dirs` crate is unmaintained, now using `dirs-next` instead. - - [82cda98](https://www.github.com/tauri-apps/tauri/commit/82cda98532975c6d4b1c93bf2f326173f39e0964) chore(tauri) `dirs` crate is unmaintained, use `dirst-next` instead ([#1057](https://www.github.com/tauri-apps/tauri/pull/1057)) on 2020-10-17 - - [72996be](https://www.github.com/tauri-apps/tauri/commit/72996be1bd3eb878c4cf30bfec79058071c26d7a) apply version updates ([#1024](https://www.github.com/tauri-apps/tauri/pull/1024)) on 2020-10-21 - -## [0.7.4] - -- Bump all deps as noted in #975, #976, #977, #978, and #979. - - [06dd75b](https://www.github.com/tauri-apps/tauri/commit/06dd75b68a15d388808c51ae2bf50554ae761d9d) chore: bump all js/rust deps ([#983](https://www.github.com/tauri-apps/tauri/pull/983)) on 2020-08-20 - -## [0.7.3] - -- Use native dialog on `window.alert` and `window.confirm`. - Since every communication with the webview is asynchronous, the `window.confirm` returns a Promise resolving to a boolean value. - - [0245833](https://www.github.com/tauri-apps/tauri/commit/0245833bb56d5462a4e1249eb1e2f9f5e477592d) feat(tauri) make `window.alert` and `window.confirm` available, fix [#848](https://www.github.com/tauri-apps/tauri/pull/848) ([#854](https://www.github.com/tauri-apps/tauri/pull/854)) on 2020-07-18 - - [dac0ae9](https://www.github.com/tauri-apps/tauri/commit/dac0ae976ea1b419ed5af078d00106b1476dee04) chore(changes) add tauri-api to JS dialogs changefile on 2020-07-19 - -## [0.7.2] - -- Fixes Edge blank screen on Windows when running tauri dev (Tauri crashing window due to Edge reloading app because of missing Content-Type header). - - Bumped due to a bump in tauri-api. - - [fedee83](https://www.github.com/tauri-apps/tauri/commit/fedee835e36daa4363b91aabd43143e8033c9a5c) fix(tauri.js) windows Edge blank screen on tauri dev ([#808](https://www.github.com/tauri-apps/tauri/pull/808)) on 2020-07-11 - -## [0.7.1] - -- Fixes the config reloading when tauri.conf.json changes. - -## [0.7.0] - -- The execute_promise and execute_promise_sync helpers now accepts any tauri::Result where T: impl Serialize. - This means that you do not need to serialize your response manually or deal with String quotes anymore. - As part of this refactor, the event::emit function also supports impl Serialize instead of String. -- readDir API refactor. Now returns path, name and children. - -## [0.6.1] - -- Fixes the httpRequest headers usage. It now accepts Strings instead of serde_json::Value. - -## [0.6.0] - -- This adds HttpRequestBuilder, described at "alternatives you've considered" section in undefined. -- Adds a command line interface option to tauri apps, configurable under tauri.conf.json > tauri > cli. -- Fixes no-server mode not running on another machine due to fs::read_to_string usage instead of the include_str macro. - Build no longer fails when compiling without environment variables, now the app will show an error. -- Adds desktop notifications API. diff --git a/core/tauri-api/Cargo.toml b/core/tauri-api/Cargo.toml deleted file mode 100644 index 1fec6a47028..00000000000 --- a/core/tauri-api/Cargo.toml +++ /dev/null @@ -1,54 +0,0 @@ -[package] -name = "tauri-api" -version = "0.7.5" -authors = [ - "Lucas Fernandes Gonçalves Nogueira ", - "Daniel Thompson-Yvetot ", - "Tensor Programming " -] -categories = [ "gui", "os", "filesystem", "web-programming" ] -license = "Apache-2.0 OR MIT" -homepage = "https://tauri.studio" -repository = "https://github.com/tauri-apps/tauri" -description = "Make tiny, secure apps for all desktop platforms with Tauri" -edition = "2018" -exclude = [ "test/fixture/**" ] - -[dependencies] -serde = { version = "1.0", features = [ "derive" ] } -serde_json = { version = "1.0", features = [ "raw_value" ]} -serde_repr = "0.1" -dirs-next = "2.0.0" -zip = "0.5.11" -semver = "0.11" -ignore = "^0.4.17" -tempfile = "3" -either = "1.6.1" -tar = "0.4" -flate2 = "1.0" -thiserror = "1.0.24" -rand = "0.8" -rfd = "0.2.2" -tinyfiledialogs = "3.3" -reqwest = { version = "0.11", features = [ "json", "multipart" ] } -bytes = { version = "1", features = ["serde"] } -http = "0.2" -tauri-utils = { version = "0.5", path = "../tauri-utils" } -clap = { version = "=3.0.0-beta.2", optional = true } -notify-rust = { version = "4.3.0", optional = true } -once_cell = "1.7.2" -tauri-hotkey = { git = "https://github.com/tauri-apps/tauri-hotkey-rs", branch = "dev", optional = true } -open = "1.6.0" -tokio = { version = "1.4", features = ["rt", "rt-multi-thread", "sync"] } -shared_child = "0.3" -os_pipe = "0.9" - -[dev-dependencies] -quickcheck = "1.0.3" -quickcheck_macros = "1.0.0" - -[features] -build = [ "tauri-utils/build" ] -cli = [ "clap" ] -notification = [ "notify-rust" ] -global-shortcut = [ "tauri-hotkey" ] diff --git a/core/tauri-build/src/codegen/context.rs b/core/tauri-build/src/codegen/context.rs index fac5332b43f..53a17be814e 100644 --- a/core/tauri-build/src/codegen/context.rs +++ b/core/tauri-build/src/codegen/context.rs @@ -98,7 +98,7 @@ impl CodegenContext { config_parent, // it's very hard to have a build script for unit tests, so assume this is always called from // outside the tauri crate, making the ::tauri root valid. - context_path: quote::quote!(::tauri::Context), + root: quote::quote!(::tauri::Context), })?; // get the full output file path diff --git a/core/tauri-codegen/Cargo.toml b/core/tauri-codegen/Cargo.toml index abd443c5c61..7f3a2c9644a 100644 --- a/core/tauri-codegen/Cargo.toml +++ b/core/tauri-codegen/Cargo.toml @@ -15,7 +15,7 @@ proc-macro2 = "1" quote = "1" serde = { version = "1", features = ["derive"] } serde_json = "1" -tauri-api = { path = "../tauri-api", features = ["build"] } +tauri-utils = { path = "../tauri-utils", features = ["build"] } thiserror = "1" walkdir = "2" zstd = "0.7" diff --git a/core/tauri-codegen/src/context.rs b/core/tauri-codegen/src/context.rs index 3dac30d3452..4da9344fc34 100644 --- a/core/tauri-codegen/src/context.rs +++ b/core/tauri-codegen/src/context.rs @@ -6,14 +6,14 @@ use crate::embedded_assets::{EmbeddedAssets, EmbeddedAssetsError}; use proc_macro2::TokenStream; use quote::quote; use std::path::PathBuf; -use tauri_api::config::Config; +use tauri_utils::config::Config; /// Necessary data needed by [`context_codegen`] to generate code for a Tauri application context. pub struct ContextData { pub dev: bool, pub config: Config, pub config_parent: PathBuf, - pub context_path: TokenStream, + pub root: TokenStream, } /// Build a `tauri::Context` for including in application code. @@ -22,7 +22,7 @@ pub fn context_codegen(data: ContextData) -> Result Result); impl EmbeddedAssets { - /// Compress a directory of assets, ready to be generated into a [`tauri_api::assets::Assets`]. + /// Compress a directory of assets, ready to be generated into a [`tauri_utils::assets::Assets`]. pub fn new(path: &Path) -> Result { WalkDir::new(&path) .follow_links(true) diff --git a/core/tauri-codegen/src/lib.rs b/core/tauri-codegen/src/lib.rs index c9779f01b39..50bc01f6fd9 100644 --- a/core/tauri-codegen/src/lib.rs +++ b/core/tauri-codegen/src/lib.rs @@ -9,7 +9,7 @@ use std::{ io::BufReader, path::{Path, PathBuf}, }; -pub use tauri_api::config::Config; +pub use tauri_utils::config::Config; use thiserror::Error; mod context; diff --git a/core/tauri-macros/src/context/mod.rs b/core/tauri-macros/src/context.rs similarity index 90% rename from core/tauri-macros/src/context/mod.rs rename to core/tauri-macros/src/context.rs index 752e77d2148..ee17c13f9ca 100644 --- a/core/tauri-macros/src/context/mod.rs +++ b/core/tauri-macros/src/context.rs @@ -14,7 +14,7 @@ use tauri_codegen::{context_codegen, get_config, ContextData}; pub(crate) struct ContextItems { config_file: PathBuf, - context_path: syn::Path, + root: syn::Path, } impl Parse for ContextItems { @@ -52,10 +52,6 @@ impl Parse for ContextItems { ident: Ident::new("tauri", Span::call_site()), arguments: PathArguments::None, }); - segments.push(PathSegment { - ident: Ident::new("Context", Span::call_site()), - arguments: PathArguments::None, - }); syn::Path { leading_colon: Some(Token![::](Span::call_site())), segments, @@ -67,7 +63,7 @@ impl Parse for ContextItems { Ok(Self { config_file, - context_path, + root: context_path, }) } } @@ -79,7 +75,7 @@ pub(crate) fn generate_context(context: ContextItems) -> TokenStream { dev: cfg!(not(feature = "custom-protocol")), config, config_parent, - context_path: context.context_path.to_token_stream(), + root: context.root.to_token_stream(), }) .and_then(|data| context_codegen(data).map_err(|e| e.to_string())); diff --git a/core/tauri-updater/.license_template b/core/tauri-updater/.license_template deleted file mode 100644 index 6641e11a136..00000000000 --- a/core/tauri-updater/.license_template +++ /dev/null @@ -1 +0,0 @@ -../../.license_template \ No newline at end of file diff --git a/core/tauri-updater/Cargo.toml b/core/tauri-updater/Cargo.toml deleted file mode 100644 index 4afc69d4843..00000000000 --- a/core/tauri-updater/Cargo.toml +++ /dev/null @@ -1,30 +0,0 @@ -[package] -name = "tauri-updater" -version = "0.4.2" -authors = ["Lucas Fernandes Gonçalves Nogueira ", "Daniel Thompson-Yvetot ", "Tensor Programming ", "David Lemarier "] -license = "Apache-2.0 OR MIT" -homepage = "https://tauri.studio" -repository = "https://github.com/tauri-apps/tauri" -description = "Updater for Tauri" -edition = "2018" -exclude = ["test/fixture/**"] - -[dependencies] -serde_json = "1.0" -tempfile = "3" -reqwest = { version = "0.11", features = ["json"] } -serde = "1.0" -tauri-api = { version = "0.7.2", path = "../tauri-api" } -tauri-utils = { version = "0.5", path = "../tauri-utils" } -semver = "0.11" -minisign-verify = "0.1.8" -base64 = "0.13.0" -# error handling -thiserror = "1.0.24" - -[dev-dependencies] -tokio-test = "*" -mockito = "0.29" - -[features] -default = ["reqwest/default-tls"] diff --git a/core/tauri-updater/README.md b/core/tauri-updater/README.md deleted file mode 100644 index 123e3dcf462..00000000000 --- a/core/tauri-updater/README.md +++ /dev/null @@ -1,328 +0,0 @@ -# Tauri Updater ---- -> ⚠️ This project is a working project. Expect breaking changes. ---- - -The updater is focused on making Tauri's application updates **as safe and transparent as updates to a website**. - -Instead of publishing a feed of versions from which your app must select, Tauri updates to the version your server tells it to. This allows you to intelligently update your clients based on the request you give to Tauri. - -The server can remotely drive behaviors like rolling back or phased rollouts. - -The update JSON Tauri requests should be dynamically generated based on criteria in the request, and whether an update is required. - -Tauri's installer is also designed to be fault-tolerant, and ensure that any updates installed are valid and safe. - -# Configuration - -Once you have your Tauri project ready, you need to configure the updater. - -Add this in tauri.conf.json -```json -"updater": { - "active": true, - "endpoints": [ - "https://releases.myapp.com/{target}}/{current_version}}" - ], - "dialog": true, - "pubkey": "" -} -``` - -The required keys are "active" and "endpoints", others are optional. - -"active" must be a boolean. By default, it's set to false. - -"endpoints" must be an array. The string `{{target}}` and `{{current_version}}` are automatically replaced in the URL allowing you determine [server-side](#update-server-json-format) if an update is available. If multiple endpoints are specified, the updater will fallback if a server is not responding within the pre-defined timeout. - -"dialog" if present must be a boolean. By default, it's set to true. If enabled, [events](#events) are turned-off as the updater will handle everything. If you need the custom events, you MUST turn off the built-in dialog. - -"pubkey" if present must be a valid public-key generated with Tauri cli. See [Signing updates](#signing-updates). - -## Update Requests - -Tauri is indifferent to the request the client application provides for update checking. - -`Accept: application/json` is added to the request headers because Tauri is responsible for parsing the response. - -For the requirements imposed on the responses and the body format of an update, response see [Server Support](#server-support). - -Your update request must *at least* include a version identifier so that the server can determine whether an update for this specific version is required. - -It may also include other identifying criteria such as operating system version, to allow the server to deliver as fine-grained an update as you would like. - -How you include the version identifier or other criteria is specific to the server that you are requesting updates from. A common approach is to use query parameters, [Configuration](#configuration) shows an example of this. - -## Built-in dialog - -By default, updater uses a built-in dialog API from Tauri. - -![New Update](https://i.imgur.com/UMilB5A.png) - -The dialog release notes is represented by the update `note` provided by the [server](#server-support). - -If the user accepts, the download and install are initialized. The user will be then prompted to restart the application. - -## Javascript API - -**Attention, you need to _disable built-in dialog_ in your [tauri configuration](#configuration), otherwise, events aren't emitted and the javascript API will NOT work.** - - -``` -import { checkUpdate, installUpdate } from "@tauri-apps/api/updater"; - -try { - const {shouldUpdate, manifest} = await checkUpdate(); - - if (shouldUpdate) { - // display dialog - await installUpdate(); - // install complete, ask to restart - } -} catch(error) { - console.log(error); -} -``` - -## Events - -**Attention, you need to _disable built-in dialog_ in your [tauri configuration](#configuration), otherwise, events aren't emitted.** - -To know when an update is ready to be installed, you can subscribe to these events: - -### Initialize updater and check if a new version is available - -#### If a new version is available, the event `tauri://update-available` is emitted. - -Event : `tauri://update` - -### Rust -```rust -dispatcher.emit("tauri://update", None); -``` - -### Javascript -```js -import { emit } from "@tauri-apps/api/event"; -emit("tauri://update"); -``` - -### Listen New Update Available - -Event : `tauri://update-available` - -Emitted data: -``` -version Version announced by the server -date Date announced by the server -body Note announced by the server -``` - -### Rust -```rust -dispatcher.listen("tauri://update-available", move |msg| { - println("New version available: {:?}", msg); -}) -``` - -### Javascript -```js -import { listen } from "@tauri-apps/api/event"; -listen("tauri://update-available", function (res) { - console.log("New version available: ", res); -}); -``` - -### Emit Install and Download - -You need to emit this event to initialize the download and listen to the [install progress](#listen-install-progress). - -Event : `tauri://update-install` - -### Rust -```rust -dispatcher.emit("tauri://update-install", None); -``` - -### Javascript -```js -import { emit } from "@tauri-apps/api/event"; -emit("tauri://update-install"); -``` - -### Listen Install Progress - -Event : `tauri://update-status` - -Emitted data: -``` -status [ERROR/PENDING/DONE] -error String/null -``` - -PENDING is emitted when the download is started and DONE when the install is complete. You can then ask to restart the application. - -ERROR is emitted when there is an error with the updater. We suggest to listen to this event even if the dialog is enabled. - -### Rust -```rust -dispatcher.listen("tauri://update-status", move |msg| { - println("New status: {:?}", msg); -}) -``` - -### Javascript -```js -import { listen } from "@tauri-apps/api/event"; -listen("tauri://update-status", function (res) { - console.log("New status: ", res); -}); -``` - -# Server Support - -Your server should determine whether an update is required based on the [Update Request](#update-requests) your client issues. - -If an update is required your server should respond with a status code of [200 OK](http://tools.ietf.org/html/rfc2616#section-10.2.1) and include the [update JSON](#update-server-json-format) in the body. To save redundantly downloading the same version multiple times your server must not inform the client to update. - -If no update is required your server must respond with a status code of [204 No Content](http://tools.ietf.org/html/rfc2616#section-10.2.5). - -## Update Server JSON Format - -When an update is available, Tauri expects the following schema in response to the update request provided: - -```json -{ - "url": "https://mycompany.example.com/myapp/releases/myrelease.tar.gz", - "version": "0.0.1", - "notes": "Theses are some release notes", - "pub_date": "2020-09-18T12:29:53+01:00", - "signature": "" -} -``` - -The only required keys are "url" and "version", the others are optional. - -"pub_date" if present must be formatted according to ISO 8601. - -"signature" if present must be a valid signature generated with Tauri cli. See [Signing updates](#signing-updates). - -## Update File JSON Format - -The alternate update technique uses a plain JSON file meaning you can store your update metadata on S3, gist, or another static file store. Tauri will check against the name/version field and if the version is smaller than the current one and the platform is available, the update will be triggered. The format of this file is detailed below: - -```json -{ - "name":"v1.0.0", - "notes":"Test version", - "pub_date":"2020-06-22T19:25:57Z", - "platforms": { - "darwin": { - "signature":"", - "url":"https://github.com/lemarier/tauri-test/releases/download/v1.0.0/app.app.tar.gz" - }, - "linux": { - "signature":"", - "url":"https://github.com/lemarier/tauri-test/releases/download/v1.0.0/app.AppImage.tar.gz" - }, - "win64": { - "signature":"", - "url":"https://github.com/lemarier/tauri-test/releases/download/v1.0.0/app.x64.msi.zip" - } - } -} -``` - - -# Bundler (Artifacts) - -The Tauri bundler will automatically generate update artifacts if the updater is enabled in `tauri.conf.json` - -If the bundler can locate your private and pubkey, your update artifacts will be automatically signed. - -The signature can be found in the `sig` file. The signature can be uploaded to GitHub safely or made public as long as your private key is secure. - -You can see how it's [bundled with the CI](https://github.com/tauri-apps/tauri/blob/feature/new_updater/.github/workflows/artifacts-updater.yml#L44) and a [sample tauri.conf.json](https://github.com/tauri-apps/tauri/blob/feature/new_updater/examples/updater/src-tauri/tauri.conf.json#L52) - -## macOS - -On MACOS we create a .tar.gz from the whole application. (.app) - -``` -target/release/bundle -└── osx - └── app.app - └── app.app.tar.gz (update bundle) - └── app.app.tar.gz.sig (if signature enabled) -``` - -## Windows - -On Windows we create a .zip from the MSI, when downloaded and validated, we run the MSI install. - -``` -target/release -└── app.x64.msi -└── app.x64.msi.zip (update bundle) -└── app.x64.msi.zip.sig (if signature enabled) -``` - -## Linux - -On Linux, we create a .tar.gz from the AppImage. - -``` -target/release/bundle -└── appimage - └── app.AppImage - └── app.AppImage.tar.gz (update bundle) - └── app.AppImage.tar.gz.sig (if signature enabled) -``` - -# Signing updates - -We offer a built-in signature to ensure your update is safe to be installed. - -To sign your updates, you need two things. - -The *Public-key* (pubkey) should be added inside your `tauri.conf.json` to validate the update archive before installing. - -The *Private key* (privkey) is used to sign your update and should NEVER be shared with anyone. Also, if you lost this key, you'll NOT be able to publish a new update to the current user base (if pubkey is set in tauri.conf.json). It's important to save it at a safe place and you can always access it. - -To generate your keys you need to use the Tauri cli. - -```bash -tauri sign -g -w ~/.tauri/myapp.key -``` - -You have multiple options available -```bash -Tauri updates signer. - -USAGE: - tauri sign [FLAGS] [OPTIONS] - -FLAGS: - --force Overwrite private key even if it exists on the specified path - -g, --generate Generate keypair to sign files - -h, --help Prints help information - --no-password Set empty password for your private key - -V, --version Prints version information - -OPTIONS: - -p, --password Set private key password when signing - -k, --private-key Load the private key from a string - -f, --private-key-path Load the private key from a file - --sign-file Sign the specified file - -w, --write-keys Write private key to a file -``` - -*** - -Environment variables used to sign with `tauri-bundler`: -If they are set, and `tauri.conf.json` expose the public key, the bundler will automatically generate and sign the updater artifacts. - -`TAURI_PRIVATE_KEY` Path or String of your private key - -`TAURI_KEY_PASSWORD` Your private key password (optional) - diff --git a/core/tauri-api/.scripts/loop_qc.sh b/core/tauri/.scripts/loop_qc.sh similarity index 84% rename from core/tauri-api/.scripts/loop_qc.sh rename to core/tauri/.scripts/loop_qc.sh index e19f5a92bbb..2531364f1a5 100644 --- a/core/tauri-api/.scripts/loop_qc.sh +++ b/core/tauri/.scripts/loop_qc.sh @@ -4,7 +4,7 @@ # SPDX-License-Identifier: MIT -# Loop all quickcheck tests for tauri-api. +# Loop all quickcheck tests for tauri. while true do cargo test qc_ diff --git a/core/tauri/Cargo.toml b/core/tauri/Cargo.toml index 2aed0e147d0..1fe5e423d08 100644 --- a/core/tauri/Cargo.toml +++ b/core/tauri/Cargo.toml @@ -18,7 +18,7 @@ exclude = [ "test/fixture/**" ] features = [ "api-all" ] [dependencies] -serde_json = "1.0" +serde_json = { version = "1.0", features = [ "raw_value" ] } serde = { version = "1.0", features = [ "derive" ] } base64 = "0.13.0" tokio = { version = "1.4", features = ["rt", "rt-multi-thread", "sync"] } @@ -26,12 +26,38 @@ futures = "0.3" uuid = { version = "0.8.2", features = [ "v4" ] } thiserror = "1.0.24" once_cell = "1.7.2" -tauri-api = { version = "0.7.5", path = "../tauri-api" } -tauri-updater = { version = "0.4.2", optional = true, path = "../tauri-updater" } tauri-macros = { version = "0.1", path = "../tauri-macros" } +tauri-utils = { version = "0.5", path = "../tauri-utils" } wry = "0.7" rand = "0.8" +# api & updater +reqwest = { version = "0.11", features = [ "json", "multipart" ] } +tempfile = "3" +semver = "0.11" + +# api +serde_repr = "0.1" +dirs-next = "2.0.0" +zip = "0.5.11" +ignore = "^0.4.17" +either = "1.6.1" +tar = "0.4" +flate2 = "1.0" +rfd = "0.2.2" +tinyfiledialogs = "3.3" +bytes = { version = "1", features = ["serde"] } +http = "0.2" +clap = { version = "=3.0.0-beta.2", optional = true } +notify-rust = { version = "4.3.0", optional = true } +tauri-hotkey = { git = "https://github.com/tauri-apps/tauri-hotkey-rs", branch = "dev", optional = true } +open = "1.6.0" +shared_child = "0.3" +os_pipe = "0.9" + +# updater +minisign-verify = "0.1.8" + [build-dependencies] cfg_aliases = "0.1.1" @@ -41,11 +67,19 @@ serde_json = "1.0" tauri = { path = ".", features = [ "api-all" ] } serde = { version = "1.0", features = [ "derive" ] } +# api +quickcheck = "1.0.3" +quickcheck_macros = "1.0.0" + +# updater +tokio-test ="*" +mockito = "0.29" + [features] -cli = [ "tauri-api/cli" ] +cli = [ "clap" ] custom-protocol = [ "tauri-macros/custom-protocol" ] -api-all = [ "tauri-api/notification", "tauri-api/global-shortcut", "updater" ] -updater = [ "tauri-updater" ] +api-all = [ "notification-all", "global-shortcut-all", "updater" ] +updater = [ "reqwest/default-tls" ] # FS fs-all = [ ] @@ -80,7 +114,7 @@ http-all = [ ] http-request = [ ] # notification -notification-all = [ "tauri-api/notification" ] +notification-all = [ "notify-rust" ] # global shortcut -global-shortcut-all = [ "tauri-api/global-shortcut" ] +global-shortcut-all = [ "tauri-hotkey" ] diff --git a/core/tauri-api/src/app.rs b/core/tauri/src/api/app.rs similarity index 100% rename from core/tauri-api/src/app.rs rename to core/tauri/src/api/app.rs diff --git a/core/tauri-api/src/cli.rs b/core/tauri/src/api/cli.rs similarity index 96% rename from core/tauri-api/src/cli.rs rename to core/tauri/src/api/cli.rs index 78076d141ed..db5f7d8cb04 100644 --- a/core/tauri-api/src/cli.rs +++ b/core/tauri/src/api/cli.rs @@ -2,9 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -use crate::config::{CliArg, CliConfig}; +use crate::api::config::{CliArg, CliConfig}; -use clap::{App, Arg, ArgMatches, ErrorKind}; +use clap::{ + crate_authors, crate_description, crate_name, crate_version, App, Arg, ArgMatches, ErrorKind, +}; use serde::Serialize; use serde_json::Value; use std::collections::HashMap; @@ -57,7 +59,7 @@ impl Matches { } /// Gets the arg matches of the CLI definition. -pub fn get_matches(cli: &CliConfig) -> crate::Result { +pub fn get_matches(cli: &CliConfig) -> crate::api::Result { let about = cli .description() .unwrap_or(&crate_description!().to_string()) diff --git a/core/tauri-api/src/cli/macros.rs b/core/tauri/src/api/cli/macros.rs similarity index 100% rename from core/tauri-api/src/cli/macros.rs rename to core/tauri/src/api/cli/macros.rs diff --git a/core/tauri-api/src/command.rs b/core/tauri/src/api/command.rs similarity index 90% rename from core/tauri-api/src/command.rs rename to core/tauri/src/api/command.rs index 9296130c626..a5848c6eda0 100644 --- a/core/tauri-api/src/command.rs +++ b/core/tauri/src/api/command.rs @@ -16,7 +16,7 @@ use std::os::windows::process::CommandExt; #[cfg(windows)] const CREATE_NO_WINDOW: u32 = 0x0800_0000; -use crate::private::async_runtime::{channel, spawn, Receiver}; +use crate::api::private::async_runtime::{channel, spawn, Receiver}; use os_pipe::{pipe, PipeWriter}; use serde::Serialize; use shared_child::SharedChild; @@ -72,12 +72,12 @@ pub struct CommandChild { impl CommandChild { /// Write to process stdin. - pub fn write(&mut self, buf: &[u8]) -> crate::Result<()> { + pub fn write(&mut self, buf: &[u8]) -> crate::api::Result<()> { self.stdin_writer.write_all(buf)?; Ok(()) } /// Send a kill signal to the child. - pub fn kill(self) -> crate::Result<()> { + pub fn kill(self) -> crate::api::Result<()> { self.inner.kill()?; Ok(()) } @@ -119,7 +119,7 @@ impl Command { } /// Spawns the command. - pub fn spawn(self) -> crate::Result<(Receiver, CommandChild)> { + pub fn spawn(self) -> crate::api::Result<(Receiver, CommandChild)> { let mut command = get_std_command!(self); let (stdout_reader, stdout_writer) = pipe()?; let (stderr_reader, stderr_writer) = pipe()?; @@ -191,10 +191,10 @@ mod test { #[test] fn test_cmd_output() { // create a command to run cat. - let cmd = Command::new("cat").args(&["test/test.txt"]); + let cmd = Command::new("cat").args(&["test/api/test.txt"]); let (mut rx, _) = cmd.spawn().unwrap(); - crate::private::async_runtime::block_on(async move { + crate::api::private::async_runtime::block_on(async move { while let Some(event) = rx.recv().await { match event { CommandEvent::Terminated(payload) => { @@ -213,17 +213,17 @@ mod test { #[test] // test the failure case fn test_cmd_fail() { - let cmd = Command::new("cat").args(&["test/"]); + let cmd = Command::new("cat").args(&["test/api/"]); let (mut rx, _) = cmd.spawn().unwrap(); - crate::private::async_runtime::block_on(async move { + crate::api::private::async_runtime::block_on(async move { while let Some(event) = rx.recv().await { match event { CommandEvent::Terminated(payload) => { assert_eq!(payload.code, Some(1)); } CommandEvent::Stderr(line) => { - assert_eq!(line, "cat: test/: Is a directory".to_string()); + assert_eq!(line, "cat: test/api/: Is a directory".to_string()); } _ => {} } diff --git a/core/tauri-api/src/dialog.rs b/core/tauri/src/api/dialog.rs similarity index 100% rename from core/tauri-api/src/dialog.rs rename to core/tauri/src/api/dialog.rs diff --git a/core/tauri-api/src/dir.rs b/core/tauri/src/api/dir.rs similarity index 90% rename from core/tauri-api/src/dir.rs rename to core/tauri/src/api/dir.rs index c2d29e44f43..5f86ec161ea 100644 --- a/core/tauri-api/src/dir.rs +++ b/core/tauri/src/api/dir.rs @@ -25,12 +25,12 @@ pub struct DiskEntry { } /// Checks if the given path is a directory. -pub fn is_dir>(path: P) -> crate::Result { +pub fn is_dir>(path: P) -> crate::api::Result { metadata(path).map(|md| md.is_dir()).map_err(Into::into) } /// Reads a directory. Can perform recursive operations. -pub fn read_dir>(path: P, recursive: bool) -> crate::Result> { +pub fn read_dir>(path: P, recursive: bool) -> crate::api::Result> { let mut files_and_dirs: Vec = vec![]; for entry in fs::read_dir(path)? { let path = entry?.path(); @@ -59,7 +59,7 @@ pub fn read_dir>(path: P, recursive: bool) -> crate::Result(callback: F) -> crate::Result<()> { +pub fn with_temp_dir(callback: F) -> crate::api::Result<()> { let dir = tempdir()?; callback(&dir); dir.close()?; @@ -93,8 +93,8 @@ mod test { #[test] // check the read_dir function with recursive = true fn check_read_dir_recursively() { - // define a relative directory string test/ - let dir = PathBuf::from("test/"); + // define a relative directory string test/api/ + let dir = PathBuf::from("test/api/"); // add the files to this directory let mut file_one = dir.clone(); file_one.push("test.txt"); @@ -144,8 +144,8 @@ mod test { #[test] // check the read_dir function with recursive = false fn check_read_dir() { - // define a relative directory test/ - let dir = PathBuf::from("test/"); + // define a relative directory test/api/ + let dir = PathBuf::from("test/api/"); // call list_dir_contents on the dir let res = read_dir(dir, false); @@ -164,22 +164,22 @@ mod test { if first.path.extension() == Some(OsStr::new("txt")) { // check the fields for the first DiskEntry - assert_eq!(first.path, PathBuf::from("test/test.txt")); + assert_eq!(first.path, PathBuf::from("test/api/test.txt")); assert_eq!(first.children.is_some(), false); assert_eq!(first.name, Some("test.txt".to_string())); // check the fields for the second DiskEntry - assert_eq!(second.path, PathBuf::from("test/test_binary")); + assert_eq!(second.path, PathBuf::from("test/api/test_binary")); assert_eq!(second.children.is_some(), false); assert_eq!(second.name, Some("test_binary".to_string())); } else { // check the fields for the first DiskEntry - assert_eq!(second.path, PathBuf::from("test/test.txt")); + assert_eq!(second.path, PathBuf::from("test/api/test.txt")); assert_eq!(second.children.is_some(), false); assert_eq!(second.name, Some("test.txt".to_string())); // check the fields for the second DiskEntry - assert_eq!(first.path, PathBuf::from("test/test_binary")); + assert_eq!(first.path, PathBuf::from("test/api/test_binary")); assert_eq!(first.children.is_some(), false); assert_eq!(first.name, Some("test_binary".to_string())); } diff --git a/core/tauri-api/src/error.rs b/core/tauri/src/api/error.rs similarity index 96% rename from core/tauri-api/src/error.rs rename to core/tauri/src/api/error.rs index 1ee5c39d227..c6db8b0f9ee 100644 --- a/core/tauri-api/src/error.rs +++ b/core/tauri/src/api/error.rs @@ -51,7 +51,7 @@ pub enum Error { #[error("{0}")] Zip(#[from] zip::result::ZipError), /// Notification error. - #[cfg(feature = "notification")] + #[cfg(notification_all)] #[error("{0}")] Notification(#[from] notify_rust::error::Error), /// failed to detect the current platform. @@ -62,7 +62,7 @@ pub enum Error { #[error("failed to parse CLI arguments: {0}")] ParseCliArguments(#[from] clap::Error), /// Shortcut error. - #[cfg(feature = "global-shortcut")] + #[cfg(global_shortcut_all)] #[error("shortcut error: {0}")] Shortcut(#[from] tauri_hotkey::Error), /// Shell error. diff --git a/core/tauri-api/src/file.rs b/core/tauri/src/api/file.rs similarity index 84% rename from core/tauri-api/src/file.rs rename to core/tauri/src/api/file.rs index 4825a2be23d..df403873f53 100644 --- a/core/tauri-api/src/file.rs +++ b/core/tauri/src/api/file.rs @@ -11,23 +11,23 @@ pub use extract::*; pub use file_move::*; /// Reads a string file. -pub fn read_string>(file: P) -> crate::Result { +pub fn read_string>(file: P) -> crate::api::Result { fs::read_to_string(file).map_err(Into::into) } /// Reads a binary file. -pub fn read_binary>(file: P) -> crate::Result> { +pub fn read_binary>(file: P) -> crate::api::Result> { fs::read(file).map_err(Into::into) } #[cfg(test)] mod test { use super::*; - use crate::Error; + use crate::api::Error; #[test] fn check_read_string() { - let file = String::from("test/test.txt"); + let file = String::from("test/api/test.txt"); let res = read_string(file); @@ -40,7 +40,7 @@ mod test { #[test] fn check_read_string_fail() { - let file = String::from("test/"); + let file = String::from("test/api/"); let res = read_string(file); @@ -56,7 +56,7 @@ mod test { #[test] fn check_read_binary() { - let file = String::from("test/test_binary"); + let file = String::from("test/api/test_binary"); #[cfg(windows)] let expected_vec = vec![ @@ -80,7 +80,7 @@ mod test { #[test] fn check_read_binary_fail() { - let file = String::from("test/"); + let file = String::from("test/api/"); let res = read_binary(file); diff --git a/core/tauri-api/src/file/extract.rs b/core/tauri/src/api/file/extract.rs similarity index 92% rename from core/tauri-api/src/file/extract.rs rename to core/tauri/src/api/file/extract.rs index 33609de00b0..a177babb69f 100644 --- a/core/tauri-api/src/file/extract.rs +++ b/core/tauri/src/api/file/extract.rs @@ -78,7 +78,7 @@ impl<'a> Extract<'a> { /// Extract an entire source archive into a specified path. If the source is a single compressed /// file and not an archive, it will be extracted into a file with the same name inside of /// `into_dir`. - pub fn extract_into(&self, into_dir: &path::Path) -> crate::Result<()> { + pub fn extract_into(&self, into_dir: &path::Path) -> crate::api::Result<()> { let source = fs::File::open(self.source)?; let archive = self .archive_format @@ -98,10 +98,9 @@ impl<'a> Extract<'a> { } } } - let file_name = self - .source - .file_name() - .ok_or_else(|| crate::Error::Extract("Extractor source has no file-name".into()))?; + let file_name = self.source.file_name().ok_or_else(|| { + crate::api::Error::Extract("Extractor source has no file-name".into()) + })?; let mut out_path = into_dir.join(file_name); out_path.set_extension(""); let mut out_file = fs::File::create(&out_path)?; @@ -134,7 +133,7 @@ impl<'a> Extract<'a> { &self, into_dir: &path::Path, file_to_extract: T, - ) -> crate::Result<()> { + ) -> crate::api::Result<()> { let file_to_extract = file_to_extract.as_ref(); let source = fs::File::open(self.source)?; let archive = self @@ -155,9 +154,9 @@ impl<'a> Extract<'a> { } } } - let file_name = file_to_extract - .file_name() - .ok_or_else(|| crate::Error::Extract("Extractor source has no file-name".into()))?; + let file_name = file_to_extract.file_name().ok_or_else(|| { + crate::api::Error::Extract("Extractor source has no file-name".into()) + })?; let out_path = into_dir.join(file_name); let mut out_file = fs::File::create(&out_path)?; io::copy(&mut reader, &mut out_file)?; @@ -169,7 +168,7 @@ impl<'a> Extract<'a> { .filter_map(|e| e.ok()) .find(|e| e.path().ok().filter(|p| p == file_to_extract).is_some()) .ok_or_else(|| { - crate::Error::Extract(format!( + crate::api::Error::Extract(format!( "Could not find the required path in the archive: {:?}", file_to_extract )) diff --git a/core/tauri-api/src/file/file_move.rs b/core/tauri/src/api/file/file_move.rs similarity index 95% rename from core/tauri-api/src/file/file_move.rs rename to core/tauri/src/api/file/file_move.rs index 05555645f1b..d6be67689d9 100644 --- a/core/tauri-api/src/file/file_move.rs +++ b/core/tauri/src/api/file/file_move.rs @@ -39,7 +39,7 @@ impl<'a> Move<'a> { } /// Move source file to specified destination (replace whole directory) - pub fn to_dest(&self, dest: &path::Path) -> crate::Result<()> { + pub fn to_dest(&self, dest: &path::Path) -> crate::api::Result<()> { match self.temp { None => { fs::rename(self.source, dest)?; @@ -61,7 +61,7 @@ impl<'a> Move<'a> { /// Walk in the source and copy all files and create directories if needed by /// replacing existing elements. (equivalent to a cp -R) - pub fn walk_to_dest(&self, dest: &path::Path) -> crate::Result<()> { + pub fn walk_to_dest(&self, dest: &path::Path) -> crate::api::Result<()> { match self.temp { None => { // got no temp -- no need to backup @@ -90,7 +90,7 @@ impl<'a> Move<'a> { // Walk into the source and create directories, and copy files // Overwriting existing items but keeping untouched the files in the dest // not provided in the source. -fn walkdir_and_copy(source: &path::Path, dest: &path::Path) -> crate::Result<()> { +fn walkdir_and_copy(source: &path::Path, dest: &path::Path) -> crate::api::Result<()> { let walkdir = WalkBuilder::new(source).hidden(false).build(); for entry in walkdir { diff --git a/core/tauri-api/src/http.rs b/core/tauri/src/api/http.rs similarity index 97% rename from core/tauri-api/src/http.rs rename to core/tauri/src/api/http.rs index 94b9ff16626..2254afb6858 100644 --- a/core/tauri-api/src/http.rs +++ b/core/tauri/src/api/http.rs @@ -39,7 +39,7 @@ impl ClientBuilder { } /// Builds the ClientOptions. - pub fn build(self) -> crate::Result { + pub fn build(self) -> crate::api::Result { let mut client_builder = reqwest::Client::builder(); if let Some(max_redirections) = self.max_redirections { @@ -64,7 +64,7 @@ impl Client { /// /// The response will be transformed to String, /// If reading the response as binary, the byte array will be serialized using serde_json - pub async fn send(&self, request: HttpRequestBuilder) -> crate::Result { + pub async fn send(&self, request: HttpRequestBuilder) -> crate::api::Result { let method = Method::from_bytes(request.method.to_uppercase().as_bytes())?; let mut request_builder = self.0.request(method, &request.url); @@ -165,7 +165,7 @@ pub enum Body { /// /// # Examples /// ```no_run -/// use tauri_api::http::{ HttpRequestBuilder, ResponseType, ClientBuilder }; +/// use tauri::api::http::{ HttpRequestBuilder, ResponseType, ClientBuilder }; /// async fn run() { /// let client = ClientBuilder::new() /// .max_redirections(3) @@ -250,7 +250,7 @@ pub struct Response(ResponseType, reqwest::Response); impl Response { /// Reads the response and returns its info. - pub async fn read(self) -> crate::Result { + pub async fn read(self) -> crate::api::Result { let url = self.1.url().to_string(); let mut headers = HashMap::new(); for (name, value) in self.1.headers() { diff --git a/core/tauri-api/src/lib.rs b/core/tauri/src/api/mod.rs similarity index 88% rename from core/tauri-api/src/lib.rs rename to core/tauri/src/api/mod.rs index 826fff2ac07..b051fc28a8c 100644 --- a/core/tauri-api/src/lib.rs +++ b/core/tauri/src/api/mod.rs @@ -3,7 +3,7 @@ // SPDX-License-Identifier: MIT //! The Tauri API interface. -#![warn(missing_docs, rust_2018_idioms)] +#![warn(missing_docs)] /// The App API module allows you to manage application processes. pub mod app; @@ -34,16 +34,16 @@ pub use tauri_utils::config; /// The CLI args interface. #[cfg(feature = "cli")] pub mod cli; + #[cfg(feature = "cli")] -#[macro_use] -extern crate clap; +pub use clap; /// Global shortcuts interface. -#[cfg(feature = "global-shortcut")] +#[cfg(global_shortcut_all)] pub mod shortcuts; /// The desktop notifications API module. -#[cfg(feature = "notification")] +#[cfg(notification_all)] pub mod notification; pub use tauri_utils::*; @@ -97,9 +97,9 @@ pub mod private { pub use once_cell::sync::OnceCell; pub trait AsTauriContext { - fn config() -> &'static crate::config::Config; - fn assets() -> &'static crate::assets::EmbeddedAssets; + fn config() -> &'static crate::api::config::Config; + fn assets() -> &'static crate::api::assets::EmbeddedAssets; fn default_window_icon() -> Option<&'static [u8]>; - fn package_info() -> crate::PackageInfo; + fn package_info() -> crate::api::PackageInfo; } } diff --git a/core/tauri-api/src/notification.rs b/core/tauri/src/api/notification.rs similarity index 96% rename from core/tauri-api/src/notification.rs rename to core/tauri/src/api/notification.rs index a642cd4f0cd..ca993552058 100644 --- a/core/tauri-api/src/notification.rs +++ b/core/tauri/src/api/notification.rs @@ -10,7 +10,7 @@ use std::path::MAIN_SEPARATOR; /// /// # Example /// ``` -/// use tauri_api::notification::Notification; +/// use tauri::api::notification::Notification; /// // shows a notification with the given title and body /// Notification::new("studio.tauri.example") /// .title("New message") @@ -58,7 +58,7 @@ impl Notification { } /// Shows the notification. - pub fn show(self) -> crate::Result<()> { + pub fn show(self) -> crate::api::Result<()> { let mut notification = notify_rust::Notification::new(); if let Some(body) = self.body { notification.body(&body); diff --git a/core/tauri-api/src/path.rs b/core/tauri/src/api/path.rs similarity index 94% rename from core/tauri-api/src/path.rs rename to core/tauri/src/api/path.rs index b42fe67fd76..f7492010409 100644 --- a/core/tauri-api/src/path.rs +++ b/core/tauri/src/api/path.rs @@ -62,12 +62,15 @@ pub enum BaseDirectory { /// /// # Example /// ``` -/// use tauri_api::path::{resolve_path, BaseDirectory}; +/// use tauri::api::path::{resolve_path, BaseDirectory}; /// let path = resolve_path("path/to/something", Some(BaseDirectory::Config)) /// .expect("failed to resolve path"); /// // path is equal to "/home/${whoami}/.config/path/to/something" on Linux /// ``` -pub fn resolve_path>(path: P, dir: Option) -> crate::Result { +pub fn resolve_path>( + path: P, + dir: Option, +) -> crate::api::Result { if let Some(base_dir) = dir { let base_dir_path = match base_dir { BaseDirectory::Audio => audio_dir(), @@ -94,7 +97,7 @@ pub fn resolve_path>(path: P, dir: Option) -> crat base_dir_path_value.push(path); Ok(base_dir_path_value) } else { - Err(crate::Error::Path( + Err(crate::api::Error::Path( "unable to determine base dir path".to_string(), )) } @@ -187,10 +190,10 @@ pub fn video_dir() -> Option { /// Returns the path to the resource directory of this app. pub fn resource_dir() -> Option { - crate::platform::resource_dir().ok() + crate::api::platform::resource_dir().ok() } -fn app_name() -> crate::Result { +fn app_name() -> crate::api::Result { let exe = std::env::current_exe()?; let app_name = exe .file_stem() diff --git a/core/tauri-api/src/rpc.rs b/core/tauri/src/api/rpc.rs similarity index 97% rename from core/tauri-api/src/rpc.rs rename to core/tauri/src/api/rpc.rs index 744dd2d0626..9aa6fc8d2ed 100644 --- a/core/tauri-api/src/rpc.rs +++ b/core/tauri/src/api/rpc.rs @@ -63,14 +63,14 @@ fn escape_json_parse(json: &RawValue) -> String { /// /// # Examples /// ``` -/// use tauri_api::rpc::format_callback; +/// use tauri::api::rpc::format_callback; /// // callback with a string argument /// let cb = format_callback("callback-function-name", &"the string response").expect("failed to serialize"); /// assert!(cb.contains(r#"window["callback-function-name"]("the string response")"#)); /// ``` /// /// ``` -/// use tauri_api::rpc::format_callback; +/// use tauri::api::rpc::format_callback; /// use serde::Serialize; /// /// // callback with large JSON argument @@ -87,7 +87,7 @@ fn escape_json_parse(json: &RawValue) -> String { pub fn format_callback>( function_name: S, arg: &T, -) -> crate::Result { +) -> crate::api::Result { macro_rules! format_callback { ( $arg:expr ) => { format!( @@ -149,7 +149,7 @@ pub fn format_callback>( /// /// # Examples /// ``` -/// use tauri_api::rpc::format_callback_result; +/// use tauri::api::rpc::format_callback_result; /// let res: Result = Ok(5); /// let cb = format_callback_result(res, "success_cb", "error_cb").expect("failed to format"); /// assert!(cb.contains(r#"window["success_cb"](5)"#)); @@ -162,7 +162,7 @@ pub fn format_callback_result( result: Result, success_callback: impl AsRef, error_callback: impl AsRef, -) -> crate::Result { +) -> crate::api::Result { match result { Ok(res) => format_callback(success_callback, &res), Err(err) => format_callback(error_callback, &err), @@ -171,7 +171,7 @@ pub fn format_callback_result( #[cfg(test)] mod test { - use crate::rpc::*; + use crate::api::rpc::*; use quickcheck_macros::quickcheck; #[test] diff --git a/core/tauri-api/src/shell.rs b/core/tauri/src/api/shell.rs similarity index 72% rename from core/tauri-api/src/shell.rs rename to core/tauri/src/api/shell.rs index 01939eab1c4..5acb5de9999 100644 --- a/core/tauri-api/src/shell.rs +++ b/core/tauri/src/api/shell.rs @@ -3,7 +3,7 @@ // SPDX-License-Identifier: MIT /// Open path or URL with `with`, or system default -pub fn open(path: String, with: Option) -> crate::Result<()> { +pub fn open(path: String, with: Option) -> crate::api::Result<()> { { let exit_status = if let Some(with) = with { open::with(&path, &with) @@ -15,10 +15,10 @@ pub fn open(path: String, with: Option) -> crate::Result<()> { if status.success() { Ok(()) } else { - Err(crate::Error::Shell("open command failed".into())) + Err(crate::api::Error::Shell("open command failed".into())) } } - Err(err) => Err(crate::Error::Shell(format!( + Err(err) => Err(crate::api::Error::Shell(format!( "failed to open: {}", err.to_string() ))), diff --git a/core/tauri-api/src/shortcuts.rs b/core/tauri/src/api/shortcuts.rs similarity index 81% rename from core/tauri-api/src/shortcuts.rs rename to core/tauri/src/api/shortcuts.rs index 67631ce19e2..fdcc1ee46c2 100644 --- a/core/tauri-api/src/shortcuts.rs +++ b/core/tauri/src/api/shortcuts.rs @@ -15,7 +15,7 @@ impl ShortcutManager { } /// Determines whether the given hotkey is registered or not. - pub fn is_registered(&self, shortcut: String) -> crate::Result { + pub fn is_registered(&self, shortcut: String) -> crate::api::Result { let hotkey = parse_hotkey(&shortcut)?; Ok(self.0.is_registered(&hotkey)) } @@ -25,21 +25,21 @@ impl ShortcutManager { &mut self, shortcut: String, handler: H, - ) -> crate::Result<()> { + ) -> crate::api::Result<()> { let hotkey = parse_hotkey(&shortcut)?; self.0.register(hotkey, handler)?; Ok(()) } /// Unregister a previously registered shortcut handler. - pub fn unregister(&mut self, shortcut: String) -> crate::Result<()> { + pub fn unregister(&mut self, shortcut: String) -> crate::api::Result<()> { let hotkey = parse_hotkey(&shortcut)?; self.0.unregister(&hotkey)?; Ok(()) } /// Unregisters all shortcuts registered by this application. - pub fn unregister_all(&mut self) -> crate::Result<()> { + pub fn unregister_all(&mut self) -> crate::api::Result<()> { self.0.unregister_all()?; Ok(()) } diff --git a/core/tauri-api/src/tcp.rs b/core/tauri/src/api/tcp.rs similarity index 100% rename from core/tauri-api/src/tcp.rs rename to core/tauri/src/api/tcp.rs diff --git a/core/tauri-api/src/version.rs b/core/tauri/src/api/version.rs similarity index 78% rename from core/tauri-api/src/version.rs rename to core/tauri/src/api/version.rs index cf590002eca..80634c28492 100644 --- a/core/tauri-api/src/version.rs +++ b/core/tauri/src/api/version.rs @@ -6,7 +6,7 @@ use semver::Version; use std::cmp::Ordering; /// Compare two semver versions -pub fn compare(first: &str, second: &str) -> crate::Result { +pub fn compare(first: &str, second: &str) -> crate::api::Result { let v1 = Version::parse(first)?; let v2 = Version::parse(second)?; match v1.cmp(&v2) { @@ -17,7 +17,7 @@ pub fn compare(first: &str, second: &str) -> crate::Result { } /// Check if the "second" semver is compatible with the "first" -pub fn is_compatible(first: &str, second: &str) -> crate::Result { +pub fn is_compatible(first: &str, second: &str) -> crate::api::Result { let first = Version::parse(first)?; let second = Version::parse(second)?; Ok(if second.major == 0 && first.major == 0 { @@ -32,27 +32,27 @@ pub fn is_compatible(first: &str, second: &str) -> crate::Result { } /// Check if a the "other" version is a major bump from the "current" -pub fn is_major(current: &str, other: &str) -> crate::Result { +pub fn is_major(current: &str, other: &str) -> crate::api::Result { let current = Version::parse(current)?; let other = Version::parse(other)?; Ok(other.major > current.major) } /// Check if a the "other" version is a minor bump from the "current" -pub fn is_minor(current: &str, other: &str) -> crate::Result { +pub fn is_minor(current: &str, other: &str) -> crate::api::Result { let current = Version::parse(current)?; let other = Version::parse(other)?; Ok(current.major == other.major && other.minor > current.minor) } /// Check if a the "other" version is a patch bump from the "current" -pub fn is_patch(current: &str, other: &str) -> crate::Result { +pub fn is_patch(current: &str, other: &str) -> crate::api::Result { let current = Version::parse(current)?; let other = Version::parse(other)?; Ok(current.major == other.major && current.minor == other.minor && other.patch > current.patch) } /// Check if a version is greater than the current -pub fn is_greater(current: &str, other: &str) -> crate::Result { +pub fn is_greater(current: &str, other: &str) -> crate::api::Result { Ok(Version::parse(other)? > Version::parse(current)?) } diff --git a/core/tauri/src/endpoints/cli.rs b/core/tauri/src/endpoints/cli.rs index 40c89a958ee..841098e985f 100644 --- a/core/tauri/src/endpoints/cli.rs +++ b/core/tauri/src/endpoints/cli.rs @@ -21,7 +21,7 @@ impl Cmd { #[allow(unused_variables)] Self::CliMatches => { #[cfg(cli)] - return tauri_api::cli::get_matches(&cli_config) + return crate::api::cli::get_matches(&cli_config) .map_err(Into::into) .map(Into::into); #[cfg(not(cli))] diff --git a/core/tauri/src/endpoints/file_system.rs b/core/tauri/src/endpoints/file_system.rs index 4b7ff884d89..319aed65db2 100644 --- a/core/tauri/src/endpoints/file_system.rs +++ b/core/tauri/src/endpoints/file_system.rs @@ -5,8 +5,8 @@ use super::InvokeResponse; use crate::api::path::BaseDirectory; +use crate::api::{dir, file, path::resolve_path}; use serde::{Deserialize, Serialize}; -use tauri_api::{dir, file, path::resolve_path}; use std::{fs, fs::File, io::Write, path::PathBuf}; diff --git a/core/tauri/src/endpoints/http.rs b/core/tauri/src/endpoints/http.rs index 531798d3701..a8aae5f03a3 100644 --- a/core/tauri/src/endpoints/http.rs +++ b/core/tauri/src/endpoints/http.rs @@ -4,9 +4,9 @@ use super::InvokeResponse; +use crate::api::http::{Client, ClientBuilder, HttpRequestBuilder, ResponseData}; use once_cell::sync::Lazy; use serde::Deserialize; -use tauri_api::http::{Client, ClientBuilder, HttpRequestBuilder, ResponseData}; use std::{ collections::HashMap, diff --git a/core/tauri/src/endpoints/notification.rs b/core/tauri/src/endpoints/notification.rs index f1a96fa6029..333a7b3879f 100644 --- a/core/tauri/src/endpoints/notification.rs +++ b/core/tauri/src/endpoints/notification.rs @@ -4,8 +4,9 @@ use super::InvokeResponse; use serde::Deserialize; + #[cfg(notification_all)] -use tauri_api::notification::Notification; +use crate::api::notification::Notification; /// The options for the notification API. #[derive(Deserialize)] @@ -86,17 +87,17 @@ pub fn request_permission() -> crate::Result { if let Some(allow_notification) = settings.allow_notification { return Ok(if allow_notification { granted } else { denied }); } - let answer = tauri_api::dialog::ask( + let answer = crate::api::dialog::ask( "Permissions", "This app wants to show notifications. Do you allow?", ); match answer { - tauri_api::dialog::AskResponse::Yes => { + crate::api::dialog::AskResponse::Yes => { settings.allow_notification = Some(true); crate::settings::write_settings(settings)?; Ok(granted) } - tauri_api::dialog::AskResponse::No => { + crate::api::dialog::AskResponse::No => { settings.allow_notification = Some(false); crate::settings::write_settings(settings)?; Ok(denied) diff --git a/core/tauri/src/error.rs b/core/tauri/src/error.rs index e3d56ca1a36..974d0d218e5 100644 --- a/core/tauri/src/error.rs +++ b/core/tauri/src/error.rs @@ -28,7 +28,7 @@ pub enum Error { UnknownApi(Option), /// Failed to execute tauri API. #[error("failed to execute API: {0}")] - FailedToExecuteApi(#[from] tauri_api::Error), + FailedToExecuteApi(#[from] crate::api::Error), /// IO error. #[error("{0}")] Io(#[from] std::io::Error), @@ -55,7 +55,7 @@ pub enum Error { Setup(#[from] Box), /// Tauri updater error. #[error("Updater: {0}")] - TauriUpdater(#[from] tauri_updater::Error), + TauriUpdater(#[from] crate::updater::Error), } impl From for Error { diff --git a/core/tauri/src/lib.rs b/core/tauri/src/lib.rs index 2114a45af76..28aa12082d6 100644 --- a/core/tauri/src/lib.rs +++ b/core/tauri/src/lib.rs @@ -10,15 +10,12 @@ //! Tauri uses (and contributes to) the MIT licensed project that you can find at [webview](https://github.com/webview/webview). #![warn(missing_docs, rust_2018_idioms)] +pub(crate) use crate::api::private::async_runtime; /// The Tauri error enum. pub use error::Error; -pub use tauri_api as api; -pub(crate) use tauri_api::private::async_runtime; pub use tauri_macros::{command, generate_handler}; -/// The Tauri-specific settings for your runtime e.g. notification permission status. -pub mod settings; - +pub mod api; /// The Tauri API endpoints. mod endpoints; mod error; @@ -26,8 +23,10 @@ mod event; mod hooks; pub mod plugin; pub mod runtime; +/// The Tauri-specific settings for your runtime e.g. notification permission status. +pub mod settings; #[cfg(feature = "updater")] -mod updater; +pub mod updater; /// `Result` pub type Result = std::result::Result; @@ -108,7 +107,7 @@ pub struct Context { pub default_window_icon: Option>, /// Package information. - pub package_info: tauri_api::PackageInfo, + pub package_info: crate::api::PackageInfo, } /// Types associated with the running Tauri application. diff --git a/core/tauri/src/runtime/flavors/wry.rs b/core/tauri/src/runtime/flavors/wry.rs index b18b303706c..1b48d2df083 100644 --- a/core/tauri/src/runtime/flavors/wry.rs +++ b/core/tauri/src/runtime/flavors/wry.rs @@ -19,9 +19,9 @@ use crate::{ use std::{convert::TryFrom, path::PathBuf}; #[cfg(target_os = "windows")] -use std::fs::create_dir_all; +use crate::api::path::{resolve_path, BaseDirectory}; #[cfg(target_os = "windows")] -use tauri_api::path::{resolve_path, BaseDirectory}; +use std::fs::create_dir_all; /// Wrapper around a [`wry::Icon`] that can be created from an [`Icon`]. pub struct WryIcon(wry::Icon); diff --git a/core/tauri/src/runtime/manager.rs b/core/tauri/src/runtime/manager.rs index 6c56bdde772..902b6406f8a 100644 --- a/core/tauri/src/runtime/manager.rs +++ b/core/tauri/src/runtime/manager.rs @@ -164,9 +164,9 @@ where #[cfg(windows)] { // Should return a path similar to C:\Users\\AppData\Local\ - let local_app_data = tauri_api::path::resolve_path( + let local_app_data = crate::api::path::resolve_path( self.inner.package_info.name, - Some(tauri_api::path::BaseDirectory::LocalData), + Some(crate::api::path::BaseDirectory::LocalData), ); // Make sure the directory exist without panic if let Ok(user_data_dir) = local_app_data { @@ -346,7 +346,7 @@ mod test { #[test] fn check_get_url() { - let context = generate_context!("test/fixture/src-tauri/tauri.conf.json", crate::Context); + let context = generate_context!("test/fixture/src-tauri/tauri.conf.json", crate); let manager: WindowManager = WindowManager::with_handlers( context, PluginStore::default(), diff --git a/core/tauri/src/settings.rs b/core/tauri/src/settings.rs index 8f9fe62aa91..aff19d33790 100644 --- a/core/tauri/src/settings.rs +++ b/core/tauri/src/settings.rs @@ -2,16 +2,16 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT +use crate::api::{ + file::read_string, + path::{resolve_path, BaseDirectory}, +}; use serde::{Deserialize, Serialize}; use std::{ fs::File, io::Write, path::{Path, PathBuf}, }; -use tauri_api::{ - file::read_string, - path::{resolve_path, BaseDirectory}, -}; /// Tauri Settings. #[derive(Default, Deserialize, Serialize)] @@ -22,7 +22,7 @@ pub struct Settings { } /// Gets the path to the settings file -fn get_settings_path() -> tauri_api::Result { +fn get_settings_path() -> crate::api::Result { resolve_path(".tauri-settings.json", Some(BaseDirectory::App)) } diff --git a/core/tauri/src/updater.rs b/core/tauri/src/updater.rs deleted file mode 100644 index bd131408805..00000000000 --- a/core/tauri/src/updater.rs +++ /dev/null @@ -1,271 +0,0 @@ -// Copyright 2019-2021 Tauri Programme within The Commons Conservancy -// SPDX-License-Identifier: Apache-2.0 -// SPDX-License-Identifier: MIT - -use crate::{ - api::{ - app::restart_application, - config::UpdaterConfig, - dialog::{ask, AskResponse}, - }, - Params, Window, -}; - -// Check for new updates -pub const EVENT_CHECK_UPDATE: &str = "tauri://update"; -// New update available -pub const EVENT_UPDATE_AVAILABLE: &str = "tauri://update-available"; -// Used to initialize an update *should run check-update first (once you received the update available event)* -pub const EVENT_INSTALL_UPDATE: &str = "tauri://update-install"; -// Send updater status or error even if dialog is enabled, you should -// always listen for this event. It'll send you the install progress -// and any error triggered during update check and install -pub const EVENT_STATUS_UPDATE: &str = "tauri://update-status"; -// this is the status emitted when the download start -pub const EVENT_STATUS_PENDING: &str = "PENDING"; -// When you got this status, something went wrong -// you can find the error message inside the `error` field. -pub const EVENT_STATUS_ERROR: &str = "ERROR"; -// When you receive this status, you should ask the user to restart -pub const EVENT_STATUS_SUCCESS: &str = "DONE"; -// When you receive this status, this is because the application is runniing last version -pub const EVENT_STATUS_UPTODATE: &str = "UPTODATE"; - -#[derive(Clone, serde::Serialize)] -struct StatusEvent { - status: String, - error: Option, -} - -#[derive(Clone, serde::Serialize)] -struct UpdateManifest { - version: String, - date: String, - body: String, -} - -/// Check if there is any new update with builtin dialog. -pub(crate) async fn check_update_with_dialog( - updater_config: UpdaterConfig, - package_info: crate::api::PackageInfo, - window: Window, -) { - if !updater_config.active || updater_config.endpoints.is_none() { - return; - } - - // prepare our endpoints - let endpoints = updater_config - .endpoints - .as_ref() - // this expect can lead to a panic - // we should have a better handling here - .expect("Something wrong with endpoints") - .clone(); - - // check updates - match tauri_updater::builder() - .urls(&endpoints[..]) - .current_version(package_info.version) - .build() - .await - { - Ok(updater) => { - let pubkey = updater_config.pubkey.clone(); - - // if dialog enabled only - if updater.should_update && updater_config.dialog { - let body = updater.body.clone().unwrap_or_else(|| String::from("")); - let dialog = - prompt_for_install(&updater.clone(), package_info.name, &body.clone(), pubkey).await; - - if dialog.is_err() { - send_status_update( - window.clone(), - EVENT_STATUS_ERROR, - Some(dialog.err().unwrap().to_string()), - ); - - return; - } - } - } - Err(e) => { - send_status_update(window.clone(), EVENT_STATUS_ERROR, Some(e.to_string())); - } - } -} - -/// Experimental listener -/// This function should be run on the main thread once. -pub(crate) fn listener( - updater_config: UpdaterConfig, - package_info: crate::api::PackageInfo, - window: &Window, -) { - let isolated_window = window.clone(); - - // Wait to receive the event `"tauri://update"` - window.listen( - EVENT_CHECK_UPDATE - .parse() - .unwrap_or_else(|_| panic!("bad label")), - move |_msg| { - let window = isolated_window.clone(); - let package_info = package_info.clone(); - - // prepare our endpoints - let endpoints = updater_config - .endpoints - .as_ref() - .expect("Something wrong with endpoints") - .clone(); - - let pubkey = updater_config.pubkey.clone(); - - // check updates - crate::async_runtime::spawn(async move { - let window = window.clone(); - let window_isolation = window.clone(); - let pubkey = pubkey.clone(); - - match tauri_updater::builder() - .urls(&endpoints[..]) - .current_version(package_info.version) - .build() - .await - { - Ok(updater) => { - // send notification if we need to update - if updater.should_update { - let body = updater.body.clone().unwrap_or_else(|| String::from("")); - - // Emit `tauri://update-available` - let _ = window.emit( - &EVENT_UPDATE_AVAILABLE - .parse() - .unwrap_or_else(|_| panic!("bad label")), - Some(UpdateManifest { - body, - date: updater.date.clone(), - version: updater.version.clone(), - }), - ); - - // Listen for `tauri://update-install` - window.once( - EVENT_INSTALL_UPDATE - .parse() - .unwrap_or_else(|_| panic!("bad label")), - move |_msg| { - let window = window_isolation.clone(); - let updater = updater.clone(); - let pubkey = pubkey.clone(); - - // Start installation - crate::async_runtime::spawn(async move { - // emit {"status": "PENDING"} - send_status_update(window.clone(), EVENT_STATUS_PENDING, None); - - // Launch updater download process - // macOS we display the `Ready to restart dialog` asking to restart - // Windows is closing the current App and launch the downloaded MSI when ready (the process stop here) - // Linux we replace the AppImage by launching a new install, it start a new AppImage instance, so we're closing the previous. (the process stop here) - let update_result = updater.clone().download_and_install(pubkey.clone()).await; - - if update_result.is_err() { - // emit {"status": "ERROR", "error": "The error message"} - send_status_update( - window.clone(), - EVENT_STATUS_ERROR, - Some(update_result.err().unwrap().to_string()), - ); - } else { - // emit {"status": "DONE"} - send_status_update(window.clone(), EVENT_STATUS_SUCCESS, None); - } - }) - }, - ); - } else { - send_status_update(window.clone(), EVENT_STATUS_UPTODATE, None); - } - } - Err(e) => { - send_status_update(window.clone(), EVENT_STATUS_ERROR, Some(e.to_string())); - } - } - }) - }, - ); -} - -// Send a status update via `tauri://update-status` event. -fn send_status_update(window: Window, status: &str, error: Option) { - let _ = window.emit_internal( - EVENT_STATUS_UPDATE.to_string(), - Some(StatusEvent { - error, - status: String::from(status), - }), - ); -} - -// Prompt a dialog asking if the user want to install the new version -// Maybe we should add an option to customize it in future versions. -async fn prompt_for_install( - updater: &tauri_updater::Update, - app_name: &str, - body: &str, - pubkey: Option, -) -> crate::Result<()> { - // remove single & double quote - let escaped_body = body.replace(&['\"', '\''][..], ""); - - // todo(lemarier): We should review this and make sure we have - // something more conventional. - let should_install = ask( - format!(r#"A new version of {} is available! "#, app_name), - format!( - r#"{} {} is now available -- you have {}. - -Would you like to install it now? - -Release Notes: -{}"#, - app_name, updater.version, updater.current_version, escaped_body, - ), - ); - - match should_install { - AskResponse::Yes => { - // Launch updater download process - // macOS we display the `Ready to restart dialog` asking to restart - // Windows is closing the current App and launch the downloaded MSI when ready (the process stop here) - // Linux we replace the AppImage by launching a new install, it start a new AppImage instance, so we're closing the previous. (the process stop here) - updater.download_and_install(pubkey.clone()).await?; - - // Ask user if we need to restart the application - let should_exit = ask( - "Ready to Restart", - "The installation was successful, do you want to restart the application now?", - ); - match should_exit { - AskResponse::Yes => { - restart_application(None); - // safely exit even if the process - // should be killed - return Ok(()); - } - AskResponse::No => { - // Do nothing -- maybe we can emit some event here - } - } - } - AskResponse::No => { - // Do nothing -- maybe we can emit some event here - } - } - - Ok(()) -} diff --git a/core/tauri-updater/src/lib.rs b/core/tauri/src/updater/core.rs similarity index 98% rename from core/tauri-updater/src/lib.rs rename to core/tauri/src/updater/core.rs index d942975c819..2df4aea6b3c 100644 --- a/core/tauri-updater/src/lib.rs +++ b/core/tauri/src/updater/core.rs @@ -2,10 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -#[macro_use] -pub mod error; +use super::error::{Error, Result}; +use crate::api::{file::Extract, version}; use base64::decode; -pub use error::{Error, Result}; use minisign_verify::{PublicKey, Signature}; use reqwest::{self, header, StatusCode}; use std::{ @@ -17,13 +16,12 @@ use std::{ str::from_utf8, time::{Duration, SystemTime, UNIX_EPOCH}, }; -use tauri_api::{file::Extract, version}; #[cfg(not(target_os = "macos"))] use std::process::Command; #[cfg(target_os = "macos")] -use tauri_api::file::Move; +use crate::api::file::Move; #[cfg(target_os = "windows")] use std::process::exit; @@ -175,6 +173,7 @@ impl<'a> UpdateBuilder<'a> { UpdateBuilder::default() } + #[allow(dead_code)] pub fn url(mut self, url: String) -> Self { self.urls.push(url); self @@ -199,12 +198,14 @@ impl<'a> UpdateBuilder<'a> { /// Set the target (os) /// win32, win64, darwin and linux are currently supported + #[allow(dead_code)] pub fn target(mut self, target: &str) -> Self { self.target = Some(target.to_owned()); self } /// Set the executable path + #[allow(dead_code)] pub fn executable_path>(mut self, executable_path: A) -> Self { self.executable_path = Some(PathBuf::from(executable_path.as_ref())); self @@ -975,15 +976,15 @@ mod test { fn http_updater_complete_process() { let good_archive_url = format!("{}/archive.tar.gz", mockito::server_url()); - let mut signature_file = - File::open("./test/fixture/archives/archive.tar.gz.sig").expect("Unable to open signature"); + let mut signature_file = File::open("./test/updater/fixture/archives/archive.tar.gz.sig") + .expect("Unable to open signature"); let mut signature = String::new(); signature_file .read_to_string(&mut signature) .expect("Unable to read signature as string"); - let mut pubkey_file = - File::open("./test/fixture/good_signature/update.key.pub").expect("Unable to open pubkey"); + let mut pubkey_file = File::open("./test/updater/fixture/good_signature/update.key.pub") + .expect("Unable to open pubkey"); let mut pubkey = String::new(); pubkey_file .read_to_string(&mut pubkey) @@ -993,7 +994,7 @@ mod test { let _m = mockito::mock("GET", "/archive.tar.gz") .with_status(200) .with_header("content-type", "application/octet-stream") - .with_body_from_file("./test/fixture/archives/archive.tar.gz") + .with_body_from_file("./test/updater/fixture/archives/archive.tar.gz") .create(); // sample mock for update file diff --git a/core/tauri-updater/src/error.rs b/core/tauri/src/updater/error.rs similarity index 92% rename from core/tauri-updater/src/error.rs rename to core/tauri/src/updater/error.rs index 28fc1455a66..fc1581f0f08 100644 --- a/core/tauri-updater/src/error.rs +++ b/core/tauri/src/updater/error.rs @@ -2,9 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -use thiserror::Error as DeriveError; +use thiserror::Error; -#[derive(Debug, DeriveError)] +/// All errors that can occur while running the updater. +#[derive(Debug, Error)] pub enum Error { /// IO Errors. #[error("`{0}`")] @@ -29,7 +30,7 @@ pub enum Error { Utf8(#[from] std::str::Utf8Error), /// Tauri utils, mainly extract and file move. #[error("Tauri API error: {0}")] - TauriApi(#[from] tauri_api::Error), + TauriApi(#[from] crate::api::Error), /// Network error. #[error("Network error: {0}")] Network(String), diff --git a/core/tauri/src/updater/mod.rs b/core/tauri/src/updater/mod.rs new file mode 100644 index 00000000000..3d249f60ccb --- /dev/null +++ b/core/tauri/src/updater/mod.rs @@ -0,0 +1,608 @@ +// Copyright 2019-2021 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +//! # Tauri Updater +//! --- +//! > ⚠️ This project is a working project. Expect breaking changes. +//! --- +//! +//! The updater is focused on making Tauri's application updates **as safe and transparent as updates to a website**. +//! +//! Instead of publishing a feed of versions from which your app must select, Tauri updates to the version your server tells it to. This allows you to intelligently update your clients based on the request you give to Tauri. +//! +//! The server can remotely drive behaviors like rolling back or phased rollouts. +//! +//! The update JSON Tauri requests should be dynamically generated based on criteria in the request, and whether an update is required. +//! +//! Tauri's installer is also designed to be fault-tolerant, and ensure that any updates installed are valid and safe. +//! +//! # Configuration +//! +//! Once you have your Tauri project ready, you need to configure the updater. +//! +//! Add this in tauri.conf.json +//! ```json +//! "updater": { +//! "active": true, +//! "endpoints": [ +//! "https://releases.myapp.com/{target}}/{current_version}}" +//! ], +//! "dialog": true, +//! "pubkey": "" +//! } +//! ``` +//! +//! The required keys are "active" and "endpoints", others are optional. +//! +//! "active" must be a boolean. By default, it's set to false. +//! +//! "endpoints" must be an array. The string `{{target}}` and `{{current_version}}` are automatically replaced in the URL allowing you determine [server-side](#update-server-json-format) if an update is available. If multiple endpoints are specified, the updater will fallback if a server is not responding within the pre-defined timeout. +//! +//! "dialog" if present must be a boolean. By default, it's set to true. If enabled, [events](#events) are turned-off as the updater will handle everything. If you need the custom events, you MUST turn off the built-in dialog. +//! +//! "pubkey" if present must be a valid public-key generated with Tauri cli. See [Signing updates](#signing-updates). +//! +//! ## Update Requests +//! +//! Tauri is indifferent to the request the client application provides for update checking. +//! +//! `Accept: application/json` is added to the request headers because Tauri is responsible for parsing the response. +//! +//! For the requirements imposed on the responses and the body format of an update, response see [Server Support](#server-support). +//! +//! Your update request must *at least* include a version identifier so that the server can determine whether an update for this specific version is required. +//! +//! It may also include other identifying criteria such as operating system version, to allow the server to deliver as fine-grained an update as you would like. +//! +//! How you include the version identifier or other criteria is specific to the server that you are requesting updates from. A common approach is to use query parameters, [Configuration](#configuration) shows an example of this. +//! +//! ## Built-in dialog +//! +//! By default, updater uses a built-in dialog API from Tauri. +//! +//! ![New Update](https://i.imgur.com/UMilB5A.png) +//! +//! The dialog release notes is represented by the update `note` provided by the [server](#server-support). +//! +//! If the user accepts, the download and install are initialized. The user will be then prompted to restart the application. +//! +//! ## Javascript API +//! +//! **Attention, you need to _disable built-in dialog_ in your [tauri configuration](#configuration), otherwise, events aren't emitted and the javascript API will NOT work.** +//! +//! +//! ```javascript +//! import { checkUpdate, installUpdate } from "@tauri-apps/api/updater"; +//! +//! try { +//! const {shouldUpdate, manifest} = await checkUpdate(); +//! +//! if (shouldUpdate) { +//! // display dialog +//! await installUpdate(); +//! // install complete, ask to restart +//! } +//! } catch(error) { +//! console.log(error); +//! } +//! ``` +//! +//! ## Events +//! +//! **Attention, you need to _disable built-in dialog_ in your [tauri configuration](#configuration), otherwise, events aren't emitted.** +//! +//! To know when an update is ready to be installed, you can subscribe to these events: +//! +//! ### Initialize updater and check if a new version is available +//! +//! #### If a new version is available, the event `tauri://update-available` is emitted. +//! +//! Event : `tauri://update` +//! +//! ### Rust +//! todo: update this example to compile and run +//! ```ignore +//! dispatcher.emit("tauri://update", None); +//! ``` +//! +//! ### Javascript +//! ```js +//! import { emit } from "@tauri-apps/api/event"; +//! emit("tauri://update"); +//! ``` +//! +//! ### Listen New Update Available +//! +//! Event : `tauri://update-available` +//! +//! Emitted data: +//! ```text +//! version Version announced by the server +//! date Date announced by the server +//! body Note announced by the server +//! ``` +//! +//! ### Rust +//! todo: update this example to compile and run +//! ```ignore +//! dispatcher.listen("tauri://update-available", move |msg| { +//! println("New version available: {:?}", msg); +//! }) +//! ``` +//! +//! ### Javascript +//! ```js +//! import { listen } from "@tauri-apps/api/event"; +//! listen("tauri://update-available", function (res) { +//! console.log("New version available: ", res); +//! }); +//! ``` +//! +//! ### Emit Install and Download +//! +//! You need to emit this event to initialize the download and listen to the [install progress](#listen-install-progress). +//! +//! Event : `tauri://update-install` +//! +//! ### Rust +//! todo: update this example to compile and run +//! ```ignore +//! dispatcher.emit("tauri://update-install", None); +//! ``` +//! +//! ### Javascript +//! ```js +//! import { emit } from "@tauri-apps/api/event"; +//! emit("tauri://update-install"); +//! ``` +//! +//! ### Listen Install Progress +//! +//! Event : `tauri://update-status` +//! +//! Emitted data: +//! ```text +//! status [ERROR/PENDING/DONE] +//! error String/null +//! ``` +//! +//! PENDING is emitted when the download is started and DONE when the install is complete. You can then ask to restart the application. +//! +//! ERROR is emitted when there is an error with the updater. We suggest to listen to this event even if the dialog is enabled. +//! +//! ### Rust +//! todo: update this example to compile and run +//! ```ignore +//! dispatcher.listen("tauri://update-status", move |msg| { +//! println("New status: {:?}", msg); +//! }) +//! ``` +//! +//! ### Javascript +//! ```js +//! import { listen } from "@tauri-apps/api/event"; +//! listen("tauri://update-status", function (res) { +//! console.log("New status: ", res); +//! }); +//! ``` +//! +//! # Server Support +//! +//! Your server should determine whether an update is required based on the [Update Request](#update-requests) your client issues. +//! +//! If an update is required your server should respond with a status code of [200 OK](http://tools.ietf.org/html/rfc2616#section-10.2.1) and include the [update JSON](#update-server-json-format) in the body. To save redundantly downloading the same version multiple times your server must not inform the client to update. +//! +//! If no update is required your server must respond with a status code of [204 No Content](http://tools.ietf.org/html/rfc2616#section-10.2.5). +//! +//! ## Update Server JSON Format +//! +//! When an update is available, Tauri expects the following schema in response to the update request provided: +//! +//! ```json +//! { +//! "url": "https://mycompany.example.com/myapp/releases/myrelease.tar.gz", +//! "version": "0.0.1", +//! "notes": "Theses are some release notes", +//! "pub_date": "2020-09-18T12:29:53+01:00", +//! "signature": "" +//! } +//! ``` +//! +//! The only required keys are "url" and "version", the others are optional. +//! +//! "pub_date" if present must be formatted according to ISO 8601. +//! +//! "signature" if present must be a valid signature generated with Tauri cli. See [Signing updates](#signing-updates). +//! +//! ## Update File JSON Format +//! +//! The alternate update technique uses a plain JSON file meaning you can store your update metadata on S3, gist, or another static file store. Tauri will check against the name/version field and if the version is smaller than the current one and the platform is available, the update will be triggered. The format of this file is detailed below: +//! +//! ```json +//! { +//! "name":"v1.0.0", +//! "notes":"Test version", +//! "pub_date":"2020-06-22T19:25:57Z", +//! "platforms": { +//! "darwin": { +//! "signature":"", +//! "url":"https://github.com/lemarier/tauri-test/releases/download/v1.0.0/app.app.tar.gz" +//! }, +//! "linux": { +//! "signature":"", +//! "url":"https://github.com/lemarier/tauri-test/releases/download/v1.0.0/app.AppImage.tar.gz" +//! }, +//! "win64": { +//! "signature":"", +//! "url":"https://github.com/lemarier/tauri-test/releases/download/v1.0.0/app.x64.msi.zip" +//! } +//! } +//! } +//! ``` +//! +//! +//! # Bundler (Artifacts) +//! +//! The Tauri bundler will automatically generate update artifacts if the updater is enabled in `tauri.conf.json` +//! +//! If the bundler can locate your private and pubkey, your update artifacts will be automatically signed. +//! +//! The signature can be found in the `sig` file. The signature can be uploaded to GitHub safely or made public as long as your private key is secure. +//! +//! You can see how it's [bundled with the CI](https://github.com/tauri-apps/tauri/blob/feature/new_updater/.github/workflows/artifacts-updater.yml#L44) and a [sample tauri.conf.json](https://github.com/tauri-apps/tauri/blob/feature/new_updater/examples/updater/src-tauri/tauri.conf.json#L52) +//! +//! ## macOS +//! +//! On MACOS we create a .tar.gz from the whole application. (.app) +//! +//! ```text +//! target/release/bundle +//! └── osx +//! └── app.app +//! └── app.app.tar.gz (update bundle) +//! └── app.app.tar.gz.sig (if signature enabled) +//! ``` +//! +//! ## Windows +//! +//! On Windows we create a .zip from the MSI, when downloaded and validated, we run the MSI install. +//! +//! ```text +//! target/release +//! └── app.x64.msi +//! └── app.x64.msi.zip (update bundle) +//! └── app.x64.msi.zip.sig (if signature enabled) +//! ``` +//! +//! ## Linux +//! +//! On Linux, we create a .tar.gz from the AppImage. +//! +//! ```text +//! target/release/bundle +//! └── appimage +//! └── app.AppImage +//! └── app.AppImage.tar.gz (update bundle) +//! └── app.AppImage.tar.gz.sig (if signature enabled) +//! ``` +//! +//! # Signing updates +//! +//! We offer a built-in signature to ensure your update is safe to be installed. +//! +//! To sign your updates, you need two things. +//! +//! The *Public-key* (pubkey) should be added inside your `tauri.conf.json` to validate the update archive before installing. +//! +//! The *Private key* (privkey) is used to sign your update and should NEVER be shared with anyone. Also, if you lost this key, you'll NOT be able to publish a new update to the current user base (if pubkey is set in tauri.conf.json). It's important to save it at a safe place and you can always access it. +//! +//! To generate your keys you need to use the Tauri cli. +//! +//! ```bash +//! tauri sign -g -w ~/.tauri/myapp.key +//! ``` +//! +//! You have multiple options available +//! ```bash +//! Tauri updates signer. +//! +//! USAGE: +//! tauri sign [FLAGS] [OPTIONS] +//! +//! FLAGS: +//! --force Overwrite private key even if it exists on the specified path +//! -g, --generate Generate keypair to sign files +//! -h, --help Prints help information +//! --no-password Set empty password for your private key +//! -V, --version Prints version information +//! +//! OPTIONS: +//! -p, --password Set private key password when signing +//! -k, --private-key Load the private key from a string +//! -f, --private-key-path Load the private key from a file +//! --sign-file Sign the specified file +//! -w, --write-keys Write private key to a file +//! ``` +//! +//! *** +//! +//! Environment variables used to sign with `tauri-bundler`: +//! If they are set, and `tauri.conf.json` expose the public key, the bundler will automatically generate and sign the updater artifacts. +//! +//! `TAURI_PRIVATE_KEY` Path or String of your private key +//! +//! `TAURI_KEY_PASSWORD` Your private key password (optional) + +mod core; +mod error; + +pub use self::error::Error; + +use crate::{ + api::{ + app::restart_application, + config::UpdaterConfig, + dialog::{ask, AskResponse}, + }, + Params, Window, +}; + +/// Check for new updates +pub const EVENT_CHECK_UPDATE: &str = "tauri://update"; +/// New update available +pub const EVENT_UPDATE_AVAILABLE: &str = "tauri://update-available"; +/// Used to initialize an update *should run check-update first (once you received the update available event)* +pub const EVENT_INSTALL_UPDATE: &str = "tauri://update-install"; +/// Send updater status or error even if dialog is enabled, you should +/// always listen for this event. It'll send you the install progress +/// and any error triggered during update check and install +pub const EVENT_STATUS_UPDATE: &str = "tauri://update-status"; +/// this is the status emitted when the download start +pub const EVENT_STATUS_PENDING: &str = "PENDING"; +/// When you got this status, something went wrong +/// you can find the error message inside the `error` field. +pub const EVENT_STATUS_ERROR: &str = "ERROR"; +/// When you receive this status, you should ask the user to restart +pub const EVENT_STATUS_SUCCESS: &str = "DONE"; +/// When you receive this status, this is because the application is running last version +pub const EVENT_STATUS_UPTODATE: &str = "UPTODATE"; + +#[derive(Clone, serde::Serialize)] +struct StatusEvent { + status: String, + error: Option, +} + +#[derive(Clone, serde::Serialize)] +struct UpdateManifest { + version: String, + date: String, + body: String, +} + +/// Check if there is any new update with builtin dialog. +pub(crate) async fn check_update_with_dialog( + updater_config: UpdaterConfig, + package_info: crate::api::PackageInfo, + window: Window, +) { + if !updater_config.active || updater_config.endpoints.is_none() { + return; + } + + // prepare our endpoints + let endpoints = updater_config + .endpoints + .as_ref() + // this expect can lead to a panic + // we should have a better handling here + .expect("Something wrong with endpoints") + .clone(); + + // check updates + match self::core::builder() + .urls(&endpoints[..]) + .current_version(package_info.version) + .build() + .await + { + Ok(updater) => { + let pubkey = updater_config.pubkey.clone(); + + // if dialog enabled only + if updater.should_update && updater_config.dialog { + let body = updater.body.clone().unwrap_or_else(|| String::from("")); + let dialog = + prompt_for_install(&updater.clone(), package_info.name, &body.clone(), pubkey).await; + + if dialog.is_err() { + send_status_update( + window.clone(), + EVENT_STATUS_ERROR, + Some(dialog.err().unwrap().to_string()), + ); + + return; + } + } + } + Err(e) => { + send_status_update(window.clone(), EVENT_STATUS_ERROR, Some(e.to_string())); + } + } +} + +/// Experimental listener +/// This function should be run on the main thread once. +pub(crate) fn listener( + updater_config: UpdaterConfig, + package_info: crate::api::PackageInfo, + window: &Window, +) { + let isolated_window = window.clone(); + + // Wait to receive the event `"tauri://update"` + window.listen( + EVENT_CHECK_UPDATE + .parse() + .unwrap_or_else(|_| panic!("bad label")), + move |_msg| { + let window = isolated_window.clone(); + let package_info = package_info.clone(); + + // prepare our endpoints + let endpoints = updater_config + .endpoints + .as_ref() + .expect("Something wrong with endpoints") + .clone(); + + let pubkey = updater_config.pubkey.clone(); + + // check updates + crate::async_runtime::spawn(async move { + let window = window.clone(); + let window_isolation = window.clone(); + let pubkey = pubkey.clone(); + + match self::core::builder() + .urls(&endpoints[..]) + .current_version(package_info.version) + .build() + .await + { + Ok(updater) => { + // send notification if we need to update + if updater.should_update { + let body = updater.body.clone().unwrap_or_else(|| String::from("")); + + // Emit `tauri://update-available` + let _ = window.emit( + &EVENT_UPDATE_AVAILABLE + .parse() + .unwrap_or_else(|_| panic!("bad label")), + Some(UpdateManifest { + body, + date: updater.date.clone(), + version: updater.version.clone(), + }), + ); + + // Listen for `tauri://update-install` + window.once( + EVENT_INSTALL_UPDATE + .parse() + .unwrap_or_else(|_| panic!("bad label")), + move |_msg| { + let window = window_isolation.clone(); + let updater = updater.clone(); + let pubkey = pubkey.clone(); + + // Start installation + crate::async_runtime::spawn(async move { + // emit {"status": "PENDING"} + send_status_update(window.clone(), EVENT_STATUS_PENDING, None); + + // Launch updater download process + // macOS we display the `Ready to restart dialog` asking to restart + // Windows is closing the current App and launch the downloaded MSI when ready (the process stop here) + // Linux we replace the AppImage by launching a new install, it start a new AppImage instance, so we're closing the previous. (the process stop here) + let update_result = updater.clone().download_and_install(pubkey.clone()).await; + + if update_result.is_err() { + // emit {"status": "ERROR", "error": "The error message"} + send_status_update( + window.clone(), + EVENT_STATUS_ERROR, + Some(update_result.err().unwrap().to_string()), + ); + } else { + // emit {"status": "DONE"} + send_status_update(window.clone(), EVENT_STATUS_SUCCESS, None); + } + }) + }, + ); + } else { + send_status_update(window.clone(), EVENT_STATUS_UPTODATE, None); + } + } + Err(e) => { + send_status_update(window.clone(), EVENT_STATUS_ERROR, Some(e.to_string())); + } + } + }) + }, + ); +} + +// Send a status update via `tauri://update-status` event. +fn send_status_update(window: Window, status: &str, error: Option) { + let _ = window.emit_internal( + EVENT_STATUS_UPDATE.to_string(), + Some(StatusEvent { + error, + status: String::from(status), + }), + ); +} + +// Prompt a dialog asking if the user want to install the new version +// Maybe we should add an option to customize it in future versions. +async fn prompt_for_install( + updater: &self::core::Update, + app_name: &str, + body: &str, + pubkey: Option, +) -> crate::Result<()> { + // remove single & double quote + let escaped_body = body.replace(&['\"', '\''][..], ""); + + // todo(lemarier): We should review this and make sure we have + // something more conventional. + let should_install = ask( + format!(r#"A new version of {} is available! "#, app_name), + format!( + r#"{} {} is now available -- you have {}. + +Would you like to install it now? + +Release Notes: +{}"#, + app_name, updater.version, updater.current_version, escaped_body, + ), + ); + + match should_install { + AskResponse::Yes => { + // Launch updater download process + // macOS we display the `Ready to restart dialog` asking to restart + // Windows is closing the current App and launch the downloaded MSI when ready (the process stop here) + // Linux we replace the AppImage by launching a new install, it start a new AppImage instance, so we're closing the previous. (the process stop here) + updater.download_and_install(pubkey.clone()).await?; + + // Ask user if we need to restart the application + let should_exit = ask( + "Ready to Restart", + "The installation was successful, do you want to restart the application now?", + ); + match should_exit { + AskResponse::Yes => { + restart_application(None); + // safely exit even if the process + // should be killed + return Ok(()); + } + AskResponse::No => { + // Do nothing -- maybe we can emit some event here + } + } + } + AskResponse::No => { + // Do nothing -- maybe we can emit some event here + } + } + + Ok(()) +} diff --git a/core/tauri-api/test/test.txt b/core/tauri/test/api/test.txt similarity index 100% rename from core/tauri-api/test/test.txt rename to core/tauri/test/api/test.txt diff --git a/core/tauri-api/test/test_binary b/core/tauri/test/api/test_binary similarity index 100% rename from core/tauri-api/test/test_binary rename to core/tauri/test/api/test_binary diff --git a/core/tauri-updater/test/fixture/archives/archive.tar.gz b/core/tauri/test/updater/fixture/archives/archive.tar.gz similarity index 100% rename from core/tauri-updater/test/fixture/archives/archive.tar.gz rename to core/tauri/test/updater/fixture/archives/archive.tar.gz diff --git a/core/tauri-updater/test/fixture/archives/archive.tar.gz.badsig b/core/tauri/test/updater/fixture/archives/archive.tar.gz.badsig similarity index 100% rename from core/tauri-updater/test/fixture/archives/archive.tar.gz.badsig rename to core/tauri/test/updater/fixture/archives/archive.tar.gz.badsig diff --git a/core/tauri-updater/test/fixture/archives/archive.tar.gz.sig b/core/tauri/test/updater/fixture/archives/archive.tar.gz.sig similarity index 100% rename from core/tauri-updater/test/fixture/archives/archive.tar.gz.sig rename to core/tauri/test/updater/fixture/archives/archive.tar.gz.sig diff --git a/core/tauri-updater/test/fixture/archives/archive.zip b/core/tauri/test/updater/fixture/archives/archive.zip similarity index 100% rename from core/tauri-updater/test/fixture/archives/archive.zip rename to core/tauri/test/updater/fixture/archives/archive.zip diff --git a/core/tauri-updater/test/fixture/archives/archive.zip.sig b/core/tauri/test/updater/fixture/archives/archive.zip.sig similarity index 100% rename from core/tauri-updater/test/fixture/archives/archive.zip.sig rename to core/tauri/test/updater/fixture/archives/archive.zip.sig diff --git a/core/tauri-updater/test/fixture/bad_signature/update.key b/core/tauri/test/updater/fixture/bad_signature/update.key similarity index 100% rename from core/tauri-updater/test/fixture/bad_signature/update.key rename to core/tauri/test/updater/fixture/bad_signature/update.key diff --git a/core/tauri-updater/test/fixture/bad_signature/update.key.pub b/core/tauri/test/updater/fixture/bad_signature/update.key.pub similarity index 100% rename from core/tauri-updater/test/fixture/bad_signature/update.key.pub rename to core/tauri/test/updater/fixture/bad_signature/update.key.pub diff --git a/core/tauri-updater/test/fixture/good_signature/update.key b/core/tauri/test/updater/fixture/good_signature/update.key similarity index 100% rename from core/tauri-updater/test/fixture/good_signature/update.key rename to core/tauri/test/updater/fixture/good_signature/update.key diff --git a/core/tauri-updater/test/fixture/good_signature/update.key.pub b/core/tauri/test/updater/fixture/good_signature/update.key.pub similarity index 100% rename from core/tauri-updater/test/fixture/good_signature/update.key.pub rename to core/tauri/test/updater/fixture/good_signature/update.key.pub diff --git a/examples/updater/src-tauri/Cargo.lock b/examples/updater/src-tauri/Cargo.lock deleted file mode 100644 index 636f3d7fd05..00000000000 --- a/examples/updater/src-tauri/Cargo.lock +++ /dev/null @@ -1,3791 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "ab_glyph_rasterizer" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9fe5e32de01730eb1f6b7f5b51c17e03e2325bf40a74f754f04f130043affff" - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "adler32" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" - -[[package]] -name = "aho-corasick" -version = "0.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" -dependencies = [ - "memchr", -] - -[[package]] -name = "andrew" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c4afb09dd642feec8408e33f92f3ffc4052946f6b20f32fb99c1f58cd4fa7cf" -dependencies = [ - "bitflags 1.2.1", - "rusttype", - "walkdir", - "xdg", - "xml-rs 0.8.3", -] - -[[package]] -name = "anyhow" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1" - -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" - -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - -[[package]] -name = "async-io" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9315f8f07556761c3e48fec2e6b276004acf426e6dc068b2c2251854d65ee0fd" -dependencies = [ - "concurrent-queue", - "fastrand", - "futures-lite", - "libc", - "log", - "nb-connect", - "once_cell", - "parking", - "polling", - "vec-arena", - "waker-fn", - "winapi 0.3.9", -] - -[[package]] -name = "async-trait" -version = "0.1.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d" -dependencies = [ - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "atk" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812b4911e210bd51b24596244523c856ca749e6223c50a7fbbba3f89ee37c426" -dependencies = [ - "atk-sys", - "bitflags 1.2.1", - "glib", - "glib-sys", - "gobject-sys", - "libc", -] - -[[package]] -name = "atk-sys" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f530e4af131d94cc4fa15c5c9d0348f0ef28bac64ba660b6b2a1cf2605dedfce" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "autocfg" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" - -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - -[[package]] -name = "bitflags" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" - -[[package]] -name = "bitflags" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" - -[[package]] -name = "blake2b_simd" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" -dependencies = [ - "arrayref", - "arrayvec", - "constant_time_eq", -] - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "bstr" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d" -dependencies = [ - "memchr", -] - -[[package]] -name = "bumpalo" -version = "3.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe" - -[[package]] -name = "bytemuck" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bed57e2090563b83ba8f83366628ce535a7584c9afa4c9fc0612a03925c6df58" - -[[package]] -name = "byteorder" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" - -[[package]] -name = "bytes" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" -dependencies = [ - "serde", -] - -[[package]] -name = "bzip2" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b" -dependencies = [ - "bzip2-sys", - "libc", -] - -[[package]] -name = "bzip2-sys" -version = "0.1.10+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17fa3d1ac1ca21c5c4e36a97f3c3eb25084576f6fc47bf0139c1123434216c6c" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - -[[package]] -name = "cache-padded" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba" - -[[package]] -name = "cairo-rs" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5c0f2e047e8ca53d0ff249c54ae047931d7a6ebe05d00af73e0ffeb6e34bdb8" -dependencies = [ - "bitflags 1.2.1", - "cairo-sys-rs", - "glib", - "glib-sys", - "gobject-sys", - "libc", - "thiserror", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ed2639b9ad5f1d6efa76de95558e11339e7318426d84ac4890b86c03e828ca7" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "calloop" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b036167e76041694579972c28cf4877b4f92da222560ddb49008937b6a6727c" -dependencies = [ - "log", - "nix 0.18.0", -] - -[[package]] -name = "cc" -version = "1.0.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd" -dependencies = [ - "jobserver", -] - -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - -[[package]] -name = "cfg-if" -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 = "chrono" -version = "0.4.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" -dependencies = [ - "libc", - "num-integer", - "num-traits", - "time", - "winapi 0.3.9", -] - -[[package]] -name = "cocoa" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" -dependencies = [ - "bitflags 1.2.1", - "block", - "cocoa-foundation", - "core-foundation 0.9.1", - "core-graphics 0.22.2", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" -dependencies = [ - "bitflags 1.2.1", - "block", - "core-foundation 0.9.1", - "core-graphics-types", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - -[[package]] -name = "com" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a30a2b2a013da986dc5cc3eda3d19c0d59d53f835be1b2356eb8d00f000c793" -dependencies = [ - "com_macros", -] - -[[package]] -name = "com_macros" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7606b05842fea68ddcc89e8053b8860ebcb2a0ba8d6abfe3a148e5d5a8d3f0c1" -dependencies = [ - "com_macros_support", - "proc-macro2", - "syn 1.0.60", -] - -[[package]] -name = "com_macros_support" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97e9a6d20f4ac8830e309a455d7e9416e65c6af5a97c88c55fbb4c2012e107da" -dependencies = [ - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "concurrent-queue" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" -dependencies = [ - "cache-padded", -] - -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - -[[package]] -name = "core-foundation" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" -dependencies = [ - "core-foundation-sys 0.7.0", - "libc", -] - -[[package]] -name = "core-foundation" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" -dependencies = [ - "core-foundation-sys 0.8.2", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" - -[[package]] -name = "core-foundation-sys" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" - -[[package]] -name = "core-graphics" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" -dependencies = [ - "bitflags 1.2.1", - "core-foundation 0.7.0", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics" -version = "0.22.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "269f35f69b542b80e736a20a89a05215c0ce80c2c03c514abb2e318b78379d86" -dependencies = [ - "bitflags 1.2.1", - "core-foundation 0.9.1", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" -dependencies = [ - "bitflags 1.2.1", - "core-foundation 0.9.1", - "foreign-types", - "libc", -] - -[[package]] -name = "core-video-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" -dependencies = [ - "cfg-if 0.1.10", - "core-foundation-sys 0.7.0", - "core-graphics 0.19.2", - "libc", - "objc", -] - -[[package]] -name = "crc32fast" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2584f639eb95fea8c798496315b297cf81b9b58b6d30ab066a75455333cf4b12" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", - "lazy_static", - "memoffset", - "scopeguard", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49" -dependencies = [ - "autocfg", - "cfg-if 1.0.0", - "lazy_static", -] - -[[package]] -name = "darling" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote 1.0.9", - "strsim", - "syn 1.0.60", -] - -[[package]] -name = "darling_macro" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" -dependencies = [ - "darling_core", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "deflate" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" -dependencies = [ - "adler32", - "byteorder", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "dirs" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" -dependencies = [ - "libc", - "redox_users 0.3.5", - "winapi 0.3.9", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if 1.0.0", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users 0.4.0", - "winapi 0.3.9", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dlib" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b11f15d1e3268f140f68d390637d5e76d849782d971ae7063e0da69fe9709a76" -dependencies = [ - "libloading 0.6.7", -] - -[[package]] -name = "dlib" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" -dependencies = [ - "libloading 0.7.0", -] - -[[package]] -name = "doc-comment" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "either" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" - -[[package]] -name = "encoding_rs" -version = "0.8.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80df024fbc5ac80f87dfef0d9f5209a252f2a497f7f42944cff24d8253cac065" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "enumflags2" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c8d82922337cd23a15f88b70d8e4ef5f11da38dd7cdb55e84dd5de99695da0" -dependencies = [ - "enumflags2_derive", - "serde", -] - -[[package]] -name = "enumflags2_derive" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce" -dependencies = [ - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "fastrand" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca5faf057445ce5c9d4329e382b2ce7ca38550ef3b73a5348362d5f24e0c7fe3" -dependencies = [ - "instant", -] - -[[package]] -name = "filetime" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d34cfa13a63ae058bfa601fe9e313bbdb3746427c1459185464ce0fcf62e1e8" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "redox_syscall 0.2.5", - "winapi 0.3.9", -] - -[[package]] -name = "flate2" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42" -dependencies = [ - "cfg-if 0.1.10", - "crc32fast", - "libc", - "miniz_oxide 0.3.7", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" -dependencies = [ - "matches", - "percent-encoding", -] - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -dependencies = [ - "bitflags 1.2.1", - "fuchsia-zircon-sys", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" - -[[package]] -name = "futures" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f55667319111d593ba876406af7c409c0ebb44dc4be6132a783ccf163ea14c1" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c2dd2df839b57db9ab69c2c9d8f3e8c81984781937fe2807dc6dcf3b2ad2939" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15496a72fabf0e62bdc3df11a59a3787429221dd0710ba8ef163d6f7a9112c94" - -[[package]] -name = "futures-executor" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891a4b7b96d84d5940084b2a37632dd65deeae662c114ceaa2c879629c9c0ad1" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71c2c65c57704c32f5241c1223167c2c3294fd34ac020c807ddbe6db287ba59" - -[[package]] -name = "futures-lite" -version = "1.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4481d0cd0de1d204a4fa55e7d45f07b1d958abcb06714b3446438e2eff695fb" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-macro" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea405816a5139fb39af82c2beb921d52143f556038378d6db21183a5c37fbfb7" -dependencies = [ - "proc-macro-hack", - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "futures-sink" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85754d98985841b7d4f5e8e6fbfa4a4ac847916893ec511a2917ccd8525b8bb3" - -[[package]] -name = "futures-task" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa189ef211c15ee602667a6fcfe1c1fd9e07d42250d2156382820fba33c9df80" - -[[package]] -name = "futures-util" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1812c7ab8aedf8d6f2701a43e1243acdbcc2b36ab26e2ad421eb99ac963d96d1" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "proc-macro-hack", - "proc-macro-nested", - "slab", -] - -[[package]] -name = "gdk" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db00839b2a68a7a10af3fa28dfb3febaba3a20c3a9ac2425a33b7df1f84a6b7d" -dependencies = [ - "bitflags 1.2.1", - "cairo-rs", - "cairo-sys-rs", - "gdk-pixbuf", - "gdk-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "libc", - "pango", -] - -[[package]] -name = "gdk-pixbuf" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6dae3cb99dd49b758b88f0132f8d401108e63ae8edd45f432d42cdff99998a" -dependencies = [ - "gdk-pixbuf-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "libc", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bfe468a7f43e97b8d193a762b6c5cf67a7d36cacbc0b9291dbcae24bfea1e8f" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gdk-sys" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a9653cfc500fd268015b1ac055ddbc3df7a5c9ea3f4ccef147b3957bd140d69" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi 0.10.2+wasi-snapshot-preview1", -] - -[[package]] -name = "gif" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02efba560f227847cb41463a7395c514d127d4f74fff12ef0137fff1b84b96c4" -dependencies = [ - "color_quant", - "weezl", -] - -[[package]] -name = "gio" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb60242bfff700772dae5d9e3a1f7aa2e4ebccf18b89662a16acb2822568561" -dependencies = [ - "bitflags 1.2.1", - "futures", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "libc", - "once_cell", - "thiserror", -] - -[[package]] -name = "gio-sys" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e24fb752f8f5d2cf6bbc2c606fd2bc989c81c5e2fe321ab974d54f8b6344eac" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", - "winapi 0.3.9", -] - -[[package]] -name = "glib" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c685013b7515e668f1b57a165b009d4d28cb139a8a989bbd699c10dad29d0c5" -dependencies = [ - "bitflags 1.2.1", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "once_cell", -] - -[[package]] -name = "glib-macros" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41486a26d1366a8032b160b59065a59fb528530a46a49f627e7048fb8c064039" -dependencies = [ - "anyhow", - "heck", - "itertools", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "glib-sys" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e9b997a66e9a23d073f2b1abb4dbfc3925e0b8952f67efd8d9b6e168e4cdc1" -dependencies = [ - "libc", - "system-deps", -] - -[[package]] -name = "globset" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c152169ef1e421390738366d2f796655fec62621dabbd0fd476f905934061e4a" -dependencies = [ - "aho-corasick", - "bstr", - "fnv", - "log", - "regex", -] - -[[package]] -name = "gobject-sys" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "952133b60c318a62bf82ee75b93acc7e84028a093e06b9e27981c2b6fe68218c" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gtk" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f022f2054072b3af07666341984562c8e626a79daa8be27b955d12d06a5ad6a" -dependencies = [ - "atk", - "bitflags 1.2.1", - "cairo-rs", - "cairo-sys-rs", - "cc", - "gdk", - "gdk-pixbuf", - "gdk-pixbuf-sys", - "gdk-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "gtk-sys", - "libc", - "once_cell", - "pango", - "pango-sys", - "pkg-config", -] - -[[package]] -name = "gtk-sys" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89acda6f084863307d948ba64a4b1ef674e8527dddab147ee4cdcc194c880457" -dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "system-deps", -] - -[[package]] -name = "h2" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d832b01df74254fe364568d6ddc294443f61cbec82816b60904303af87efae78" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" - -[[package]] -name = "heck" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "hermit-abi" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" -dependencies = [ - "libc", -] - -[[package]] -name = "http" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2861bd27ee074e5ee891e8b539837a9430012e249d7f0ca2d795650f579c1994" -dependencies = [ - "bytes", - "http", -] - -[[package]] -name = "httparse" -version = "1.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "615caabe2c3160b313d52ccc905335f4ed5f10881dd63dc5699d47e90be85691" - -[[package]] -name = "httpdate" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47" - -[[package]] -name = "hyper" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8e946c2b1349055e0b72ae281b238baf1a3ea7307c7e9f9d64673bdd9c26ac7" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89829a5d69c23d348314a7ac337fe39173b61149a9864deabd260983aed48c21" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "ignore" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b287fb45c60bb826a0dc68ff08742b9d88a2fea13d6e0c286b3172065aaf878c" -dependencies = [ - "crossbeam-utils", - "globset", - "lazy_static", - "log", - "memchr", - "regex", - "same-file", - "thread_local", - "walkdir", - "winapi-util", -] - -[[package]] -name = "image" -version = "0.23.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "293f07a1875fa7e9c5897b51aa68b2d8ed8271b87e1a44cb64b9c3d98aabbc0d" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "gif", - "jpeg-decoder", - "num-iter", - "num-rational", - "num-traits", - "png", - "scoped_threadpool", - "tiff", -] - -[[package]] -name = "indexmap" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b" -dependencies = [ - "autocfg", - "hashbrown", -] - -[[package]] -name = "infer" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ad0755c42f65a1374dcd0aae07e03dfefc911eceb3f409d2b4a888189447e6" - -[[package]] -name = "instant" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "iovec" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -dependencies = [ - "libc", -] - -[[package]] -name = "ipnet" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47be2f14c678be2fdcab04ab1171db51b2762ce6f0a8ee87c8dd4a04ed216135" - -[[package]] -name = "itertools" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" - -[[package]] -name = "javascriptcore-rs" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ecc697657edc9cd3d85d5ec6941f74cc9bb2ae84bec320f55c9397c5a8d8722" -dependencies = [ - "glib", - "javascriptcore-rs-sys", -] - -[[package]] -name = "javascriptcore-rs-sys" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f46ada8a08dcd75a10afae872fbfb51275df4a8ae0d46b8cc7c708f08dd2998" -dependencies = [ - "libc", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "jobserver" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" -dependencies = [ - "libc", -] - -[[package]] -name = "jpeg-decoder" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" -dependencies = [ - "rayon", -] - -[[package]] -name = "js-sys" -version = "0.3.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc9f84f9b115ce7843d60706df1422a916680bfdfcbdb0447c5614ff9d7e4d78" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - -[[package]] -name = "libc" -version = "0.2.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c" - -[[package]] -name = "libloading" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" -dependencies = [ - "cfg-if 1.0.0", - "winapi 0.3.9", -] - -[[package]] -name = "libloading" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a" -dependencies = [ - "cfg-if 1.0.0", - "winapi 0.3.9", -] - -[[package]] -name = "lock_api" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "mac-notification-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb6b71a9a89cd38b395d994214297447e8e63b1ba5708a9a2b0b1048ceda76" -dependencies = [ - "cc", - "chrono", - "dirs", - "objc-foundation", -] - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "matches" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" - -[[package]] -name = "maybe-uninit" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" - -[[package]] -name = "memchr" -version = "2.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" - -[[package]] -name = "memmap2" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b70ca2a6103ac8b665dc150b142ef0e4e89df640c9e6cf295d189c3caebe5a" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - -[[package]] -name = "mime_guess" -version = "2.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "minisign-verify" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db0507fe8e3c68cd62961cf9f87f6c2b21d884d3515a7150a4a3fa9d014e5c12" - -[[package]] -name = "miniz_oxide" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" -dependencies = [ - "adler32", -] - -[[package]] -name = "miniz_oxide" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" -dependencies = [ - "adler", - "autocfg", -] - -[[package]] -name = "mio" -version = "0.6.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" -dependencies = [ - "cfg-if 0.1.10", - "fuchsia-zircon", - "fuchsia-zircon-sys", - "iovec", - "kernel32-sys", - "libc", - "log", - "miow 0.2.2", - "net2", - "slab", - "winapi 0.2.8", -] - -[[package]] -name = "mio" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5dede4e2065b3842b8b0af444119f3aa331cc7cc2dd20388bfb0f5d5a38823a" -dependencies = [ - "libc", - "log", - "miow 0.3.6", - "ntapi", - "winapi 0.3.9", -] - -[[package]] -name = "mio-extras" -version = "2.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" -dependencies = [ - "lazycell", - "log", - "mio 0.6.23", - "slab", -] - -[[package]] -name = "miow" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" -dependencies = [ - "kernel32-sys", - "net2", - "winapi 0.2.8", - "ws2_32-sys", -] - -[[package]] -name = "miow" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897" -dependencies = [ - "socket2", - "winapi 0.3.9", -] - -[[package]] -name = "native-tls" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8d96b2e1c8da3957d58100b09f102c6d9cfdfced01b7ec5a8974044bb09dbd4" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "nb-connect" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670361df1bc2399ee1ff50406a0d422587dd3bb0da596e1978fe8e05dabddf4f" -dependencies = [ - "libc", - "socket2", -] - -[[package]] -name = "ndk" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb167c1febed0a496639034d0c76b3b74263636045db5489eee52143c246e73" -dependencies = [ - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk-glue" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf399b8b7a39c6fb153c4ec32c72fd5fe789df24a647f229c239aa7adb15241" -dependencies = [ - "lazy_static", - "libc", - "log", - "ndk", - "ndk-macro", - "ndk-sys", -] - -[[package]] -name = "ndk-macro" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" -dependencies = [ - "darling", - "proc-macro-crate", - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "ndk-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c44922cb3dbb1c70b5e5f443d63b64363a898564d739ba5198e3a9138442868d" - -[[package]] -name = "net2" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "nix" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e4785f2c3b7589a0d0c1dd60285e1188adac4006e8abd6dd578e1567027363" -dependencies = [ - "bitflags 1.2.1", - "cc", - "cfg-if 0.1.10", - "libc", - "void", -] - -[[package]] -name = "nix" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83450fe6a6142ddd95fb064b746083fc4ef1705fe81f64a64e1d4b39f54a1055" -dependencies = [ - "bitflags 1.2.1", - "cc", - "cfg-if 0.1.10", - "libc", -] - -[[package]] -name = "nix" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a" -dependencies = [ - "bitflags 1.2.1", - "cc", - "cfg-if 1.0.0", - "libc", -] - -[[package]] -name = "nom" -version = "6.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2" -dependencies = [ - "memchr", - "version_check", -] - -[[package]] -name = "notify-rust" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00c16afe17474a42a59062f3409a63160c63d41985b25e9e613400685b839cb6" -dependencies = [ - "mac-notification-sys", - "serde", - "winrt-notification", - "zbus", - "zvariant", - "zvariant_derive", -] - -[[package]] -name = "ntapi" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" -dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "num-integer" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca565a7df06f3d4b485494f25ba05da1435950f4dc263440eda7a6fa9b8e36e4" -dependencies = [ - "derivative", - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", -] - -[[package]] -name = "objc-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" -dependencies = [ - "block", - "objc", - "objc_id", -] - -[[package]] -name = "objc_id" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -dependencies = [ - "objc", -] - -[[package]] -name = "once_cell" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3" - -[[package]] -name = "open" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e9f1bdf15cd1f5a00cc9002a733a6ee6d0ff562491852d59652471c4a389f7" -dependencies = [ - "which", - "winapi 0.3.9", -] - -[[package]] -name = "openssl" -version = "0.10.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038d43985d1ddca7a9900630d8cd031b56e4794eecc2e9ea39dd17aa04399a70" -dependencies = [ - "bitflags 1.2.1", - "cfg-if 1.0.0", - "foreign-types", - "lazy_static", - "libc", - "openssl-sys", -] - -[[package]] -name = "openssl-probe" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" - -[[package]] -name = "openssl-sys" -version = "0.9.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "921fc71883267538946025deffb622905ecad223c28efbfdef9bb59a0175f3e6" -dependencies = [ - "autocfg", - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "owned_ttf_parser" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f923fb806c46266c02ab4a5b239735c144bdeda724a50ed058e5226f594cde3" -dependencies = [ - "ttf-parser", -] - -[[package]] -name = "pango" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9937068580bebd8ced19975938573803273ccbcbd598c58d4906efd4ac87c438" -dependencies = [ - "bitflags 1.2.1", - "glib", - "glib-sys", - "gobject-sys", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d2650c8b62d116c020abd0cea26a4ed96526afda89b1c4ea567131fdefc890" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "parking" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" - -[[package]] -name = "parking_lot" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018" -dependencies = [ - "cfg-if 1.0.0", - "instant", - "libc", - "redox_syscall 0.2.5", - "smallvec", - "winapi 0.3.9", -] - -[[package]] -name = "percent-encoding" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" - -[[package]] -name = "pest" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" -dependencies = [ - "ucd-trie", -] - -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_macros", - "phf_shared", - "proc-macro-hack", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared", - "rand 0.7.3", -] - -[[package]] -name = "phf_macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" -dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro-hack", - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96fa8ebb90271c4477f144354485b8068bd8f6b78b428b01ba892ca26caf0b63" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "758669ae3558c6f74bd2a18b41f7ac0b5a195aea6639d6a9b5e5d1ad5ba24c0b" -dependencies = [ - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" - -[[package]] -name = "png" -version = "0.16.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6" -dependencies = [ - "bitflags 1.2.1", - "crc32fast", - "deflate", - "miniz_oxide 0.3.7", -] - -[[package]] -name = "polling" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a7bc6b2a29e632e45451c941832803a18cce6781db04de8a04696cdca8bde4" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "log", - "wepoll-sys", - "winapi 0.3.9", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" - -[[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" -dependencies = [ - "toml", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote 1.0.9", - "version_check", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - -[[package]] -name = "proc-macro-nested" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" - -[[package]] -name = "proc-macro2" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" -dependencies = [ - "unicode-xid 0.2.1", -] - -[[package]] -name = "quote" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" - -[[package]] -name = "quote" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc 0.2.0", - "rand_pcg", -] - -[[package]] -name = "rand" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e" -dependencies = [ - "libc", - "rand_chacha 0.3.0", - "rand_core 0.6.2", - "rand_hc 0.3.0", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.2", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7" -dependencies = [ - "getrandom 0.2.2", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_hc" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" -dependencies = [ - "rand_core 0.6.2", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "raw-window-handle" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a441a7a6c80ad6473bd4b74ec1c9a4c951794285bf941c2126f607c72e48211" -dependencies = [ - "libc", -] - -[[package]] -name = "rayon" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674" -dependencies = [ - "autocfg", - "crossbeam-deque", - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "lazy_static", - "num_cpus", -] - -[[package]] -name = "redox_syscall" -version = "0.1.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" - -[[package]] -name = "redox_syscall" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9" -dependencies = [ - "bitflags 1.2.1", -] - -[[package]] -name = "redox_users" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" -dependencies = [ - "getrandom 0.1.16", - "redox_syscall 0.1.57", - "rust-argon2", -] - -[[package]] -name = "redox_users" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" -dependencies = [ - "getrandom 0.2.2", - "redox_syscall 0.2.5", -] - -[[package]] -name = "regex" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", - "thread_local", -] - -[[package]] -name = "regex-syntax" -version = "0.6.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "reqwest" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0460542b551950620a3648c6aa23318ac6b3cd779114bd873209e6e8b5eb1c34" -dependencies = [ - "base64", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "http", - "http-body", - "hyper", - "hyper-tls", - "ipnet", - "js-sys", - "lazy_static", - "log", - "mime", - "mime_guess", - "native-tls", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-native-tls", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - -[[package]] -name = "rfd" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3de7c6d5eab0f6b212d1b5a376639d91061bbfbdc2d7c7c5214063bd6ce99581" -dependencies = [ - "block", - "cocoa-foundation", - "dispatch", - "glib-sys", - "gobject-sys", - "gtk-sys", - "js-sys", - "lazy_static", - "objc", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winapi 0.3.9", -] - -[[package]] -name = "rust-argon2" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb" -dependencies = [ - "base64", - "blake2b_simd", - "constant_time_eq", - "crossbeam-utils", -] - -[[package]] -name = "rusttype" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc7c727aded0be18c5b80c1640eae0ac8e396abf6fa8477d96cb37d18ee5ec59" -dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser", -] - -[[package]] -name = "ryu" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" -dependencies = [ - "lazy_static", - "winapi 0.3.9", -] - -[[package]] -name = "scoped-tls" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" - -[[package]] -name = "scoped_threadpool" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "security-framework" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfd318104249865096c8da1dfabf09ddbb6d0330ea176812a62ec75e40c4166" -dependencies = [ - "bitflags 1.2.1", - "core-foundation 0.9.1", - "core-foundation-sys 0.8.2", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee48cdde5ed250b0d3252818f646e174ab414036edb884dde62d80a3ac6082d" -dependencies = [ - "core-foundation-sys 0.8.2", - "libc", -] - -[[package]] -name = "semver" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver-parser" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" -dependencies = [ - "pest", -] - -[[package]] -name = "serde" -version = "1.0.123" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.123" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31" -dependencies = [ - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "serde_json" -version = "1.0.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc6b7951b17b051f3210b063f12cc17320e2fe30ae05b0fe2a3abb068551c76" -dependencies = [ - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "siphasher" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa8f3741c7372e75519bd9346068370c9cdaabcc1f9599cbcf2a2719352286b7" - -[[package]] -name = "slab" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" - -[[package]] -name = "smallvec" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" - -[[package]] -name = "smithay-client-toolkit" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "316e13a3eb853ce7bf72ad3530dc186cb2005c57c521ef5f4ada5ee4eed74de6" -dependencies = [ - "andrew", - "bitflags 1.2.1", - "calloop", - "dlib 0.4.2", - "lazy_static", - "log", - "memmap2", - "nix 0.18.0", - "wayland-client", - "wayland-cursor", - "wayland-protocols", -] - -[[package]] -name = "socket2" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "soup-sys" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c7adf08565630bbb71f955f11f8a68464817ded2703a3549747c235b58a13e" -dependencies = [ - "bitflags 1.2.1", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pkg-config", - "system-deps", -] - -[[package]] -name = "strsim" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" - -[[package]] -name = "strum" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca6e4730f517e041e547ffe23d29daab8de6b73af4b6ae2a002108169f5e7da" - -[[package]] -name = "strum" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bd81eb48f4c437cadc685403cad539345bf703d78e63707418431cecd4522b" - -[[package]] -name = "strum" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7318c509b5ba57f18533982607f24070a55d353e90d4cae30c467cdb2ad5ac5c" - -[[package]] -name = "strum_macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3384590878eb0cab3b128e844412e2d010821e7e091211b9d87324173ada7db8" -dependencies = [ - "quote 0.3.15", - "syn 0.11.11", -] - -[[package]] -name = "strum_macros" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c" -dependencies = [ - "heck", - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "strum_macros" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee8bc6b87a5112aeeab1f4a9f7ab634fe6cbefc4850006df31267f4cfb9e3149" -dependencies = [ - "heck", - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "syn" -version = "0.11.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" -dependencies = [ - "quote 0.3.15", - "synom", - "unicode-xid 0.0.4", -] - -[[package]] -name = "syn" -version = "1.0.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081" -dependencies = [ - "proc-macro2", - "quote 1.0.9", - "unicode-xid 0.2.1", -] - -[[package]] -name = "synom" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" -dependencies = [ - "unicode-xid 0.0.4", -] - -[[package]] -name = "sysinfo" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8834e42be61ae4f6338b216fbb69837c7f33c3d4d3a139fb073735b25af4d9e" -dependencies = [ - "cfg-if 0.1.10", - "doc-comment", - "libc", - "ntapi", - "once_cell", - "rayon", - "winapi 0.3.9", -] - -[[package]] -name = "system-deps" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3ecc17269a19353b3558b313bba738b25d82993e30d62a18406a24aba4649b" -dependencies = [ - "heck", - "pkg-config", - "strum 0.18.0", - "strum_macros 0.18.0", - "thiserror", - "toml", - "version-compare", -] - -[[package]] -name = "tar" -version = "0.4.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0bcfbd6a598361fda270d82469fff3d65089dc33e175c9a131f7b4cd395f228" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "tauri" -version = "0.11.1" -dependencies = [ - "async-trait", - "base64", - "cfg_aliases", - "futures", - "lazy_static", - "once_cell", - "rand 0.8.3", - "serde", - "serde_json", - "tauri-api", - "tauri-macros", - "tauri-updater", - "thiserror", - "tokio", - "uuid", - "wry", -] - -[[package]] -name = "tauri-api" -version = "0.7.5" -dependencies = [ - "bytes", - "dirs-next", - "either", - "flate2", - "http", - "ignore", - "notify-rust", - "once_cell", - "open", - "rand 0.8.3", - "reqwest", - "rfd", - "semver", - "serde", - "serde_json", - "serde_repr", - "tar", - "tauri-hotkey", - "tauri-utils", - "tempfile", - "thiserror", - "tinyfiledialogs", - "zip", -] - -[[package]] -name = "tauri-codegen" -version = "0.1.0" -dependencies = [ - "proc-macro2", - "quote 1.0.9", - "serde", - "serde_json", - "tauri-api", - "thiserror", - "walkdir", - "zstd", -] - -[[package]] -name = "tauri-hotkey" -version = "0.0.0" -source = "git+https://github.com/tauri-apps/tauri-hotkey-rs?branch=dev#ccd96947c350d6dd40dc927b49d13599a311fca3" -dependencies = [ - "log", - "once_cell", - "serde", - "strum 0.20.0", - "strum_macros 0.20.1", - "tauri-hotkey-sys", - "thiserror", -] - -[[package]] -name = "tauri-hotkey-sys" -version = "0.0.0" -source = "git+https://github.com/tauri-apps/tauri-hotkey-rs?branch=dev#ccd96947c350d6dd40dc927b49d13599a311fca3" -dependencies = [ - "cc", - "thiserror", - "winapi 0.3.9", - "x11-dl", -] - -[[package]] -name = "tauri-macros" -version = "0.1.0" -dependencies = [ - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", - "tauri-codegen", -] - -[[package]] -name = "tauri-updater" -version = "0.4.2" -dependencies = [ - "anyhow", - "base64", - "minisign-verify", - "reqwest", - "semver", - "serde", - "serde_json", - "tauri-api", - "tauri-utils", - "tempfile", - "thiserror", -] - -[[package]] -name = "tauri-utils" -version = "0.5.1" -dependencies = [ - "phf", - "proc-macro2", - "quote 1.0.9", - "serde", - "serde_json", - "sysinfo", - "thiserror", - "zstd", -] - -[[package]] -name = "tempfile" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "rand 0.8.3", - "redox_syscall 0.2.5", - "remove_dir_all", - "winapi 0.3.9", -] - -[[package]] -name = "thiserror" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0" -dependencies = [ - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "thread_local" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" -dependencies = [ - "once_cell", -] - -[[package]] -name = "tiff" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437" -dependencies = [ - "jpeg-decoder", - "miniz_oxide 0.4.4", - "weezl", -] - -[[package]] -name = "time" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" -dependencies = [ - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "tinyfiledialogs" -version = "3.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c45fb26c3f37d9a8b556e51f6d7f13f685af766017030af56e9247e638aa6194" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "tinyvec" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317cca572a0e89c3ce0ca1f1bdc9369547fe318a683418e42ac8f59d14701023" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" - -[[package]] -name = "tokio" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d56477f6ed99e10225f38f9f75f872f29b8b8bd8c0b946f63345bb144e9eeda" -dependencies = [ - "autocfg", - "bytes", - "libc", - "memchr", - "mio 0.7.9", - "num_cpus", - "pin-project-lite", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebb7cb2f00c5ae8df755b252306272cd1790d39728363936e01827e11f0b017b" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "toml" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" -dependencies = [ - "serde", -] - -[[package]] -name = "tower-service" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" - -[[package]] -name = "tracing" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ebdc2bb4498ab1ab5f5b73c5803825e60199229ccba0698170e3be0e7f959f" -dependencies = [ - "cfg-if 1.0.0", - "pin-project-lite", - "tracing-core", -] - -[[package]] -name = "tracing-core" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "try-lock" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - -[[package]] -name = "ttf-parser" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e5d7cd7ab3e47dda6e56542f4bbf3824c15234958c6e1bd6aaa347e93499fdc" - -[[package]] -name = "ucd-trie" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" - -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" -dependencies = [ - "matches", -] - -[[package]] -name = "unicode-normalization" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07fbfce1c8a97d547e8b5334978438d9d6ec8c20e38f56d4a4374d181493eaef" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796" - -[[package]] -name = "unicode-xid" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" - -[[package]] -name = "unicode-xid" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" - -[[package]] -name = "updater-example" -version = "0.1.0" -dependencies = [ - "serde", - "serde_json", - "tauri", - "winres", -] - -[[package]] -name = "url" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccd964113622c8e9322cfac19eb1004a07e636c545f325da085d5cdde6f1f8b" -dependencies = [ - "form_urlencoded", - "idna", - "matches", - "percent-encoding", -] - -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" -dependencies = [ - "getrandom 0.2.2", -] - -[[package]] -name = "vcpkg" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb" - -[[package]] -name = "vec-arena" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eafc1b9b2dfc6f5529177b62cf806484db55b32dc7c9658a118e11bbeb33061d" - -[[package]] -name = "version-compare" -version = "0.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d63556a25bae6ea31b52e640d7c41d1ab27faba4ccb600013837a3d0b3994ca1" - -[[package]] -name = "version_check" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" - -[[package]] -name = "void" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" - -[[package]] -name = "waker-fn" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" - -[[package]] -name = "walkdir" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" -dependencies = [ - "same-file", - "winapi 0.3.9", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" - -[[package]] -name = "wasm-bindgen" -version = "0.2.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee1280240b7c461d6a0071313e08f34a60b0365f14260362e5a2b17d1d31aa7" -dependencies = [ - "cfg-if 1.0.0", - "serde", - "serde_json", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b7d8b6942b8bb3a9b0e73fc79b98095a27de6fa247615e59d096754a3bc2aa8" -dependencies = [ - "bumpalo", - "lazy_static", - "log", - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e67a5806118af01f0d9045915676b22aaebecf4178ae7021bc171dab0b897ab" -dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ac38da8ef716661f0f36c0d8320b89028efe10c7c0afde65baffb496ce0d3b" -dependencies = [ - "quote 1.0.9", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc053ec74d454df287b9374ee8abb36ffd5acb95ba87da3ba5b7d3fe20eb401e" -dependencies = [ - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d6f8ec44822dd71f5f221a5847fb34acd9060535c1211b70a05844c0f6383b1" - -[[package]] -name = "wayland-client" -version = "0.28.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ca44d86554b85cf449f1557edc6cc7da935cc748c8e4bf1c507cbd43bae02c" -dependencies = [ - "bitflags 1.2.1", - "downcast-rs", - "libc", - "nix 0.20.0", - "scoped-tls", - "wayland-commons", - "wayland-scanner", - "wayland-sys", -] - -[[package]] -name = "wayland-commons" -version = "0.28.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bd75ae380325dbcff2707f0cd9869827ea1d2d6d534cff076858d3f0460fd5a" -dependencies = [ - "nix 0.20.0", - "once_cell", - "smallvec", - "wayland-sys", -] - -[[package]] -name = "wayland-cursor" -version = "0.28.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b37e5455ec72f5de555ec39b5c3704036ac07c2ecd50d0bffe02d5fe2d4e65ab" -dependencies = [ - "nix 0.20.0", - "wayland-client", - "xcursor", -] - -[[package]] -name = "wayland-protocols" -version = "0.28.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95df3317872bcf9eec096c864b69aa4769a1d5d6291a5b513f8ba0af0efbd52c" -dependencies = [ - "bitflags 1.2.1", - "wayland-client", - "wayland-commons", - "wayland-scanner", -] - -[[package]] -name = "wayland-scanner" -version = "0.28.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389d680d7bd67512dc9c37f39560224327038deb0f0e8d33f870900441b68720" -dependencies = [ - "proc-macro2", - "quote 1.0.9", - "xml-rs 0.8.3", -] - -[[package]] -name = "wayland-sys" -version = "0.28.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2907bd297eef464a95ba9349ea771611771aa285b932526c633dc94d5400a8e2" -dependencies = [ - "dlib 0.5.0", - "lazy_static", - "pkg-config", -] - -[[package]] -name = "web-sys" -version = "0.3.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec600b26223b2948cedfde2a0aa6756dcf1fef616f43d7b3097aaf53a6c4d92b" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webkit2gtk" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b7e9eb04d30f8423e9c8435f686f42bc497cfcac2cfe4b43ce4139fb1a7cb6" -dependencies = [ - "bitflags 1.2.1", - "cairo-rs", - "gdk", - "gdk-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "gtk", - "gtk-sys", - "javascriptcore-rs", - "libc", - "webkit2gtk-sys", -] - -[[package]] -name = "webkit2gtk-sys" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d10cf73685359cd8611740db241a231f4d74d7e353348dc5332a1a132d6f24" -dependencies = [ - "atk-sys", - "bitflags 1.2.1", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk-sys", - "javascriptcore-rs-sys", - "libc", - "pango-sys", - "pkg-config", - "soup-sys", -] - -[[package]] -name = "webview2" -version = "0.1.0-beta.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c0fa7367f4de0e4bca5730a297027f15d2e1f06227809efa47621eb55f08610" -dependencies = [ - "com", - "once_cell", - "webview2-sys", - "widestring", - "winapi 0.3.9", -] - -[[package]] -name = "webview2-sys" -version = "0.1.0-beta.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b53f9c920933ddff6481d525c3e0d14327843c82074c44522b97dcf6da5ad456" -dependencies = [ - "com", - "winapi 0.3.9", -] - -[[package]] -name = "weezl" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a32b378380f4e9869b22f0b5177c68a5519f03b3454fde0b291455ddbae266c" - -[[package]] -name = "wepoll-sys" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcb14dea929042224824779fbc82d9fab8d2e6d3cbc0ac404de8edf489e77ff" -dependencies = [ - "cc", -] - -[[package]] -name = "which" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c14ef7e1b8b8ecfc75d5eca37949410046e66f15d185c01d70824f1f8111ef" -dependencies = [ - "libc", - "thiserror", -] - -[[package]] -name = "widestring" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c" - -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "winit" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da4eda6fce0eb84bd0a33e3c8794eb902e1033d0a1d5a31bc4f19b1b4bbff597" -dependencies = [ - "bitflags 1.2.1", - "cocoa", - "core-foundation 0.9.1", - "core-graphics 0.22.2", - "core-video-sys", - "dispatch", - "instant", - "lazy_static", - "libc", - "log", - "mio 0.6.23", - "mio-extras", - "ndk", - "ndk-glue", - "ndk-sys", - "objc", - "parking_lot", - "percent-encoding", - "raw-window-handle", - "smithay-client-toolkit", - "wayland-client", - "winapi 0.3.9", - "x11-dl", -] - -[[package]] -name = "winreg" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" -dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "winres" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4fb510bbfe5b8992ff15f77a2e6fe6cf062878f0eda00c0f44963a807ca5dc" -dependencies = [ - "toml", -] - -[[package]] -name = "winrt" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e30cba82e22b083dc5a422c2ee77e20dc7927271a0dc981360c57c1453cb48d" -dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "winrt-notification" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57790eb281688a4682dab44df2a1ba8b78373233bd71cb291c3e75fecb1a01c4" -dependencies = [ - "strum 0.8.0", - "strum_macros 0.8.0", - "winapi 0.3.9", - "winrt", - "xml-rs 0.6.1", -] - -[[package]] -name = "wry" -version = "0.6.0" -source = "git+https://github.com/tauri-apps/wry?rev=39575983dbd128fbbcde933d742b33b691fd1def#39575983dbd128fbbcde933d742b33b691fd1def" -dependencies = [ - "cairo-rs", - "cocoa", - "core-graphics 0.22.2", - "gdk", - "gdk-pixbuf", - "gio", - "glib", - "gtk", - "image", - "infer", - "libc", - "objc", - "objc_id", - "once_cell", - "serde", - "serde_json", - "thiserror", - "url", - "webkit2gtk", - "webview2", - "winapi 0.3.9", - "winit", -] - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - -[[package]] -name = "x11-dl" -version = "2.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf981e3a5b3301209754218f962052d4d9ee97e478f4d26d4a6eced34c1fef8" -dependencies = [ - "lazy_static", - "libc", - "maybe-uninit", - "pkg-config", -] - -[[package]] -name = "xattr" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" -dependencies = [ - "libc", -] - -[[package]] -name = "xcursor" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9a231574ae78801646617cefd13bfe94be907c0e4fa979cfd8b770aa3c5d08" -dependencies = [ - "nom", -] - -[[package]] -name = "xdg" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57" - -[[package]] -name = "xml-rs" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1945e12e16b951721d7976520b0832496ef79c31602c7a29d950de79ba74621" -dependencies = [ - "bitflags 0.9.1", -] - -[[package]] -name = "xml-rs" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b07db065a5cf61a7e4ba64f29e67db906fb1787316516c4e6e5ff0fea1efcd8a" - -[[package]] -name = "zbus" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40b4d4aa39daed4e32aed75f0c37b969184949a0fdfd5f2e1277abfda61f02a8" -dependencies = [ - "async-io", - "byteorder", - "derivative", - "enumflags2", - "fastrand", - "futures", - "nb-connect", - "nix 0.17.0", - "once_cell", - "polling", - "scoped-tls", - "serde", - "serde_repr", - "zbus_macros", - "zvariant", -] - -[[package]] -name = "zbus_macros" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc141cda72384bef359badf1808e391d3968f9299e8f3c3cbb78dafa1e0930" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] - -[[package]] -name = "zip" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8264fcea9b7a036a4a5103d7153e988dbc2ebbafb34f68a3c2d404b6b82d74b6" -dependencies = [ - "byteorder", - "bzip2", - "crc32fast", - "flate2", - "thiserror", - "time", -] - -[[package]] -name = "zstd" -version = "0.6.1+zstd.1.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de55e77f798f205d8561b8fe2ef57abfb6e0ff2abe7fd3c089e119cdb5631a3" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "3.0.1+zstd.1.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1387cabcd938127b30ce78c4bf00b30387dddf704e3f0881dbc4ff62b5566f8c" -dependencies = [ - "libc", - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "1.4.20+zstd.1.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd5b733d7cf2d9447e2c3e76a5589b4f5e5ae065c22a2bc0b023cbc331b6c8e" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "zvariant" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fc67d552ac18ccd9e440f062f5b32c46776f96073122a8da2fe0c533833a213" -dependencies = [ - "byteorder", - "enumflags2", - "serde", - "zvariant_derive", -] - -[[package]] -name = "zvariant_derive" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaee686340b5bff077d52423d8cc4f0f7cb323fe3f31ef676b8a3a2810bc53c5" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote 1.0.9", - "syn 1.0.60", -] diff --git a/renovate.json b/renovate.json index dd07c7d26e3..91ef19626cf 100644 --- a/renovate.json +++ b/renovate.json @@ -1,20 +1,31 @@ { - "extends": ["config:base"], + "extends": [ + "config:base" + ], "schedule": "after 3am on Wednesday", "ignorePaths": [], - "labels": ["chore"], - "enabledManagers": ["cargo", "npm"], + "labels": [ + "chore" + ], + "enabledManagers": [ + "cargo", + "npm" + ], "cargo": { "enabled": true }, "packageRules": [ { - "packagePatterns": ["*"], + "packagePatterns": [ + "*" + ], "enabled": false }, { "enabled": true, - "paths": ["core/tauri/**"], + "paths": [ + "core/tauri/**" + ], "groupName": "Tauri Core", "groupSlug": "allTauriCore", "commitMessagePrefix": "chore(deps)", @@ -25,18 +36,9 @@ }, { "enabled": true, - "paths": ["core/tauri-api/**"], - "groupName": "Tauri API", - "groupSlug": "allTauriAPI", - "commitMessagePrefix": "chore(deps)", - "lockFileMaintenance": { - "enabled": true - }, - "rebaseConflictedPrs": false - }, - { - "enabled": true, - "paths": ["core/tauri-build/**"], + "paths": [ + "core/tauri-build/**" + ], "groupName": "Tauri Build", "groupSlug": "allTauriBuild", "commitMessagePrefix": "chore(deps)", @@ -47,7 +49,9 @@ }, { "enabled": true, - "paths": ["core/tauri-codegen/**"], + "paths": [ + "core/tauri-codegen/**" + ], "groupName": "Tauri Codegen", "groupSlug": "allTauriCodegen", "commitMessagePrefix": "chore(deps)", @@ -58,7 +62,9 @@ }, { "enabled": true, - "paths": ["core/tauri-macros/**"], + "paths": [ + "core/tauri-macros/**" + ], "groupName": "Tauri Macros", "groupSlug": "allTauriMacros", "commitMessagePrefix": "chore(deps)", @@ -69,18 +75,9 @@ }, { "enabled": true, - "paths": ["core/tauri-updater/**"], - "groupName": "Tauri Updater", - "groupSlug": "allTauriUpdater", - "commitMessagePrefix": "chore(deps)", - "lockFileMaintenance": { - "enabled": true - }, - "rebaseConflictedPrs": false - }, - { - "enabled": true, - "paths": ["core/tauri-utils/**"], + "paths": [ + "core/tauri-utils/**" + ], "groupName": "Tauri Utils", "groupSlug": "allTauriUtils", "commitMessagePrefix": "chore(deps)", @@ -91,7 +88,9 @@ }, { "enabled": true, - "paths": ["cli/core/**"], + "paths": [ + "cli/core/**" + ], "groupName": "Tauri CLI", "groupSlug": "allTauriCLI", "commitMessagePrefix": "chore(deps)", @@ -102,7 +101,9 @@ }, { "enabled": true, - "paths": ["cli/tauri-bundler/**"], + "paths": [ + "cli/tauri-bundler/**" + ], "groupName": "Tauri Bundler", "groupSlug": "allTauriBundler", "commitMessagePrefix": "chore(deps)", @@ -113,7 +114,9 @@ }, { "enabled": true, - "paths": ["cli/tauri.js/**"], + "paths": [ + "cli/tauri.js/**" + ], "groupName": "Tauri JS CLI", "groupSlug": "allTauriJSCLI", "commitMessagePrefix": "chore(deps)", @@ -124,7 +127,9 @@ }, { "enabled": true, - "paths": ["api/**"], + "paths": [ + "api/**" + ], "groupName": "Tauri API Definitions", "groupSlug": "allTauriAPIDefinitions", "commitMessagePrefix": "chore(deps)", @@ -134,4 +139,4 @@ "rebaseConflictedPrs": false } ] -} +} \ No newline at end of file