From 18ab70c2990b49adc10870c113abf10bbce46108 Mon Sep 17 00:00:00 2001 From: brotoskyj Date: Tue, 28 Jan 2025 14:51:14 -0500 Subject: [PATCH] 1. Finished GUI 2. Implemented Geolocation API --- Cargo.lock | 610 ++++++++++++++++++++++++++++++++- Cargo.toml | 2 + backup.txt | 67 ++++ build.rs | 2 +- src/main.rs | 41 ++- ui/pages/computermodules.slint | 157 +++++++++ ui/pages/othertools.slint | 117 +++++++ ui/pages/settings.slint | 5 + ui/pages/usermodules.slint | 259 ++++++++++++++ ui/sidebar.slint | 137 ++++++++ ui/template.slint | 31 +- 11 files changed, 1412 insertions(+), 16 deletions(-) create mode 100644 backup.txt create mode 100644 ui/pages/computermodules.slint create mode 100644 ui/pages/othertools.slint create mode 100644 ui/pages/settings.slint create mode 100644 ui/pages/usermodules.slint create mode 100644 ui/sidebar.slint diff --git a/Cargo.lock b/Cargo.lock index e68c85a..b6a1f7a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -110,6 +110,15 @@ dependencies = [ "winit", ] +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + [[package]] name = "adler2" version = "2.0.0" @@ -451,6 +460,21 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + [[package]] name = "base64" version = "0.22.1" @@ -684,6 +708,8 @@ dependencies = [ name = "champ" version = "0.1.0" dependencies = [ + "reqwest", + "serde_json", "slint", "slint-build", ] @@ -840,7 +866,7 @@ dependencies = [ "bitflags 1.3.2", "core-foundation 0.9.4", "core-graphics-types 0.1.3", - "foreign-types", + "foreign-types 0.5.0", "libc", ] @@ -853,7 +879,7 @@ dependencies = [ "bitflags 2.8.0", "core-foundation 0.10.0", "core-graphics-types 0.2.0", - "foreign-types", + "foreign-types 0.5.0", "libc", ] @@ -887,7 +913,7 @@ checksum = "c9d2790b5c08465d49f8dc05c8bcae9fea467855947db39b0f8145c091aaced5" dependencies = [ "core-foundation 0.9.4", "core-graphics 0.23.2", - "foreign-types", + "foreign-types 0.5.0", "libc", ] @@ -1179,6 +1205,15 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + [[package]] name = "endi" version = "1.1.0" @@ -1389,6 +1424,15 @@ dependencies = [ "ttf-parser 0.21.1", ] +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared 0.1.1", +] + [[package]] name = "foreign-types" version = "0.5.0" @@ -1396,7 +1440,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" dependencies = [ "foreign-types-macros", - "foreign-types-shared", + "foreign-types-shared 0.3.1", ] [[package]] @@ -1410,6 +1454,12 @@ dependencies = [ "syn", ] +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + [[package]] name = "foreign-types-shared" version = "0.3.1" @@ -1590,6 +1640,12 @@ dependencies = [ "weezl", ] +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + [[package]] name = "gl_generator" version = "0.14.0" @@ -1697,6 +1753,25 @@ dependencies = [ "gl_generator", ] +[[package]] +name = "h2" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "half" version = "2.4.1" @@ -1760,6 +1835,118 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "http" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" + +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +dependencies = [ + "futures-util", + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + [[package]] name = "i-slint-backend-linuxkms" version = "1.9.2" @@ -2282,6 +2469,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + [[package]] name = "itertools" version = "0.12.1" @@ -2567,6 +2760,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -2583,6 +2782,34 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "mio" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "native-tls" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dab59f8e050d5df8e4dd87d9206fb6f65a483e20ac9fda365ade4fab353196c" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + [[package]] name = "ndk" version = "0.9.0" @@ -2899,6 +3126,15 @@ dependencies = [ "objc", ] +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.20.2" @@ -2909,6 +3145,50 @@ dependencies = [ "portable-atomic", ] +[[package]] +name = "openssl" +version = "0.10.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e534d133a060a3c19daec1eb3e98ec6f4685978834f2dbadfe2ec215bab64e" +dependencies = [ + "bitflags 2.8.0", + "cfg-if", + "foreign-types 0.3.2", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "orbclient" version = "0.3.48" @@ -3261,6 +3541,51 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +[[package]] +name = "reqwest" +version = "0.12.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-native-tls", + "tower", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-registry", +] + [[package]] name = "resvg" version = "0.44.0" @@ -3284,6 +3609,21 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "rowan" version = "0.16.1" @@ -3302,6 +3642,12 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + [[package]] name = "rustc-hash" version = "1.1.0" @@ -3330,6 +3676,45 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "rustls" +version = "0.23.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.19" @@ -3387,6 +3772,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -3418,6 +3812,29 @@ dependencies = [ "tiny-skia", ] +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.8.0", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "semver" version = "1.0.25" @@ -3476,6 +3893,18 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "sha1" version = "0.10.6" @@ -3675,6 +4104,16 @@ dependencies = [ "serde", ] +[[package]] +name = "socket2" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "softbuffer" version = "0.4.6" @@ -3686,7 +4125,7 @@ dependencies = [ "cfg_aliases", "core-graphics 0.24.0", "fastrand", - "foreign-types", + "foreign-types 0.5.0", "js-sys", "log", "memmap2", @@ -3706,6 +4145,12 @@ dependencies = [ "x11rb", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "spin_on" version = "0.1.1" @@ -3758,6 +4203,12 @@ dependencies = [ "syn", ] +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "svgtypes" version = "0.15.3" @@ -3779,6 +4230,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + [[package]] name = "synstructure" version = "0.13.1" @@ -3799,6 +4259,27 @@ dependencies = [ "libc", ] +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.8.0", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tar" version = "0.4.43" @@ -3934,6 +4415,54 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "tokio" +version = "1.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + [[package]] name = "toml" version = "0.8.19" @@ -3968,6 +4497,33 @@ dependencies = [ "winnow", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + [[package]] name = "tracing" version = "0.1.41" @@ -4000,6 +4556,12 @@ dependencies = [ "once_cell", ] +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "ttf-parser" version = "0.21.1" @@ -4125,6 +4687,12 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.5.4" @@ -4176,6 +4744,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.5" @@ -4215,6 +4789,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -4524,6 +5107,17 @@ dependencies = [ "syn", ] +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + [[package]] name = "windows-result" version = "0.2.0" @@ -5115,6 +5709,12 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + [[package]] name = "zerovec" version = "0.10.4" diff --git a/Cargo.toml b/Cargo.toml index ae2d03e..2409f29 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,8 @@ version = "0.1.0" edition = "2021" [dependencies] +reqwest = { version = "0.12.12", features = ["blocking"] } +serde_json = "1.0.137" slint = "1.9.2" [build-dependencies] diff --git a/backup.txt b/backup.txt new file mode 100644 index 0000000..b2023fd --- /dev/null +++ b/backup.txt @@ -0,0 +1,67 @@ + Rectangle { + x: 7px; + y: 11px; + border-color: #00FFFF; + border-width: 1px; + border-radius: 10px; + height: 360px; + width: 150px; + } + + Text { + x: 15px; + y: 15px; + text: "Search User"; + } + + ComboBox { + x: 15px; + y: 58px; + width: 135px; + model: ["Username", "Last Name"]; + } + + LineEdit { + width: 135px; + x: 15px; + y: 104px; + } + + Button { + width: 135px; + x: 15px; + y: 288px; + text: "Seach"; + } + + Rectangle { + x: 167px; + y: 11px; + border-color: #00FFFF; + border-width: 1px; + border-radius: 10px; + height: 560px; + width: 350px; + } + + Text { + x: 175px; + y: 15px; + text: "Account Information"; + } + + Rectangle { + x: 527px; + y: 11px; + border-color: #00FFFF; + border-width: 1px; + border-radius: 10px; + height: 560px; + width: 350px; + } + + Text { + x: 535px; + y: 15px; + text: "Group Information"; + } \ No newline at end of file diff --git a/build.rs b/build.rs index 1638e0c..39caa4c 100644 --- a/build.rs +++ b/build.rs @@ -1,5 +1,5 @@ fn main() { let config = slint_build::CompilerConfiguration::new() - .with_style("cosmic-dark".into()); + .with_style("fluent-dark".into()); slint_build::compile_with_config("ui/template.slint", config).unwrap(); } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index afd865b..c11bcdb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,43 @@ slint::slint!(); slint::include_modules!(); +use reqwest; +use serde_json::Value; +use slint::ToSharedString; -fn main() { +fn main() { let app: MainWindow = MainWindow::new().unwrap(); - let _weak = app.as_weak(); + let othertoolmodulecallbacks = app.global::(); + othertoolmodulecallbacks.on_ipapi({ + let app_weak = app.as_weak(); + move || { + let app = app_weak.unwrap(); + let mut url = String::from("http://ip-api.com/json/"); + url.push_str(&app.global::().get_ipaddressbar()); + let resp: String = reqwest::blocking::get(url) + .unwrap() + .text() + .ok() + .unwrap() + .into(); + let apitest = geolocateapi(&resp); + let isp = apitest["isp"].to_shared_string(); + let country = apitest["country"].to_shared_string(); + let region = apitest["regionName"].to_shared_string(); + let city = apitest["city"].to_shared_string(); + app.global::() + .set_isp(slint::SharedString::from(isp)); + app.global::() + .set_country(slint::SharedString::from(country)); + app.global::() + .set_state(slint::SharedString::from(region)); + app.global::() + .set_city(slint::SharedString::from(city)); + } + }); app.run().unwrap(); -} \ No newline at end of file +} + +fn geolocateapi(data: &String) -> Value { + let parsed: Value = serde_json::from_str(data).unwrap(); + return (parsed).clone(); +} diff --git a/ui/pages/computermodules.slint b/ui/pages/computermodules.slint new file mode 100644 index 0000000..d51f061 --- /dev/null +++ b/ui/pages/computermodules.slint @@ -0,0 +1,157 @@ +import { AboutSlint, VerticalBox, GridBox, Button, LineEdit, HorizontalBox, TextEdit, SpinBox } from "std-widgets.slint"; + +export component ComputerModules inherits Window { + VerticalLayout { + spacing: 5px; + padding: 15px; + HorizontalLayout { + VerticalLayout { + padding: 5px; + spacing: 5px; + height: 75px; + Text { + text: "Computer Tag / IP:"; + } + + LineEdit { + height: 35px; + } + } + + VerticalLayout { + height: 200px; + padding: 5px; + spacing: 5px; + Button { + text: "Computer File Explorer"; + } + + Button { + text: "Current Logged on User"; + } + + Button { + text: "LAPS Password Viewer"; + } + + Button { + text: "Reboot Computer"; + } + + Button { + text: "Reboot w/ Auto Remote In"; + } + + Button { + text: "SCCM Log Parser"; + } + } + + VerticalLayout { + padding: 5px; + height: 350px; + width: 400px; + TextEdit { + height: 400px; + wrap: word-wrap; + read-only: true; + } + + HorizontalLayout { + alignment: start; + spacing: 5px; + padding-top: 20px; + padding: 5px; + Text { + text: "Timeout for Computer Modules:"; + } + } + + HorizontalLayout { + spacing: 5px; + SpinBox { + minimum: 2; + maximum: 10; + step-size: 1; + horizontal-alignment: center; + width: 100px; + } + + Text { + vertical-alignment: center; + text: "Seconds"; + } + } + } + + VerticalLayout { + spacing: 5px; + padding: 5px; + width: 150px; + Button { + text: "Bitlocker"; + } + + Button { + text: "Director"; + } + + Button { + text: "HSC IT"; + } + + Button { + text: "Imprivata"; + } + + Button { + text: "ISE"; + } + + Button { + text: "Kronos"; + } + + Button { + text: "Kuiper"; + } + + Button { + text: "One Content"; + } + + Button { + text: "Printer Logic"; + } + + Button { + text: "Site Scan"; + } + + Button { + text: "SnapComm"; + } + + Button { + text: "TelecommNG"; + } + + Button { + text: "UMS"; + } + + Button { + text: "Unify"; + } + + Button { + text: "Whats Up"; + } + + Button { + text: "Workday"; + } + } + } + } +} diff --git a/ui/pages/othertools.slint b/ui/pages/othertools.slint new file mode 100644 index 0000000..bfdcba1 --- /dev/null +++ b/ui/pages/othertools.slint @@ -0,0 +1,117 @@ +import { AboutSlint, VerticalBox, TabWidget, Button, LineEdit } from "std-widgets.slint"; + +export global OtherToolCallbacks { + pure callback killCherwell(); + pure callback ipapi(); + in-out property ipaddressbar; + in property isp; + in property country; + in property state; + in property city; +} + +export component OtherTools inherits Window { + TabWidget { + Tab { + title: @tr("General"); + Button { + text: "Kill all local Cherwell Processes"; + clicked => { + OtherToolCallbacks.killCherwell(); + } + } + } + + Tab { + title: @tr("Helpdesk"); + } + + Tab { + title: @tr("PC Technician"); + } + + Tab { + title: @tr("IRT"); + TabWidget { + Tab { + title: @tr("IP Geolocation API"); + HorizontalLayout { + alignment: center; + spacing: 5px; + padding: 15px; + height: 200px; + VerticalLayout { + spacing: 5px; + padding: 15px; + Text { + height: 30px; + text: "IP Address:"; + } + + LineEdit { + height: 35px; + edited(text) => { + OtherToolCallbacks.ipaddressbar = self.text; + } + } + + Button { + height: 35px; + text: "Search"; + clicked => { + OtherToolCallbacks.ipapi(); + } + } + } + + HorizontalLayout { + spacing: 5px; + width: 400px; + VerticalLayout { + y: 10px; + Text { + text: "ISP:"; + } + + Text { + text: "Country:"; + } + + Text { + text: "State:"; + } + + Text { + text: "City:"; + } + } + + VerticalLayout { + spacing: 5px; + LineEdit { + read-only: true; + text: OtherToolCallbacks.isp; + } + + LineEdit { + read-only: true; + text: OtherToolCallbacks.country; + } + + LineEdit { + read-only: true; + text: OtherToolCallbacks.state; + } + + LineEdit { + read-only: true; + text: OtherToolCallbacks.city; + } + } + } + } + } + } + } + } +} diff --git a/ui/pages/settings.slint b/ui/pages/settings.slint new file mode 100644 index 0000000..a276674 --- /dev/null +++ b/ui/pages/settings.slint @@ -0,0 +1,5 @@ +import { AboutSlint, VerticalBox, ComboBox, Button, StandardListView, TabWidget } from "std-widgets.slint"; + +export component SettingsModules inherits Window { + +} diff --git a/ui/pages/usermodules.slint b/ui/pages/usermodules.slint new file mode 100644 index 0000000..9bf225f --- /dev/null +++ b/ui/pages/usermodules.slint @@ -0,0 +1,259 @@ +import { AboutSlint, VerticalBox, GridBox, Button, LineEdit, HorizontalBox, TextEdit, SpinBox, StandardListView } from "std-widgets.slint"; + +export component UserModules inherits Window { + VerticalLayout { + spacing: 5px; + padding: 15px; + HorizontalLayout { + spacing: 5px; + VerticalLayout { + padding: 5px; + spacing: 5px; + height: 75px; + Text { + text: "Search User"; + } + + StandardListView { + height: 80px; + model: [{ text: "Username" }, { text: "Last Name" }]; + current-item: 0; + } + + LineEdit { + height: 35px; + } + + VerticalLayout { + padding: 10px; + Button { + text: "Search"; + primary: true; + } + } + + VerticalLayout { + padding-top: 30px; + Button { + text: "Clear Search"; + primary: false; + } + } + } + + HorizontalLayout { + spacing: 5px; + VerticalLayout { + y: 10px; + Text { + text: "Account Creation Date:"; + } + + Text { + text: "Account Enabled:"; + } + + Text { + text: "MyIdentity Claimed:"; + } + + Text { + text: "Display Name:"; + } + + Text { + text: "Email:"; + } + + Text { + text: "Enterprise ID:"; + } + + Text { + text: "Job Title:"; + } + + Text { + text: "Last Bad Password:"; + } + + Text { + text: "Last Logon Time:"; + } + + Text { + text: "Organizational Unit:"; + } + + Text { + text: "Mobile Email:"; + } + + Text { + text: "Outlook Client:"; + } + + Text { + text: "Passord Last Set:"; + } + + Text { + text: "Password Expired:"; + } + + Text { + text: "VPN User:"; + } + } + + VerticalLayout { + spacing: 5px; + LineEdit { + read-only: true; + } + + LineEdit { + read-only: true; + } + + LineEdit { + read-only: true; + } + + LineEdit { + read-only: true; + } + + LineEdit { + read-only: true; + } + + LineEdit { + read-only: true; + } + + LineEdit { + read-only: true; + } + + LineEdit { + read-only: true; + } + + LineEdit { + read-only: true; + } + + LineEdit { + read-only: true; + } + + LineEdit { + read-only: true; + } + + LineEdit { + read-only: true; + } + + LineEdit { + read-only: true; + } + + LineEdit { + read-only: true; + } + + LineEdit { + read-only: true; + } + } + } + + VerticalLayout { + padding: 5px; + height: 350px; + width: 400px; + Text { + text: "Group Memberships"; + height: 30px; + } + + TextEdit { + height: 500px; + wrap: word-wrap; + read-only: true; + } + } + + VerticalLayout { + spacing: 5px; + padding: 5px; + width: 150px; + Button { + text: "Bitlocker"; + } + + Button { + text: "Director"; + } + + Button { + text: "HSC IT"; + } + + Button { + text: "Imprivata"; + } + + Button { + text: "ISE"; + } + + Button { + text: "Kronos"; + } + + Button { + text: "Kuiper"; + } + + Button { + text: "One Content"; + } + + Button { + text: "Printer Logic"; + } + + Button { + text: "Site Scan"; + } + + Button { + text: "SnapComm"; + } + + Button { + text: "TelecommNG"; + } + + Button { + text: "UMS"; + } + + Button { + text: "Unify"; + } + + Button { + text: "Whats Up"; + } + + Button { + text: "Workday"; + } + } + } + } +} diff --git a/ui/sidebar.slint b/ui/sidebar.slint new file mode 100644 index 0000000..603b57c --- /dev/null +++ b/ui/sidebar.slint @@ -0,0 +1,137 @@ +import { HorizontalBox, VerticalBox, Palette } from "std-widgets.slint"; + +component SideBarItem inherits Rectangle { + in property tab-index; + in property selected; + in property has-focus; + in-out property text <=> label.text; + + callback clicked <=> touch.clicked; + + min-height: l.preferred-height; + accessible-role: tab; + accessible-label: root.text; + accessible-item-index: root.tab-index; + accessible-item-selectable: true; + accessible-item-selected: root.selected; + accessible-action-default => { self.clicked(); } + + states [ + pressed when touch.pressed : { + state.opacity: 0.8; + } + hover when touch.has-hover : { + state.opacity: 0.6; + } + selected when root.selected : { + state.opacity: 1; + } + focused when root.has-focus : { + state.opacity: 0.8; + } + ] + + state := Rectangle { + opacity: 0; + background: Palette.background; + + animate opacity { duration: 150ms; } + } + + l := HorizontalBox { + y: (parent.height - self.height) / 2; + spacing: 0px; + + label := Text { + vertical-alignment: center; + accessible-role: none; + } + } + + touch := TouchArea { + width: 100%; + height: 100%; + } +} + +export component SideBar inherits Rectangle { + in property <[string]> model: []; + in property title <=> label.text; + out property current-item: 0; + out property current-focused: fs.has-focus ? fs.focused-tab : -1; // The currently focused tab + + width: 180px; + forward-focus: fs; + accessible-role: tab-list; + accessible-delegate-focus: root.current-focused >= 0 ? root.current-focused : root.current-item; + accessible-label: root.title; + accessible-item-count: root.model.length; + + Rectangle { + background: Palette.background.darker(0.2); + + fs := FocusScope { + key-pressed(event) => { + if (event.text == "\n") { + root.current-item = root.current-focused; + return accept; + } + if (event.text == Key.UpArrow) { + self.focused-tab = Math.max(self.focused-tab - 1, 0); + return accept; + } + if (event.text == Key.DownArrow) { + self.focused-tab = Math.min(self.focused-tab + 1, root.model.length - 1); + return accept; + } + return reject; + } + + key-released(event) => { + if (event.text == " ") { + root.current-item = root.current-focused; + return accept; + } + return reject; + } + + property focused-tab: 0; + + x: 0; + width: 0; // Do not react on clicks + } + } + + VerticalBox { + padding-left: 0px; + padding-right: 0px; + alignment: start; + + label := Text { + font-size: 16px; + horizontal-alignment: center; + } + + navigation := VerticalLayout { + alignment: start; + vertical-stretch: 0; + for item[index] in root.model : SideBarItem { + clicked => { root.current-item = index; } + + tab-index: index; + has-focus: index == root.current-focused; + text: item; + selected: index == root.current-item; + } + } + + VerticalLayout { + bottom := VerticalBox { + padding-top: 0px; + padding-bottom: 0px; + + @children + } + } + } +} \ No newline at end of file diff --git a/ui/template.slint b/ui/template.slint index 162826e..d8fd4f3 100644 --- a/ui/template.slint +++ b/ui/template.slint @@ -1,12 +1,29 @@ -import { AboutSlint, VerticalBox } from "std-widgets.slint"; +import { StandardListView } from "std-widgets.slint"; +import { UserModules} from "pages/usermodules.slint"; +import { ComputerModules } from "pages/computermodules.slint"; +import { OtherTools } from "pages/othertools.slint"; +import { SettingsModules } from "pages/settings.slint"; +import { SideBar } from "sidebar.slint"; +export { OtherToolCallbacks } from "pages/othertools.slint"; export component MainWindow inherits Window { - VerticalBox { - Text { - text: "Hello World!"; - } - AboutSlint { - preferred-height: 150px; + title: @tr("CHAMP"); + preferred-width: 984px; + preferred-height: 661px; + HorizontalLayout { + side-bar := SideBar { + title: @tr("Menu"); + model: [ + @tr("Menu" => "User Modules"), + @tr("Menu" => "Computer Modules"), + @tr("Menu" => "Other Tools"), + @tr("Menu" => "Settings") + ]; } + + if(side-bar.current-item == 0): UserModules { } + if(side-bar.current-item == 1): ComputerModules { } + if(side-bar.current-item == 2): OtherTools { } + if(side-bar.current-item == 3): SettingsModules { } } }