├── .gitignore
├── Cargo.lock
├── Cargo.toml
├── LICENSE
├── Makefile
├── Readme.md
├── rustfmt.toml
├── src
├── cli.rs
├── consts.rs
├── generated.rs
├── input.rs
├── main.rs
├── model.rs
├── template_builder.rs
└── util.rs
├── template
├── .gitignore
├── Cargo.lock
├── Cargo.toml
├── build.rs
├── icons
│ ├── app-icon.png
│ └── icon.png
├── rustfmt.toml
├── src
│ ├── app_config.rs
│ ├── app_data.rs
│ ├── app_menu.rs
│ ├── builder.rs
│ ├── generated.rs
│ ├── main.rs
│ ├── script.js
│ └── util.rs
└── tauri.conf.json
└── watch.sh
/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 | /build
3 | .idea
4 | .DS_Store
5 | .vscode/
6 |
--------------------------------------------------------------------------------
/Cargo.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Cargo.
2 | # It is not intended for manual editing.
3 | version = 3
4 |
5 | [[package]]
6 | name = "base64"
7 | version = "0.20.0"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5"
10 |
11 | [[package]]
12 | name = "bitflags"
13 | version = "1.3.2"
14 | source = "registry+https://github.com/rust-lang/crates.io-index"
15 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
16 |
17 | [[package]]
18 | name = "cc"
19 | version = "1.0.78"
20 | source = "registry+https://github.com/rust-lang/crates.io-index"
21 | checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d"
22 |
23 | [[package]]
24 | name = "clap"
25 | version = "4.1.1"
26 | source = "registry+https://github.com/rust-lang/crates.io-index"
27 | checksum = "4ec7a4128863c188deefe750ac1d1dfe66c236909f845af04beed823638dc1b2"
28 | dependencies = [
29 | "bitflags",
30 | "clap_derive",
31 | "clap_lex",
32 | "is-terminal",
33 | "once_cell",
34 | "strsim",
35 | "termcolor",
36 | ]
37 |
38 | [[package]]
39 | name = "clap_derive"
40 | version = "4.1.0"
41 | source = "registry+https://github.com/rust-lang/crates.io-index"
42 | checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8"
43 | dependencies = [
44 | "heck",
45 | "proc-macro-error",
46 | "proc-macro2",
47 | "quote",
48 | "syn",
49 | ]
50 |
51 | [[package]]
52 | name = "clap_lex"
53 | version = "0.3.1"
54 | source = "registry+https://github.com/rust-lang/crates.io-index"
55 | checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade"
56 | dependencies = [
57 | "os_str_bytes",
58 | ]
59 |
60 | [[package]]
61 | name = "errno"
62 | version = "0.2.8"
63 | source = "registry+https://github.com/rust-lang/crates.io-index"
64 | checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
65 | dependencies = [
66 | "errno-dragonfly",
67 | "libc",
68 | "winapi",
69 | ]
70 |
71 | [[package]]
72 | name = "errno-dragonfly"
73 | version = "0.1.2"
74 | source = "registry+https://github.com/rust-lang/crates.io-index"
75 | checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
76 | dependencies = [
77 | "cc",
78 | "libc",
79 | ]
80 |
81 | [[package]]
82 | name = "heck"
83 | version = "0.4.0"
84 | source = "registry+https://github.com/rust-lang/crates.io-index"
85 | checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
86 |
87 | [[package]]
88 | name = "hermit-abi"
89 | version = "0.2.6"
90 | source = "registry+https://github.com/rust-lang/crates.io-index"
91 | checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
92 | dependencies = [
93 | "libc",
94 | ]
95 |
96 | [[package]]
97 | name = "home"
98 | version = "0.5.4"
99 | source = "registry+https://github.com/rust-lang/crates.io-index"
100 | checksum = "747309b4b440c06d57b0b25f2aee03ee9b5e5397d288c60e21fc709bb98a7408"
101 | dependencies = [
102 | "winapi",
103 | ]
104 |
105 | [[package]]
106 | name = "io-lifetimes"
107 | version = "1.0.4"
108 | source = "registry+https://github.com/rust-lang/crates.io-index"
109 | checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e"
110 | dependencies = [
111 | "libc",
112 | "windows-sys",
113 | ]
114 |
115 | [[package]]
116 | name = "is-terminal"
117 | version = "0.4.2"
118 | source = "registry+https://github.com/rust-lang/crates.io-index"
119 | checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189"
120 | dependencies = [
121 | "hermit-abi",
122 | "io-lifetimes",
123 | "rustix",
124 | "windows-sys",
125 | ]
126 |
127 | [[package]]
128 | name = "libc"
129 | version = "0.2.139"
130 | source = "registry+https://github.com/rust-lang/crates.io-index"
131 | checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
132 |
133 | [[package]]
134 | name = "linux-raw-sys"
135 | version = "0.1.4"
136 | source = "registry+https://github.com/rust-lang/crates.io-index"
137 | checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
138 |
139 | [[package]]
140 | name = "once_cell"
141 | version = "1.17.0"
142 | source = "registry+https://github.com/rust-lang/crates.io-index"
143 | checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
144 |
145 | [[package]]
146 | name = "os_str_bytes"
147 | version = "6.4.1"
148 | source = "registry+https://github.com/rust-lang/crates.io-index"
149 | checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
150 |
151 | [[package]]
152 | name = "proc-macro-error"
153 | version = "1.0.4"
154 | source = "registry+https://github.com/rust-lang/crates.io-index"
155 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
156 | dependencies = [
157 | "proc-macro-error-attr",
158 | "proc-macro2",
159 | "quote",
160 | "syn",
161 | "version_check",
162 | ]
163 |
164 | [[package]]
165 | name = "proc-macro-error-attr"
166 | version = "1.0.4"
167 | source = "registry+https://github.com/rust-lang/crates.io-index"
168 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
169 | dependencies = [
170 | "proc-macro2",
171 | "quote",
172 | "version_check",
173 | ]
174 |
175 | [[package]]
176 | name = "proc-macro2"
177 | version = "1.0.54"
178 | source = "registry+https://github.com/rust-lang/crates.io-index"
179 | checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534"
180 | dependencies = [
181 | "unicode-ident",
182 | ]
183 |
184 | [[package]]
185 | name = "quote"
186 | version = "1.0.26"
187 | source = "registry+https://github.com/rust-lang/crates.io-index"
188 | checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
189 | dependencies = [
190 | "proc-macro2",
191 | ]
192 |
193 | [[package]]
194 | name = "rustix"
195 | version = "0.36.6"
196 | source = "registry+https://github.com/rust-lang/crates.io-index"
197 | checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549"
198 | dependencies = [
199 | "bitflags",
200 | "errno",
201 | "io-lifetimes",
202 | "libc",
203 | "linux-raw-sys",
204 | "windows-sys",
205 | ]
206 |
207 | [[package]]
208 | name = "strsim"
209 | version = "0.10.0"
210 | source = "registry+https://github.com/rust-lang/crates.io-index"
211 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
212 |
213 | [[package]]
214 | name = "syn"
215 | version = "1.0.107"
216 | source = "registry+https://github.com/rust-lang/crates.io-index"
217 | checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
218 | dependencies = [
219 | "proc-macro2",
220 | "quote",
221 | "unicode-ident",
222 | ]
223 |
224 | [[package]]
225 | name = "termcolor"
226 | version = "1.1.3"
227 | source = "registry+https://github.com/rust-lang/crates.io-index"
228 | checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
229 | dependencies = [
230 | "winapi-util",
231 | ]
232 |
233 | [[package]]
234 | name = "unicode-ident"
235 | version = "1.0.6"
236 | source = "registry+https://github.com/rust-lang/crates.io-index"
237 | checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
238 |
239 | [[package]]
240 | name = "version_check"
241 | version = "0.9.4"
242 | source = "registry+https://github.com/rust-lang/crates.io-index"
243 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
244 |
245 | [[package]]
246 | name = "web2app"
247 | version = "0.2.12"
248 | dependencies = [
249 | "base64",
250 | "clap",
251 | "home",
252 | ]
253 |
254 | [[package]]
255 | name = "winapi"
256 | version = "0.3.9"
257 | source = "registry+https://github.com/rust-lang/crates.io-index"
258 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
259 | dependencies = [
260 | "winapi-i686-pc-windows-gnu",
261 | "winapi-x86_64-pc-windows-gnu",
262 | ]
263 |
264 | [[package]]
265 | name = "winapi-i686-pc-windows-gnu"
266 | version = "0.4.0"
267 | source = "registry+https://github.com/rust-lang/crates.io-index"
268 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
269 |
270 | [[package]]
271 | name = "winapi-util"
272 | version = "0.1.5"
273 | source = "registry+https://github.com/rust-lang/crates.io-index"
274 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
275 | dependencies = [
276 | "winapi",
277 | ]
278 |
279 | [[package]]
280 | name = "winapi-x86_64-pc-windows-gnu"
281 | version = "0.4.0"
282 | source = "registry+https://github.com/rust-lang/crates.io-index"
283 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
284 |
285 | [[package]]
286 | name = "windows-sys"
287 | version = "0.42.0"
288 | source = "registry+https://github.com/rust-lang/crates.io-index"
289 | checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
290 | dependencies = [
291 | "windows_aarch64_gnullvm",
292 | "windows_aarch64_msvc",
293 | "windows_i686_gnu",
294 | "windows_i686_msvc",
295 | "windows_x86_64_gnu",
296 | "windows_x86_64_gnullvm",
297 | "windows_x86_64_msvc",
298 | ]
299 |
300 | [[package]]
301 | name = "windows_aarch64_gnullvm"
302 | version = "0.42.2"
303 | source = "registry+https://github.com/rust-lang/crates.io-index"
304 | checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
305 |
306 | [[package]]
307 | name = "windows_aarch64_msvc"
308 | version = "0.42.2"
309 | source = "registry+https://github.com/rust-lang/crates.io-index"
310 | checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
311 |
312 | [[package]]
313 | name = "windows_i686_gnu"
314 | version = "0.42.2"
315 | source = "registry+https://github.com/rust-lang/crates.io-index"
316 | checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
317 |
318 | [[package]]
319 | name = "windows_i686_msvc"
320 | version = "0.42.2"
321 | source = "registry+https://github.com/rust-lang/crates.io-index"
322 | checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
323 |
324 | [[package]]
325 | name = "windows_x86_64_gnu"
326 | version = "0.42.2"
327 | source = "registry+https://github.com/rust-lang/crates.io-index"
328 | checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
329 |
330 | [[package]]
331 | name = "windows_x86_64_gnullvm"
332 | version = "0.42.2"
333 | source = "registry+https://github.com/rust-lang/crates.io-index"
334 | checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
335 |
336 | [[package]]
337 | name = "windows_x86_64_msvc"
338 | version = "0.42.2"
339 | source = "registry+https://github.com/rust-lang/crates.io-index"
340 | checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
341 |
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "web2app"
3 | description = "Turn any web page into a desktop app (but, lightweight ~3MB)"
4 | version = "0.2.12"
5 | edition = "2021"
6 | license = "MIT"
7 |
8 | [dependencies]
9 | home = "0.5.4"
10 | base64 = "0.20.0"
11 | clap = { version = "4.1.1", features = ["derive"]}
12 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Do whatever you want. But just pray for me at least once. :)
2 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | run_template:
2 | @cd template; RUST_BACKTRACE=1 cargo tauri dev
3 |
4 | run:
5 | @cargo build && RUST_BACKTRACE=1 ./target/debug/web2app args -n Notion -u https://www.notion.so/
6 |
7 | .PHONY: run_template run
8 |
9 |
--------------------------------------------------------------------------------
/Readme.md:
--------------------------------------------------------------------------------
1 | ### Intro
2 |
3 | Convert any web page into a desktop app (but, lightweight ~3MB)
4 |
5 | - The bundle size will be around 3MB
6 | - Demo: [https://i.imgur.com/BLr03oF.mp4](https://i.imgur.com/BLr03oF.mp4)
7 |
8 | ### Pre-requisites
9 |
10 | #### macOS
11 |
12 | ```bash
13 | # cargo
14 | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
15 | ```
16 |
17 | #### Linux
18 |
19 | You should first install the Rust toolchain
20 | ```sh
21 | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
22 | ```
23 |
24 | Then you need to install some dependencies, which depends on your Linux distribution.
25 |
26 |
27 | Ubuntu (and derivates such as KDE Neon, PopOS etc.)
28 |
29 | ```sh
30 | sudo apt install libwebkit2gtk-4.0-dev -y
31 | ```
32 |
33 |
34 |
35 |
36 | OpenSUSE
37 |
38 | ```sh
39 | sudo zypper in -y webkit2gtk3-soup2-devel
40 | ```
41 |
42 |
43 |
44 |
45 |
46 | Other
47 |
48 | You need to look for another package that provides the development libraries for webkit with GTK4.
49 | There might also be other missing packages.
50 |
51 |
52 |
53 |
54 | #### Windows
55 |
56 | Windows Setup (x64)
57 |
58 | - Setup Tauri Pre-Requisities for windows: [https://tauri.app/v1/guides/getting-started/prerequisites#setting-up-windows](https://tauri.app/v1/guides/getting-started/prerequisites#setting-up-windows)
59 |
60 | ### Install
61 |
62 | ```bash
63 | cargo install web2app tauri-cli
64 | ```
65 |
66 | ### Usages
67 |
68 | ```bash
69 | # Run with args
70 |
71 | web2app args -n Notion -u https://www.notion.so -i icon.png
72 | ```
73 |
74 | ```bash
75 | # Run with interactive mode
76 |
77 | web2app interactive
78 |
79 | # 🍀 Enter Name (TestApp):
80 | # 🍀 Enter URL (https://trello.com):
81 | # 🍀 Enter Description (An example application.):
82 | # 🍀 Enter Version (0.1.0):
83 | # 🍀 Enter Author (John Doe):
84 | # 🍀 Enter Identifier (com.example.testapp):
85 | # 🍀 Enter Icon (icon_path.png):
86 | # 🍀 Enter User Agent (Mozilla/5.0):
87 | ```
88 |
89 | ### Output
90 |
91 | - The output will be saved in `$HOME/web2app_apps/` directory.
92 |
93 | ### Roadmap
94 |
95 | - [x] Zoom In/Out
96 | - [x] Reload
97 | - [x] Standard Copy/Paste
98 | - [x] Custom User Agent
99 | - [x] Desktop Notification (working for some apps)
100 | - [x] Back and forward navigation
101 | - [ ] Automatically fetch icon from website
102 | - [ ] Dark Reader Extension (already there but, not fully working)
103 | - [ ] Retain window size and position after restart
104 | - [ ] Separate `web2app_apps` repo to host common built apps through Github Action
105 | - [ ] File download support
106 |
107 | ### Libraries
108 |
109 | - [Tauri](https://github.com/tauri-apps/tauri)
110 | - [home](https://github.com/brson/home)
111 |
--------------------------------------------------------------------------------
/rustfmt.toml:
--------------------------------------------------------------------------------
1 | max_width = 100
--------------------------------------------------------------------------------
/src/cli.rs:
--------------------------------------------------------------------------------
1 | use clap::Parser;
2 | use std::io::ErrorKind;
3 | use std::io::Result;
4 | use std::io::Error;
5 |
6 | use super::input;
7 |
8 | use super::model::Args;
9 | use super::model::Cli;
10 | use super::model::Commands;
11 |
12 | pub fn get_args() -> Result {
13 | let cli = Cli::parse();
14 |
15 | match cli.command {
16 | Some(Commands::Args(arg_data)) => {
17 | return Ok(arg_data);
18 | }
19 | Some(Commands::Interactive) => {
20 | return Ok(get_interactive_args());
21 | }
22 | None => {
23 | println!("No command given. Use --help for more information.");
24 | return Err(Error::new(ErrorKind::Other, "No command given."));
25 | }
26 | }
27 | }
28 |
29 | fn get_interactive_args() -> Args {
30 | Args {
31 | name: input::string_must("Name"),
32 | url: input::string_must("URL"),
33 | description: input::string("Description", "An example application."),
34 | version: input::string("Version", "0.1.0"),
35 | author: input::string("Author", "hamza72x"),
36 | identifier: input::string("Identifier", "com.example.testapp"),
37 | icon: input::optional_string("Icon", "icon_path.png"),
38 | is_release_build: input::bool("Release build", true),
39 | user_agent: input::optional_string("User agent", "Mozilla/5.0"),
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/consts.rs:
--------------------------------------------------------------------------------
1 | pub const TAURI_ICON_ELEMENTS: &str = r#""icons/32x32.png", "icons/128x128.png", "icons/128x128@2x.png", "icons/icon.icns", "icons/icon.ico""#;
2 |
--------------------------------------------------------------------------------
/src/input.rs:
--------------------------------------------------------------------------------
1 | use std::io;
2 | use std::io::Write;
3 |
4 | pub fn string(title: &str, default_val: &str) -> String {
5 | let mut input = String::new();
6 |
7 | print!("🍀 Enter {} ({}): ", title, default_val);
8 | io::stdout().flush().unwrap();
9 |
10 | io::stdin()
11 | .read_line(&mut input)
12 | .expect(&("Error getting".to_owned() + title));
13 |
14 | let input = input.trim().to_string();
15 |
16 | if input.is_empty() {
17 | default_val.to_string()
18 | } else {
19 | input
20 | }
21 | }
22 |
23 | pub fn string_must(title: &str) -> String {
24 | let mut input = String::new();
25 |
26 | print!("🍀 Enter {} (required): ", title);
27 | io::stdout().flush().unwrap();
28 |
29 | io::stdin()
30 | .read_line(&mut input)
31 | .expect(&("Error getting".to_owned() + title));
32 |
33 | let text = input.trim().to_string();
34 |
35 | if text.is_empty() {
36 | string_must(title)
37 | } else {
38 | text
39 | }
40 | }
41 |
42 | pub fn bool(title: &str, default_val: bool) -> bool {
43 | let mut input = String::new();
44 |
45 | print!("🍀 Enter {} (y/n): ", title);
46 | io::stdout().flush().unwrap();
47 |
48 | io::stdin()
49 | .read_line(&mut input)
50 | .expect(&("Error getting".to_owned() + title));
51 |
52 | let input = input.trim().to_string();
53 |
54 | if input.is_empty() {
55 | default_val
56 | } else {
57 | input == "y"
58 | }
59 | }
60 |
61 | pub fn optional_string(title: &str, example: &str) -> Option {
62 | let mut input = String::new();
63 |
64 | print!("🍀 Enter {} ({}): ", title, example);
65 | io::stdout().flush().unwrap();
66 |
67 | io::stdin()
68 | .read_line(&mut input)
69 | .expect(&("Error getting".to_owned() + title));
70 |
71 | if input.trim().is_empty() {
72 | None
73 | } else {
74 | Some(input.trim().to_string())
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/src/main.rs:
--------------------------------------------------------------------------------
1 | use std::fs;
2 | use std::io;
3 | use std::thread::sleep;
4 | use std::time::Duration;
5 |
6 | mod cli;
7 | mod generated;
8 | mod input;
9 | mod model;
10 | mod template_builder;
11 | mod util;
12 | mod consts;
13 |
14 | use model::Args;
15 |
16 | // milliseconds
17 | const SLEEP_TIME: u64 = 10;
18 |
19 | fn main() -> io::Result<()> {
20 | let mut args = cli::get_args().expect("failed to get cli args");
21 |
22 | // post args processing
23 | args.update_default_identifier();
24 |
25 | // print given input
26 | args.print();
27 | sleep(Duration::from_millis(SLEEP_TIME));
28 |
29 | // building
30 | build(&args).expect("failed to build");
31 | sleep(Duration::from_millis(SLEEP_TIME));
32 |
33 | // opening output directory in file explorer
34 | util::open_dir_in_explorer(&args.bundle_dir());
35 |
36 | Ok(())
37 | }
38 |
39 | // build the app
40 | fn build(args: &Args) -> io::Result<()> {
41 | // build directories
42 | print_and_wait("\n🎉 Building directories...");
43 |
44 | // $HOME/web2app_apps/app_name
45 | fs::create_dir_all(&args.build_dir())?;
46 |
47 | // $HOME/web2app_apps/app_name/src
48 | util::re_create_dir(format!("{}/src", &args.build_dir()).as_str())?;
49 |
50 | // $HOME/web2app_apps/app_name/icons
51 | util::re_create_dir(format!("{}/icons", &args.build_dir()).as_str())?;
52 |
53 | // create files
54 | print_and_wait("\n🎉 Creating files...");
55 |
56 | // array of FileBuildData
57 | print_and_wait("\n🎉 Building templates...");
58 |
59 | let mut files = template_builder::build_template_files(args);
60 |
61 | // write files
62 | for file in files.iter_mut() {
63 | file.decode_and_write();
64 | }
65 |
66 | // build icons
67 | print_and_wait("\n🎉 Building icons...");
68 |
69 | if let Some(icon) = args.icon.as_ref() {
70 | // copy icon to web2apps/app_name/icons/app-icon.png
71 | util::copy_file(&icon, args.app_icon_path()).unwrap();
72 |
73 | // run `cargo tauri icon`
74 | util::run_os_command_standard(
75 | format!("cargo tauri icon {}", args.app_icon_path()).as_str(),
76 | Some(&args.build_dir()),
77 | )
78 | .expect("failed to run cargo tauri icon");
79 | }
80 |
81 | // run cargo tauri build
82 | print_and_wait("\n🎉 Running cargo tauri build...");
83 |
84 | let mut tauri_build = "cargo tauri build";
85 | if !args.is_release_build {
86 | tauri_build = "cargo tauri build --debug";
87 | }
88 |
89 | util::run_os_command_standard(tauri_build, Some(&args.build_dir())).unwrap();
90 |
91 | Ok(())
92 | }
93 |
94 | fn print_and_wait(text: &str) {
95 | println!("{}", text);
96 | sleep(Duration::from_millis(SLEEP_TIME));
97 | }
98 |
--------------------------------------------------------------------------------
/src/model.rs:
--------------------------------------------------------------------------------
1 | use clap::{Parser, Subcommand};
2 | use std::collections::HashMap;
3 | use std::fs::File;
4 | use std::io::Write;
5 | use std::path::Path;
6 | use std::path::PathBuf;
7 |
8 | #[derive(Parser)]
9 | #[command(author, version, about, long_about = None)]
10 | pub struct Cli {
11 | #[command(subcommand)]
12 | pub command: Option,
13 | }
14 |
15 | #[derive(Subcommand)]
16 | pub enum Commands {
17 | #[command(about = "Builds the app with the given arguments.")]
18 | Args(Args),
19 |
20 | #[command(about = "Builds the app with interactive input.")]
21 | Interactive,
22 | }
23 |
24 | #[derive(Parser)]
25 | pub struct Args {
26 | #[arg(short, long, help = "The name of the app")]
27 | pub name: String,
28 |
29 | #[arg(short, long, help = "The URL of the app")]
30 | pub url: String,
31 |
32 | #[arg(short, long, help = "The description of the app", default_value_t = String::from("An example application."))]
33 | pub description: String,
34 |
35 | #[arg(short, long, help = "The version of the app", default_value_t = String::from("0.1.0"))]
36 | pub version: String,
37 |
38 | #[arg(short, long, help = "The author of the app", default_value_t = String::from("John Doe"))]
39 | pub author: String,
40 |
41 | #[arg(short = 't', long, help = "The identifier of the app", default_value_t = String::from("com.example.testapp"))]
42 | pub identifier: String,
43 |
44 | #[arg(short = 'i', long, help = "The icon of the app")]
45 | pub icon: Option,
46 |
47 | #[arg(
48 | short = 'r',
49 | long,
50 | help = "The release build of the app",
51 | default_value_t = true
52 | )]
53 | pub is_release_build: bool,
54 |
55 | #[arg(short = 'g', long, help = "Custom user agent")]
56 | pub user_agent: Option,
57 | }
58 |
59 | // methods
60 | impl Args {
61 | pub fn update_default_identifier(&mut self) {
62 | // if identifier is not given, generate from args.url
63 | if self.identifier == "com.example.testapp" {
64 | self.identifier = get_identifier_from_url(&self.url);
65 | }
66 | }
67 |
68 | // build_dir is the path to the build directory
69 | // e.g: "$HOME/web2app_apps/app_name"
70 | pub fn build_dir(&self) -> String {
71 | let home_dir = home::home_dir().unwrap().display().to_string();
72 |
73 | let path = Path::new(&home_dir);
74 | let path = path.join("web2app_apps");
75 | let path = path.join(self.name.to_lowercase());
76 |
77 | path.as_path().display().to_string()
78 | }
79 |
80 | // icon_path is the path to the icon file in the build directory
81 | // e.g: for the file "icon.png" the path would be "$HOME/web2app_apps/app_name/icons/app-icon.png"
82 | pub fn app_icon_path(&self) -> String {
83 | let build_dir = self.build_dir();
84 | let path = Path::new(&build_dir);
85 | let path = path.join("icons").join("app-icon.png");
86 |
87 | path.to_str().unwrap().to_string()
88 | }
89 |
90 | // bundle_dir is the path to the bundle directory
91 | // e.g: "$HOME/web2app_apps/app_name/target/debug/bundle"
92 | pub fn bundle_dir(&self) -> String {
93 | let build_dir = self.build_dir();
94 | let path = Path::new(&build_dir);
95 |
96 | let mut build_type = "debug";
97 | if self.is_release_build {
98 | build_type = "release";
99 | }
100 |
101 | let path = path.join("target").join(build_type).join("bundle");
102 | path.to_str().unwrap().to_string()
103 | }
104 |
105 | // dest_tmpl_file is the file in the build directory
106 | // e.g: for the file "src/main.rs" the path would be "$HOME/web2app_apps/app_name/src/main.rs"
107 | // e.g: for the file "Cargo.toml" the path would be "$HOME/web2app_apps/app_name/Cargo.toml"
108 | pub fn dest_tmpl_file(&self, path: &str) -> File {
109 | File::create(self.dest_tmpl_path_buf(path)).unwrap()
110 | }
111 |
112 | pub fn dest_tmpl_path_buf(&self, path: &str) -> PathBuf {
113 | PathBuf::from(format!("{}/{}", self.build_dir(), path))
114 | }
115 |
116 | pub fn print(&self) {
117 | println!("name: {}", self.name);
118 | println!("url: {}", self.url);
119 | println!("description: {}", self.description);
120 | println!("version: {}", self.version);
121 | println!("author: {}", self.author);
122 | println!("identifier: {}", self.identifier);
123 | println!(
124 | "icon: {}",
125 | self.icon.as_ref().unwrap_or(&String::from("None"))
126 | );
127 | println!(
128 | "User Agent: {}",
129 | self.user_agent.as_ref().unwrap_or(&String::from("Default"))
130 | );
131 | println!("");
132 | println!("🚀 build_dir: {}", self.build_dir());
133 | }
134 | }
135 |
136 | pub struct FileBuildData<'a> {
137 | pub file: File,
138 | pub data_b64: &'a str,
139 | // map if search and replace text
140 | pub search_replace_texts: Option>,
141 | }
142 |
143 | impl FileBuildData<'_> {
144 | pub fn decode_and_write(&mut self) {
145 | let data = base64::decode(&self.data_b64).unwrap();
146 | let mut data = String::from_utf8(data).unwrap();
147 | if let Some(search_replace_texts) = &self.search_replace_texts {
148 | for (key, value) in search_replace_texts {
149 | data = data.replace(key.as_str(), value);
150 | }
151 | }
152 | self.file.write_all(data.as_bytes()).unwrap();
153 | }
154 | }
155 |
156 | fn get_identifier_from_url(url: &String) -> String {
157 | // remove http(s)://
158 | let url = url.replace("https://", "");
159 | let url = url.replace("http://", "");
160 |
161 | // replace all non alphanumeric characters with a dot
162 | let identifier = url
163 | .chars()
164 | .map(|c| {
165 | if c.is_ascii_alphanumeric() || c == '.' {
166 | c
167 | } else {
168 | '.'
169 | }
170 | })
171 | .collect::();
172 |
173 | let identifier = identifier + ".web2app";
174 |
175 | // replace double dots with a single dot
176 | return identifier.replace("..", ".");
177 | }
178 |
--------------------------------------------------------------------------------
/src/template_builder.rs:
--------------------------------------------------------------------------------
1 | use std::collections::HashMap;
2 |
3 | use super::consts;
4 | use super::generated;
5 | use super::model::Args;
6 | use super::model::FileBuildData;
7 |
8 | pub fn build_template_files(args: &Args) -> [FileBuildData; 11] {
9 | let files = [
10 | // template/src/app_config.rs
11 | FileBuildData {
12 | file: args.dest_tmpl_file("src/app_config.rs"),
13 | data_b64: generated::FILE_APP_CONFIG_RS,
14 | search_replace_texts: None,
15 | },
16 | // template/src/app_menu.rs
17 | FileBuildData {
18 | file: args.dest_tmpl_file("src/app_menu.rs"),
19 | data_b64: generated::FILE_APP_MENU_RS,
20 | search_replace_texts: None,
21 | },
22 | // template/src/app_data.rs
23 | FileBuildData {
24 | file: args.dest_tmpl_file("src/app_data.rs"),
25 | data_b64: generated::FILE_APP_DATA_RS,
26 | search_replace_texts: {
27 | let mut map = std::collections::HashMap::new();
28 | if let Some(user_agent) = &args.user_agent {
29 | map.insert(
30 | String::from("pub const USER_AGENT: Option<&str> = None;"),
31 | format!("pub const USER_AGENT: Option<&str> = Some(\"{}\");", user_agent),
32 | );
33 | }
34 | map.insert(
35 | String::from("pub const APP_NAME: &str = \"app_name\";"),
36 | format!("pub const APP_NAME: &str = \"{}\";", &args.name),
37 | );
38 | map.insert(
39 | String::from("pub const URL: &str = \"https://google.com\";"),
40 | format!("pub const URL: &str = \"{}\";", &args.url),
41 | );
42 | Some(map)
43 | },
44 | },
45 | // template/src/builder.rs
46 | FileBuildData {
47 | file: args.dest_tmpl_file("src/builder.rs"),
48 | data_b64: generated::FILE_BUILDER_RS,
49 | search_replace_texts: None,
50 | },
51 | // template/src/generated.rs
52 | FileBuildData {
53 | file: args.dest_tmpl_file("src/generated.rs"),
54 | data_b64: generated::FILE_GENERATED_RS,
55 | search_replace_texts: None,
56 | },
57 | // template/src/main.rs
58 | FileBuildData {
59 | file: args.dest_tmpl_file("src/main.rs"),
60 | data_b64: generated::FILE_MAIN_RS,
61 | search_replace_texts: None,
62 | },
63 | // template/src/util.rs
64 | FileBuildData {
65 | file: args.dest_tmpl_file("src/util.rs"),
66 | data_b64: generated::FILE_UTIL_RS,
67 | search_replace_texts: None,
68 | },
69 | // template/build.rs
70 | FileBuildData {
71 | file: args.dest_tmpl_file("build.rs"),
72 | data_b64: generated::FILE_BUILD_RS,
73 | search_replace_texts: None,
74 | },
75 | // template/Cargo.toml
76 | FileBuildData {
77 | file: args.dest_tmpl_file("Cargo.toml"),
78 | data_b64: generated::FILE_CARGO_TOML,
79 | search_replace_texts: {
80 | let mut map = HashMap::new();
81 | map.insert(
82 | String::from("name = \"app_name_lowercased\""),
83 | format!("name = \"{}\"", &args.name.to_lowercase()),
84 | );
85 | map.insert(
86 | String::from("description = \"test_description\""),
87 | format!("description = \"{}\"", &args.description),
88 | );
89 | map.insert(
90 | String::from("version = \"0.1.0\""),
91 | format!("version = \"{}\"", &args.version),
92 | );
93 | Some(map)
94 | },
95 | },
96 | // template/Cargo.lock
97 | FileBuildData {
98 | file: args.dest_tmpl_file("Cargo.lock"),
99 | data_b64: generated::FILE_CARGO_LOCK,
100 | search_replace_texts: {
101 | let mut map = std::collections::HashMap::new();
102 | map.insert(
103 | String::from("name = \"app_name_lowercased\""),
104 | format!("name = \"{}\"", &args.name.to_lowercase()),
105 | );
106 | Some(map)
107 | },
108 | },
109 | // template/tauri.conf.json
110 | FileBuildData {
111 | file: args.dest_tmpl_file("tauri.conf.json"),
112 | data_b64: generated::FILE_TAURI_CONF_JSON,
113 | search_replace_texts: {
114 | let mut map = std::collections::HashMap::new();
115 | map.insert(
116 | String::from("\"productName\": \"app_name\""),
117 | format!("\"productName\": \"{}\"", &args.name),
118 | );
119 | map.insert(
120 | String::from("\"identifier\": \"com.example.test\""),
121 | format!("\"identifier\": \"{}\"", &args.identifier),
122 | );
123 | map.insert(
124 | String::from("\"version\": \"0.1.0\""),
125 | format!("\"version\": \"{}\"", &args.version),
126 | );
127 | if args.icon.is_some() {
128 | map.insert(
129 | String::from("\"icon\": []"),
130 | format!("\"icon\": [{}]", consts::TAURI_ICON_ELEMENTS),
131 | );
132 | }
133 | Some(map)
134 | },
135 | },
136 | ];
137 |
138 | return files;
139 | }
140 |
--------------------------------------------------------------------------------
/src/util.rs:
--------------------------------------------------------------------------------
1 | use std::collections::HashMap;
2 | use std::fs;
3 | use std::io;
4 | use std::path;
5 | use std::process;
6 | use std::vec::Vec;
7 |
8 | pub fn open_dir_in_explorer(dir: &String) {
9 | let cli_data: HashMap<&str, &str> = [
10 | ("windows", "explorer"),
11 | ("linux", "xdg-open"),
12 | ("macos", "open"),
13 | ]
14 | .iter()
15 | .cloned()
16 | .collect();
17 |
18 | process::Command::new(cli_data[std::env::consts::OS])
19 | .arg(dir)
20 | .spawn()
21 | .unwrap();
22 | }
23 |
24 | pub fn run_os_command_standard(args: &str, command_dir: Option<&str>) -> io::Result<()> {
25 | let args = args.split_whitespace().collect::>();
26 |
27 | if args.is_empty() {
28 | return Err(io::Error::new(io::ErrorKind::Other, "No command provided"));
29 | }
30 |
31 | let mut command = process::Command::new(&args[0]);
32 |
33 | if command_dir.is_some() {
34 | command.current_dir(command_dir.unwrap());
35 | }
36 |
37 | for arg in args.iter().skip(1) {
38 | command.arg(arg);
39 | }
40 |
41 | command.status()?;
42 |
43 | Ok(())
44 | }
45 |
46 | pub fn re_create_dir(name: &str) -> io::Result<()> {
47 | let dir = path::Path::new(&name);
48 |
49 | // first delete the directory if it exists
50 | if dir.exists() {
51 | fs::remove_dir_all(&dir)?;
52 | }
53 |
54 | fs::create_dir_all(dir)
55 | }
56 |
57 | pub fn copy_file(source: &String, dest: String) -> io::Result<()> {
58 | fs::copy(source, dest)?;
59 | Ok(())
60 | }
61 |
--------------------------------------------------------------------------------
/template/.gitignore:
--------------------------------------------------------------------------------
1 | target/
2 |
--------------------------------------------------------------------------------
/template/Cargo.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Cargo.
2 | # It is not intended for manual editing.
3 | version = 3
4 |
5 | [[package]]
6 | name = "adler"
7 | version = "1.0.2"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
10 |
11 | [[package]]
12 | name = "aho-corasick"
13 | version = "0.7.20"
14 | source = "registry+https://github.com/rust-lang/crates.io-index"
15 | checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
16 | dependencies = [
17 | "memchr",
18 | ]
19 |
20 | [[package]]
21 | name = "alloc-no-stdlib"
22 | version = "2.0.4"
23 | source = "registry+https://github.com/rust-lang/crates.io-index"
24 | checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
25 |
26 | [[package]]
27 | name = "alloc-stdlib"
28 | version = "0.2.2"
29 | source = "registry+https://github.com/rust-lang/crates.io-index"
30 | checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
31 | dependencies = [
32 | "alloc-no-stdlib",
33 | ]
34 |
35 | [[package]]
36 | name = "anyhow"
37 | version = "1.0.69"
38 | source = "registry+https://github.com/rust-lang/crates.io-index"
39 | checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800"
40 |
41 | [[package]]
42 | name = "app_name_lowercased"
43 | version = "0.1.0"
44 | dependencies = [
45 | "cocoa",
46 | "home",
47 | "objc",
48 | "reqwest",
49 | "serde",
50 | "serde_json",
51 | "tao",
52 | "tauri",
53 | "tauri-build",
54 | "webkit2gtk",
55 | "wry",
56 | ]
57 |
58 | [[package]]
59 | name = "atk"
60 | version = "0.15.1"
61 | source = "registry+https://github.com/rust-lang/crates.io-index"
62 | checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd"
63 | dependencies = [
64 | "atk-sys",
65 | "bitflags",
66 | "glib",
67 | "libc",
68 | ]
69 |
70 | [[package]]
71 | name = "atk-sys"
72 | version = "0.15.1"
73 | source = "registry+https://github.com/rust-lang/crates.io-index"
74 | checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6"
75 | dependencies = [
76 | "glib-sys",
77 | "gobject-sys",
78 | "libc",
79 | "system-deps 6.0.3",
80 | ]
81 |
82 | [[package]]
83 | name = "autocfg"
84 | version = "1.1.0"
85 | source = "registry+https://github.com/rust-lang/crates.io-index"
86 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
87 |
88 | [[package]]
89 | name = "base64"
90 | version = "0.13.1"
91 | source = "registry+https://github.com/rust-lang/crates.io-index"
92 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
93 |
94 | [[package]]
95 | name = "base64"
96 | version = "0.21.0"
97 | source = "registry+https://github.com/rust-lang/crates.io-index"
98 | checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
99 |
100 | [[package]]
101 | name = "bitflags"
102 | version = "1.3.2"
103 | source = "registry+https://github.com/rust-lang/crates.io-index"
104 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
105 |
106 | [[package]]
107 | name = "block"
108 | version = "0.1.6"
109 | source = "registry+https://github.com/rust-lang/crates.io-index"
110 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
111 |
112 | [[package]]
113 | name = "block-buffer"
114 | version = "0.10.4"
115 | source = "registry+https://github.com/rust-lang/crates.io-index"
116 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
117 | dependencies = [
118 | "generic-array",
119 | ]
120 |
121 | [[package]]
122 | name = "brotli"
123 | version = "3.3.4"
124 | source = "registry+https://github.com/rust-lang/crates.io-index"
125 | checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
126 | dependencies = [
127 | "alloc-no-stdlib",
128 | "alloc-stdlib",
129 | "brotli-decompressor",
130 | ]
131 |
132 | [[package]]
133 | name = "brotli-decompressor"
134 | version = "2.3.4"
135 | source = "registry+https://github.com/rust-lang/crates.io-index"
136 | checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744"
137 | dependencies = [
138 | "alloc-no-stdlib",
139 | "alloc-stdlib",
140 | ]
141 |
142 | [[package]]
143 | name = "bstr"
144 | version = "1.4.0"
145 | source = "registry+https://github.com/rust-lang/crates.io-index"
146 | checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09"
147 | dependencies = [
148 | "memchr",
149 | "serde",
150 | ]
151 |
152 | [[package]]
153 | name = "bumpalo"
154 | version = "3.12.0"
155 | source = "registry+https://github.com/rust-lang/crates.io-index"
156 | checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
157 |
158 | [[package]]
159 | name = "bytemuck"
160 | version = "1.13.1"
161 | source = "registry+https://github.com/rust-lang/crates.io-index"
162 | checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
163 |
164 | [[package]]
165 | name = "byteorder"
166 | version = "1.4.3"
167 | source = "registry+https://github.com/rust-lang/crates.io-index"
168 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
169 |
170 | [[package]]
171 | name = "bytes"
172 | version = "1.4.0"
173 | source = "registry+https://github.com/rust-lang/crates.io-index"
174 | checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
175 |
176 | [[package]]
177 | name = "cairo-rs"
178 | version = "0.15.12"
179 | source = "registry+https://github.com/rust-lang/crates.io-index"
180 | checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc"
181 | dependencies = [
182 | "bitflags",
183 | "cairo-sys-rs",
184 | "glib",
185 | "libc",
186 | "thiserror",
187 | ]
188 |
189 | [[package]]
190 | name = "cairo-sys-rs"
191 | version = "0.15.1"
192 | source = "registry+https://github.com/rust-lang/crates.io-index"
193 | checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
194 | dependencies = [
195 | "glib-sys",
196 | "libc",
197 | "system-deps 6.0.3",
198 | ]
199 |
200 | [[package]]
201 | name = "cargo_toml"
202 | version = "0.13.3"
203 | source = "registry+https://github.com/rust-lang/crates.io-index"
204 | checksum = "497049e9477329f8f6a559972ee42e117487d01d1e8c2cc9f836ea6fa23a9e1a"
205 | dependencies = [
206 | "serde",
207 | "toml",
208 | ]
209 |
210 | [[package]]
211 | name = "cc"
212 | version = "1.0.79"
213 | source = "registry+https://github.com/rust-lang/crates.io-index"
214 | checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
215 |
216 | [[package]]
217 | name = "cesu8"
218 | version = "1.1.0"
219 | source = "registry+https://github.com/rust-lang/crates.io-index"
220 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
221 |
222 | [[package]]
223 | name = "cfb"
224 | version = "0.6.1"
225 | source = "registry+https://github.com/rust-lang/crates.io-index"
226 | checksum = "74f89d248799e3f15f91b70917f65381062a01bb8e222700ea0e5a7ff9785f9c"
227 | dependencies = [
228 | "byteorder",
229 | "uuid 0.8.2",
230 | ]
231 |
232 | [[package]]
233 | name = "cfg-expr"
234 | version = "0.9.1"
235 | source = "registry+https://github.com/rust-lang/crates.io-index"
236 | checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7"
237 | dependencies = [
238 | "smallvec",
239 | ]
240 |
241 | [[package]]
242 | name = "cfg-expr"
243 | version = "0.11.0"
244 | source = "registry+https://github.com/rust-lang/crates.io-index"
245 | checksum = "b0357a6402b295ca3a86bc148e84df46c02e41f41fef186bda662557ef6328aa"
246 | dependencies = [
247 | "smallvec",
248 | ]
249 |
250 | [[package]]
251 | name = "cfg-if"
252 | version = "1.0.0"
253 | source = "registry+https://github.com/rust-lang/crates.io-index"
254 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
255 |
256 | [[package]]
257 | name = "cocoa"
258 | version = "0.24.1"
259 | source = "registry+https://github.com/rust-lang/crates.io-index"
260 | checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a"
261 | dependencies = [
262 | "bitflags",
263 | "block",
264 | "cocoa-foundation",
265 | "core-foundation",
266 | "core-graphics",
267 | "foreign-types",
268 | "libc",
269 | "objc",
270 | ]
271 |
272 | [[package]]
273 | name = "cocoa-foundation"
274 | version = "0.1.0"
275 | source = "registry+https://github.com/rust-lang/crates.io-index"
276 | checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318"
277 | dependencies = [
278 | "bitflags",
279 | "block",
280 | "core-foundation",
281 | "core-graphics-types",
282 | "foreign-types",
283 | "libc",
284 | "objc",
285 | ]
286 |
287 | [[package]]
288 | name = "color_quant"
289 | version = "1.1.0"
290 | source = "registry+https://github.com/rust-lang/crates.io-index"
291 | checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
292 |
293 | [[package]]
294 | name = "combine"
295 | version = "4.6.6"
296 | source = "registry+https://github.com/rust-lang/crates.io-index"
297 | checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
298 | dependencies = [
299 | "bytes",
300 | "memchr",
301 | ]
302 |
303 | [[package]]
304 | name = "convert_case"
305 | version = "0.4.0"
306 | source = "registry+https://github.com/rust-lang/crates.io-index"
307 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
308 |
309 | [[package]]
310 | name = "core-foundation"
311 | version = "0.9.3"
312 | source = "registry+https://github.com/rust-lang/crates.io-index"
313 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
314 | dependencies = [
315 | "core-foundation-sys",
316 | "libc",
317 | ]
318 |
319 | [[package]]
320 | name = "core-foundation-sys"
321 | version = "0.8.3"
322 | source = "registry+https://github.com/rust-lang/crates.io-index"
323 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
324 |
325 | [[package]]
326 | name = "core-graphics"
327 | version = "0.22.3"
328 | source = "registry+https://github.com/rust-lang/crates.io-index"
329 | checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
330 | dependencies = [
331 | "bitflags",
332 | "core-foundation",
333 | "core-graphics-types",
334 | "foreign-types",
335 | "libc",
336 | ]
337 |
338 | [[package]]
339 | name = "core-graphics-types"
340 | version = "0.1.1"
341 | source = "registry+https://github.com/rust-lang/crates.io-index"
342 | checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
343 | dependencies = [
344 | "bitflags",
345 | "core-foundation",
346 | "foreign-types",
347 | "libc",
348 | ]
349 |
350 | [[package]]
351 | name = "cpufeatures"
352 | version = "0.2.5"
353 | source = "registry+https://github.com/rust-lang/crates.io-index"
354 | checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
355 | dependencies = [
356 | "libc",
357 | ]
358 |
359 | [[package]]
360 | name = "crc32fast"
361 | version = "1.3.2"
362 | source = "registry+https://github.com/rust-lang/crates.io-index"
363 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
364 | dependencies = [
365 | "cfg-if",
366 | ]
367 |
368 | [[package]]
369 | name = "crossbeam-channel"
370 | version = "0.5.7"
371 | source = "registry+https://github.com/rust-lang/crates.io-index"
372 | checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c"
373 | dependencies = [
374 | "cfg-if",
375 | "crossbeam-utils",
376 | ]
377 |
378 | [[package]]
379 | name = "crossbeam-utils"
380 | version = "0.8.15"
381 | source = "registry+https://github.com/rust-lang/crates.io-index"
382 | checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
383 | dependencies = [
384 | "cfg-if",
385 | ]
386 |
387 | [[package]]
388 | name = "crypto-common"
389 | version = "0.1.6"
390 | source = "registry+https://github.com/rust-lang/crates.io-index"
391 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
392 | dependencies = [
393 | "generic-array",
394 | "typenum",
395 | ]
396 |
397 | [[package]]
398 | name = "cssparser"
399 | version = "0.27.2"
400 | source = "registry+https://github.com/rust-lang/crates.io-index"
401 | checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a"
402 | dependencies = [
403 | "cssparser-macros",
404 | "dtoa-short",
405 | "itoa 0.4.8",
406 | "matches",
407 | "phf 0.8.0",
408 | "proc-macro2",
409 | "quote",
410 | "smallvec",
411 | "syn",
412 | ]
413 |
414 | [[package]]
415 | name = "cssparser-macros"
416 | version = "0.6.0"
417 | source = "registry+https://github.com/rust-lang/crates.io-index"
418 | checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e"
419 | dependencies = [
420 | "quote",
421 | "syn",
422 | ]
423 |
424 | [[package]]
425 | name = "ctor"
426 | version = "0.1.26"
427 | source = "registry+https://github.com/rust-lang/crates.io-index"
428 | checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
429 | dependencies = [
430 | "quote",
431 | "syn",
432 | ]
433 |
434 | [[package]]
435 | name = "darling"
436 | version = "0.13.4"
437 | source = "registry+https://github.com/rust-lang/crates.io-index"
438 | checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
439 | dependencies = [
440 | "darling_core",
441 | "darling_macro",
442 | ]
443 |
444 | [[package]]
445 | name = "darling_core"
446 | version = "0.13.4"
447 | source = "registry+https://github.com/rust-lang/crates.io-index"
448 | checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
449 | dependencies = [
450 | "fnv",
451 | "ident_case",
452 | "proc-macro2",
453 | "quote",
454 | "strsim",
455 | "syn",
456 | ]
457 |
458 | [[package]]
459 | name = "darling_macro"
460 | version = "0.13.4"
461 | source = "registry+https://github.com/rust-lang/crates.io-index"
462 | checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
463 | dependencies = [
464 | "darling_core",
465 | "quote",
466 | "syn",
467 | ]
468 |
469 | [[package]]
470 | name = "dbus"
471 | version = "0.9.7"
472 | source = "registry+https://github.com/rust-lang/crates.io-index"
473 | checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b"
474 | dependencies = [
475 | "libc",
476 | "libdbus-sys",
477 | "winapi",
478 | ]
479 |
480 | [[package]]
481 | name = "derive_more"
482 | version = "0.99.17"
483 | source = "registry+https://github.com/rust-lang/crates.io-index"
484 | checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
485 | dependencies = [
486 | "convert_case",
487 | "proc-macro2",
488 | "quote",
489 | "rustc_version",
490 | "syn",
491 | ]
492 |
493 | [[package]]
494 | name = "digest"
495 | version = "0.10.6"
496 | source = "registry+https://github.com/rust-lang/crates.io-index"
497 | checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
498 | dependencies = [
499 | "block-buffer",
500 | "crypto-common",
501 | ]
502 |
503 | [[package]]
504 | name = "dirs-next"
505 | version = "2.0.0"
506 | source = "registry+https://github.com/rust-lang/crates.io-index"
507 | checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
508 | dependencies = [
509 | "cfg-if",
510 | "dirs-sys-next",
511 | ]
512 |
513 | [[package]]
514 | name = "dirs-sys-next"
515 | version = "0.1.2"
516 | source = "registry+https://github.com/rust-lang/crates.io-index"
517 | checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
518 | dependencies = [
519 | "libc",
520 | "redox_users",
521 | "winapi",
522 | ]
523 |
524 | [[package]]
525 | name = "dispatch"
526 | version = "0.2.0"
527 | source = "registry+https://github.com/rust-lang/crates.io-index"
528 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
529 |
530 | [[package]]
531 | name = "dtoa"
532 | version = "0.4.8"
533 | source = "registry+https://github.com/rust-lang/crates.io-index"
534 | checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
535 |
536 | [[package]]
537 | name = "dtoa-short"
538 | version = "0.3.3"
539 | source = "registry+https://github.com/rust-lang/crates.io-index"
540 | checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6"
541 | dependencies = [
542 | "dtoa",
543 | ]
544 |
545 | [[package]]
546 | name = "dunce"
547 | version = "1.0.3"
548 | source = "registry+https://github.com/rust-lang/crates.io-index"
549 | checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c"
550 |
551 | [[package]]
552 | name = "embed_plist"
553 | version = "1.2.2"
554 | source = "registry+https://github.com/rust-lang/crates.io-index"
555 | checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7"
556 |
557 | [[package]]
558 | name = "encoding_rs"
559 | version = "0.8.32"
560 | source = "registry+https://github.com/rust-lang/crates.io-index"
561 | checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
562 | dependencies = [
563 | "cfg-if",
564 | ]
565 |
566 | [[package]]
567 | name = "errno"
568 | version = "0.2.8"
569 | source = "registry+https://github.com/rust-lang/crates.io-index"
570 | checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
571 | dependencies = [
572 | "errno-dragonfly",
573 | "libc",
574 | "winapi",
575 | ]
576 |
577 | [[package]]
578 | name = "errno-dragonfly"
579 | version = "0.1.2"
580 | source = "registry+https://github.com/rust-lang/crates.io-index"
581 | checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
582 | dependencies = [
583 | "cc",
584 | "libc",
585 | ]
586 |
587 | [[package]]
588 | name = "fastrand"
589 | version = "1.9.0"
590 | source = "registry+https://github.com/rust-lang/crates.io-index"
591 | checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
592 | dependencies = [
593 | "instant",
594 | ]
595 |
596 | [[package]]
597 | name = "field-offset"
598 | version = "0.3.5"
599 | source = "registry+https://github.com/rust-lang/crates.io-index"
600 | checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535"
601 | dependencies = [
602 | "memoffset",
603 | "rustc_version",
604 | ]
605 |
606 | [[package]]
607 | name = "filetime"
608 | version = "0.2.20"
609 | source = "registry+https://github.com/rust-lang/crates.io-index"
610 | checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412"
611 | dependencies = [
612 | "cfg-if",
613 | "libc",
614 | "redox_syscall",
615 | "windows-sys 0.45.0",
616 | ]
617 |
618 | [[package]]
619 | name = "flate2"
620 | version = "1.0.25"
621 | source = "registry+https://github.com/rust-lang/crates.io-index"
622 | checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
623 | dependencies = [
624 | "crc32fast",
625 | "miniz_oxide",
626 | ]
627 |
628 | [[package]]
629 | name = "fnv"
630 | version = "1.0.7"
631 | source = "registry+https://github.com/rust-lang/crates.io-index"
632 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
633 |
634 | [[package]]
635 | name = "foreign-types"
636 | version = "0.3.2"
637 | source = "registry+https://github.com/rust-lang/crates.io-index"
638 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
639 | dependencies = [
640 | "foreign-types-shared",
641 | ]
642 |
643 | [[package]]
644 | name = "foreign-types-shared"
645 | version = "0.1.1"
646 | source = "registry+https://github.com/rust-lang/crates.io-index"
647 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
648 |
649 | [[package]]
650 | name = "form_urlencoded"
651 | version = "1.1.0"
652 | source = "registry+https://github.com/rust-lang/crates.io-index"
653 | checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
654 | dependencies = [
655 | "percent-encoding",
656 | ]
657 |
658 | [[package]]
659 | name = "futf"
660 | version = "0.1.5"
661 | source = "registry+https://github.com/rust-lang/crates.io-index"
662 | checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
663 | dependencies = [
664 | "mac",
665 | "new_debug_unreachable",
666 | ]
667 |
668 | [[package]]
669 | name = "futures-channel"
670 | version = "0.3.26"
671 | source = "registry+https://github.com/rust-lang/crates.io-index"
672 | checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5"
673 | dependencies = [
674 | "futures-core",
675 | ]
676 |
677 | [[package]]
678 | name = "futures-core"
679 | version = "0.3.26"
680 | source = "registry+https://github.com/rust-lang/crates.io-index"
681 | checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608"
682 |
683 | [[package]]
684 | name = "futures-executor"
685 | version = "0.3.26"
686 | source = "registry+https://github.com/rust-lang/crates.io-index"
687 | checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e"
688 | dependencies = [
689 | "futures-core",
690 | "futures-task",
691 | "futures-util",
692 | ]
693 |
694 | [[package]]
695 | name = "futures-io"
696 | version = "0.3.26"
697 | source = "registry+https://github.com/rust-lang/crates.io-index"
698 | checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531"
699 |
700 | [[package]]
701 | name = "futures-macro"
702 | version = "0.3.26"
703 | source = "registry+https://github.com/rust-lang/crates.io-index"
704 | checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70"
705 | dependencies = [
706 | "proc-macro2",
707 | "quote",
708 | "syn",
709 | ]
710 |
711 | [[package]]
712 | name = "futures-sink"
713 | version = "0.3.28"
714 | source = "registry+https://github.com/rust-lang/crates.io-index"
715 | checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
716 |
717 | [[package]]
718 | name = "futures-task"
719 | version = "0.3.26"
720 | source = "registry+https://github.com/rust-lang/crates.io-index"
721 | checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366"
722 |
723 | [[package]]
724 | name = "futures-util"
725 | version = "0.3.26"
726 | source = "registry+https://github.com/rust-lang/crates.io-index"
727 | checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1"
728 | dependencies = [
729 | "futures-core",
730 | "futures-io",
731 | "futures-macro",
732 | "futures-task",
733 | "memchr",
734 | "pin-project-lite",
735 | "pin-utils",
736 | "slab",
737 | ]
738 |
739 | [[package]]
740 | name = "fxhash"
741 | version = "0.2.1"
742 | source = "registry+https://github.com/rust-lang/crates.io-index"
743 | checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
744 | dependencies = [
745 | "byteorder",
746 | ]
747 |
748 | [[package]]
749 | name = "gdk"
750 | version = "0.15.4"
751 | source = "registry+https://github.com/rust-lang/crates.io-index"
752 | checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8"
753 | dependencies = [
754 | "bitflags",
755 | "cairo-rs",
756 | "gdk-pixbuf",
757 | "gdk-sys",
758 | "gio",
759 | "glib",
760 | "libc",
761 | "pango",
762 | ]
763 |
764 | [[package]]
765 | name = "gdk-pixbuf"
766 | version = "0.15.11"
767 | source = "registry+https://github.com/rust-lang/crates.io-index"
768 | checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a"
769 | dependencies = [
770 | "bitflags",
771 | "gdk-pixbuf-sys",
772 | "gio",
773 | "glib",
774 | "libc",
775 | ]
776 |
777 | [[package]]
778 | name = "gdk-pixbuf-sys"
779 | version = "0.15.10"
780 | source = "registry+https://github.com/rust-lang/crates.io-index"
781 | checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7"
782 | dependencies = [
783 | "gio-sys",
784 | "glib-sys",
785 | "gobject-sys",
786 | "libc",
787 | "system-deps 6.0.3",
788 | ]
789 |
790 | [[package]]
791 | name = "gdk-sys"
792 | version = "0.15.1"
793 | source = "registry+https://github.com/rust-lang/crates.io-index"
794 | checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88"
795 | dependencies = [
796 | "cairo-sys-rs",
797 | "gdk-pixbuf-sys",
798 | "gio-sys",
799 | "glib-sys",
800 | "gobject-sys",
801 | "libc",
802 | "pango-sys",
803 | "pkg-config",
804 | "system-deps 6.0.3",
805 | ]
806 |
807 | [[package]]
808 | name = "gdkx11-sys"
809 | version = "0.15.1"
810 | source = "registry+https://github.com/rust-lang/crates.io-index"
811 | checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178"
812 | dependencies = [
813 | "gdk-sys",
814 | "glib-sys",
815 | "libc",
816 | "system-deps 6.0.3",
817 | "x11",
818 | ]
819 |
820 | [[package]]
821 | name = "generator"
822 | version = "0.7.3"
823 | source = "registry+https://github.com/rust-lang/crates.io-index"
824 | checksum = "33a20a288a94683f5f4da0adecdbe095c94a77c295e514cc6484e9394dd8376e"
825 | dependencies = [
826 | "cc",
827 | "libc",
828 | "log",
829 | "rustversion",
830 | "windows 0.44.0",
831 | ]
832 |
833 | [[package]]
834 | name = "generic-array"
835 | version = "0.14.6"
836 | source = "registry+https://github.com/rust-lang/crates.io-index"
837 | checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
838 | dependencies = [
839 | "typenum",
840 | "version_check",
841 | ]
842 |
843 | [[package]]
844 | name = "getrandom"
845 | version = "0.1.16"
846 | source = "registry+https://github.com/rust-lang/crates.io-index"
847 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
848 | dependencies = [
849 | "cfg-if",
850 | "libc",
851 | "wasi 0.9.0+wasi-snapshot-preview1",
852 | ]
853 |
854 | [[package]]
855 | name = "getrandom"
856 | version = "0.2.8"
857 | source = "registry+https://github.com/rust-lang/crates.io-index"
858 | checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
859 | dependencies = [
860 | "cfg-if",
861 | "libc",
862 | "wasi 0.11.0+wasi-snapshot-preview1",
863 | ]
864 |
865 | [[package]]
866 | name = "gio"
867 | version = "0.15.12"
868 | source = "registry+https://github.com/rust-lang/crates.io-index"
869 | checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b"
870 | dependencies = [
871 | "bitflags",
872 | "futures-channel",
873 | "futures-core",
874 | "futures-io",
875 | "gio-sys",
876 | "glib",
877 | "libc",
878 | "once_cell",
879 | "thiserror",
880 | ]
881 |
882 | [[package]]
883 | name = "gio-sys"
884 | version = "0.15.10"
885 | source = "registry+https://github.com/rust-lang/crates.io-index"
886 | checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d"
887 | dependencies = [
888 | "glib-sys",
889 | "gobject-sys",
890 | "libc",
891 | "system-deps 6.0.3",
892 | "winapi",
893 | ]
894 |
895 | [[package]]
896 | name = "glib"
897 | version = "0.15.12"
898 | source = "registry+https://github.com/rust-lang/crates.io-index"
899 | checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d"
900 | dependencies = [
901 | "bitflags",
902 | "futures-channel",
903 | "futures-core",
904 | "futures-executor",
905 | "futures-task",
906 | "glib-macros",
907 | "glib-sys",
908 | "gobject-sys",
909 | "libc",
910 | "once_cell",
911 | "smallvec",
912 | "thiserror",
913 | ]
914 |
915 | [[package]]
916 | name = "glib-macros"
917 | version = "0.15.11"
918 | source = "registry+https://github.com/rust-lang/crates.io-index"
919 | checksum = "25a68131a662b04931e71891fb14aaf65ee4b44d08e8abc10f49e77418c86c64"
920 | dependencies = [
921 | "anyhow",
922 | "heck 0.4.1",
923 | "proc-macro-crate",
924 | "proc-macro-error",
925 | "proc-macro2",
926 | "quote",
927 | "syn",
928 | ]
929 |
930 | [[package]]
931 | name = "glib-sys"
932 | version = "0.15.10"
933 | source = "registry+https://github.com/rust-lang/crates.io-index"
934 | checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4"
935 | dependencies = [
936 | "libc",
937 | "system-deps 6.0.3",
938 | ]
939 |
940 | [[package]]
941 | name = "glob"
942 | version = "0.3.1"
943 | source = "registry+https://github.com/rust-lang/crates.io-index"
944 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
945 |
946 | [[package]]
947 | name = "globset"
948 | version = "0.4.10"
949 | source = "registry+https://github.com/rust-lang/crates.io-index"
950 | checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc"
951 | dependencies = [
952 | "aho-corasick",
953 | "bstr",
954 | "fnv",
955 | "log",
956 | "regex",
957 | ]
958 |
959 | [[package]]
960 | name = "gobject-sys"
961 | version = "0.15.10"
962 | source = "registry+https://github.com/rust-lang/crates.io-index"
963 | checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a"
964 | dependencies = [
965 | "glib-sys",
966 | "libc",
967 | "system-deps 6.0.3",
968 | ]
969 |
970 | [[package]]
971 | name = "gtk"
972 | version = "0.15.5"
973 | source = "registry+https://github.com/rust-lang/crates.io-index"
974 | checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0"
975 | dependencies = [
976 | "atk",
977 | "bitflags",
978 | "cairo-rs",
979 | "field-offset",
980 | "futures-channel",
981 | "gdk",
982 | "gdk-pixbuf",
983 | "gio",
984 | "glib",
985 | "gtk-sys",
986 | "gtk3-macros",
987 | "libc",
988 | "once_cell",
989 | "pango",
990 | "pkg-config",
991 | ]
992 |
993 | [[package]]
994 | name = "gtk-sys"
995 | version = "0.15.3"
996 | source = "registry+https://github.com/rust-lang/crates.io-index"
997 | checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84"
998 | dependencies = [
999 | "atk-sys",
1000 | "cairo-sys-rs",
1001 | "gdk-pixbuf-sys",
1002 | "gdk-sys",
1003 | "gio-sys",
1004 | "glib-sys",
1005 | "gobject-sys",
1006 | "libc",
1007 | "pango-sys",
1008 | "system-deps 6.0.3",
1009 | ]
1010 |
1011 | [[package]]
1012 | name = "gtk3-macros"
1013 | version = "0.15.4"
1014 | source = "registry+https://github.com/rust-lang/crates.io-index"
1015 | checksum = "24f518afe90c23fba585b2d7697856f9e6a7bbc62f65588035e66f6afb01a2e9"
1016 | dependencies = [
1017 | "anyhow",
1018 | "proc-macro-crate",
1019 | "proc-macro-error",
1020 | "proc-macro2",
1021 | "quote",
1022 | "syn",
1023 | ]
1024 |
1025 | [[package]]
1026 | name = "h2"
1027 | version = "0.3.16"
1028 | source = "registry+https://github.com/rust-lang/crates.io-index"
1029 | checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d"
1030 | dependencies = [
1031 | "bytes",
1032 | "fnv",
1033 | "futures-core",
1034 | "futures-sink",
1035 | "futures-util",
1036 | "http",
1037 | "indexmap",
1038 | "slab",
1039 | "tokio",
1040 | "tokio-util",
1041 | "tracing",
1042 | ]
1043 |
1044 | [[package]]
1045 | name = "hashbrown"
1046 | version = "0.12.3"
1047 | source = "registry+https://github.com/rust-lang/crates.io-index"
1048 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
1049 |
1050 | [[package]]
1051 | name = "heck"
1052 | version = "0.3.3"
1053 | source = "registry+https://github.com/rust-lang/crates.io-index"
1054 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
1055 | dependencies = [
1056 | "unicode-segmentation",
1057 | ]
1058 |
1059 | [[package]]
1060 | name = "heck"
1061 | version = "0.4.1"
1062 | source = "registry+https://github.com/rust-lang/crates.io-index"
1063 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
1064 |
1065 | [[package]]
1066 | name = "hermit-abi"
1067 | version = "0.2.6"
1068 | source = "registry+https://github.com/rust-lang/crates.io-index"
1069 | checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
1070 | dependencies = [
1071 | "libc",
1072 | ]
1073 |
1074 | [[package]]
1075 | name = "hermit-abi"
1076 | version = "0.3.1"
1077 | source = "registry+https://github.com/rust-lang/crates.io-index"
1078 | checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
1079 |
1080 | [[package]]
1081 | name = "home"
1082 | version = "0.5.4"
1083 | source = "registry+https://github.com/rust-lang/crates.io-index"
1084 | checksum = "747309b4b440c06d57b0b25f2aee03ee9b5e5397d288c60e21fc709bb98a7408"
1085 | dependencies = [
1086 | "winapi",
1087 | ]
1088 |
1089 | [[package]]
1090 | name = "html5ever"
1091 | version = "0.25.2"
1092 | source = "registry+https://github.com/rust-lang/crates.io-index"
1093 | checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148"
1094 | dependencies = [
1095 | "log",
1096 | "mac",
1097 | "markup5ever",
1098 | "proc-macro2",
1099 | "quote",
1100 | "syn",
1101 | ]
1102 |
1103 | [[package]]
1104 | name = "http"
1105 | version = "0.2.9"
1106 | source = "registry+https://github.com/rust-lang/crates.io-index"
1107 | checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
1108 | dependencies = [
1109 | "bytes",
1110 | "fnv",
1111 | "itoa 1.0.6",
1112 | ]
1113 |
1114 | [[package]]
1115 | name = "http-body"
1116 | version = "0.4.5"
1117 | source = "registry+https://github.com/rust-lang/crates.io-index"
1118 | checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
1119 | dependencies = [
1120 | "bytes",
1121 | "http",
1122 | "pin-project-lite",
1123 | ]
1124 |
1125 | [[package]]
1126 | name = "http-range"
1127 | version = "0.1.5"
1128 | source = "registry+https://github.com/rust-lang/crates.io-index"
1129 | checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
1130 |
1131 | [[package]]
1132 | name = "httparse"
1133 | version = "1.8.0"
1134 | source = "registry+https://github.com/rust-lang/crates.io-index"
1135 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
1136 |
1137 | [[package]]
1138 | name = "httpdate"
1139 | version = "1.0.2"
1140 | source = "registry+https://github.com/rust-lang/crates.io-index"
1141 | checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
1142 |
1143 | [[package]]
1144 | name = "hyper"
1145 | version = "0.14.25"
1146 | source = "registry+https://github.com/rust-lang/crates.io-index"
1147 | checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899"
1148 | dependencies = [
1149 | "bytes",
1150 | "futures-channel",
1151 | "futures-core",
1152 | "futures-util",
1153 | "h2",
1154 | "http",
1155 | "http-body",
1156 | "httparse",
1157 | "httpdate",
1158 | "itoa 1.0.6",
1159 | "pin-project-lite",
1160 | "socket2",
1161 | "tokio",
1162 | "tower-service",
1163 | "tracing",
1164 | "want",
1165 | ]
1166 |
1167 | [[package]]
1168 | name = "hyper-tls"
1169 | version = "0.5.0"
1170 | source = "registry+https://github.com/rust-lang/crates.io-index"
1171 | checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
1172 | dependencies = [
1173 | "bytes",
1174 | "hyper",
1175 | "native-tls",
1176 | "tokio",
1177 | "tokio-native-tls",
1178 | ]
1179 |
1180 | [[package]]
1181 | name = "ico"
1182 | version = "0.2.0"
1183 | source = "registry+https://github.com/rust-lang/crates.io-index"
1184 | checksum = "031530fe562d8c8d71c0635013d6d155bbfe8ba0aa4b4d2d24ce8af6b71047bd"
1185 | dependencies = [
1186 | "byteorder",
1187 | "png",
1188 | ]
1189 |
1190 | [[package]]
1191 | name = "ident_case"
1192 | version = "1.0.1"
1193 | source = "registry+https://github.com/rust-lang/crates.io-index"
1194 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
1195 |
1196 | [[package]]
1197 | name = "idna"
1198 | version = "0.3.0"
1199 | source = "registry+https://github.com/rust-lang/crates.io-index"
1200 | checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
1201 | dependencies = [
1202 | "unicode-bidi",
1203 | "unicode-normalization",
1204 | ]
1205 |
1206 | [[package]]
1207 | name = "ignore"
1208 | version = "0.4.18"
1209 | source = "registry+https://github.com/rust-lang/crates.io-index"
1210 | checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d"
1211 | dependencies = [
1212 | "crossbeam-utils",
1213 | "globset",
1214 | "lazy_static",
1215 | "log",
1216 | "memchr",
1217 | "regex",
1218 | "same-file",
1219 | "thread_local",
1220 | "walkdir",
1221 | "winapi-util",
1222 | ]
1223 |
1224 | [[package]]
1225 | name = "image"
1226 | version = "0.24.5"
1227 | source = "registry+https://github.com/rust-lang/crates.io-index"
1228 | checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945"
1229 | dependencies = [
1230 | "bytemuck",
1231 | "byteorder",
1232 | "color_quant",
1233 | "num-rational",
1234 | "num-traits",
1235 | ]
1236 |
1237 | [[package]]
1238 | name = "indexmap"
1239 | version = "1.9.2"
1240 | source = "registry+https://github.com/rust-lang/crates.io-index"
1241 | checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
1242 | dependencies = [
1243 | "autocfg",
1244 | "hashbrown",
1245 | ]
1246 |
1247 | [[package]]
1248 | name = "infer"
1249 | version = "0.7.0"
1250 | source = "registry+https://github.com/rust-lang/crates.io-index"
1251 | checksum = "20b2b533137b9cad970793453d4f921c2e91312a6d88b1085c07bc15fc51bb3b"
1252 | dependencies = [
1253 | "cfb",
1254 | ]
1255 |
1256 | [[package]]
1257 | name = "instant"
1258 | version = "0.1.12"
1259 | source = "registry+https://github.com/rust-lang/crates.io-index"
1260 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
1261 | dependencies = [
1262 | "cfg-if",
1263 | ]
1264 |
1265 | [[package]]
1266 | name = "io-lifetimes"
1267 | version = "1.0.9"
1268 | source = "registry+https://github.com/rust-lang/crates.io-index"
1269 | checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb"
1270 | dependencies = [
1271 | "hermit-abi 0.3.1",
1272 | "libc",
1273 | "windows-sys 0.45.0",
1274 | ]
1275 |
1276 | [[package]]
1277 | name = "ipnet"
1278 | version = "2.7.2"
1279 | source = "registry+https://github.com/rust-lang/crates.io-index"
1280 | checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
1281 |
1282 | [[package]]
1283 | name = "itoa"
1284 | version = "0.4.8"
1285 | source = "registry+https://github.com/rust-lang/crates.io-index"
1286 | checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
1287 |
1288 | [[package]]
1289 | name = "itoa"
1290 | version = "1.0.6"
1291 | source = "registry+https://github.com/rust-lang/crates.io-index"
1292 | checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
1293 |
1294 | [[package]]
1295 | name = "javascriptcore-rs"
1296 | version = "0.16.0"
1297 | source = "registry+https://github.com/rust-lang/crates.io-index"
1298 | checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c"
1299 | dependencies = [
1300 | "bitflags",
1301 | "glib",
1302 | "javascriptcore-rs-sys",
1303 | ]
1304 |
1305 | [[package]]
1306 | name = "javascriptcore-rs-sys"
1307 | version = "0.4.0"
1308 | source = "registry+https://github.com/rust-lang/crates.io-index"
1309 | checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c"
1310 | dependencies = [
1311 | "glib-sys",
1312 | "gobject-sys",
1313 | "libc",
1314 | "system-deps 5.0.0",
1315 | ]
1316 |
1317 | [[package]]
1318 | name = "jni"
1319 | version = "0.20.0"
1320 | source = "registry+https://github.com/rust-lang/crates.io-index"
1321 | checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c"
1322 | dependencies = [
1323 | "cesu8",
1324 | "combine",
1325 | "jni-sys",
1326 | "log",
1327 | "thiserror",
1328 | "walkdir",
1329 | ]
1330 |
1331 | [[package]]
1332 | name = "jni-sys"
1333 | version = "0.3.0"
1334 | source = "registry+https://github.com/rust-lang/crates.io-index"
1335 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
1336 |
1337 | [[package]]
1338 | name = "js-sys"
1339 | version = "0.3.61"
1340 | source = "registry+https://github.com/rust-lang/crates.io-index"
1341 | checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
1342 | dependencies = [
1343 | "wasm-bindgen",
1344 | ]
1345 |
1346 | [[package]]
1347 | name = "json-patch"
1348 | version = "0.2.7"
1349 | source = "registry+https://github.com/rust-lang/crates.io-index"
1350 | checksum = "eb3fa5a61630976fc4c353c70297f2e93f1930e3ccee574d59d618ccbd5154ce"
1351 | dependencies = [
1352 | "serde",
1353 | "serde_json",
1354 | "treediff",
1355 | ]
1356 |
1357 | [[package]]
1358 | name = "kuchiki"
1359 | version = "0.8.1"
1360 | source = "registry+https://github.com/rust-lang/crates.io-index"
1361 | checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358"
1362 | dependencies = [
1363 | "cssparser",
1364 | "html5ever",
1365 | "matches",
1366 | "selectors",
1367 | ]
1368 |
1369 | [[package]]
1370 | name = "lazy_static"
1371 | version = "1.4.0"
1372 | source = "registry+https://github.com/rust-lang/crates.io-index"
1373 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
1374 |
1375 | [[package]]
1376 | name = "libc"
1377 | version = "0.2.140"
1378 | source = "registry+https://github.com/rust-lang/crates.io-index"
1379 | checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
1380 |
1381 | [[package]]
1382 | name = "libdbus-sys"
1383 | version = "0.2.4"
1384 | source = "registry+https://github.com/rust-lang/crates.io-index"
1385 | checksum = "9f8d7ae751e1cb825c840ae5e682f59b098cdfd213c350ac268b61449a5f58a0"
1386 | dependencies = [
1387 | "pkg-config",
1388 | ]
1389 |
1390 | [[package]]
1391 | name = "line-wrap"
1392 | version = "0.1.1"
1393 | source = "registry+https://github.com/rust-lang/crates.io-index"
1394 | checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
1395 | dependencies = [
1396 | "safemem",
1397 | ]
1398 |
1399 | [[package]]
1400 | name = "linux-raw-sys"
1401 | version = "0.1.4"
1402 | source = "registry+https://github.com/rust-lang/crates.io-index"
1403 | checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
1404 |
1405 | [[package]]
1406 | name = "lock_api"
1407 | version = "0.4.9"
1408 | source = "registry+https://github.com/rust-lang/crates.io-index"
1409 | checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
1410 | dependencies = [
1411 | "autocfg",
1412 | "scopeguard",
1413 | ]
1414 |
1415 | [[package]]
1416 | name = "log"
1417 | version = "0.4.17"
1418 | source = "registry+https://github.com/rust-lang/crates.io-index"
1419 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
1420 | dependencies = [
1421 | "cfg-if",
1422 | ]
1423 |
1424 | [[package]]
1425 | name = "loom"
1426 | version = "0.5.6"
1427 | source = "registry+https://github.com/rust-lang/crates.io-index"
1428 | checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5"
1429 | dependencies = [
1430 | "cfg-if",
1431 | "generator",
1432 | "scoped-tls",
1433 | "serde",
1434 | "serde_json",
1435 | "tracing",
1436 | "tracing-subscriber",
1437 | ]
1438 |
1439 | [[package]]
1440 | name = "mac"
1441 | version = "0.1.1"
1442 | source = "registry+https://github.com/rust-lang/crates.io-index"
1443 | checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
1444 |
1445 | [[package]]
1446 | name = "mac-notification-sys"
1447 | version = "0.5.6"
1448 | source = "registry+https://github.com/rust-lang/crates.io-index"
1449 | checksum = "3e72d50edb17756489e79d52eb146927bec8eba9dd48faadf9ef08bca3791ad5"
1450 | dependencies = [
1451 | "cc",
1452 | "dirs-next",
1453 | "objc-foundation",
1454 | "objc_id",
1455 | "time",
1456 | ]
1457 |
1458 | [[package]]
1459 | name = "malloc_buf"
1460 | version = "0.0.6"
1461 | source = "registry+https://github.com/rust-lang/crates.io-index"
1462 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
1463 | dependencies = [
1464 | "libc",
1465 | ]
1466 |
1467 | [[package]]
1468 | name = "markup5ever"
1469 | version = "0.10.1"
1470 | source = "registry+https://github.com/rust-lang/crates.io-index"
1471 | checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd"
1472 | dependencies = [
1473 | "log",
1474 | "phf 0.8.0",
1475 | "phf_codegen",
1476 | "string_cache",
1477 | "string_cache_codegen",
1478 | "tendril",
1479 | ]
1480 |
1481 | [[package]]
1482 | name = "matchers"
1483 | version = "0.1.0"
1484 | source = "registry+https://github.com/rust-lang/crates.io-index"
1485 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
1486 | dependencies = [
1487 | "regex-automata",
1488 | ]
1489 |
1490 | [[package]]
1491 | name = "matches"
1492 | version = "0.1.10"
1493 | source = "registry+https://github.com/rust-lang/crates.io-index"
1494 | checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
1495 |
1496 | [[package]]
1497 | name = "memchr"
1498 | version = "2.5.0"
1499 | source = "registry+https://github.com/rust-lang/crates.io-index"
1500 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
1501 |
1502 | [[package]]
1503 | name = "memoffset"
1504 | version = "0.8.0"
1505 | source = "registry+https://github.com/rust-lang/crates.io-index"
1506 | checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
1507 | dependencies = [
1508 | "autocfg",
1509 | ]
1510 |
1511 | [[package]]
1512 | name = "mime"
1513 | version = "0.3.17"
1514 | source = "registry+https://github.com/rust-lang/crates.io-index"
1515 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
1516 |
1517 | [[package]]
1518 | name = "miniz_oxide"
1519 | version = "0.6.2"
1520 | source = "registry+https://github.com/rust-lang/crates.io-index"
1521 | checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
1522 | dependencies = [
1523 | "adler",
1524 | ]
1525 |
1526 | [[package]]
1527 | name = "mio"
1528 | version = "0.8.6"
1529 | source = "registry+https://github.com/rust-lang/crates.io-index"
1530 | checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
1531 | dependencies = [
1532 | "libc",
1533 | "log",
1534 | "wasi 0.11.0+wasi-snapshot-preview1",
1535 | "windows-sys 0.45.0",
1536 | ]
1537 |
1538 | [[package]]
1539 | name = "native-tls"
1540 | version = "0.2.11"
1541 | source = "registry+https://github.com/rust-lang/crates.io-index"
1542 | checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
1543 | dependencies = [
1544 | "lazy_static",
1545 | "libc",
1546 | "log",
1547 | "openssl",
1548 | "openssl-probe",
1549 | "openssl-sys",
1550 | "schannel",
1551 | "security-framework",
1552 | "security-framework-sys",
1553 | "tempfile",
1554 | ]
1555 |
1556 | [[package]]
1557 | name = "ndk"
1558 | version = "0.6.0"
1559 | source = "registry+https://github.com/rust-lang/crates.io-index"
1560 | checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4"
1561 | dependencies = [
1562 | "bitflags",
1563 | "jni-sys",
1564 | "ndk-sys",
1565 | "num_enum",
1566 | "thiserror",
1567 | ]
1568 |
1569 | [[package]]
1570 | name = "ndk-context"
1571 | version = "0.1.1"
1572 | source = "registry+https://github.com/rust-lang/crates.io-index"
1573 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
1574 |
1575 | [[package]]
1576 | name = "ndk-sys"
1577 | version = "0.3.0"
1578 | source = "registry+https://github.com/rust-lang/crates.io-index"
1579 | checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97"
1580 | dependencies = [
1581 | "jni-sys",
1582 | ]
1583 |
1584 | [[package]]
1585 | name = "new_debug_unreachable"
1586 | version = "1.0.4"
1587 | source = "registry+https://github.com/rust-lang/crates.io-index"
1588 | checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
1589 |
1590 | [[package]]
1591 | name = "nodrop"
1592 | version = "0.1.14"
1593 | source = "registry+https://github.com/rust-lang/crates.io-index"
1594 | checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
1595 |
1596 | [[package]]
1597 | name = "notify-rust"
1598 | version = "4.8.0"
1599 | source = "registry+https://github.com/rust-lang/crates.io-index"
1600 | checksum = "2bfa211d18e360f08e36c364308f394b5eb23a6629150690e109a916dc6f610e"
1601 | dependencies = [
1602 | "dbus",
1603 | "log",
1604 | "mac-notification-sys",
1605 | "tauri-winrt-notification",
1606 | ]
1607 |
1608 | [[package]]
1609 | name = "nu-ansi-term"
1610 | version = "0.46.0"
1611 | source = "registry+https://github.com/rust-lang/crates.io-index"
1612 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
1613 | dependencies = [
1614 | "overload",
1615 | "winapi",
1616 | ]
1617 |
1618 | [[package]]
1619 | name = "num-integer"
1620 | version = "0.1.45"
1621 | source = "registry+https://github.com/rust-lang/crates.io-index"
1622 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
1623 | dependencies = [
1624 | "autocfg",
1625 | "num-traits",
1626 | ]
1627 |
1628 | [[package]]
1629 | name = "num-rational"
1630 | version = "0.4.1"
1631 | source = "registry+https://github.com/rust-lang/crates.io-index"
1632 | checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
1633 | dependencies = [
1634 | "autocfg",
1635 | "num-integer",
1636 | "num-traits",
1637 | ]
1638 |
1639 | [[package]]
1640 | name = "num-traits"
1641 | version = "0.2.15"
1642 | source = "registry+https://github.com/rust-lang/crates.io-index"
1643 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
1644 | dependencies = [
1645 | "autocfg",
1646 | ]
1647 |
1648 | [[package]]
1649 | name = "num_cpus"
1650 | version = "1.15.0"
1651 | source = "registry+https://github.com/rust-lang/crates.io-index"
1652 | checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
1653 | dependencies = [
1654 | "hermit-abi 0.2.6",
1655 | "libc",
1656 | ]
1657 |
1658 | [[package]]
1659 | name = "num_enum"
1660 | version = "0.5.11"
1661 | source = "registry+https://github.com/rust-lang/crates.io-index"
1662 | checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
1663 | dependencies = [
1664 | "num_enum_derive",
1665 | ]
1666 |
1667 | [[package]]
1668 | name = "num_enum_derive"
1669 | version = "0.5.11"
1670 | source = "registry+https://github.com/rust-lang/crates.io-index"
1671 | checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
1672 | dependencies = [
1673 | "proc-macro-crate",
1674 | "proc-macro2",
1675 | "quote",
1676 | "syn",
1677 | ]
1678 |
1679 | [[package]]
1680 | name = "objc"
1681 | version = "0.2.7"
1682 | source = "registry+https://github.com/rust-lang/crates.io-index"
1683 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
1684 | dependencies = [
1685 | "malloc_buf",
1686 | "objc_exception",
1687 | ]
1688 |
1689 | [[package]]
1690 | name = "objc-foundation"
1691 | version = "0.1.1"
1692 | source = "registry+https://github.com/rust-lang/crates.io-index"
1693 | checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
1694 | dependencies = [
1695 | "block",
1696 | "objc",
1697 | "objc_id",
1698 | ]
1699 |
1700 | [[package]]
1701 | name = "objc_exception"
1702 | version = "0.1.2"
1703 | source = "registry+https://github.com/rust-lang/crates.io-index"
1704 | checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
1705 | dependencies = [
1706 | "cc",
1707 | ]
1708 |
1709 | [[package]]
1710 | name = "objc_id"
1711 | version = "0.1.1"
1712 | source = "registry+https://github.com/rust-lang/crates.io-index"
1713 | checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
1714 | dependencies = [
1715 | "objc",
1716 | ]
1717 |
1718 | [[package]]
1719 | name = "once_cell"
1720 | version = "1.17.1"
1721 | source = "registry+https://github.com/rust-lang/crates.io-index"
1722 | checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
1723 |
1724 | [[package]]
1725 | name = "open"
1726 | version = "3.2.0"
1727 | source = "registry+https://github.com/rust-lang/crates.io-index"
1728 | checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8"
1729 | dependencies = [
1730 | "pathdiff",
1731 | "windows-sys 0.42.0",
1732 | ]
1733 |
1734 | [[package]]
1735 | name = "openssl"
1736 | version = "0.10.48"
1737 | source = "registry+https://github.com/rust-lang/crates.io-index"
1738 | checksum = "518915b97df115dd36109bfa429a48b8f737bd05508cf9588977b599648926d2"
1739 | dependencies = [
1740 | "bitflags",
1741 | "cfg-if",
1742 | "foreign-types",
1743 | "libc",
1744 | "once_cell",
1745 | "openssl-macros",
1746 | "openssl-sys",
1747 | ]
1748 |
1749 | [[package]]
1750 | name = "openssl-macros"
1751 | version = "0.1.0"
1752 | source = "registry+https://github.com/rust-lang/crates.io-index"
1753 | checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
1754 | dependencies = [
1755 | "proc-macro2",
1756 | "quote",
1757 | "syn",
1758 | ]
1759 |
1760 | [[package]]
1761 | name = "openssl-probe"
1762 | version = "0.1.5"
1763 | source = "registry+https://github.com/rust-lang/crates.io-index"
1764 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
1765 |
1766 | [[package]]
1767 | name = "openssl-sys"
1768 | version = "0.9.83"
1769 | source = "registry+https://github.com/rust-lang/crates.io-index"
1770 | checksum = "666416d899cf077260dac8698d60a60b435a46d57e82acb1be3d0dad87284e5b"
1771 | dependencies = [
1772 | "autocfg",
1773 | "cc",
1774 | "libc",
1775 | "pkg-config",
1776 | "vcpkg",
1777 | ]
1778 |
1779 | [[package]]
1780 | name = "overload"
1781 | version = "0.1.1"
1782 | source = "registry+https://github.com/rust-lang/crates.io-index"
1783 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
1784 |
1785 | [[package]]
1786 | name = "pango"
1787 | version = "0.15.10"
1788 | source = "registry+https://github.com/rust-lang/crates.io-index"
1789 | checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f"
1790 | dependencies = [
1791 | "bitflags",
1792 | "glib",
1793 | "libc",
1794 | "once_cell",
1795 | "pango-sys",
1796 | ]
1797 |
1798 | [[package]]
1799 | name = "pango-sys"
1800 | version = "0.15.10"
1801 | source = "registry+https://github.com/rust-lang/crates.io-index"
1802 | checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa"
1803 | dependencies = [
1804 | "glib-sys",
1805 | "gobject-sys",
1806 | "libc",
1807 | "system-deps 6.0.3",
1808 | ]
1809 |
1810 | [[package]]
1811 | name = "parking_lot"
1812 | version = "0.12.1"
1813 | source = "registry+https://github.com/rust-lang/crates.io-index"
1814 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
1815 | dependencies = [
1816 | "lock_api",
1817 | "parking_lot_core",
1818 | ]
1819 |
1820 | [[package]]
1821 | name = "parking_lot_core"
1822 | version = "0.9.7"
1823 | source = "registry+https://github.com/rust-lang/crates.io-index"
1824 | checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
1825 | dependencies = [
1826 | "cfg-if",
1827 | "libc",
1828 | "redox_syscall",
1829 | "smallvec",
1830 | "windows-sys 0.45.0",
1831 | ]
1832 |
1833 | [[package]]
1834 | name = "paste"
1835 | version = "1.0.12"
1836 | source = "registry+https://github.com/rust-lang/crates.io-index"
1837 | checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79"
1838 |
1839 | [[package]]
1840 | name = "pathdiff"
1841 | version = "0.2.1"
1842 | source = "registry+https://github.com/rust-lang/crates.io-index"
1843 | checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
1844 |
1845 | [[package]]
1846 | name = "percent-encoding"
1847 | version = "2.2.0"
1848 | source = "registry+https://github.com/rust-lang/crates.io-index"
1849 | checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
1850 |
1851 | [[package]]
1852 | name = "phf"
1853 | version = "0.8.0"
1854 | source = "registry+https://github.com/rust-lang/crates.io-index"
1855 | checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
1856 | dependencies = [
1857 | "phf_macros 0.8.0",
1858 | "phf_shared 0.8.0",
1859 | "proc-macro-hack",
1860 | ]
1861 |
1862 | [[package]]
1863 | name = "phf"
1864 | version = "0.10.1"
1865 | source = "registry+https://github.com/rust-lang/crates.io-index"
1866 | checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
1867 | dependencies = [
1868 | "phf_macros 0.10.0",
1869 | "phf_shared 0.10.0",
1870 | "proc-macro-hack",
1871 | ]
1872 |
1873 | [[package]]
1874 | name = "phf_codegen"
1875 | version = "0.8.0"
1876 | source = "registry+https://github.com/rust-lang/crates.io-index"
1877 | checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
1878 | dependencies = [
1879 | "phf_generator 0.8.0",
1880 | "phf_shared 0.8.0",
1881 | ]
1882 |
1883 | [[package]]
1884 | name = "phf_generator"
1885 | version = "0.8.0"
1886 | source = "registry+https://github.com/rust-lang/crates.io-index"
1887 | checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
1888 | dependencies = [
1889 | "phf_shared 0.8.0",
1890 | "rand 0.7.3",
1891 | ]
1892 |
1893 | [[package]]
1894 | name = "phf_generator"
1895 | version = "0.10.0"
1896 | source = "registry+https://github.com/rust-lang/crates.io-index"
1897 | checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
1898 | dependencies = [
1899 | "phf_shared 0.10.0",
1900 | "rand 0.8.5",
1901 | ]
1902 |
1903 | [[package]]
1904 | name = "phf_macros"
1905 | version = "0.8.0"
1906 | source = "registry+https://github.com/rust-lang/crates.io-index"
1907 | checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c"
1908 | dependencies = [
1909 | "phf_generator 0.8.0",
1910 | "phf_shared 0.8.0",
1911 | "proc-macro-hack",
1912 | "proc-macro2",
1913 | "quote",
1914 | "syn",
1915 | ]
1916 |
1917 | [[package]]
1918 | name = "phf_macros"
1919 | version = "0.10.0"
1920 | source = "registry+https://github.com/rust-lang/crates.io-index"
1921 | checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0"
1922 | dependencies = [
1923 | "phf_generator 0.10.0",
1924 | "phf_shared 0.10.0",
1925 | "proc-macro-hack",
1926 | "proc-macro2",
1927 | "quote",
1928 | "syn",
1929 | ]
1930 |
1931 | [[package]]
1932 | name = "phf_shared"
1933 | version = "0.8.0"
1934 | source = "registry+https://github.com/rust-lang/crates.io-index"
1935 | checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
1936 | dependencies = [
1937 | "siphasher",
1938 | ]
1939 |
1940 | [[package]]
1941 | name = "phf_shared"
1942 | version = "0.10.0"
1943 | source = "registry+https://github.com/rust-lang/crates.io-index"
1944 | checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
1945 | dependencies = [
1946 | "siphasher",
1947 | ]
1948 |
1949 | [[package]]
1950 | name = "pin-project-lite"
1951 | version = "0.2.9"
1952 | source = "registry+https://github.com/rust-lang/crates.io-index"
1953 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
1954 |
1955 | [[package]]
1956 | name = "pin-utils"
1957 | version = "0.1.0"
1958 | source = "registry+https://github.com/rust-lang/crates.io-index"
1959 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
1960 |
1961 | [[package]]
1962 | name = "pkg-config"
1963 | version = "0.3.26"
1964 | source = "registry+https://github.com/rust-lang/crates.io-index"
1965 | checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
1966 |
1967 | [[package]]
1968 | name = "plist"
1969 | version = "1.4.3"
1970 | source = "registry+https://github.com/rust-lang/crates.io-index"
1971 | checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590"
1972 | dependencies = [
1973 | "base64 0.21.0",
1974 | "indexmap",
1975 | "line-wrap",
1976 | "quick-xml 0.28.1",
1977 | "serde",
1978 | "time",
1979 | ]
1980 |
1981 | [[package]]
1982 | name = "png"
1983 | version = "0.17.7"
1984 | source = "registry+https://github.com/rust-lang/crates.io-index"
1985 | checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638"
1986 | dependencies = [
1987 | "bitflags",
1988 | "crc32fast",
1989 | "flate2",
1990 | "miniz_oxide",
1991 | ]
1992 |
1993 | [[package]]
1994 | name = "ppv-lite86"
1995 | version = "0.2.17"
1996 | source = "registry+https://github.com/rust-lang/crates.io-index"
1997 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
1998 |
1999 | [[package]]
2000 | name = "precomputed-hash"
2001 | version = "0.1.1"
2002 | source = "registry+https://github.com/rust-lang/crates.io-index"
2003 | checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
2004 |
2005 | [[package]]
2006 | name = "proc-macro-crate"
2007 | version = "1.3.1"
2008 | source = "registry+https://github.com/rust-lang/crates.io-index"
2009 | checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
2010 | dependencies = [
2011 | "once_cell",
2012 | "toml_edit",
2013 | ]
2014 |
2015 | [[package]]
2016 | name = "proc-macro-error"
2017 | version = "1.0.4"
2018 | source = "registry+https://github.com/rust-lang/crates.io-index"
2019 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
2020 | dependencies = [
2021 | "proc-macro-error-attr",
2022 | "proc-macro2",
2023 | "quote",
2024 | "syn",
2025 | "version_check",
2026 | ]
2027 |
2028 | [[package]]
2029 | name = "proc-macro-error-attr"
2030 | version = "1.0.4"
2031 | source = "registry+https://github.com/rust-lang/crates.io-index"
2032 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
2033 | dependencies = [
2034 | "proc-macro2",
2035 | "quote",
2036 | "version_check",
2037 | ]
2038 |
2039 | [[package]]
2040 | name = "proc-macro-hack"
2041 | version = "0.5.20+deprecated"
2042 | source = "registry+https://github.com/rust-lang/crates.io-index"
2043 | checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
2044 |
2045 | [[package]]
2046 | name = "proc-macro2"
2047 | version = "1.0.51"
2048 | source = "registry+https://github.com/rust-lang/crates.io-index"
2049 | checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6"
2050 | dependencies = [
2051 | "unicode-ident",
2052 | ]
2053 |
2054 | [[package]]
2055 | name = "quick-xml"
2056 | version = "0.23.1"
2057 | source = "registry+https://github.com/rust-lang/crates.io-index"
2058 | checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea"
2059 | dependencies = [
2060 | "memchr",
2061 | ]
2062 |
2063 | [[package]]
2064 | name = "quick-xml"
2065 | version = "0.28.1"
2066 | source = "registry+https://github.com/rust-lang/crates.io-index"
2067 | checksum = "e5c1a97b1bc42b1d550bfb48d4262153fe400a12bab1511821736f7eac76d7e2"
2068 | dependencies = [
2069 | "memchr",
2070 | ]
2071 |
2072 | [[package]]
2073 | name = "quote"
2074 | version = "1.0.23"
2075 | source = "registry+https://github.com/rust-lang/crates.io-index"
2076 | checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
2077 | dependencies = [
2078 | "proc-macro2",
2079 | ]
2080 |
2081 | [[package]]
2082 | name = "rand"
2083 | version = "0.7.3"
2084 | source = "registry+https://github.com/rust-lang/crates.io-index"
2085 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
2086 | dependencies = [
2087 | "getrandom 0.1.16",
2088 | "libc",
2089 | "rand_chacha 0.2.2",
2090 | "rand_core 0.5.1",
2091 | "rand_hc",
2092 | "rand_pcg",
2093 | ]
2094 |
2095 | [[package]]
2096 | name = "rand"
2097 | version = "0.8.5"
2098 | source = "registry+https://github.com/rust-lang/crates.io-index"
2099 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
2100 | dependencies = [
2101 | "libc",
2102 | "rand_chacha 0.3.1",
2103 | "rand_core 0.6.4",
2104 | ]
2105 |
2106 | [[package]]
2107 | name = "rand_chacha"
2108 | version = "0.2.2"
2109 | source = "registry+https://github.com/rust-lang/crates.io-index"
2110 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
2111 | dependencies = [
2112 | "ppv-lite86",
2113 | "rand_core 0.5.1",
2114 | ]
2115 |
2116 | [[package]]
2117 | name = "rand_chacha"
2118 | version = "0.3.1"
2119 | source = "registry+https://github.com/rust-lang/crates.io-index"
2120 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
2121 | dependencies = [
2122 | "ppv-lite86",
2123 | "rand_core 0.6.4",
2124 | ]
2125 |
2126 | [[package]]
2127 | name = "rand_core"
2128 | version = "0.5.1"
2129 | source = "registry+https://github.com/rust-lang/crates.io-index"
2130 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
2131 | dependencies = [
2132 | "getrandom 0.1.16",
2133 | ]
2134 |
2135 | [[package]]
2136 | name = "rand_core"
2137 | version = "0.6.4"
2138 | source = "registry+https://github.com/rust-lang/crates.io-index"
2139 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
2140 | dependencies = [
2141 | "getrandom 0.2.8",
2142 | ]
2143 |
2144 | [[package]]
2145 | name = "rand_hc"
2146 | version = "0.2.0"
2147 | source = "registry+https://github.com/rust-lang/crates.io-index"
2148 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
2149 | dependencies = [
2150 | "rand_core 0.5.1",
2151 | ]
2152 |
2153 | [[package]]
2154 | name = "rand_pcg"
2155 | version = "0.2.1"
2156 | source = "registry+https://github.com/rust-lang/crates.io-index"
2157 | checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
2158 | dependencies = [
2159 | "rand_core 0.5.1",
2160 | ]
2161 |
2162 | [[package]]
2163 | name = "raw-window-handle"
2164 | version = "0.5.1"
2165 | source = "registry+https://github.com/rust-lang/crates.io-index"
2166 | checksum = "4f851a03551ceefd30132e447f07f96cb7011d6b658374f3aed847333adb5559"
2167 |
2168 | [[package]]
2169 | name = "redox_syscall"
2170 | version = "0.2.16"
2171 | source = "registry+https://github.com/rust-lang/crates.io-index"
2172 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
2173 | dependencies = [
2174 | "bitflags",
2175 | ]
2176 |
2177 | [[package]]
2178 | name = "redox_users"
2179 | version = "0.4.3"
2180 | source = "registry+https://github.com/rust-lang/crates.io-index"
2181 | checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
2182 | dependencies = [
2183 | "getrandom 0.2.8",
2184 | "redox_syscall",
2185 | "thiserror",
2186 | ]
2187 |
2188 | [[package]]
2189 | name = "regex"
2190 | version = "1.7.1"
2191 | source = "registry+https://github.com/rust-lang/crates.io-index"
2192 | checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
2193 | dependencies = [
2194 | "aho-corasick",
2195 | "memchr",
2196 | "regex-syntax",
2197 | ]
2198 |
2199 | [[package]]
2200 | name = "regex-automata"
2201 | version = "0.1.10"
2202 | source = "registry+https://github.com/rust-lang/crates.io-index"
2203 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
2204 | dependencies = [
2205 | "regex-syntax",
2206 | ]
2207 |
2208 | [[package]]
2209 | name = "regex-syntax"
2210 | version = "0.6.28"
2211 | source = "registry+https://github.com/rust-lang/crates.io-index"
2212 | checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
2213 |
2214 | [[package]]
2215 | name = "reqwest"
2216 | version = "0.11.16"
2217 | source = "registry+https://github.com/rust-lang/crates.io-index"
2218 | checksum = "27b71749df584b7f4cac2c426c127a7c785a5106cc98f7a8feb044115f0fa254"
2219 | dependencies = [
2220 | "base64 0.21.0",
2221 | "bytes",
2222 | "encoding_rs",
2223 | "futures-core",
2224 | "futures-util",
2225 | "h2",
2226 | "http",
2227 | "http-body",
2228 | "hyper",
2229 | "hyper-tls",
2230 | "ipnet",
2231 | "js-sys",
2232 | "log",
2233 | "mime",
2234 | "native-tls",
2235 | "once_cell",
2236 | "percent-encoding",
2237 | "pin-project-lite",
2238 | "serde",
2239 | "serde_json",
2240 | "serde_urlencoded",
2241 | "tokio",
2242 | "tokio-native-tls",
2243 | "tower-service",
2244 | "url",
2245 | "wasm-bindgen",
2246 | "wasm-bindgen-futures",
2247 | "web-sys",
2248 | "winreg",
2249 | ]
2250 |
2251 | [[package]]
2252 | name = "rfd"
2253 | version = "0.10.0"
2254 | source = "registry+https://github.com/rust-lang/crates.io-index"
2255 | checksum = "0149778bd99b6959285b0933288206090c50e2327f47a9c463bfdbf45c8823ea"
2256 | dependencies = [
2257 | "block",
2258 | "dispatch",
2259 | "glib-sys",
2260 | "gobject-sys",
2261 | "gtk-sys",
2262 | "js-sys",
2263 | "lazy_static",
2264 | "log",
2265 | "objc",
2266 | "objc-foundation",
2267 | "objc_id",
2268 | "raw-window-handle",
2269 | "wasm-bindgen",
2270 | "wasm-bindgen-futures",
2271 | "web-sys",
2272 | "windows 0.37.0",
2273 | ]
2274 |
2275 | [[package]]
2276 | name = "rustc_version"
2277 | version = "0.4.0"
2278 | source = "registry+https://github.com/rust-lang/crates.io-index"
2279 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
2280 | dependencies = [
2281 | "semver",
2282 | ]
2283 |
2284 | [[package]]
2285 | name = "rustix"
2286 | version = "0.36.11"
2287 | source = "registry+https://github.com/rust-lang/crates.io-index"
2288 | checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e"
2289 | dependencies = [
2290 | "bitflags",
2291 | "errno",
2292 | "io-lifetimes",
2293 | "libc",
2294 | "linux-raw-sys",
2295 | "windows-sys 0.45.0",
2296 | ]
2297 |
2298 | [[package]]
2299 | name = "rustversion"
2300 | version = "1.0.12"
2301 | source = "registry+https://github.com/rust-lang/crates.io-index"
2302 | checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
2303 |
2304 | [[package]]
2305 | name = "ryu"
2306 | version = "1.0.13"
2307 | source = "registry+https://github.com/rust-lang/crates.io-index"
2308 | checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
2309 |
2310 | [[package]]
2311 | name = "safemem"
2312 | version = "0.3.3"
2313 | source = "registry+https://github.com/rust-lang/crates.io-index"
2314 | checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
2315 |
2316 | [[package]]
2317 | name = "same-file"
2318 | version = "1.0.6"
2319 | source = "registry+https://github.com/rust-lang/crates.io-index"
2320 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
2321 | dependencies = [
2322 | "winapi-util",
2323 | ]
2324 |
2325 | [[package]]
2326 | name = "schannel"
2327 | version = "0.1.21"
2328 | source = "registry+https://github.com/rust-lang/crates.io-index"
2329 | checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
2330 | dependencies = [
2331 | "windows-sys 0.42.0",
2332 | ]
2333 |
2334 | [[package]]
2335 | name = "scoped-tls"
2336 | version = "1.0.1"
2337 | source = "registry+https://github.com/rust-lang/crates.io-index"
2338 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
2339 |
2340 | [[package]]
2341 | name = "scopeguard"
2342 | version = "1.1.0"
2343 | source = "registry+https://github.com/rust-lang/crates.io-index"
2344 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
2345 |
2346 | [[package]]
2347 | name = "security-framework"
2348 | version = "2.8.2"
2349 | source = "registry+https://github.com/rust-lang/crates.io-index"
2350 | checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
2351 | dependencies = [
2352 | "bitflags",
2353 | "core-foundation",
2354 | "core-foundation-sys",
2355 | "libc",
2356 | "security-framework-sys",
2357 | ]
2358 |
2359 | [[package]]
2360 | name = "security-framework-sys"
2361 | version = "2.8.0"
2362 | source = "registry+https://github.com/rust-lang/crates.io-index"
2363 | checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
2364 | dependencies = [
2365 | "core-foundation-sys",
2366 | "libc",
2367 | ]
2368 |
2369 | [[package]]
2370 | name = "selectors"
2371 | version = "0.22.0"
2372 | source = "registry+https://github.com/rust-lang/crates.io-index"
2373 | checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe"
2374 | dependencies = [
2375 | "bitflags",
2376 | "cssparser",
2377 | "derive_more",
2378 | "fxhash",
2379 | "log",
2380 | "matches",
2381 | "phf 0.8.0",
2382 | "phf_codegen",
2383 | "precomputed-hash",
2384 | "servo_arc",
2385 | "smallvec",
2386 | "thin-slice",
2387 | ]
2388 |
2389 | [[package]]
2390 | name = "semver"
2391 | version = "1.0.16"
2392 | source = "registry+https://github.com/rust-lang/crates.io-index"
2393 | checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a"
2394 | dependencies = [
2395 | "serde",
2396 | ]
2397 |
2398 | [[package]]
2399 | name = "serde"
2400 | version = "1.0.154"
2401 | source = "registry+https://github.com/rust-lang/crates.io-index"
2402 | checksum = "8cdd151213925e7f1ab45a9bbfb129316bd00799784b174b7cc7bcd16961c49e"
2403 | dependencies = [
2404 | "serde_derive",
2405 | ]
2406 |
2407 | [[package]]
2408 | name = "serde_derive"
2409 | version = "1.0.154"
2410 | source = "registry+https://github.com/rust-lang/crates.io-index"
2411 | checksum = "4fc80d722935453bcafdc2c9a73cd6fac4dc1938f0346035d84bf99fa9e33217"
2412 | dependencies = [
2413 | "proc-macro2",
2414 | "quote",
2415 | "syn",
2416 | ]
2417 |
2418 | [[package]]
2419 | name = "serde_json"
2420 | version = "1.0.94"
2421 | source = "registry+https://github.com/rust-lang/crates.io-index"
2422 | checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea"
2423 | dependencies = [
2424 | "itoa 1.0.6",
2425 | "ryu",
2426 | "serde",
2427 | ]
2428 |
2429 | [[package]]
2430 | name = "serde_repr"
2431 | version = "0.1.11"
2432 | source = "registry+https://github.com/rust-lang/crates.io-index"
2433 | checksum = "395627de918015623b32e7669714206363a7fc00382bf477e72c1f7533e8eafc"
2434 | dependencies = [
2435 | "proc-macro2",
2436 | "quote",
2437 | "syn",
2438 | ]
2439 |
2440 | [[package]]
2441 | name = "serde_urlencoded"
2442 | version = "0.7.1"
2443 | source = "registry+https://github.com/rust-lang/crates.io-index"
2444 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
2445 | dependencies = [
2446 | "form_urlencoded",
2447 | "itoa 1.0.6",
2448 | "ryu",
2449 | "serde",
2450 | ]
2451 |
2452 | [[package]]
2453 | name = "serde_with"
2454 | version = "1.14.0"
2455 | source = "registry+https://github.com/rust-lang/crates.io-index"
2456 | checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff"
2457 | dependencies = [
2458 | "serde",
2459 | "serde_with_macros",
2460 | ]
2461 |
2462 | [[package]]
2463 | name = "serde_with_macros"
2464 | version = "1.5.2"
2465 | source = "registry+https://github.com/rust-lang/crates.io-index"
2466 | checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082"
2467 | dependencies = [
2468 | "darling",
2469 | "proc-macro2",
2470 | "quote",
2471 | "syn",
2472 | ]
2473 |
2474 | [[package]]
2475 | name = "serialize-to-javascript"
2476 | version = "0.1.1"
2477 | source = "registry+https://github.com/rust-lang/crates.io-index"
2478 | checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb"
2479 | dependencies = [
2480 | "serde",
2481 | "serde_json",
2482 | "serialize-to-javascript-impl",
2483 | ]
2484 |
2485 | [[package]]
2486 | name = "serialize-to-javascript-impl"
2487 | version = "0.1.1"
2488 | source = "registry+https://github.com/rust-lang/crates.io-index"
2489 | checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
2490 | dependencies = [
2491 | "proc-macro2",
2492 | "quote",
2493 | "syn",
2494 | ]
2495 |
2496 | [[package]]
2497 | name = "servo_arc"
2498 | version = "0.1.1"
2499 | source = "registry+https://github.com/rust-lang/crates.io-index"
2500 | checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432"
2501 | dependencies = [
2502 | "nodrop",
2503 | "stable_deref_trait",
2504 | ]
2505 |
2506 | [[package]]
2507 | name = "sha2"
2508 | version = "0.10.6"
2509 | source = "registry+https://github.com/rust-lang/crates.io-index"
2510 | checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
2511 | dependencies = [
2512 | "cfg-if",
2513 | "cpufeatures",
2514 | "digest",
2515 | ]
2516 |
2517 | [[package]]
2518 | name = "sharded-slab"
2519 | version = "0.1.4"
2520 | source = "registry+https://github.com/rust-lang/crates.io-index"
2521 | checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
2522 | dependencies = [
2523 | "lazy_static",
2524 | ]
2525 |
2526 | [[package]]
2527 | name = "siphasher"
2528 | version = "0.3.10"
2529 | source = "registry+https://github.com/rust-lang/crates.io-index"
2530 | checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
2531 |
2532 | [[package]]
2533 | name = "slab"
2534 | version = "0.4.8"
2535 | source = "registry+https://github.com/rust-lang/crates.io-index"
2536 | checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
2537 | dependencies = [
2538 | "autocfg",
2539 | ]
2540 |
2541 | [[package]]
2542 | name = "smallvec"
2543 | version = "1.10.0"
2544 | source = "registry+https://github.com/rust-lang/crates.io-index"
2545 | checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
2546 |
2547 | [[package]]
2548 | name = "socket2"
2549 | version = "0.4.9"
2550 | source = "registry+https://github.com/rust-lang/crates.io-index"
2551 | checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
2552 | dependencies = [
2553 | "libc",
2554 | "winapi",
2555 | ]
2556 |
2557 | [[package]]
2558 | name = "soup2"
2559 | version = "0.2.1"
2560 | source = "registry+https://github.com/rust-lang/crates.io-index"
2561 | checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0"
2562 | dependencies = [
2563 | "bitflags",
2564 | "gio",
2565 | "glib",
2566 | "libc",
2567 | "once_cell",
2568 | "soup2-sys",
2569 | ]
2570 |
2571 | [[package]]
2572 | name = "soup2-sys"
2573 | version = "0.2.0"
2574 | source = "registry+https://github.com/rust-lang/crates.io-index"
2575 | checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf"
2576 | dependencies = [
2577 | "bitflags",
2578 | "gio-sys",
2579 | "glib-sys",
2580 | "gobject-sys",
2581 | "libc",
2582 | "system-deps 5.0.0",
2583 | ]
2584 |
2585 | [[package]]
2586 | name = "stable_deref_trait"
2587 | version = "1.2.0"
2588 | source = "registry+https://github.com/rust-lang/crates.io-index"
2589 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
2590 |
2591 | [[package]]
2592 | name = "state"
2593 | version = "0.5.3"
2594 | source = "registry+https://github.com/rust-lang/crates.io-index"
2595 | checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b"
2596 | dependencies = [
2597 | "loom",
2598 | ]
2599 |
2600 | [[package]]
2601 | name = "string_cache"
2602 | version = "0.8.7"
2603 | source = "registry+https://github.com/rust-lang/crates.io-index"
2604 | checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
2605 | dependencies = [
2606 | "new_debug_unreachable",
2607 | "once_cell",
2608 | "parking_lot",
2609 | "phf_shared 0.10.0",
2610 | "precomputed-hash",
2611 | "serde",
2612 | ]
2613 |
2614 | [[package]]
2615 | name = "string_cache_codegen"
2616 | version = "0.5.2"
2617 | source = "registry+https://github.com/rust-lang/crates.io-index"
2618 | checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
2619 | dependencies = [
2620 | "phf_generator 0.10.0",
2621 | "phf_shared 0.10.0",
2622 | "proc-macro2",
2623 | "quote",
2624 | ]
2625 |
2626 | [[package]]
2627 | name = "strsim"
2628 | version = "0.10.0"
2629 | source = "registry+https://github.com/rust-lang/crates.io-index"
2630 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
2631 |
2632 | [[package]]
2633 | name = "strum"
2634 | version = "0.22.0"
2635 | source = "registry+https://github.com/rust-lang/crates.io-index"
2636 | checksum = "f7ac893c7d471c8a21f31cfe213ec4f6d9afeed25537c772e08ef3f005f8729e"
2637 | dependencies = [
2638 | "strum_macros",
2639 | ]
2640 |
2641 | [[package]]
2642 | name = "strum_macros"
2643 | version = "0.22.0"
2644 | source = "registry+https://github.com/rust-lang/crates.io-index"
2645 | checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb"
2646 | dependencies = [
2647 | "heck 0.3.3",
2648 | "proc-macro2",
2649 | "quote",
2650 | "syn",
2651 | ]
2652 |
2653 | [[package]]
2654 | name = "syn"
2655 | version = "1.0.109"
2656 | source = "registry+https://github.com/rust-lang/crates.io-index"
2657 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
2658 | dependencies = [
2659 | "proc-macro2",
2660 | "quote",
2661 | "unicode-ident",
2662 | ]
2663 |
2664 | [[package]]
2665 | name = "system-deps"
2666 | version = "5.0.0"
2667 | source = "registry+https://github.com/rust-lang/crates.io-index"
2668 | checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e"
2669 | dependencies = [
2670 | "cfg-expr 0.9.1",
2671 | "heck 0.3.3",
2672 | "pkg-config",
2673 | "toml",
2674 | "version-compare 0.0.11",
2675 | ]
2676 |
2677 | [[package]]
2678 | name = "system-deps"
2679 | version = "6.0.3"
2680 | source = "registry+https://github.com/rust-lang/crates.io-index"
2681 | checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff"
2682 | dependencies = [
2683 | "cfg-expr 0.11.0",
2684 | "heck 0.4.1",
2685 | "pkg-config",
2686 | "toml",
2687 | "version-compare 0.1.1",
2688 | ]
2689 |
2690 | [[package]]
2691 | name = "tao"
2692 | version = "0.15.8"
2693 | source = "registry+https://github.com/rust-lang/crates.io-index"
2694 | checksum = "ac8e6399427c8494f9849b58694754d7cc741293348a6836b6c8d2c5aa82d8e6"
2695 | dependencies = [
2696 | "bitflags",
2697 | "cairo-rs",
2698 | "cc",
2699 | "cocoa",
2700 | "core-foundation",
2701 | "core-graphics",
2702 | "crossbeam-channel",
2703 | "dispatch",
2704 | "gdk",
2705 | "gdk-pixbuf",
2706 | "gdk-sys",
2707 | "gdkx11-sys",
2708 | "gio",
2709 | "glib",
2710 | "glib-sys",
2711 | "gtk",
2712 | "image",
2713 | "instant",
2714 | "jni",
2715 | "lazy_static",
2716 | "libc",
2717 | "log",
2718 | "ndk",
2719 | "ndk-context",
2720 | "ndk-sys",
2721 | "objc",
2722 | "once_cell",
2723 | "parking_lot",
2724 | "paste",
2725 | "png",
2726 | "raw-window-handle",
2727 | "scopeguard",
2728 | "serde",
2729 | "unicode-segmentation",
2730 | "uuid 1.3.0",
2731 | "windows 0.39.0",
2732 | "windows-implement",
2733 | "x11-dl",
2734 | ]
2735 |
2736 | [[package]]
2737 | name = "tar"
2738 | version = "0.4.38"
2739 | source = "registry+https://github.com/rust-lang/crates.io-index"
2740 | checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
2741 | dependencies = [
2742 | "filetime",
2743 | "libc",
2744 | "xattr",
2745 | ]
2746 |
2747 | [[package]]
2748 | name = "tauri"
2749 | version = "1.2.4"
2750 | source = "registry+https://github.com/rust-lang/crates.io-index"
2751 | checksum = "fe7e0f1d535e7cbbbab43c82be4fc992b84f9156c16c160955617e0260ebc449"
2752 | dependencies = [
2753 | "anyhow",
2754 | "cocoa",
2755 | "dirs-next",
2756 | "embed_plist",
2757 | "encoding_rs",
2758 | "flate2",
2759 | "futures-util",
2760 | "glib",
2761 | "glob",
2762 | "gtk",
2763 | "heck 0.4.1",
2764 | "http",
2765 | "ignore",
2766 | "notify-rust",
2767 | "objc",
2768 | "once_cell",
2769 | "open",
2770 | "percent-encoding",
2771 | "rand 0.8.5",
2772 | "raw-window-handle",
2773 | "regex",
2774 | "rfd",
2775 | "semver",
2776 | "serde",
2777 | "serde_json",
2778 | "serde_repr",
2779 | "serialize-to-javascript",
2780 | "state",
2781 | "tar",
2782 | "tauri-macros",
2783 | "tauri-runtime",
2784 | "tauri-runtime-wry",
2785 | "tauri-utils",
2786 | "tempfile",
2787 | "thiserror",
2788 | "tokio",
2789 | "url",
2790 | "uuid 1.3.0",
2791 | "webkit2gtk",
2792 | "webview2-com",
2793 | "windows 0.39.0",
2794 | ]
2795 |
2796 | [[package]]
2797 | name = "tauri-build"
2798 | version = "1.2.1"
2799 | source = "registry+https://github.com/rust-lang/crates.io-index"
2800 | checksum = "8807c85d656b2b93927c19fe5a5f1f1f348f96c2de8b90763b3c2d561511f9b4"
2801 | dependencies = [
2802 | "anyhow",
2803 | "cargo_toml",
2804 | "heck 0.4.1",
2805 | "json-patch",
2806 | "semver",
2807 | "serde_json",
2808 | "tauri-utils",
2809 | "winres",
2810 | ]
2811 |
2812 | [[package]]
2813 | name = "tauri-codegen"
2814 | version = "1.2.1"
2815 | source = "registry+https://github.com/rust-lang/crates.io-index"
2816 | checksum = "14388d484b6b1b5dc0f6a7d6cc6433b3b230bec85eaa576adcdf3f9fafa49251"
2817 | dependencies = [
2818 | "base64 0.13.1",
2819 | "brotli",
2820 | "ico",
2821 | "json-patch",
2822 | "plist",
2823 | "png",
2824 | "proc-macro2",
2825 | "quote",
2826 | "regex",
2827 | "semver",
2828 | "serde",
2829 | "serde_json",
2830 | "sha2",
2831 | "tauri-utils",
2832 | "thiserror",
2833 | "time",
2834 | "uuid 1.3.0",
2835 | "walkdir",
2836 | ]
2837 |
2838 | [[package]]
2839 | name = "tauri-macros"
2840 | version = "1.2.1"
2841 | source = "registry+https://github.com/rust-lang/crates.io-index"
2842 | checksum = "069319e5ecbe653a799b94b0690d9f9bf5d00f7b1d3989aa331c524d4e354075"
2843 | dependencies = [
2844 | "heck 0.4.1",
2845 | "proc-macro2",
2846 | "quote",
2847 | "syn",
2848 | "tauri-codegen",
2849 | "tauri-utils",
2850 | ]
2851 |
2852 | [[package]]
2853 | name = "tauri-runtime"
2854 | version = "0.12.1"
2855 | source = "registry+https://github.com/rust-lang/crates.io-index"
2856 | checksum = "c507d954d08ac8705d235bc70ec6975b9054fb95ff7823af72dbb04186596f3b"
2857 | dependencies = [
2858 | "gtk",
2859 | "http",
2860 | "http-range",
2861 | "rand 0.8.5",
2862 | "raw-window-handle",
2863 | "serde",
2864 | "serde_json",
2865 | "tauri-utils",
2866 | "thiserror",
2867 | "uuid 1.3.0",
2868 | "webview2-com",
2869 | "windows 0.39.0",
2870 | ]
2871 |
2872 | [[package]]
2873 | name = "tauri-runtime-wry"
2874 | version = "0.12.2"
2875 | source = "registry+https://github.com/rust-lang/crates.io-index"
2876 | checksum = "36b1c5764a41a13176a4599b5b7bd0881bea7d94dfe45e1e755f789b98317e30"
2877 | dependencies = [
2878 | "cocoa",
2879 | "gtk",
2880 | "percent-encoding",
2881 | "rand 0.8.5",
2882 | "raw-window-handle",
2883 | "tauri-runtime",
2884 | "tauri-utils",
2885 | "uuid 1.3.0",
2886 | "webkit2gtk",
2887 | "webview2-com",
2888 | "windows 0.39.0",
2889 | "wry",
2890 | ]
2891 |
2892 | [[package]]
2893 | name = "tauri-utils"
2894 | version = "1.2.1"
2895 | source = "registry+https://github.com/rust-lang/crates.io-index"
2896 | checksum = "5abbc109a6eb45127956ffcc26ef0e875d160150ac16cfa45d26a6b2871686f1"
2897 | dependencies = [
2898 | "brotli",
2899 | "ctor",
2900 | "glob",
2901 | "heck 0.4.1",
2902 | "html5ever",
2903 | "infer",
2904 | "json-patch",
2905 | "kuchiki",
2906 | "memchr",
2907 | "phf 0.10.1",
2908 | "proc-macro2",
2909 | "quote",
2910 | "semver",
2911 | "serde",
2912 | "serde_json",
2913 | "serde_with",
2914 | "thiserror",
2915 | "url",
2916 | "walkdir",
2917 | "windows 0.39.0",
2918 | ]
2919 |
2920 | [[package]]
2921 | name = "tauri-winrt-notification"
2922 | version = "0.1.0"
2923 | source = "registry+https://github.com/rust-lang/crates.io-index"
2924 | checksum = "c58de036c4d2e20717024de2a3c4bf56c301f07b21bc8ef9b57189fce06f1f3b"
2925 | dependencies = [
2926 | "quick-xml 0.23.1",
2927 | "strum",
2928 | "windows 0.39.0",
2929 | ]
2930 |
2931 | [[package]]
2932 | name = "tempfile"
2933 | version = "3.4.0"
2934 | source = "registry+https://github.com/rust-lang/crates.io-index"
2935 | checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95"
2936 | dependencies = [
2937 | "cfg-if",
2938 | "fastrand",
2939 | "redox_syscall",
2940 | "rustix",
2941 | "windows-sys 0.42.0",
2942 | ]
2943 |
2944 | [[package]]
2945 | name = "tendril"
2946 | version = "0.4.3"
2947 | source = "registry+https://github.com/rust-lang/crates.io-index"
2948 | checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
2949 | dependencies = [
2950 | "futf",
2951 | "mac",
2952 | "utf-8",
2953 | ]
2954 |
2955 | [[package]]
2956 | name = "thin-slice"
2957 | version = "0.1.1"
2958 | source = "registry+https://github.com/rust-lang/crates.io-index"
2959 | checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
2960 |
2961 | [[package]]
2962 | name = "thiserror"
2963 | version = "1.0.39"
2964 | source = "registry+https://github.com/rust-lang/crates.io-index"
2965 | checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c"
2966 | dependencies = [
2967 | "thiserror-impl",
2968 | ]
2969 |
2970 | [[package]]
2971 | name = "thiserror-impl"
2972 | version = "1.0.39"
2973 | source = "registry+https://github.com/rust-lang/crates.io-index"
2974 | checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e"
2975 | dependencies = [
2976 | "proc-macro2",
2977 | "quote",
2978 | "syn",
2979 | ]
2980 |
2981 | [[package]]
2982 | name = "thread_local"
2983 | version = "1.1.7"
2984 | source = "registry+https://github.com/rust-lang/crates.io-index"
2985 | checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
2986 | dependencies = [
2987 | "cfg-if",
2988 | "once_cell",
2989 | ]
2990 |
2991 | [[package]]
2992 | name = "time"
2993 | version = "0.3.20"
2994 | source = "registry+https://github.com/rust-lang/crates.io-index"
2995 | checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
2996 | dependencies = [
2997 | "itoa 1.0.6",
2998 | "serde",
2999 | "time-core",
3000 | "time-macros",
3001 | ]
3002 |
3003 | [[package]]
3004 | name = "time-core"
3005 | version = "0.1.0"
3006 | source = "registry+https://github.com/rust-lang/crates.io-index"
3007 | checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
3008 |
3009 | [[package]]
3010 | name = "time-macros"
3011 | version = "0.2.8"
3012 | source = "registry+https://github.com/rust-lang/crates.io-index"
3013 | checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36"
3014 | dependencies = [
3015 | "time-core",
3016 | ]
3017 |
3018 | [[package]]
3019 | name = "tinyvec"
3020 | version = "1.6.0"
3021 | source = "registry+https://github.com/rust-lang/crates.io-index"
3022 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
3023 | dependencies = [
3024 | "tinyvec_macros",
3025 | ]
3026 |
3027 | [[package]]
3028 | name = "tinyvec_macros"
3029 | version = "0.1.1"
3030 | source = "registry+https://github.com/rust-lang/crates.io-index"
3031 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
3032 |
3033 | [[package]]
3034 | name = "tokio"
3035 | version = "1.26.0"
3036 | source = "registry+https://github.com/rust-lang/crates.io-index"
3037 | checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64"
3038 | dependencies = [
3039 | "autocfg",
3040 | "bytes",
3041 | "libc",
3042 | "memchr",
3043 | "mio",
3044 | "num_cpus",
3045 | "pin-project-lite",
3046 | "socket2",
3047 | "windows-sys 0.45.0",
3048 | ]
3049 |
3050 | [[package]]
3051 | name = "tokio-native-tls"
3052 | version = "0.3.1"
3053 | source = "registry+https://github.com/rust-lang/crates.io-index"
3054 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
3055 | dependencies = [
3056 | "native-tls",
3057 | "tokio",
3058 | ]
3059 |
3060 | [[package]]
3061 | name = "tokio-util"
3062 | version = "0.7.7"
3063 | source = "registry+https://github.com/rust-lang/crates.io-index"
3064 | checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2"
3065 | dependencies = [
3066 | "bytes",
3067 | "futures-core",
3068 | "futures-sink",
3069 | "pin-project-lite",
3070 | "tokio",
3071 | "tracing",
3072 | ]
3073 |
3074 | [[package]]
3075 | name = "toml"
3076 | version = "0.5.11"
3077 | source = "registry+https://github.com/rust-lang/crates.io-index"
3078 | checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
3079 | dependencies = [
3080 | "serde",
3081 | ]
3082 |
3083 | [[package]]
3084 | name = "toml_datetime"
3085 | version = "0.6.1"
3086 | source = "registry+https://github.com/rust-lang/crates.io-index"
3087 | checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
3088 |
3089 | [[package]]
3090 | name = "toml_edit"
3091 | version = "0.19.4"
3092 | source = "registry+https://github.com/rust-lang/crates.io-index"
3093 | checksum = "9a1eb0622d28f4b9c90adc4ea4b2b46b47663fde9ac5fafcb14a1369d5508825"
3094 | dependencies = [
3095 | "indexmap",
3096 | "toml_datetime",
3097 | "winnow",
3098 | ]
3099 |
3100 | [[package]]
3101 | name = "tower-service"
3102 | version = "0.3.2"
3103 | source = "registry+https://github.com/rust-lang/crates.io-index"
3104 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
3105 |
3106 | [[package]]
3107 | name = "tracing"
3108 | version = "0.1.37"
3109 | source = "registry+https://github.com/rust-lang/crates.io-index"
3110 | checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
3111 | dependencies = [
3112 | "cfg-if",
3113 | "pin-project-lite",
3114 | "tracing-attributes",
3115 | "tracing-core",
3116 | ]
3117 |
3118 | [[package]]
3119 | name = "tracing-attributes"
3120 | version = "0.1.23"
3121 | source = "registry+https://github.com/rust-lang/crates.io-index"
3122 | checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
3123 | dependencies = [
3124 | "proc-macro2",
3125 | "quote",
3126 | "syn",
3127 | ]
3128 |
3129 | [[package]]
3130 | name = "tracing-core"
3131 | version = "0.1.30"
3132 | source = "registry+https://github.com/rust-lang/crates.io-index"
3133 | checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
3134 | dependencies = [
3135 | "once_cell",
3136 | "valuable",
3137 | ]
3138 |
3139 | [[package]]
3140 | name = "tracing-log"
3141 | version = "0.1.3"
3142 | source = "registry+https://github.com/rust-lang/crates.io-index"
3143 | checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
3144 | dependencies = [
3145 | "lazy_static",
3146 | "log",
3147 | "tracing-core",
3148 | ]
3149 |
3150 | [[package]]
3151 | name = "tracing-subscriber"
3152 | version = "0.3.16"
3153 | source = "registry+https://github.com/rust-lang/crates.io-index"
3154 | checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70"
3155 | dependencies = [
3156 | "matchers",
3157 | "nu-ansi-term",
3158 | "once_cell",
3159 | "regex",
3160 | "sharded-slab",
3161 | "smallvec",
3162 | "thread_local",
3163 | "tracing",
3164 | "tracing-core",
3165 | "tracing-log",
3166 | ]
3167 |
3168 | [[package]]
3169 | name = "treediff"
3170 | version = "3.0.2"
3171 | source = "registry+https://github.com/rust-lang/crates.io-index"
3172 | checksum = "761e8d5ad7ce14bb82b7e61ccc0ca961005a275a060b9644a2431aa11553c2ff"
3173 | dependencies = [
3174 | "serde_json",
3175 | ]
3176 |
3177 | [[package]]
3178 | name = "try-lock"
3179 | version = "0.2.4"
3180 | source = "registry+https://github.com/rust-lang/crates.io-index"
3181 | checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
3182 |
3183 | [[package]]
3184 | name = "typenum"
3185 | version = "1.16.0"
3186 | source = "registry+https://github.com/rust-lang/crates.io-index"
3187 | checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
3188 |
3189 | [[package]]
3190 | name = "unicode-bidi"
3191 | version = "0.3.11"
3192 | source = "registry+https://github.com/rust-lang/crates.io-index"
3193 | checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c"
3194 |
3195 | [[package]]
3196 | name = "unicode-ident"
3197 | version = "1.0.8"
3198 | source = "registry+https://github.com/rust-lang/crates.io-index"
3199 | checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
3200 |
3201 | [[package]]
3202 | name = "unicode-normalization"
3203 | version = "0.1.22"
3204 | source = "registry+https://github.com/rust-lang/crates.io-index"
3205 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
3206 | dependencies = [
3207 | "tinyvec",
3208 | ]
3209 |
3210 | [[package]]
3211 | name = "unicode-segmentation"
3212 | version = "1.10.1"
3213 | source = "registry+https://github.com/rust-lang/crates.io-index"
3214 | checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
3215 |
3216 | [[package]]
3217 | name = "url"
3218 | version = "2.3.1"
3219 | source = "registry+https://github.com/rust-lang/crates.io-index"
3220 | checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
3221 | dependencies = [
3222 | "form_urlencoded",
3223 | "idna",
3224 | "percent-encoding",
3225 | "serde",
3226 | ]
3227 |
3228 | [[package]]
3229 | name = "utf-8"
3230 | version = "0.7.6"
3231 | source = "registry+https://github.com/rust-lang/crates.io-index"
3232 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
3233 |
3234 | [[package]]
3235 | name = "uuid"
3236 | version = "0.8.2"
3237 | source = "registry+https://github.com/rust-lang/crates.io-index"
3238 | checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
3239 |
3240 | [[package]]
3241 | name = "uuid"
3242 | version = "1.3.0"
3243 | source = "registry+https://github.com/rust-lang/crates.io-index"
3244 | checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79"
3245 | dependencies = [
3246 | "getrandom 0.2.8",
3247 | ]
3248 |
3249 | [[package]]
3250 | name = "valuable"
3251 | version = "0.1.0"
3252 | source = "registry+https://github.com/rust-lang/crates.io-index"
3253 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
3254 |
3255 | [[package]]
3256 | name = "vcpkg"
3257 | version = "0.2.15"
3258 | source = "registry+https://github.com/rust-lang/crates.io-index"
3259 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
3260 |
3261 | [[package]]
3262 | name = "version-compare"
3263 | version = "0.0.11"
3264 | source = "registry+https://github.com/rust-lang/crates.io-index"
3265 | checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
3266 |
3267 | [[package]]
3268 | name = "version-compare"
3269 | version = "0.1.1"
3270 | source = "registry+https://github.com/rust-lang/crates.io-index"
3271 | checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
3272 |
3273 | [[package]]
3274 | name = "version_check"
3275 | version = "0.9.4"
3276 | source = "registry+https://github.com/rust-lang/crates.io-index"
3277 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
3278 |
3279 | [[package]]
3280 | name = "walkdir"
3281 | version = "2.3.2"
3282 | source = "registry+https://github.com/rust-lang/crates.io-index"
3283 | checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
3284 | dependencies = [
3285 | "same-file",
3286 | "winapi",
3287 | "winapi-util",
3288 | ]
3289 |
3290 | [[package]]
3291 | name = "want"
3292 | version = "0.3.0"
3293 | source = "registry+https://github.com/rust-lang/crates.io-index"
3294 | checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
3295 | dependencies = [
3296 | "log",
3297 | "try-lock",
3298 | ]
3299 |
3300 | [[package]]
3301 | name = "wasi"
3302 | version = "0.9.0+wasi-snapshot-preview1"
3303 | source = "registry+https://github.com/rust-lang/crates.io-index"
3304 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
3305 |
3306 | [[package]]
3307 | name = "wasi"
3308 | version = "0.11.0+wasi-snapshot-preview1"
3309 | source = "registry+https://github.com/rust-lang/crates.io-index"
3310 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
3311 |
3312 | [[package]]
3313 | name = "wasm-bindgen"
3314 | version = "0.2.84"
3315 | source = "registry+https://github.com/rust-lang/crates.io-index"
3316 | checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
3317 | dependencies = [
3318 | "cfg-if",
3319 | "wasm-bindgen-macro",
3320 | ]
3321 |
3322 | [[package]]
3323 | name = "wasm-bindgen-backend"
3324 | version = "0.2.84"
3325 | source = "registry+https://github.com/rust-lang/crates.io-index"
3326 | checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
3327 | dependencies = [
3328 | "bumpalo",
3329 | "log",
3330 | "once_cell",
3331 | "proc-macro2",
3332 | "quote",
3333 | "syn",
3334 | "wasm-bindgen-shared",
3335 | ]
3336 |
3337 | [[package]]
3338 | name = "wasm-bindgen-futures"
3339 | version = "0.4.34"
3340 | source = "registry+https://github.com/rust-lang/crates.io-index"
3341 | checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
3342 | dependencies = [
3343 | "cfg-if",
3344 | "js-sys",
3345 | "wasm-bindgen",
3346 | "web-sys",
3347 | ]
3348 |
3349 | [[package]]
3350 | name = "wasm-bindgen-macro"
3351 | version = "0.2.84"
3352 | source = "registry+https://github.com/rust-lang/crates.io-index"
3353 | checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
3354 | dependencies = [
3355 | "quote",
3356 | "wasm-bindgen-macro-support",
3357 | ]
3358 |
3359 | [[package]]
3360 | name = "wasm-bindgen-macro-support"
3361 | version = "0.2.84"
3362 | source = "registry+https://github.com/rust-lang/crates.io-index"
3363 | checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
3364 | dependencies = [
3365 | "proc-macro2",
3366 | "quote",
3367 | "syn",
3368 | "wasm-bindgen-backend",
3369 | "wasm-bindgen-shared",
3370 | ]
3371 |
3372 | [[package]]
3373 | name = "wasm-bindgen-shared"
3374 | version = "0.2.84"
3375 | source = "registry+https://github.com/rust-lang/crates.io-index"
3376 | checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
3377 |
3378 | [[package]]
3379 | name = "web-sys"
3380 | version = "0.3.61"
3381 | source = "registry+https://github.com/rust-lang/crates.io-index"
3382 | checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
3383 | dependencies = [
3384 | "js-sys",
3385 | "wasm-bindgen",
3386 | ]
3387 |
3388 | [[package]]
3389 | name = "webkit2gtk"
3390 | version = "0.18.2"
3391 | source = "registry+https://github.com/rust-lang/crates.io-index"
3392 | checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370"
3393 | dependencies = [
3394 | "bitflags",
3395 | "cairo-rs",
3396 | "gdk",
3397 | "gdk-sys",
3398 | "gio",
3399 | "gio-sys",
3400 | "glib",
3401 | "glib-sys",
3402 | "gobject-sys",
3403 | "gtk",
3404 | "gtk-sys",
3405 | "javascriptcore-rs",
3406 | "libc",
3407 | "once_cell",
3408 | "soup2",
3409 | "webkit2gtk-sys",
3410 | ]
3411 |
3412 | [[package]]
3413 | name = "webkit2gtk-sys"
3414 | version = "0.18.0"
3415 | source = "registry+https://github.com/rust-lang/crates.io-index"
3416 | checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3"
3417 | dependencies = [
3418 | "atk-sys",
3419 | "bitflags",
3420 | "cairo-sys-rs",
3421 | "gdk-pixbuf-sys",
3422 | "gdk-sys",
3423 | "gio-sys",
3424 | "glib-sys",
3425 | "gobject-sys",
3426 | "gtk-sys",
3427 | "javascriptcore-rs-sys",
3428 | "libc",
3429 | "pango-sys",
3430 | "pkg-config",
3431 | "soup2-sys",
3432 | "system-deps 6.0.3",
3433 | ]
3434 |
3435 | [[package]]
3436 | name = "webview2-com"
3437 | version = "0.19.1"
3438 | source = "registry+https://github.com/rust-lang/crates.io-index"
3439 | checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178"
3440 | dependencies = [
3441 | "webview2-com-macros",
3442 | "webview2-com-sys",
3443 | "windows 0.39.0",
3444 | "windows-implement",
3445 | ]
3446 |
3447 | [[package]]
3448 | name = "webview2-com-macros"
3449 | version = "0.6.0"
3450 | source = "registry+https://github.com/rust-lang/crates.io-index"
3451 | checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac"
3452 | dependencies = [
3453 | "proc-macro2",
3454 | "quote",
3455 | "syn",
3456 | ]
3457 |
3458 | [[package]]
3459 | name = "webview2-com-sys"
3460 | version = "0.19.0"
3461 | source = "registry+https://github.com/rust-lang/crates.io-index"
3462 | checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7"
3463 | dependencies = [
3464 | "regex",
3465 | "serde",
3466 | "serde_json",
3467 | "thiserror",
3468 | "windows 0.39.0",
3469 | "windows-bindgen",
3470 | "windows-metadata",
3471 | ]
3472 |
3473 | [[package]]
3474 | name = "winapi"
3475 | version = "0.3.9"
3476 | source = "registry+https://github.com/rust-lang/crates.io-index"
3477 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
3478 | dependencies = [
3479 | "winapi-i686-pc-windows-gnu",
3480 | "winapi-x86_64-pc-windows-gnu",
3481 | ]
3482 |
3483 | [[package]]
3484 | name = "winapi-i686-pc-windows-gnu"
3485 | version = "0.4.0"
3486 | source = "registry+https://github.com/rust-lang/crates.io-index"
3487 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
3488 |
3489 | [[package]]
3490 | name = "winapi-util"
3491 | version = "0.1.5"
3492 | source = "registry+https://github.com/rust-lang/crates.io-index"
3493 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
3494 | dependencies = [
3495 | "winapi",
3496 | ]
3497 |
3498 | [[package]]
3499 | name = "winapi-x86_64-pc-windows-gnu"
3500 | version = "0.4.0"
3501 | source = "registry+https://github.com/rust-lang/crates.io-index"
3502 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
3503 |
3504 | [[package]]
3505 | name = "windows"
3506 | version = "0.37.0"
3507 | source = "registry+https://github.com/rust-lang/crates.io-index"
3508 | checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647"
3509 | dependencies = [
3510 | "windows_aarch64_msvc 0.37.0",
3511 | "windows_i686_gnu 0.37.0",
3512 | "windows_i686_msvc 0.37.0",
3513 | "windows_x86_64_gnu 0.37.0",
3514 | "windows_x86_64_msvc 0.37.0",
3515 | ]
3516 |
3517 | [[package]]
3518 | name = "windows"
3519 | version = "0.39.0"
3520 | source = "registry+https://github.com/rust-lang/crates.io-index"
3521 | checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a"
3522 | dependencies = [
3523 | "windows-implement",
3524 | "windows_aarch64_msvc 0.39.0",
3525 | "windows_i686_gnu 0.39.0",
3526 | "windows_i686_msvc 0.39.0",
3527 | "windows_x86_64_gnu 0.39.0",
3528 | "windows_x86_64_msvc 0.39.0",
3529 | ]
3530 |
3531 | [[package]]
3532 | name = "windows"
3533 | version = "0.44.0"
3534 | source = "registry+https://github.com/rust-lang/crates.io-index"
3535 | checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b"
3536 | dependencies = [
3537 | "windows-targets",
3538 | ]
3539 |
3540 | [[package]]
3541 | name = "windows-bindgen"
3542 | version = "0.39.0"
3543 | source = "registry+https://github.com/rust-lang/crates.io-index"
3544 | checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41"
3545 | dependencies = [
3546 | "windows-metadata",
3547 | "windows-tokens",
3548 | ]
3549 |
3550 | [[package]]
3551 | name = "windows-implement"
3552 | version = "0.39.0"
3553 | source = "registry+https://github.com/rust-lang/crates.io-index"
3554 | checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7"
3555 | dependencies = [
3556 | "syn",
3557 | "windows-tokens",
3558 | ]
3559 |
3560 | [[package]]
3561 | name = "windows-metadata"
3562 | version = "0.39.0"
3563 | source = "registry+https://github.com/rust-lang/crates.io-index"
3564 | checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278"
3565 |
3566 | [[package]]
3567 | name = "windows-sys"
3568 | version = "0.42.0"
3569 | source = "registry+https://github.com/rust-lang/crates.io-index"
3570 | checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
3571 | dependencies = [
3572 | "windows_aarch64_gnullvm",
3573 | "windows_aarch64_msvc 0.42.1",
3574 | "windows_i686_gnu 0.42.1",
3575 | "windows_i686_msvc 0.42.1",
3576 | "windows_x86_64_gnu 0.42.1",
3577 | "windows_x86_64_gnullvm",
3578 | "windows_x86_64_msvc 0.42.1",
3579 | ]
3580 |
3581 | [[package]]
3582 | name = "windows-sys"
3583 | version = "0.45.0"
3584 | source = "registry+https://github.com/rust-lang/crates.io-index"
3585 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
3586 | dependencies = [
3587 | "windows-targets",
3588 | ]
3589 |
3590 | [[package]]
3591 | name = "windows-targets"
3592 | version = "0.42.1"
3593 | source = "registry+https://github.com/rust-lang/crates.io-index"
3594 | checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7"
3595 | dependencies = [
3596 | "windows_aarch64_gnullvm",
3597 | "windows_aarch64_msvc 0.42.1",
3598 | "windows_i686_gnu 0.42.1",
3599 | "windows_i686_msvc 0.42.1",
3600 | "windows_x86_64_gnu 0.42.1",
3601 | "windows_x86_64_gnullvm",
3602 | "windows_x86_64_msvc 0.42.1",
3603 | ]
3604 |
3605 | [[package]]
3606 | name = "windows-tokens"
3607 | version = "0.39.0"
3608 | source = "registry+https://github.com/rust-lang/crates.io-index"
3609 | checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597"
3610 |
3611 | [[package]]
3612 | name = "windows_aarch64_gnullvm"
3613 | version = "0.42.1"
3614 | source = "registry+https://github.com/rust-lang/crates.io-index"
3615 | checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
3616 |
3617 | [[package]]
3618 | name = "windows_aarch64_msvc"
3619 | version = "0.37.0"
3620 | source = "registry+https://github.com/rust-lang/crates.io-index"
3621 | checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a"
3622 |
3623 | [[package]]
3624 | name = "windows_aarch64_msvc"
3625 | version = "0.39.0"
3626 | source = "registry+https://github.com/rust-lang/crates.io-index"
3627 | checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2"
3628 |
3629 | [[package]]
3630 | name = "windows_aarch64_msvc"
3631 | version = "0.42.1"
3632 | source = "registry+https://github.com/rust-lang/crates.io-index"
3633 | checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
3634 |
3635 | [[package]]
3636 | name = "windows_i686_gnu"
3637 | version = "0.37.0"
3638 | source = "registry+https://github.com/rust-lang/crates.io-index"
3639 | checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1"
3640 |
3641 | [[package]]
3642 | name = "windows_i686_gnu"
3643 | version = "0.39.0"
3644 | source = "registry+https://github.com/rust-lang/crates.io-index"
3645 | checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b"
3646 |
3647 | [[package]]
3648 | name = "windows_i686_gnu"
3649 | version = "0.42.1"
3650 | source = "registry+https://github.com/rust-lang/crates.io-index"
3651 | checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
3652 |
3653 | [[package]]
3654 | name = "windows_i686_msvc"
3655 | version = "0.37.0"
3656 | source = "registry+https://github.com/rust-lang/crates.io-index"
3657 | checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c"
3658 |
3659 | [[package]]
3660 | name = "windows_i686_msvc"
3661 | version = "0.39.0"
3662 | source = "registry+https://github.com/rust-lang/crates.io-index"
3663 | checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106"
3664 |
3665 | [[package]]
3666 | name = "windows_i686_msvc"
3667 | version = "0.42.1"
3668 | source = "registry+https://github.com/rust-lang/crates.io-index"
3669 | checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
3670 |
3671 | [[package]]
3672 | name = "windows_x86_64_gnu"
3673 | version = "0.37.0"
3674 | source = "registry+https://github.com/rust-lang/crates.io-index"
3675 | checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d"
3676 |
3677 | [[package]]
3678 | name = "windows_x86_64_gnu"
3679 | version = "0.39.0"
3680 | source = "registry+https://github.com/rust-lang/crates.io-index"
3681 | checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65"
3682 |
3683 | [[package]]
3684 | name = "windows_x86_64_gnu"
3685 | version = "0.42.1"
3686 | source = "registry+https://github.com/rust-lang/crates.io-index"
3687 | checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
3688 |
3689 | [[package]]
3690 | name = "windows_x86_64_gnullvm"
3691 | version = "0.42.1"
3692 | source = "registry+https://github.com/rust-lang/crates.io-index"
3693 | checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
3694 |
3695 | [[package]]
3696 | name = "windows_x86_64_msvc"
3697 | version = "0.37.0"
3698 | source = "registry+https://github.com/rust-lang/crates.io-index"
3699 | checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d"
3700 |
3701 | [[package]]
3702 | name = "windows_x86_64_msvc"
3703 | version = "0.39.0"
3704 | source = "registry+https://github.com/rust-lang/crates.io-index"
3705 | checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809"
3706 |
3707 | [[package]]
3708 | name = "windows_x86_64_msvc"
3709 | version = "0.42.1"
3710 | source = "registry+https://github.com/rust-lang/crates.io-index"
3711 | checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
3712 |
3713 | [[package]]
3714 | name = "winnow"
3715 | version = "0.3.5"
3716 | source = "registry+https://github.com/rust-lang/crates.io-index"
3717 | checksum = "ee7b2c67f962bf5042bfd8b6a916178df33a26eec343ae064cb8e069f638fa6f"
3718 | dependencies = [
3719 | "memchr",
3720 | ]
3721 |
3722 | [[package]]
3723 | name = "winreg"
3724 | version = "0.10.1"
3725 | source = "registry+https://github.com/rust-lang/crates.io-index"
3726 | checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
3727 | dependencies = [
3728 | "winapi",
3729 | ]
3730 |
3731 | [[package]]
3732 | name = "winres"
3733 | version = "0.1.12"
3734 | source = "registry+https://github.com/rust-lang/crates.io-index"
3735 | checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c"
3736 | dependencies = [
3737 | "toml",
3738 | ]
3739 |
3740 | [[package]]
3741 | name = "wry"
3742 | version = "0.23.4"
3743 | source = "registry+https://github.com/rust-lang/crates.io-index"
3744 | checksum = "4c1ad8e2424f554cc5bdebe8aa374ef5b433feff817aebabca0389961fc7ef98"
3745 | dependencies = [
3746 | "base64 0.13.1",
3747 | "block",
3748 | "cocoa",
3749 | "core-graphics",
3750 | "crossbeam-channel",
3751 | "dunce",
3752 | "gdk",
3753 | "gio",
3754 | "glib",
3755 | "gtk",
3756 | "html5ever",
3757 | "http",
3758 | "kuchiki",
3759 | "libc",
3760 | "log",
3761 | "objc",
3762 | "objc_id",
3763 | "once_cell",
3764 | "serde",
3765 | "serde_json",
3766 | "sha2",
3767 | "soup2",
3768 | "tao",
3769 | "thiserror",
3770 | "url",
3771 | "webkit2gtk",
3772 | "webkit2gtk-sys",
3773 | "webview2-com",
3774 | "windows 0.39.0",
3775 | "windows-implement",
3776 | ]
3777 |
3778 | [[package]]
3779 | name = "x11"
3780 | version = "2.21.0"
3781 | source = "registry+https://github.com/rust-lang/crates.io-index"
3782 | checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e"
3783 | dependencies = [
3784 | "libc",
3785 | "pkg-config",
3786 | ]
3787 |
3788 | [[package]]
3789 | name = "x11-dl"
3790 | version = "2.21.0"
3791 | source = "registry+https://github.com/rust-lang/crates.io-index"
3792 | checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
3793 | dependencies = [
3794 | "libc",
3795 | "once_cell",
3796 | "pkg-config",
3797 | ]
3798 |
3799 | [[package]]
3800 | name = "xattr"
3801 | version = "0.2.3"
3802 | source = "registry+https://github.com/rust-lang/crates.io-index"
3803 | checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
3804 | dependencies = [
3805 | "libc",
3806 | ]
3807 |
--------------------------------------------------------------------------------
/template/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "app_name_lowercased"
3 | description = "test_description"
4 | version = "0.1.0"
5 | edition = "2021"
6 | path = "src/main.rs"
7 |
8 | [dependencies]
9 | wry = "0.23.3"
10 | tao = "0.15.6"
11 | home = "0.5.4"
12 | serde_json = "1.0.94"
13 | serde = "1.0.154"
14 | tauri = { version = "1.2", features = ["notification-all", "shell-open"] }
15 | reqwest = { version = "0.11", features = ["blocking", "json"] }
16 |
17 | [target.'cfg(target_os = "macos")'.dependencies]
18 | objc = "0.2.7"
19 | cocoa = "0.24.1"
20 |
21 | [target.'cfg(target_os = "linux")'.dependencies]
22 | webkit2gtk = "0.18.0"
23 |
24 | [build-dependencies]
25 | tauri-build = { version = "1.2", features = [] }
26 |
27 | [profile.release]
28 | strip = true
29 | panic = "abort"
30 | codegen-units = 1
31 | lto = "thin"
32 | opt-level = "s"
33 |
34 |
35 | [features]
36 | # by default Tauri runs in production mode
37 | # when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL
38 | default = ["custom-protocol"]
39 | # this feature is used used for production builds where `devPath` points to the filesystem
40 | # DO NOT remove this
41 | custom-protocol = ["tauri/custom-protocol"]
42 |
--------------------------------------------------------------------------------
/template/build.rs:
--------------------------------------------------------------------------------
1 | fn main() {}
2 |
--------------------------------------------------------------------------------
/template/icons/app-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hamza72x/web2app/9fa884fe0bbe2b1d66d12c01521f103297f947cc/template/icons/app-icon.png
--------------------------------------------------------------------------------
/template/icons/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hamza72x/web2app/9fa884fe0bbe2b1d66d12c01521f103297f947cc/template/icons/icon.png
--------------------------------------------------------------------------------
/template/rustfmt.toml:
--------------------------------------------------------------------------------
1 | max_width = 80
--------------------------------------------------------------------------------
/template/src/app_config.rs:
--------------------------------------------------------------------------------
1 | use super::app_data;
2 | use serde::{Deserialize, Serialize};
3 |
4 | // $HOME/.config/web2app_apps/app_name/config.json
5 | #[derive(Serialize, Deserialize, Debug)]
6 | pub struct AppConfig {
7 | #[serde(default)]
8 | pub zoom_factor: f64,
9 |
10 | #[serde(default)]
11 | pub dark_reader_enabled: bool,
12 |
13 | #[serde(default)]
14 | pub is_notification_enabled: bool,
15 | }
16 |
17 | impl Default for AppConfig {
18 | fn default() -> Self {
19 | return Self {
20 | zoom_factor: 1.0,
21 | dark_reader_enabled: false,
22 | is_notification_enabled: true,
23 | };
24 | }
25 | }
26 |
27 | impl AppConfig {
28 | fn config_dir() -> std::path::PathBuf {
29 | return home::home_dir()
30 | .unwrap()
31 | .join(".config")
32 | .join(app_data::APPS_DIR)
33 | .join(app_data::APP_NAME);
34 | }
35 |
36 | fn config_path() -> std::path::PathBuf {
37 | return Self::config_dir().join("config.json");
38 | }
39 |
40 | fn create_config_dir() {
41 | let config_dir = Self::config_dir();
42 |
43 | if !config_dir.exists() {
44 | std::fs::create_dir_all(config_dir).unwrap();
45 | }
46 | }
47 |
48 | pub fn load() -> Self {
49 | let config_path = Self::config_path();
50 |
51 | if !config_path.exists() {
52 | Self::create_config_dir();
53 | return Self::default();
54 | }
55 |
56 | let config_file = std::fs::File::open(config_path).unwrap();
57 |
58 | return serde_json::from_reader(config_file).unwrap();
59 | }
60 |
61 | pub fn save(&self) {
62 | let config_path = Self::config_path();
63 |
64 | let config_file = std::fs::File::create(config_path).unwrap();
65 | serde_json::to_writer_pretty(config_file, self).unwrap();
66 | }
67 |
68 | pub fn dark_reader_text(&self) -> &'static str {
69 | if self.dark_reader_enabled {
70 | return "Disable DarkReader";
71 | } else {
72 | return "Enable DarkReader";
73 | }
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/template/src/app_data.rs:
--------------------------------------------------------------------------------
1 | pub const MAIN_WINDOW: &str = "main";
2 | pub const APPS_DIR: &str = "web2app_apps";
3 |
4 | // following const may/may not be replaced by web2app cli
5 | pub const USER_AGENT: Option<&str> = None;
6 | pub const APP_NAME: &str = "app_name";
7 | pub const URL: &str = "https://google.com";
8 |
--------------------------------------------------------------------------------
/template/src/app_menu.rs:
--------------------------------------------------------------------------------
1 | use super::app_config::AppConfig;
2 | use super::util;
3 |
4 | use tauri::{CustomMenuItem, Menu, MenuItem, Submenu, Window};
5 |
6 | const SCALE_FACTOR: f64 = 1.1;
7 |
8 | const JS_ENABLE_DARK_READER: &str = r#"
9 | (function() {
10 | if (typeof DarkReader === 'undefined') {
11 | console.log('DarkReader is not loaded');
12 | return;
13 | }
14 | DarkReader.setFetchMethod(window.fetch);
15 | DarkReader.enable();
16 | })();
17 | "#;
18 |
19 | const JS_DISABLE_DARK_READER: &str = r#"
20 | (function() {
21 | if (typeof DarkReader === 'undefined') {
22 | console.log('DarkReader is not loaded');
23 | return;
24 | }
25 | DarkReader.disable();
26 | })();
27 | "#;
28 |
29 | // build_menu creates a tauri::Menu
30 | pub fn build_menu() -> Menu {
31 | return Menu::new()
32 | .add_submenu(get_file_submenu())
33 | .add_submenu(get_edit_submenu())
34 | .add_submenu(get_window_submenu())
35 | .add_submenu(get_tools_submenu());
36 | }
37 |
38 | pub fn handle_menu_click(window: &Window, menu_id: &str) {
39 | let mut app_config = AppConfig::load();
40 |
41 | match menu_id {
42 | "zoom_in" => {
43 | if app_config.zoom_factor < 2.0 {
44 | app_config.zoom_factor *= SCALE_FACTOR;
45 | util::zoom_webview(window, app_config.zoom_factor);
46 | app_config.save();
47 | }
48 | }
49 | "zoom_out" => {
50 | if app_config.zoom_factor > 0.1 {
51 | app_config.zoom_factor /= SCALE_FACTOR;
52 | util::zoom_webview(window, app_config.zoom_factor);
53 | app_config.save();
54 | }
55 | }
56 | "reload" => {
57 | window.eval("location.reload();").unwrap();
58 | }
59 | "dark_reader" => {
60 | app_config.dark_reader_enabled = !app_config.dark_reader_enabled;
61 |
62 | if app_config.dark_reader_enabled {
63 | window.eval(JS_ENABLE_DARK_READER).unwrap();
64 | } else {
65 | window.eval(JS_DISABLE_DARK_READER).unwrap();
66 | }
67 |
68 | app_config.save();
69 |
70 | let menu_handle = window.menu_handle();
71 |
72 | std::thread::spawn(move || {
73 | menu_handle
74 | .get_item("dark_reader")
75 | .set_title(app_config.dark_reader_text())
76 | .expect("failed to set dark reader menu text");
77 | });
78 | }
79 | "back" => {
80 | window.eval("window.history.back();").unwrap();
81 | }
82 | "forward" => {
83 | window.eval("window.history.forward();").unwrap();
84 | }
85 | _ => {
86 | println!("unhandled menu click: {}", menu_id);
87 | }
88 | }
89 | }
90 |
91 | // File
92 | fn get_file_submenu() -> Submenu {
93 | return Submenu::new("File", Menu::new().add_native_item(MenuItem::Quit));
94 | }
95 |
96 | // Edit
97 | fn get_edit_submenu() -> Submenu {
98 | return Submenu::new(
99 | "Edit",
100 | Menu::new()
101 | .add_native_item(MenuItem::Copy)
102 | .add_native_item(MenuItem::Cut)
103 | .add_native_item(MenuItem::Paste)
104 | .add_native_item(MenuItem::SelectAll)
105 | .add_native_item(MenuItem::Undo)
106 | .add_native_item(MenuItem::Redo),
107 | );
108 | }
109 |
110 | // Window
111 | fn get_window_submenu() -> Submenu {
112 | let reload = CustomMenuItem::new("reload".to_string(), "Reload")
113 | .accelerator("CmdOrCtrl+R");
114 | let zoom_in = CustomMenuItem::new("zoom_in".to_string(), "Zoom In")
115 | .accelerator("CmdOrCtrl+Plus");
116 | let zoom_out = CustomMenuItem::new("zoom_out".to_string(), "Zoom Out")
117 | .accelerator("CmdOrCtrl+-");
118 | let back = CustomMenuItem::new("back".to_string(), "Back".to_string())
119 | .accelerator("CmdOrCtrl+[");
120 | let forward =
121 | CustomMenuItem::new("forward".to_string(), "Forward".to_string())
122 | .accelerator("CmdOrCtrl+]");
123 |
124 | return Submenu::new(
125 | "Window",
126 | Menu::new()
127 | .add_native_item(MenuItem::Minimize)
128 | .add_item(zoom_in)
129 | .add_item(zoom_out)
130 | .add_item(back)
131 | .add_item(forward)
132 | .add_item(reload),
133 | );
134 | }
135 |
136 | // Tools
137 | fn get_tools_submenu() -> Submenu {
138 | let dark_reader = CustomMenuItem::new(
139 | "dark_reader".to_string(),
140 | "Enable Dark Reader".to_string(),
141 | )
142 | .accelerator("CmdOrCtrl+Shift+I");
143 |
144 | return Submenu::new("Tools", Menu::new().add_item(dark_reader));
145 | }
146 |
--------------------------------------------------------------------------------
/template/src/builder.rs:
--------------------------------------------------------------------------------
1 | use std::path::PathBuf;
2 |
3 | use super::app_config::AppConfig;
4 | use super::app_data;
5 | use super::app_menu;
6 | use super::generated;
7 | use super::util;
8 |
9 | use tauri::AppHandle;
10 | use tauri::Manager;
11 | use tauri::WindowBuilder;
12 | use tauri::WindowUrl;
13 |
14 | // handlers, js -> rust
15 |
16 | // open new window handler
17 | #[tauri::command]
18 | fn open_new_window(app_handle: AppHandle, url: String) {
19 | println!("[rust handler] open new window: {}", url);
20 | create_a_window(
21 | &app_handle,
22 | &util::alphanumeric(url.as_str(), '_'),
23 | url.as_str(),
24 | );
25 | }
26 |
27 | // download file handler
28 | #[tauri::command]
29 | fn download_file(url: String) {
30 | println!("[rust handler] download file: {}", url);
31 | util::download_file(url.as_str(), "downloaded_file.txt");
32 | }
33 |
34 | // open_browser handler
35 | #[tauri::command]
36 | fn open_browser(url: String) {
37 | println!("[rust handler] open browser: {}", url);
38 | util::open_browser(url.as_str());
39 | }
40 |
41 | pub fn build_tauri_app() {
42 | let mut builder = tauri::Builder::default();
43 |
44 | // menu
45 | builder = builder.menu(app_menu::build_menu());
46 | builder = builder.on_menu_event(|event| {
47 | app_menu::handle_menu_click(event.window(), event.menu_item_id());
48 | });
49 |
50 | // setup, create window
51 | builder = builder.setup(|app| {
52 | create_a_window(
53 | &app.app_handle(),
54 | app_data::MAIN_WINDOW,
55 | app_data::URL,
56 | );
57 | Ok(())
58 | });
59 |
60 | // run
61 | builder
62 | .invoke_handler(tauri::generate_handler![
63 | open_new_window,
64 | download_file,
65 | open_browser,
66 | ])
67 | .run(tauri::generate_context!())
68 | .expect("error while running tauri application");
69 | }
70 |
71 | fn create_a_window(app: &AppHandle, label: &str, url: &str) {
72 | let app_config = AppConfig::load();
73 | let window_url = WindowUrl::App(PathBuf::from(url));
74 | let mut builder = WindowBuilder::new(app, label, window_url);
75 |
76 | builder = builder.initialization_script(generated::INIT_SCRIPT);
77 |
78 | if let Some(user_agent) = app_data::USER_AGENT {
79 | builder = builder.user_agent(user_agent);
80 | }
81 |
82 | let window = builder.build().expect("error while creating main window");
83 |
84 | // zoom
85 | util::zoom_webview(&window, app_config.zoom_factor);
86 |
87 | // title
88 | window
89 | .set_title(app_data::APP_NAME)
90 | .expect("error while setting window title");
91 | }
92 |
--------------------------------------------------------------------------------
/template/src/generated.rs:
--------------------------------------------------------------------------------
1 | // This file is generated by watch.sh
2 | // Do not edit it directly
3 |
4 | pub const INIT_SCRIPT: &str = r#"
5 | // load darkreader.js
6 | (function () {
7 | console.log('[web2app] script.js loaded');
8 |
9 | window.onload = function () {
10 | console.log("Window is loaded");
11 | console.log("Loading DarkReader");
12 | var script = document.createElement("script");
13 | script.src =
14 | "https://cdn.jsdelivr.net/npm/darkreader@4.9.58/darkreader.min.js";
15 | script.onload = function () {
16 | console.log("DarkReader is loaded");
17 | };
18 | document.head.appendChild(script);
19 | };
20 | })();
21 |
22 | function uid() {
23 | return window.crypto.getRandomValues(new Uint32Array(1))[0];
24 | }
25 |
26 | function transformCallback(callback, once = false) {
27 | const identifier = uid();
28 | const prop = `_${identifier}`;
29 | Object.defineProperty(window, prop, {
30 | value: (result) => {
31 | if (once) {
32 | Reflect.deleteProperty(window, prop);
33 | }
34 | return callback === null || callback === void 0
35 | ? void 0
36 | : callback(result);
37 | },
38 | writable: false,
39 | configurable: true,
40 | });
41 | return identifier;
42 | }
43 |
44 | async function invoke(cmd, args = {}) {
45 | return new Promise((resolve, reject) => {
46 | const callback = transformCallback((e) => {
47 | resolve(e);
48 | Reflect.deleteProperty(window, `_${error}`);
49 | }, true);
50 | const error = transformCallback((e) => {
51 | reject(e);
52 | Reflect.deleteProperty(window, `_${callback}`);
53 | }, true);
54 | window.__TAURI_IPC__(Object.assign({ cmd, callback, error }, args));
55 | });
56 | }
57 |
58 | window.__TAURI_IPC__ = (message) =>
59 | window.ipc.postMessage(JSON.stringify(message));
60 |
61 | Notification = class Notification {
62 | static permission = "default";
63 |
64 | constructor(title, options = {}) {
65 | invoke("tauri", {
66 | __tauriModule: "Notification",
67 | message: {
68 | cmd: "notification",
69 | options: {
70 | title: title,
71 | ...options,
72 | },
73 | },
74 | });
75 | }
76 |
77 | static async requestPermission() {
78 | const response = invoke("tauri", {
79 | __tauriModule: "Notification",
80 | message: {
81 | cmd: "requestNotificationPermission",
82 | },
83 | });
84 | Notification.permission = response;
85 | return response;
86 | }
87 | };
88 |
89 | setTimeout(async () => {
90 | const response = await invoke("tauri", {
91 | __tauriModule: "Notification",
92 | message: {
93 | cmd: "isNotificationPermissionGranted",
94 | },
95 | });
96 | if (response) {
97 | Notification.permission = "granted";
98 | } else {
99 | Notification.permission = "denied";
100 | }
101 | }, 1000);
102 |
103 | // listen all clicks
104 | document.addEventListener("click", (e) => {
105 | console.log("the target", e.target.tagName);
106 | if (e.target.tagName === "A") {
107 | // check if another domain
108 | const url = new URL(e.target.href);
109 | if (url.hostname !== window.location.hostname) {
110 | console.log("opening in default browser", e.target.href);
111 | invoke("open_browser", { url: e.target.href });
112 | return;
113 | }
114 | // if it's _blank, open in new window
115 | e.preventDefault();
116 | if (e.target.target === "_blank") {
117 | console.log("opening in new window", e.target.href);
118 | invoke("open_new_window", { url: e.target.href });
119 | }
120 | }
121 | });
122 | "#;
123 |
--------------------------------------------------------------------------------
/template/src/main.rs:
--------------------------------------------------------------------------------
1 | // Prevents additional console window on Windows in release
2 | #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
3 |
4 | #[cfg(target_os = "macos")]
5 | #[macro_use]
6 | extern crate objc;
7 |
8 | mod app_config;
9 | mod app_data;
10 | mod app_menu;
11 | mod builder;
12 | mod generated;
13 | mod util;
14 |
15 | fn main() {
16 | builder::build_tauri_app();
17 | }
18 |
--------------------------------------------------------------------------------
/template/src/script.js:
--------------------------------------------------------------------------------
1 | // load darkreader.js
2 | (function () {
3 | console.log('[web2app] script.js loaded');
4 |
5 | window.onload = function () {
6 | console.log("Window is loaded");
7 | console.log("Loading DarkReader");
8 | var script = document.createElement("script");
9 | script.src =
10 | "https://cdn.jsdelivr.net/npm/darkreader@4.9.58/darkreader.min.js";
11 | script.onload = function () {
12 | console.log("DarkReader is loaded");
13 | };
14 | document.head.appendChild(script);
15 | };
16 | })();
17 |
18 | function uid() {
19 | return window.crypto.getRandomValues(new Uint32Array(1))[0];
20 | }
21 |
22 | function transformCallback(callback, once = false) {
23 | const identifier = uid();
24 | const prop = `_${identifier}`;
25 | Object.defineProperty(window, prop, {
26 | value: (result) => {
27 | if (once) {
28 | Reflect.deleteProperty(window, prop);
29 | }
30 | return callback === null || callback === void 0
31 | ? void 0
32 | : callback(result);
33 | },
34 | writable: false,
35 | configurable: true,
36 | });
37 | return identifier;
38 | }
39 |
40 | async function invoke(cmd, args = {}) {
41 | return new Promise((resolve, reject) => {
42 | const callback = transformCallback((e) => {
43 | resolve(e);
44 | Reflect.deleteProperty(window, `_${error}`);
45 | }, true);
46 | const error = transformCallback((e) => {
47 | reject(e);
48 | Reflect.deleteProperty(window, `_${callback}`);
49 | }, true);
50 | window.__TAURI_IPC__(Object.assign({ cmd, callback, error }, args));
51 | });
52 | }
53 |
54 | window.__TAURI_IPC__ = (message) =>
55 | window.ipc.postMessage(JSON.stringify(message));
56 |
57 | Notification = class Notification {
58 | static permission = "default";
59 |
60 | constructor(title, options = {}) {
61 | invoke("tauri", {
62 | __tauriModule: "Notification",
63 | message: {
64 | cmd: "notification",
65 | options: {
66 | title: title,
67 | ...options,
68 | },
69 | },
70 | });
71 | }
72 |
73 | static async requestPermission() {
74 | const response = invoke("tauri", {
75 | __tauriModule: "Notification",
76 | message: {
77 | cmd: "requestNotificationPermission",
78 | },
79 | });
80 | Notification.permission = response;
81 | return response;
82 | }
83 | };
84 |
85 | setTimeout(async () => {
86 | const response = await invoke("tauri", {
87 | __tauriModule: "Notification",
88 | message: {
89 | cmd: "isNotificationPermissionGranted",
90 | },
91 | });
92 | if (response) {
93 | Notification.permission = "granted";
94 | } else {
95 | Notification.permission = "denied";
96 | }
97 | }, 1000);
98 |
99 | // listen all clicks
100 | document.addEventListener("click", (e) => {
101 | console.log("the target", e.target.tagName);
102 | if (e.target.tagName === "A") {
103 | // check if another domain
104 | const url = new URL(e.target.href);
105 | if (url.hostname !== window.location.hostname) {
106 | console.log("opening in default browser", e.target.href);
107 | invoke("open_browser", { url: e.target.href });
108 | return;
109 | }
110 | // if it's _blank, open in new window
111 | e.preventDefault();
112 | if (e.target.target === "_blank") {
113 | console.log("opening in new window", e.target.href);
114 | invoke("open_new_window", { url: e.target.href });
115 | }
116 | }
117 | });
118 |
--------------------------------------------------------------------------------
/template/src/util.rs:
--------------------------------------------------------------------------------
1 | use std::fs::File;
2 | use std::io;
3 | use tauri::Window;
4 |
5 | pub fn zoom_webview(window: &Window, factor: f64) {
6 | window
7 | .with_webview(move |webview| {
8 | #[cfg(target_os = "linux")]
9 | {
10 | // see https://docs.rs/webkit2gtk/0.18.2/webkit2gtk/struct.WebView.html
11 | // and https://docs.rs/webkit2gtk/0.18.2/webkit2gtk/trait.WebViewExt.html
12 | use webkit2gtk::traits::WebViewExt;
13 | webview.inner().set_zoom_level(factor);
14 | }
15 |
16 | #[cfg(windows)]
17 | unsafe {
18 | // see https://docs.rs/webview2-com/0.19.1/webview2_com/Microsoft/Web/WebView2/Win32/struct.ICoreWebView2Controller.html
19 | webview.controller().SetZoomFactor(factor).unwrap();
20 | }
21 | #[cfg(target_os = "macos")]
22 | unsafe {
23 | let () = msg_send![webview.inner(), setPageZoom: factor];
24 | // let () = msg_send![webview.controller(), removeAllUserScripts];
25 | // let bg_color: cocoa::base::id = msg_send![class!(NSColor), colorWithDeviceRed:0.5 green:0.2 blue:0.4 alpha:1.];
26 | // let () = msg_send![webview.ns_window(), setBackgroundColor: bg_color];
27 | }
28 | })
29 | .expect("error while setting webview");
30 | }
31 |
32 | // alphanumeric filters a string to only contain alphanumeric characters
33 | // and replaces all other characters with the given character
34 | pub fn alphanumeric(s: &str, replace: char) -> String {
35 | s.chars()
36 | .map(|c| if c.is_alphanumeric() { c } else { replace })
37 | .collect()
38 | }
39 |
40 | pub fn download_file(url: &str, path: &str) {
41 | let resp = reqwest::blocking::get(url).expect("request failed");
42 | let body = resp.text().expect("body invalid");
43 | let mut out = File::create(path).expect("failed to create file");
44 | io::copy(&mut body.as_bytes(), &mut out).expect("failed to copy content");
45 | }
46 |
47 | pub fn open_browser(url: &str) {
48 | #[cfg(target_os = "linux")]
49 | {
50 | let _ = std::process::Command::new("xdg-open")
51 | .arg(url)
52 | .spawn()
53 | .expect("failed to open browser");
54 | }
55 |
56 | #[cfg(target_os = "windows")]
57 | {
58 | let _ = std::process::Command::new("cmd")
59 | .arg("/C")
60 | .arg("start")
61 | .arg(url)
62 | .spawn()
63 | .expect("failed to open browser");
64 | }
65 |
66 | #[cfg(target_os = "macos")]
67 | {
68 | let _ = std::process::Command::new("open")
69 | .arg(url)
70 | .spawn()
71 | .expect("failed to open browser");
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/template/tauri.conf.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "beforeDevCommand": "",
4 | "beforeBuildCommand": "",
5 | "devPath": "./src",
6 | "distDir": "./src",
7 | "withGlobalTauri": true
8 | },
9 | "package": {
10 | "productName": "app_name",
11 | "version": "0.1.0"
12 | },
13 | "tauri": {
14 | "allowlist": {
15 | "all": false,
16 | "shell": {
17 | "all": false,
18 | "open": true
19 | },
20 | "notification": {
21 | "all": true
22 | }
23 | },
24 | "bundle": {
25 | "active": true,
26 | "category": "DeveloperTool",
27 | "copyright": "",
28 | "deb": {
29 | "depends": []
30 | },
31 | "externalBin": [],
32 | "icon": [],
33 | "identifier": "com.example.test",
34 | "longDescription": "",
35 | "macOS": {
36 | "entitlements": null,
37 | "exceptionDomain": "",
38 | "frameworks": [],
39 | "providerShortName": null,
40 | "signingIdentity": null
41 | },
42 | "resources": [],
43 | "shortDescription": "",
44 | "targets": "all",
45 | "windows": {
46 | "certificateThumbprint": null,
47 | "digestAlgorithm": "sha256",
48 | "timestampUrl": ""
49 | }
50 | },
51 | "security": {
52 | "csp": null
53 | },
54 | "updater": {
55 | "active": false
56 | },
57 | "windows": [
58 | ]
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/watch.sh:
--------------------------------------------------------------------------------
1 | #!/opt/homebrew/bin/bash
2 |
3 | # this watch.sh requires bash 4.0 or higher
4 | # `brew install bash` on macos
5 | bash_version=$(bash --version | head -n 1 | awk '{print $4}')
6 |
7 | echo ""
8 | echo "bash version is $bash_version -----------------------"
9 | echo "watch.sh requires bash 4.0 or higher ----------------"
10 | echo ""
11 |
12 | build_mod() {
13 | template_mod="src/generated.rs"
14 |
15 | echo '// Auto generated by $$ make build_template' >$template_mod
16 | echo "// Don't edit this file by HAND, edit the ../template directory instead." >>$template_mod
17 | echo "// Then keep running watch.sh" >>$template_mod
18 | echo "" >>$template_mod
19 |
20 | os=$(uname -s)
21 | opts=""
22 |
23 | if [ "$os" = "Linux" ]; then
24 | opts="-w0"
25 | fi
26 |
27 | # dir: template/src
28 | echo "pub const FILE_APP_CONFIG_RS: &str = \"$(cat template/src/app_config.rs | base64 $opts)\";" >>$template_mod && echo "" >>$template_mod
29 | echo "pub const FILE_APP_DATA_RS: &str = \"$(cat template/src/app_data.rs | base64 $opts)\";" >>$template_mod && echo "" >>$template_mod
30 | echo "pub const FILE_APP_MENU_RS: &str = \"$(cat template/src/app_menu.rs | base64 $opts)\";" >>$template_mod && echo "" >>$template_mod
31 |
32 | echo "pub const FILE_BUILDER_RS: &str = \"$(cat template/src/builder.rs | base64 $opts)\";" >>$template_mod && echo "" >>$template_mod
33 | echo "pub const FILE_GENERATED_RS: &str = \"$(cat template/src/generated.rs | base64 $opts)\";" >>$template_mod && echo "" >>$template_mod
34 |
35 | echo "pub const FILE_MAIN_RS: &str = \"$(cat template/src/main.rs | base64 $opts)\";" >>$template_mod && echo "" >>$template_mod
36 | echo "pub const FILE_UTIL_RS: &str = \"$(cat template/src/util.rs | base64 $opts)\";" >>$template_mod && echo "" >>$template_mod
37 |
38 | # dir: template
39 | echo "pub const FILE_BUILD_RS: &str = \"$(cat template/build.rs | base64 $opts)\";" >>$template_mod && echo "" >>$template_mod
40 | echo "pub const FILE_CARGO_TOML: &str = \"$(cat template/Cargo.toml | base64 $opts)\";" >>$template_mod && echo "" >>$template_mod
41 | echo "pub const FILE_CARGO_LOCK: &str = \"$(cat template/Cargo.lock | base64 $opts)\";" >>$template_mod && echo "" >>$template_mod
42 | echo "pub const FILE_TAURI_CONF_JSON: &str = \"$(cat template/tauri.conf.json | base64 $opts)\";" >>$template_mod && echo "" >>$template_mod
43 | }
44 |
45 | build_template_gen() {
46 |
47 | script_js="template/src/script.js"
48 | out="template/src/generated.rs"
49 |
50 | echo "// This file is generated by watch.sh" >"$out"
51 | echo "// Do not edit it directly" >>"$out"
52 | echo "" >>"$out"
53 | echo "pub const INIT_SCRIPT: &str = r#\"" >>"$out"
54 | echo "$(cat "$script_js")" >>"$out"
55 | echo "\"#;" >>"$out"
56 | }
57 |
58 | autogen() {
59 | build_template_gen
60 | build_mod
61 | }
62 |
63 | watch_files() {
64 | # array of allowed files to watch
65 | files=(
66 | "template/src/app_config.rs"
67 | "template/src/app_data.rs"
68 | "template/src/app_menu.rs"
69 | "template/src/builder.rs"
70 | "template/src/generated.rs"
71 | "template/src/main.rs"
72 | "template/src/util.rs"
73 | "template/src/script.js"
74 | "template/build.rs"
75 | "template/Cargo.toml"
76 | "template/Cargo.lock"
77 | "template/tauri.conf.json"
78 | "template/icons/app-icon.png"
79 | )
80 |
81 | # map of states of files (map key is the sha256 of $file and state value is the string of : ls -l $file)
82 | declare -A states
83 |
84 | # init states
85 | for file in "${files[@]}"; do
86 | echo "watching $file"
87 |
88 | if [ ! -f "$file" ]; then
89 | echo "file $file does not exist skipping"
90 | continue
91 | fi
92 |
93 | key="$(sha256sum $file)"
94 | value="$(ls -l $file)"
95 | states[$key]="$value"
96 | done
97 |
98 | # watch loop
99 | while true; do
100 | for file in "${files[@]}"; do
101 | value="$(ls -l $file)"
102 | key="$(sha256sum $file)"
103 |
104 | if [ ! -f "$file" ]; then
105 | echo "file $file does not exist skipping"
106 | continue
107 | fi
108 |
109 | if [ "${states[$key]}" != "$value" ]; then
110 | echo "file $file changed"
111 | states[$key]="$value"
112 | autogen
113 | fi
114 | done
115 | sleep 1
116 | done
117 | }
118 |
119 | autogen
120 | watch_files
121 |
--------------------------------------------------------------------------------