diff --git a/Cargo.lock b/Cargo.lock index 1883716..fc30a09 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,10 +3,25 @@ version = 3 [[package]] -name = "anyhow" -version = "1.0.60" +name = "addr2line" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c794e162a5eff65c72ef524dfe393eb923c354e350bb78b9c7383df13f3bc142" +checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "anyhow" +version = "1.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" [[package]] name = "autocfg" @@ -14,6 +29,21 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "backtrace" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -22,9 +52,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bytes" -version = "1.2.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "cairo-rs" @@ -51,12 +81,19 @@ dependencies = [ ] [[package]] -name = "cfg-expr" -version = "0.10.3" +name = "cc" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" + +[[package]] +name = "cfg-expr" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "215c0072ecc28f92eeb0eea38ba63ddfcb65c2828c46311d646f1a3ff5f9841c" dependencies = [ "smallvec", + "target-lexicon", ] [[package]] @@ -66,10 +103,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "field-offset" -version = "0.3.4" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ "memoffset", "rustc_version", @@ -77,30 +120,39 @@ dependencies = [ [[package]] name = "fragile" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85dcb89d2b10c5f6133de2efd8c11959ce9dbb46a2f7a4cab208c4eeda6ce1ab" +checksum = "b7464c5c4a3f014d9b2ec4073650e5c06596f385060af740fc45ad5a19f959e8" +dependencies = [ + "fragile 2.0.0", +] + +[[package]] +name = "fragile" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] name = "futures-channel" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", ] [[package]] name = "futures-core" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -109,21 +161,21 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-task" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-util" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-core", "futures-task", @@ -191,6 +243,12 @@ dependencies = [ "system-deps", ] +[[package]] +name = "gimli" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" + [[package]] name = "gio" version = "0.15.12" @@ -243,9 +301,9 @@ dependencies = [ [[package]] name = "glib-macros" -version = "0.15.11" +version = "0.15.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a68131a662b04931e71891fb14aaf65ee4b44d08e8abc10f49e77418c86c64" +checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a" dependencies = [ "anyhow", "heck", @@ -253,7 +311,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -334,9 +392,9 @@ dependencies = [ [[package]] name = "gtk4" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64f0c2a3d80e899dc3febddad5bac193ffcf74a0fd7e31037f30dd34d6f7396" +checksum = "4e8ae5aef2793bc3551b5e5e3fa062a5de54bb1eccf10dfa4effe9e4384fbbbc" dependencies = [ "bitflags", "cairo-rs", @@ -357,9 +415,9 @@ dependencies = [ [[package]] name = "gtk4-macros" -version = "0.4.8" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fafbcc920af4eb677d7d164853e7040b9de5a22379c596f570190c675d45f7a7" +checksum = "6aba0b544e91a753068e279e99d34e9624b8cfd26282167024c8a5773b8a826c" dependencies = [ "anyhow", "proc-macro-crate", @@ -367,7 +425,7 @@ dependencies = [ "proc-macro2", "quick-xml", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -390,25 +448,38 @@ dependencies = [ ] [[package]] -name = "heck" -version = "0.4.0" +name = "hashbrown" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.1.19" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" + +[[package]] +name = "indexmap" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" dependencies = [ - "libc", + "equivalent", + "hashbrown", ] [[package]] name = "itoa" -version = "1.0.3" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" +checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" [[package]] name = "libadwaita" @@ -444,15 +515,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.127" +version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "505e71a4706fa491e9b1b55f51b95d4037d0821ee40131190475f692b35b009b" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" [[package]] name = "lock_api" -version = "0.4.7" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" dependencies = [ "autocfg", "scopeguard", @@ -460,12 +531,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" [[package]] name = "memchr" @@ -475,40 +543,57 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memoffset" -version = "0.6.5" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" dependencies = [ "autocfg", ] [[package]] -name = "mio" -version = "0.8.4" +name = "miniz_oxide" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", - "log", "wasi", "windows-sys", ] [[package]] name = "num_cpus" -version = "1.13.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ "hermit-abi", "libc", ] [[package]] -name = "once_cell" -version = "1.13.0" +name = "object" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" +checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "pango" @@ -547,32 +632,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.3" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys", -] - -[[package]] -name = "pest" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69486e2b8c2d2aeb9762db7b4e00b0331156393555cff467f4163ff06821eef8" -dependencies = [ - "thiserror", - "ucd-trie", + "windows-targets", ] [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57" [[package]] name = "pin-utils" @@ -582,19 +657,18 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.25" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "proc-macro-crate" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d50bfb8c23f23915855a00d98b5a35ef2e0b871bb52937bacadb798fbb66c8" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", - "thiserror", - "toml", + "toml_edit", ] [[package]] @@ -606,7 +680,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -623,9 +697,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.43" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" +checksum = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da" dependencies = [ "unicode-ident", ] @@ -641,18 +715,18 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.21" +version = "1.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" dependencies = [ "proc-macro2", ] [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ "bitflags", ] @@ -663,7 +737,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e737555426b35a18e9f6fa8d291ce858d358504d441d1e0a7b06ce6c905cc63" dependencies = [ - "fragile", + "fragile 1.2.2", "futures-core", "gtk4", "libadwaita", @@ -680,23 +754,29 @@ checksum = "7136d9b9b97dc87198c619587de7bd61aca5ec4bec58a7167404c1edf750a490" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] -name = "rustc_version" -version = "0.3.3" +name = "rustc-demangle" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ "semver", ] [[package]] name = "ryu" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9" [[package]] name = "scopeguard" @@ -706,47 +786,35 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "semver" -version = "0.11.0" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver-parser" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" -dependencies = [ - "pest", -] +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" [[package]] name = "serde" -version = "1.0.142" +version = "1.0.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e590c437916fb6b221e1d00df6e3294f3fccd70ca7e92541c475d6ed6ef5fee2" +checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.142" +version = "1.0.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34b5b8d809babe02f538c2cfec6f2c1ed10804c0e5a6a041a049a4f5588ccc2e" +checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.26", ] [[package]] name = "serde_json" -version = "1.0.83" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38dd04e3c8279e75b31ef29dbdceebfe5ad89f4d0937213c53f7d49d01b3d5a7" +checksum = "b5062a995d481b2308b6064e9af76011f2921c35f97b0468811ed9f6cd91dfed" dependencies = [ "itoa", "ryu", @@ -754,34 +822,43 @@ dependencies = [ ] [[package]] -name = "signal-hook-registry" -version = "1.4.0" +name = "serde_spanned" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +dependencies = [ + "serde", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] [[package]] name = "slab" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" dependencies = [ "autocfg", ] [[package]] name = "smallvec" -version = "1.9.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" +checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" [[package]] name = "socket2" -version = "0.4.4" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ "libc", "winapi", @@ -789,9 +866,20 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.99" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45c3457aacde3c65315de5031ec191ce46604304d2446e803d71ade03308d970" dependencies = [ "proc-macro2", "quote", @@ -800,9 +888,9 @@ dependencies = [ [[package]] name = "system-deps" -version = "6.0.2" +version = "6.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709" +checksum = "30c2de8a4d8f4b823d634affc9cd2a74ec98c53a756f317e529a48046cbf71f3" dependencies = [ "cfg-expr", "heck", @@ -812,35 +900,41 @@ dependencies = [ ] [[package]] -name = "thiserror" -version = "1.0.32" +name = "target-lexicon" +version = "0.12.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5f6586b7f764adc0231f4c79be7b920e766bb2f3e51b3661cdb263828f19994" +checksum = "df8e77cb757a61f51b947ec4a7e3646efd825b73561db1c232a8ccb639e611a0" + +[[package]] +name = "thiserror" +version = "1.0.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a35fc5b8971143ca348fa6df4f024d4d55264f3468c71ad1c2f365b0a4d58c42" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.32" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12bafc5b54507e0149cdf1b145a5d80ab80a90bcd9275df43d4fff68460f6c21" +checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.26", ] [[package]] name = "tokio" -version = "1.20.4" +version = "1.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb78f30e4b41e98ca4cce5acb51168a033839a7af9e42b380355808e14e98ee0" +checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" dependencies = [ "autocfg", + "backtrace", "bytes", "libc", - "memchr", "mio", "num_cpus", "parking_lot", @@ -848,27 +942,52 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "winapi", + "windows-sys", ] [[package]] name = "tokio-macros" -version = "1.8.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.26", ] [[package]] name = "toml" -version = "0.5.9" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" dependencies = [ "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", ] [[package]] @@ -881,23 +1000,17 @@ dependencies = [ "tokio", ] -[[package]] -name = "ucd-trie" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89570599c4fe5585de2b388aab47e99f7fa4e9238a1399f707a02e356058141c" - [[package]] name = "unicode-ident" -version = "1.0.3" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] name = "version-compare" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" [[package]] name = "version_check" @@ -935,43 +1048,75 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.36.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +dependencies = [ + "windows_aarch64_gnullvm", "windows_aarch64_msvc", "windows_i686_gnu", "windows_i686_msvc", "windows_x86_64_gnu", + "windows_x86_64_gnullvm", "windows_x86_64_msvc", ] [[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" +name = "windows_aarch64_gnullvm" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" [[package]] name = "windows_i686_gnu" -version = "0.36.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" [[package]] name = "windows_i686_msvc" -version = "0.36.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" [[package]] name = "windows_x86_64_gnu" -version = "0.36.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" [[package]] name = "windows_x86_64_msvc" -version = "0.36.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + +[[package]] +name = "winnow" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fac9742fd1ad1bd9643b991319f72dd031016d44b77039a26977eb667141e7" +dependencies = [ + "memchr", +] diff --git a/src/main.rs b/src/main.rs index dc1b143..0e0b1e7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,11 +2,11 @@ use std::collections::VecDeque; use relm4::gtk::{Application, ApplicationWindow}; use relm4::{factory::FactoryVecDeque, RelmApp}; -use toolbx::ToolbxContainer; use ui::app::model::AppModel; +use util::toolbx::ToolbxContainer; -mod toolbx; mod ui; +mod util; fn main() { let toolbx_list = VecDeque::from(ToolbxContainer::get_toolboxes()); diff --git a/src/ui/mod.rs b/src/ui.rs similarity index 100% rename from src/ui/mod.rs rename to src/ui.rs diff --git a/src/ui/app/mod.rs b/src/ui/app.rs similarity index 100% rename from src/ui/app/mod.rs rename to src/ui/app.rs diff --git a/src/ui/app/messages.rs b/src/ui/app/messages.rs index a344449..cc23db8 100644 --- a/src/ui/app/messages.rs +++ b/src/ui/app/messages.rs @@ -1,12 +1,10 @@ use relm4::factory::DynamicIndex; -use crate::toolbx::ToolbxContainer; +use crate::util::toolbx::ToolbxContainer; use super::model::ToolbxEntry; pub enum AppMsg { - ShowToolboxSettingsRequest(DynamicIndex), - ShowToolboxAppsRequest, ToolbxListUpdate(Vec), ToolbxContainerToggleStartStop(DynamicIndex), OpenToolbxTerminal(DynamicIndex), diff --git a/src/ui/app/model.rs b/src/ui/app/model.rs index dac6a01..9468c33 100644 --- a/src/ui/app/model.rs +++ b/src/ui/app/model.rs @@ -1,6 +1,6 @@ use relm4::{factory::FactoryVecDeque, Model}; -use crate::{toolbx::ToolbxContainer, ui::components::AppComponents}; +use crate::{ui::components::AppComponents, util::toolbx::ToolbxContainer}; use super::{messages::AppMsg, widgets::AppWidgets}; diff --git a/src/ui/app/toolbox_list.rs b/src/ui/app/toolbox_list.rs index 140a4e3..63f8b03 100644 --- a/src/ui/app/toolbox_list.rs +++ b/src/ui/app/toolbox_list.rs @@ -9,11 +9,11 @@ use relm4::{ }; use crate::{ - toolbx::ToolbxStatus, ui::ui_strings::{ APP_ICON, APP_TOOLTIP, SETTINGS_ICON, SETTINGS_TOOLTIP, SHUTDOWN_ICON, SHUTDOWN_TOOLTIP, START_ICON, START_TOOLTIP, TERMINAL_ICON, TERMINAL_TOOLTIP, UPDATE_ICON, UPDATE_TOOLTIP, }, + util::toolbx::ToolbxStatus, }; use super::{messages::AppMsg, model::ToolbxEntry}; @@ -38,20 +38,6 @@ impl FactoryPrototype for ToolbxEntry { view! { suffix_box = >k::Box{ - /* application menu - append = >k::AspectFrame{ - set_ratio: 1.0, - set_child = Some(>k::Button::from_icon_name(APP_ICON)) { - set_margin_start: 10, - set_margin_top: 10, - set_margin_bottom: 10, - set_tooltip_text: Some(APP_TOOLTIP), - set_css_classes: &["flat"], - connect_clicked(sender) => move |btn| { - send!(sender, AppMsg::ShowToolboxAppsRequest); - }, - } - },*/ append = >k::AspectFrame{ set_ratio: 1.0, set_child = Some(>k::Button::from_icon_name(TERMINAL_ICON)) { @@ -65,40 +51,8 @@ impl FactoryPrototype for ToolbxEntry { }, } }, - append = >k::AspectFrame{ - set_ratio: 1.0, - set_child = Some(>k::Button::from_icon_name(SETTINGS_ICON)) { - set_margin_start: 10,set_margin_start: 10, - set_margin_top: 10, - set_margin_bottom: 10, - set_tooltip_text: Some(SETTINGS_TOOLTIP), - set_css_classes: &["circular"], - connect_clicked(sender) => move |btn| { - send!(sender, AppMsg::ShowToolboxSettingsRequest(index_settings.clone())); - }, - }, - } } }; - - /* - if self.update_available { - view! { - update_button = >k::AspectFrame{ - set_ratio: 1.0, - set_child = Some(>k::Button::from_icon_name(UPDATE_ICON)) { - set_margin_top: 10, - set_margin_bottom: 10, - set_margin_end: 10, - set_tooltip_text: Some(UPDATE_TOOLTIP), - set_css_classes: &["suggested-action"], - } - } - }; - suffix_box.prepend(&update_button); - } - */ - let mut status_button_tooltip = START_TOOLTIP; let mut status_button_icon = START_ICON; diff --git a/src/ui/app/update.rs b/src/ui/app/update.rs index 76c7bfd..6e12c80 100644 --- a/src/ui/app/update.rs +++ b/src/ui/app/update.rs @@ -2,35 +2,13 @@ use std::process::Command; use relm4::{AppUpdate, Sender}; -use crate::{ - toolbx::ToolbxStatus, - ui::components::{ - toolbox_apps::messages::ToolboxAppDialogMsg, - toolbox_settings::messages::ToolboxSettingsDialogMsg, AppComponents, - }, -}; +use crate::{ui::components::AppComponents, util::toolbx::ToolbxStatus}; use super::{messages::AppMsg, model::AppModel, workers::AsyncHandlerMsg}; impl AppUpdate for AppModel { fn update(&mut self, msg: AppMsg, components: &AppComponents, _sender: Sender) -> bool { match msg { - AppMsg::ShowToolboxSettingsRequest(index) => { - if let Some(toolbx_entry) = self.toolboxes.get(index.current_index()) { - components - .toolbox_settings_dialog - .send(ToolboxSettingsDialogMsg::Show( - toolbx_entry.toolbx_container.clone(), - )) - .unwrap(); - } - } - AppMsg::ShowToolboxAppsRequest => { - components - .toolbox_apps_dialog - .send(ToolboxAppDialogMsg::Show) - .unwrap(); - } AppMsg::ToolbxContainerToggleStartStop(index) => { if let Some(toolbx_container) = self.toolboxes.get_mut(index.current_index()) { match toolbx_container.toolbx_container.status { diff --git a/src/ui/app/workers.rs b/src/ui/app/workers.rs index e99f41a..4fd1955 100644 --- a/src/ui/app/workers.rs +++ b/src/ui/app/workers.rs @@ -5,7 +5,7 @@ use relm4::{send, MessageHandler, Sender}; use tokio::runtime::{Builder, Runtime}; use tokio::sync::mpsc::{channel, Sender as TokioSender}; -use crate::toolbx::ToolbxContainer; +use crate::util::toolbx::ToolbxContainer; use super::{ messages::AppMsg, diff --git a/src/ui/components.rs b/src/ui/components.rs new file mode 100644 index 0000000..579706b --- /dev/null +++ b/src/ui/components.rs @@ -0,0 +1,11 @@ +use relm4::RelmComponent; +use relm4::RelmMsgHandler; +use relm4::Sender; + +use super::app::model::AppModel; +use super::app::workers::AsyncHandler; + +#[derive(relm4::Components)] +pub struct AppComponents { + pub async_handler: RelmMsgHandler, +} diff --git a/src/ui/components/mod.rs b/src/ui/components/mod.rs deleted file mode 100644 index 9538ce6..0000000 --- a/src/ui/components/mod.rs +++ /dev/null @@ -1,20 +0,0 @@ -use relm4::RelmComponent; -use relm4::RelmMsgHandler; -use relm4::Sender; - -use self::{ - toolbox_apps::model::ToolboxAppDialogModel, toolbox_settings::model::ToolboxSettingsDialogModel, -}; - -use super::app::model::AppModel; -use super::app::workers::AsyncHandler; - -pub mod toolbox_apps; -pub mod toolbox_settings; - -#[derive(relm4::Components)] -pub struct AppComponents { - pub toolbox_settings_dialog: RelmComponent, - pub toolbox_apps_dialog: RelmComponent, - pub async_handler: RelmMsgHandler, -} diff --git a/src/ui/components/toolbox_apps/factory.rs b/src/ui/components/toolbox_apps/factory.rs deleted file mode 100644 index a4cc3a6..0000000 --- a/src/ui/components/toolbox_apps/factory.rs +++ /dev/null @@ -1,82 +0,0 @@ -use relm4::{ - adw::prelude::{BoxExt, OrientableExt, WidgetExt}, - factory::{FactoryPrototype, FactoryVec}, - gtk::{self, Orientation}, - view, Sender, WidgetPlus, -}; - -use super::{ - messages::ToolboxAppDialogMsg, model::DotDesktopApplication, widgets::AppFactoryWidgets, -}; - -impl FactoryPrototype for DotDesktopApplication { - type Factory = FactoryVec; - type Widgets = AppFactoryWidgets; - type Root = gtk::Box; - type View = gtk::FlowBox; - type Msg = ToolboxAppDialogMsg; - - fn init_view( - &self, - key: &>::Key, - sender: Sender, - ) -> Self::Widgets { - view! { - app_box = >k::Box { - set_css_classes: &[&"card"], - set_halign: gtk::Align::Center, - set_valign: gtk::Align::Center, - set_orientation: Orientation::Vertical, - set_hexpand: false, - set_vexpand: false, - set_width_request: 100, - set_height_request: 100, - - append = >k::Switch { - set_halign: gtk::Align::Center, - set_valign: gtk::Align::Center, - set_hexpand: false, - set_vexpand: false, - set_margin_all: 10, - set_active: self.selected, - }, - append = >k::Image::from_file(&self.icon_path) { - set_halign: gtk::Align::Center, - set_valign: gtk::Align::Center, - set_width_request: 64, - set_height_request: 64, - set_margin_start: 36, - set_margin_end: 36, - set_hexpand: false, - set_vexpand: false, - }, - append = >k::Label { - set_halign: gtk::Align::Center, - set_valign: gtk::Align::Center, - set_text: &self.name, - set_margin_all: 5, - set_hexpand: false, - set_vexpand: false, - } - } - } - AppFactoryWidgets { app_box } - } - - fn position( - &self, - key: &>::Key, - ) -> >::Position { - } - - fn view( - &self, - key: &>::Key, - widgets: &Self::Widgets, - ) { - } - - fn root_widget(widgets: &Self::Widgets) -> &Self::Root { - &widgets.app_box - } -} diff --git a/src/ui/components/toolbox_apps/messages.rs b/src/ui/components/toolbox_apps/messages.rs deleted file mode 100644 index e751028..0000000 --- a/src/ui/components/toolbox_apps/messages.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub enum ToolboxAppDialogMsg { - Show, - Close, -} diff --git a/src/ui/components/toolbox_apps/mod.rs b/src/ui/components/toolbox_apps/mod.rs deleted file mode 100644 index cfdc5b2..0000000 --- a/src/ui/components/toolbox_apps/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -pub mod factory; -pub mod messages; -pub mod model; -pub mod update; -pub mod widgets; diff --git a/src/ui/components/toolbox_apps/model.rs b/src/ui/components/toolbox_apps/model.rs deleted file mode 100644 index 2b3efe6..0000000 --- a/src/ui/components/toolbox_apps/model.rs +++ /dev/null @@ -1,20 +0,0 @@ -use relm4::{factory::FactoryVec, Model}; - -use super::{messages::ToolboxAppDialogMsg, widgets::ToolboxAppDialogWidgets}; - -#[derive(Default)] -pub struct DotDesktopApplication { - pub name: String, - pub selected: bool, - pub icon_path: String, -} -pub struct ToolboxAppDialogModel { - pub hidden: bool, - pub apps: FactoryVec, -} - -impl Model for ToolboxAppDialogModel { - type Msg = ToolboxAppDialogMsg; - type Widgets = ToolboxAppDialogWidgets; - type Components = (); -} diff --git a/src/ui/components/toolbox_apps/update.rs b/src/ui/components/toolbox_apps/update.rs deleted file mode 100644 index e74a7b9..0000000 --- a/src/ui/components/toolbox_apps/update.rs +++ /dev/null @@ -1,51 +0,0 @@ -use relm4::{factory::FactoryVec, ComponentUpdate, Sender}; - -use crate::ui::app::{messages::AppMsg, model::AppModel}; - -use super::{ - messages::ToolboxAppDialogMsg, - model::{DotDesktopApplication, ToolboxAppDialogModel}, -}; - -impl ComponentUpdate for ToolboxAppDialogModel { - fn init_model(_parent_model: &AppModel) -> Self { - let mut factory_vec = FactoryVec::new(); - factory_vec.push(DotDesktopApplication { - name: "Firefox".to_string(), - selected: true, - icon_path: "".to_string(), - }); - factory_vec.push(DotDesktopApplication { - name: "Firefox".to_string(), - selected: false, - icon_path: "".to_string(), - }); - factory_vec.push(DotDesktopApplication { - name: "Firefox".to_string(), - selected: true, - icon_path: "".to_string(), - }); - factory_vec.push(DotDesktopApplication { - name: "Firefox".to_string(), - selected: false, - icon_path: "".to_string(), - }); - ToolboxAppDialogModel { - hidden: true, - apps: factory_vec, - } - } - - fn update( - &mut self, - msg: ToolboxAppDialogMsg, - _components: &(), - _sender: Sender, - parent_sender: Sender, - ) { - match msg { - ToolboxAppDialogMsg::Show => self.hidden = false, - ToolboxAppDialogMsg::Close => self.hidden = true, - } - } -} diff --git a/src/ui/components/toolbox_apps/widgets.rs b/src/ui/components/toolbox_apps/widgets.rs deleted file mode 100644 index 322312a..0000000 --- a/src/ui/components/toolbox_apps/widgets.rs +++ /dev/null @@ -1,63 +0,0 @@ -use gtk::Orientation; -use gtk::PolicyType; -use relm4::adw; -use relm4::adw::prelude::GtkWindowExt; -use relm4::adw::prelude::WidgetExt; -use relm4::adw::traits::PreferencesGroupExt; -use relm4::adw::traits::PreferencesPageExt; -use relm4::adw::traits::PreferencesWindowExt; -use relm4::gtk; -use relm4::send; -use relm4::WidgetPlus; -use relm4::Widgets; - -use gtk::prelude::*; - -use crate::ui::app::model::AppModel; -use crate::ui::components::toolbox_apps::messages::ToolboxAppDialogMsg; - -use super::model::ToolboxAppDialogModel; - -#[derive(Debug)] -pub struct AppFactoryWidgets { - pub app_box: gtk::Box, -} - -#[relm4::widget(pub)] -impl Widgets for ToolboxAppDialogWidgets { - view! { - adw::PreferencesWindow { - set_title: Some("Applications: "), - set_transient_for: parent!{Some(&parent_widgets.main_window)}, - set_modal: true, - set_search_enabled: false, - set_visible: watch!(!model.hidden), - connect_close_request(sender) => move |_| { - send!(sender, ToolboxAppDialogMsg::Close); - gtk::Inhibit(true) - }, - add = &adw::PreferencesPage { - set_hexpand: true, - set_vexpand: false, - add = &adw::PreferencesGroup { - add = >k::ScrolledWindow { - set_hscrollbar_policy: PolicyType::Never, - set_hexpand: false, - set_vexpand: true, - set_child = Some(>k::FlowBox) { - set_halign: gtk::Align::Fill, - set_valign: gtk::Align::Start, - set_selection_mode: gtk::SelectionMode::None, - set_margin_all: 5, - set_column_spacing: 5, - set_row_spacing: 5, - set_orientation: Orientation::Horizontal, - factory!(model.apps), - } - } - - } - } - } - } -} diff --git a/src/ui/components/toolbox_settings/components.rs b/src/ui/components/toolbox_settings/components.rs deleted file mode 100644 index ad8ac23..0000000 --- a/src/ui/components/toolbox_settings/components.rs +++ /dev/null @@ -1,11 +0,0 @@ -use relm4::RelmComponent; -use relm4::RelmMsgHandler; -use relm4::Sender; - -use super::model::ToolboxSettingsDialogModel; -use crate::ui::components::toolbox_settings::workers::AsyncSettingsHandler; - -#[derive(relm4::Components)] -pub struct SettingsComponents { - pub async_handler: RelmMsgHandler, -} diff --git a/src/ui/components/toolbox_settings/messages.rs b/src/ui/components/toolbox_settings/messages.rs deleted file mode 100644 index a530798..0000000 --- a/src/ui/components/toolbox_settings/messages.rs +++ /dev/null @@ -1,9 +0,0 @@ -use crate::toolbx::ToolbxContainer; - -use super::model::ToolboxPreferences; - -pub enum ToolboxSettingsDialogMsg { - Show(ToolbxContainer), - ReplyToolbxSettings(ToolboxPreferences), - Close, -} diff --git a/src/ui/components/toolbox_settings/mod.rs b/src/ui/components/toolbox_settings/mod.rs deleted file mode 100644 index 79c7f13..0000000 --- a/src/ui/components/toolbox_settings/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -pub mod components; -pub mod messages; -pub mod model; -pub mod update; -pub mod widgets; -pub mod workers; diff --git a/src/ui/components/toolbox_settings/model.rs b/src/ui/components/toolbox_settings/model.rs deleted file mode 100644 index 69fade0..0000000 --- a/src/ui/components/toolbox_settings/model.rs +++ /dev/null @@ -1,23 +0,0 @@ -use relm4::Model; - -use super::{ - components::SettingsComponents, messages::ToolboxSettingsDialogMsg, - widgets::ToolboxSettingsDialogWidgets, -}; -use crate::toolbx::ToolbxContainer; - -pub struct ToolboxSettingsDialogModel { - pub hidden: bool, - pub window_title: Option, - pub current_toolbox_container: Option, - pub current_toolbx_settings: Option, -} - -impl Model for ToolboxSettingsDialogModel { - type Msg = ToolboxSettingsDialogMsg; - type Widgets = ToolboxSettingsDialogWidgets; - type Components = SettingsComponents; -} - -#[derive(Debug, Clone)] -pub struct ToolboxPreferences {} diff --git a/src/ui/components/toolbox_settings/update.rs b/src/ui/components/toolbox_settings/update.rs deleted file mode 100644 index 361d2bc..0000000 --- a/src/ui/components/toolbox_settings/update.rs +++ /dev/null @@ -1,67 +0,0 @@ -use relm4::{ComponentUpdate, Sender}; - -use crate::ui::app::{messages::AppMsg, model::AppModel}; - -use super::{ - components::SettingsComponents, messages::ToolboxSettingsDialogMsg, - model::ToolboxSettingsDialogModel, workers::AsyncSettingsHandlerMsg, -}; - -impl ComponentUpdate for ToolboxSettingsDialogModel { - fn init_model(_parent_model: &AppModel) -> Self { - ToolboxSettingsDialogModel { - hidden: true, - window_title: None, - current_toolbox_container: None, - current_toolbx_settings: None, - } - } - - fn update( - &mut self, - msg: ToolboxSettingsDialogMsg, - components: &SettingsComponents, - _sender: Sender, - parent_sender: Sender, - ) { - match msg { - ToolboxSettingsDialogMsg::ReplyToolbxSettings(settings) => { - self.current_toolbx_settings = Some(settings); - println!("Received Toolbox Settings"); - } - ToolboxSettingsDialogMsg::Show(toolbx_container) => { - self.hidden = false; - self.window_title = Some(format!( - "Toolbx Preferences: {}", - toolbx_container.name.clone() - )); - // TODO: create settings handling for each toolbox - // probably settings for a toolbox should be stored in a HashMap and loaded based on that - components - .async_handler - .sender() - .blocking_send(AsyncSettingsHandlerMsg::RequestToolbxSettings( - toolbx_container.clone(), - )) - .expect("Receiver dropped"); - self.current_toolbox_container = Some(toolbx_container); - } - ToolboxSettingsDialogMsg::Close => { - self.current_toolbx_settings.as_ref().map(|settings| { - components - .async_handler - .sender() - .blocking_send(AsyncSettingsHandlerMsg::SaveToolboxSettings( - settings.clone(), - )) - .expect("Receiver dropped"); - }); - - self.hidden = true; - self.window_title = None; - self.current_toolbox_container = None; - self.current_toolbx_settings = None; - } - } - } -} diff --git a/src/ui/components/toolbox_settings/widgets.rs b/src/ui/components/toolbox_settings/widgets.rs deleted file mode 100644 index 3bb5b03..0000000 --- a/src/ui/components/toolbox_settings/widgets.rs +++ /dev/null @@ -1,89 +0,0 @@ -use relm4::adw; -use relm4::adw::prelude::BoxExt; -use relm4::adw::prelude::GtkWindowExt; -use relm4::adw::prelude::ListBoxRowExt; -use relm4::adw::prelude::WidgetExt; -use relm4::adw::traits::ActionRowExt; -use relm4::adw::traits::PreferencesGroupExt; -use relm4::adw::traits::PreferencesPageExt; -use relm4::adw::traits::PreferencesRowExt; -use relm4::adw::traits::PreferencesWindowExt; -use relm4::gtk; -use relm4::send; -use relm4::WidgetPlus; -use relm4::Widgets; - -use crate::ui::app::model::AppModel; -use crate::ui::components::toolbox_settings::messages::ToolboxSettingsDialogMsg; -use crate::ui::ui_strings::FOLDER_PICKER_ICON; -use crate::ui::ui_strings::FOLDER_PICKER_TOOLTIP; - -use super::model::ToolboxSettingsDialogModel; - -#[relm4::widget(pub)] -impl Widgets for ToolboxSettingsDialogWidgets { - view! { - adw::PreferencesWindow { - set_title: watch!{ model.window_title.as_ref().map( |x| x.as_str() ) }, - set_transient_for: parent!{Some(&parent_widgets.main_window)}, - set_modal: true, - set_visible: watch!(!model.hidden), - connect_close_request(sender) => move |_| { - send!(sender, ToolboxSettingsDialogMsg::Close); - gtk::Inhibit(true) - }, - add = &adw::PreferencesPage { - add = &adw::PreferencesGroup { - set_title: "Updates", - add = &adw::PreferencesRow { - set_title: "Update Policy", - set_child = Some(&adw::ActionRow) { - set_title: "Update Policy", - add_suffix = >k::Box { - append = >k::DropDown::from_strings(&[ - "Update automatically", - "Notify about updates", - "Do nothing" - ]) { - set_margin_all: 15, - }, - } - }, - }, - }, - add = &adw::PreferencesGroup { - set_title: "Home Folder", - add = &adw::PreferencesRow { - set_title: "Separate Home Folder", - set_child = Some(&adw::ActionRow) { - set_title: "Use separate home folder", - add_suffix = >k::Box { - append = >k::Switch { - set_margin_all: 15, - set_tooltip_text: Some("Use separate home folder"), - }, - } - }, - }, - add = &adw::PreferencesRow { - set_title: "Home Folder Path", - set_child = Some(&adw::ActionRow) { - set_title: "Home folder path", - add_suffix = >k::Box { - set_margin_all: 15, - add_css_class: "linked", - append = >k::Entry { - set_hexpand: true, - }, - append = >k::Button::from_icon_name(FOLDER_PICKER_ICON) { - set_tooltip_text: Some(FOLDER_PICKER_TOOLTIP), - } - } - }, - }, - - } - } - } - } -} diff --git a/src/ui/components/toolbox_settings/workers.rs b/src/ui/components/toolbox_settings/workers.rs deleted file mode 100644 index 979c65a..0000000 --- a/src/ui/components/toolbox_settings/workers.rs +++ /dev/null @@ -1,76 +0,0 @@ -use std::time::Duration; - -use crate::toolbx::ToolbxContainer; - -use relm4::factory::DynamicIndex; -use relm4::{send, MessageHandler, Sender}; -use tokio::runtime::{Builder, Runtime}; -use tokio::sync::mpsc::{channel, Sender as TokioSender}; - -use crate::ui::app::{messages::AppMsg, model::AppModel}; - -use super::model::ToolboxPreferences; -use crate::ui::components::toolbox_settings::messages::ToolboxSettingsDialogMsg; -use crate::ui::components::ToolboxSettingsDialogModel; - -// Code adapted from https://relm4.org/book/stable/message_handler.html -pub struct AsyncSettingsHandler { - _rt: Runtime, - sender: TokioSender, -} - -#[derive(Debug)] -pub enum AsyncSettingsHandlerMsg { - RequestToolbxSettings(ToolbxContainer), - SaveToolboxSettings(ToolboxPreferences), -} - -impl MessageHandler for AsyncSettingsHandler { - type Msg = AsyncSettingsHandlerMsg; - type Sender = TokioSender; - - fn init( - _parent_model: &ToolboxSettingsDialogModel, - parent_sender: Sender, - ) -> Self { - let (sender, mut rx) = channel::(10); - - let rt = Builder::new_multi_thread() - .worker_threads(1) - .enable_time() - .build() - .unwrap(); - - rt.spawn(async move { - while let Some(msg) = rx.recv().await { - let parent_sender = parent_sender.clone(); - tokio::spawn(async move { - match msg { - AsyncSettingsHandlerMsg::SaveToolboxSettings(tbx_settings) => { - // TODO: actually save settings - println!("Received Toolbx Settings save request"); - } - AsyncSettingsHandlerMsg::RequestToolbxSettings(tbx) => { - println!("Received ToolbxSettings Request"); - parent_sender - .send(ToolboxSettingsDialogMsg::ReplyToolbxSettings( - ToolboxPreferences {}, - )) - .unwrap(); - } - } - }); - } - }); - - AsyncSettingsHandler { _rt: rt, sender } - } - - fn send(&self, msg: Self::Msg) { - self.sender.blocking_send(msg).unwrap(); - } - - fn sender(&self) -> Self::Sender { - self.sender.clone() - } -} diff --git a/src/util.rs b/src/util.rs new file mode 100644 index 0000000..45cefee --- /dev/null +++ b/src/util.rs @@ -0,0 +1 @@ +pub mod toolbx; diff --git a/src/toolbx/mod.rs b/src/util/toolbx.rs similarity index 100% rename from src/toolbx/mod.rs rename to src/util/toolbx.rs