diff --git a/.github/workflows/release_on_v_tag.yml b/.github/workflows/release_on_v_tag.yml index be52501..85cc9da 100644 --- a/.github/workflows/release_on_v_tag.yml +++ b/.github/workflows/release_on_v_tag.yml @@ -67,6 +67,19 @@ jobs: strip: false ui: false target: aarch64-apple-darwin + - os: macos-latest + file: target/release/boilr + asset_name: macos_x86_64_ui_BoilR + args: -9 + strip: false + ui: true + - os: macos-latest + file: target/aarch64-apple-darwin/release/boilr + asset_name: macos_darwin_ui_BoilR + args: -9 + strip: false + ui: true + target: aarch64-apple-darwin steps: - uses: actions/checkout@v1 - name: Rust Cache @@ -76,26 +89,25 @@ jobs: if: ${{ matrix.os == 'ubuntu-latest' && matrix.ui}} run: | sudo apt-get update - sudo apt-get install -y libx11-dev libxext-dev libxft-dev libxinerama-dev libxcursor-dev libxrender-dev libxfixes-dev libpango1.0-dev libpng-dev libgl1-mesa-dev libglu1-mesa-dev + sudo apt-get install -y libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libspeechd-dev libxkbcommon-dev libssl-dev - name: Build Release Version UI - if: ${{ matrix.ui}} + if: ${{ matrix.target != 'aarch64-apple-darwin' && matrix.ui == true}} run: cargo build --release --features ui - name: Build Release Version CLI - if: ${{ matrix.ui == false && matrix.target != 'aarch64-apple-darwin'}} + if: ${{ matrix.target != 'aarch64-apple-darwin' && matrix.ui == false}} run: cargo build --release - name: Build aarch64 Release Version CLI - if: ${{ matrix.ui == false && matrix.target == 'aarch64-apple-darwin'}} + if: ${{matrix.target == 'aarch64-apple-darwin' && matrix.ui == false}} run: rustup target add aarch64-apple-darwin && cargo build --release --target aarch64-apple-darwin + - name: Build aarch64 Release Version UI + if: ${{matrix.target == 'aarch64-apple-darwin' && matrix.ui == true}} + run: rustup target add aarch64-apple-darwin && cargo build --release --target aarch64-apple-darwin --features ui - name: Compress binaries - if: ${{ (matrix.os == 'windows-latest' || matrix.ui == false) && matrix.os != 'macos-latest' }} uses: svenstaro/upx-action@v2 with: file: ${{ matrix.file }} args: ${{ matrix.args }} strip: ${{ matrix.strip }} - - name: Strip binaries - if: ${{ matrix.os == 'ubuntu-latest' && matrix.ui == true}} - run: strip ${{ matrix.file }} - name: Upload Release Asset id: upload-release-asset uses: actions/upload-release-asset@v1 diff --git a/Cargo.lock b/Cargo.lock index 4bd4718..71562c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,22 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ab_glyph" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24606928a235e73cdef55a0c909719cadd72fce573e5713d58cb2952d8f5794c" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13739d7177fbd22bb0ed28badfff9f372f8bef46c863db4e1c6248f6b223b6e" + [[package]] name = "addr2line" version = "0.15.2" @@ -18,14 +34,43 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] -name = "aho-corasick" -version = "0.7.15" +name = "adler32" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + +[[package]] +name = "ahash" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom 0.2.6", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" dependencies = [ "memchr", ] +[[package]] +name = "android_glue" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" + [[package]] name = "arrayvec" version = "0.5.2" @@ -38,6 +83,104 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbf56136a5198c7b01a49e3afcbef6cf84597273d298f54432926024107b0109" +[[package]] +name = "async-broadcast" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90622698a1218e0b2fb846c97b5f19a0831f6baddee73d9454156365ccfa473b" +dependencies = [ + "easy-parallel", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-executor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "once_cell", + "slab", +] + +[[package]] +name = "async-io" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a811e6a479f2439f0c04038796b5cfb3d2ad56c230e0f2d3f7b04d68cfee607b" +dependencies = [ + "concurrent-queue", + "futures-lite", + "libc", + "log", + "once_cell", + "parking", + "polling", + "slab", + "socket2", + "waker-fn", + "winapi", +] + +[[package]] +name = "async-lock" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6" +dependencies = [ + "event-listener", +] + +[[package]] +name = "async-recursion" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d78656ba01f1b93024b7c3a0467f1608e4be67d725749fdcd7d2c7678fd7a2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-task" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9" + +[[package]] +name = "async-trait" +version = "0.1.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atomic_refcell" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b5e5f48b927f04e952dedc932f31995a65a0bf65ec971c74436e51bf6e970d" + [[package]] name = "autocfg" version = "1.1.0" @@ -52,9 +195,9 @@ checksum = "4717cfcbfaa661a0fd48f8453951837ae7e8f81e481fbb136e3202d72805a744" dependencies = [ "addr2line", "cc", - "cfg-if", + "cfg-if 1.0.0", "libc", - "miniz_oxide", + "miniz_oxide 0.4.4", "object", "rustc-demangle", ] @@ -65,6 +208,12 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +[[package]] +name = "bit_field" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4" + [[package]] name = "bitflags" version = "1.3.2" @@ -72,16 +221,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "bitvec" -version = "0.19.6" +name = "block" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55f93d0ef3363c364d5976646a38f04cf67cfe1d4c8d160cdea02cab2c116b33" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] name = "boilr" @@ -90,15 +233,14 @@ dependencies = [ "base64", "config", "dashmap", + "eframe", + "egui", "failure", - "fl2rust", "flate2", - "fltk", - "fltk-theme", "futures", + "image", "is_executable", "nom 7.1.1", - "nom_locate 4.0.0", "reqwest", "rusty-leveldb", "serde 1.0.136", @@ -107,7 +249,7 @@ dependencies = [ "steamgriddb_api", "tokio", "toml", - "winreg", + "winreg 0.10.1", ] [[package]] @@ -128,18 +270,72 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72feb31ffc86498dacdbd0fcebb56138e7177a8cc5cea4516031d15ae85a742e" +[[package]] +name = "bytemuck" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdead85bdec19c194affaeeb670c0e41fe23de31459efd1c174d049269cf02cc" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562e382481975bc61d11275ac5e62a19abd00b0547d99516a415336f183dcd0e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + [[package]] name = "bytes" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +[[package]] +name = "cache-padded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" + +[[package]] +name = "calloop" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf2eec61efe56aa1e813f5126959296933cf0700030e4314786c48779a66ab82" +dependencies = [ + "log", + "nix 0.22.3", +] + [[package]] name = "cc" version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + [[package]] name = "cfg-if" version = "1.0.0" @@ -147,30 +343,78 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "cmake" -version = "0.1.48" +name = "cgl" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" dependencies = [ - "cc", + "libc", ] [[package]] -name = "cocoa-colors" -version = "0.1.2" +name = "clipboard-win" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7fc3439406f349e0bc20d7de87314803378a535190d12e62991f7c8474d5296" +checksum = "9fdf5e01086b6be750428ba4a40619f847eb2e95756eee84b18e06e5f0b50342" dependencies = [ - "cc", + "lazy-bytes-cast", + "winapi", ] [[package]] -name = "color-maps" +name = "cocoa" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" +dependencies = [ + "bitflags", + "block", + "cocoa-foundation", + "core-foundation 0.9.3", + "core-graphics 0.22.3", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120b737cc99b0d73bf0a9bfa6086e84c0bde3b955851f37f812865bc08b35feb" +checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" dependencies = [ - "lazy_static", + "bitflags", + "block", + "core-foundation 0.9.3", + "core-graphics-types", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "combine" +version = "4.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50b727aacc797f9fc28e355d21f34709ac4fc9adecfe470ad07b8f4464f53062" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" +dependencies = [ + "cache-padded", ] [[package]] @@ -181,7 +425,7 @@ checksum = "1b1b9d958c2b1368a663f05538fc1b5975adce1e19f435acceae987aceeeb369" dependencies = [ "lazy_static", "nom 5.1.2", - "rust-ini", + "rust-ini 0.13.0", "serde 1.0.136", "serde-hjson", "serde_json", @@ -189,22 +433,102 @@ dependencies = [ "yaml-rust", ] +[[package]] +name = "copypasta" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4423d79fed83ebd9ab81ec21fa97144300a961782158287dc9bf7eddac37ff0b" +dependencies = [ + "clipboard-win", + "objc", + "objc-foundation", + "objc_id", + "smithay-clipboard", + "x11-clipboard", +] + +[[package]] +name = "core-foundation" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +dependencies = [ + "core-foundation-sys 0.7.0", + "libc", +] + [[package]] name = "core-foundation" version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ - "core-foundation-sys", + "core-foundation-sys 0.8.3", "libc", ] +[[package]] +name = "core-foundation-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" + [[package]] name = "core-foundation-sys" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +[[package]] +name = "core-graphics" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" +dependencies = [ + "bitflags", + "core-foundation 0.7.0", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags", + "core-foundation 0.9.3", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" +dependencies = [ + "bitflags", + "core-foundation 0.9.3", + "foreign-types", + "libc", +] + +[[package]] +name = "core-video-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" +dependencies = [ + "cfg-if 0.1.10", + "core-foundation-sys 0.7.0", + "core-graphics 0.19.2", + "libc", + "objc", +] + [[package]] name = "crc" version = "1.8.1" @@ -220,7 +544,7 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", ] [[package]] @@ -229,39 +553,347 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "crossbeam-utils", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "crossbeam-utils", + "lazy_static", + "memoffset", + "scopeguard", +] + [[package]] name = "crossbeam-utils" version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "lazy_static", ] +[[package]] +name = "cty" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" + +[[package]] +name = "dark-light" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b83576e2eee2d9cdaa8d08812ae59cbfe1b5ac7ac5ac4b8400303c6148a88c1" +dependencies = [ + "dconf_rs", + "detect-desktop-environment", + "dirs", + "objc", + "rust-ini 0.17.0", + "web-sys", + "winreg 0.8.0", + "zbus", + "zvariant", +] + +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core", + "quote", + "syn", +] + [[package]] name = "dashmap" version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c8858831f7781322e539ea39e72449c46b059638250c14344fec8d0aa6e539c" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "num_cpus", - "parking_lot", + "parking_lot 0.12.0", "serde 1.0.136", ] +[[package]] +name = "dconf_rs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7046468a81e6a002061c01e6a7c83139daf91b11c30e66795b13217c2d885c8b" + +[[package]] +name = "deflate" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c86f7e25f518f4b81808a2cf1c50996a61f5c2eb394b2393bd87f2a4780a432f" +dependencies = [ + "adler32", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "detect-desktop-environment" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21d8ad60dd5b13a4ee6bd8fa2d5d88965c597c67bce32b5fc49c94f55cb50810" + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dlib" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" +dependencies = [ + "libloading", +] + +[[package]] +name = "dlv-list" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68df3f2b690c1b86e65ef7830956aededf3cb0a16f898f79b9a6f421a7b6211b" +dependencies = [ + "rand 0.8.5", +] + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "easy-parallel" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6907e25393cdcc1f4f3f513d9aac1e840eb1cc341a0fccb01171f7d14d10b946" + +[[package]] +name = "eframe" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9fe0985844076809b8c08b609266567797a6b721abb6a4975e158ab413cd6f2" +dependencies = [ + "egui", + "egui-winit", + "egui_glow", + "egui_web", + "epi", +] + +[[package]] +name = "egui" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a3cd1d47e12f7a17912595241622e373aa652a4e0fa90b3f9278f90a64aedf7" +dependencies = [ + "ahash 0.7.6", + "epaint", + "nohash-hasher", + "tracing", +] + +[[package]] +name = "egui-winit" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43eac3180ea178ef1a5f3048cc12c58bcbcb17fc3401813f7229c99ef2ffc1d9" +dependencies = [ + "copypasta", + "dark-light", + "egui", + "epi", + "instant", + "tracing", + "webbrowser", + "winit", +] + +[[package]] +name = "egui_glow" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04a252f6d333fceb910a8f5b3ef2d4402e1646cd4daa11e7b11ea38d1b6190d3" +dependencies = [ + "bytemuck", + "egui", + "egui-winit", + "epi", + "glow", + "glutin", + "memoffset", + "tracing", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "egui_web" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "030f81109b90583cd7b3bc7e4bb31dfae615f4adcc422b1b313030929d3b350c" +dependencies = [ + "bytemuck", + "egui", + "egui_glow", + "epi", + "js-sys", + "percent-encoding", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "emath" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a977a80456be58a2c2d48e69c1d0baadef46cecef5a0c98df141c468da006f12" +dependencies = [ + "bytemuck", +] + [[package]] name = "encoding_rs" version = "0.8.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dc8abb250ffdda33912550faa54c88ec8b998dec0b2c55ab224921ce11df" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", +] + +[[package]] +name = "enumflags2" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b3ab37dc79652c9d85f1f7b6070d77d321d2467f5fe7b00d6b7a86c57b092ae" +dependencies = [ + "enumflags2_derive", + "serde 1.0.136", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "epaint" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "033292846059f08e03a71e1b5db2ee6ab7c9622c3b48da21f4bd13258ebee2db" +dependencies = [ + "ab_glyph", + "ahash 0.7.6", + "atomic_refcell", + "bytemuck", + "emath", + "nohash-hasher", +] + +[[package]] +name = "epi" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c95445deccef4d29fa30488d3f7f2e942dd343eef01228becc7cefd5b918176e" +dependencies = [ + "egui", + "tracing", ] [[package]] @@ -285,6 +917,28 @@ dependencies = [ "libc", ] +[[package]] +name = "event-listener" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" + +[[package]] +name = "exr" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4badb9489a465cb2c555af1f00f0bfd8cecd6fc12ac11da9d5b40c5dd5f0200" +dependencies = [ + "bit_field", + "deflate", + "flume", + "half", + "inflate", + "lebe", + "smallvec", + "threadpool", +] + [[package]] name = "failure" version = "0.1.8" @@ -316,56 +970,29 @@ dependencies = [ "instant", ] -[[package]] -name = "fl2rust" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e87510450efb16b2add50ad4074470ea7ff15d45060ff64767b8da3cf316e10" - [[package]] name = "flate2" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "crc32fast", "libc", - "miniz_oxide", + "miniz_oxide 0.4.4", ] [[package]] -name = "fltk" -version = "1.3.2" +name = "flume" +version = "0.10.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0421fbf52a56271293b943f270ec2f1e24ebbeade047c3ccdbad12d986ee096a" +checksum = "843c03199d0c0ca54bc1ea90ac0d507274c28abcc4f691ae8b4eaa375087c76a" dependencies = [ - "bitflags", - "crossbeam-channel", - "fltk-sys", - "paste", - "ttf-parser", -] - -[[package]] -name = "fltk-sys" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5590e674162a4058c2f53503d5e95000278b22f5a51f94c30eed126683fc3ab0" -dependencies = [ - "cmake", -] - -[[package]] -name = "fltk-theme" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abee3d9b0ed8bd45d10e4cc279d757ce71c37224482e8377a99906f7be771266" -dependencies = [ - "cocoa-colors", - "color-maps", - "fltk", - "lazy_static", + "futures-core", + "futures-sink", + "nanorand", + "pin-project", + "spin", ] [[package]] @@ -409,12 +1036,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "funty" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" - [[package]] name = "futures" version = "0.3.21" @@ -463,6 +1084,21 @@ version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +[[package]] +name = "futures-lite" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + [[package]] name = "futures-macro" version = "0.3.21" @@ -510,17 +1146,135 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "libc", "wasi 0.9.0+wasi-snapshot-preview1", ] +[[package]] +name = "getrandom" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "libc", + "wasi 0.10.2+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "gif" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3a7187e78088aead22ceedeee99779455b23fc231fe13ec443f99bb71694e5b" +dependencies = [ + "color_quant", + "weezl", +] + [[package]] name = "gimli" version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e4075386626662786ddb0ec9081e7c7eeb1ba31951f447ca780ef9f5d568189" +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "glow" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00ea9dbe544bc8a657c4c4a798c2d16cd01b549820e47657297549d28371f6d2" +dependencies = [ + "android_glue", + "cgl", + "cocoa", + "core-foundation 0.9.3", + "glutin_egl_sys", + "glutin_emscripten_sys", + "glutin_gles2_sys", + "glutin_glx_sys", + "glutin_wgl_sys", + "lazy_static", + "libloading", + "log", + "objc", + "osmesa-sys", + "parking_lot 0.11.2", + "wayland-client", + "wayland-egl", + "winapi", + "winit", +] + +[[package]] +name = "glutin_egl_sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2abb6aa55523480c4adc5a56bbaa249992e2dddb2fc63dc96e04a3355364c211" +dependencies = [ + "gl_generator", + "winapi", +] + +[[package]] +name = "glutin_emscripten_sys" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80de4146df76e8a6c32b03007bc764ff3249dcaeb4f675d68a06caf1bac363f1" + +[[package]] +name = "glutin_gles2_sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094e708b730a7c8a1954f4f8a31880af00eb8a1c5b5bf85d28a0a3c6d69103" +dependencies = [ + "gl_generator", + "objc", +] + +[[package]] +name = "glutin_glx_sys" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e393c8fc02b807459410429150e9c4faffdb312d59b8c038566173c81991351" +dependencies = [ + "gl_generator", + "x11-dl", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3da5951a1569dbab865c6f2a863efafff193a93caf05538d193e9e3816d21696" +dependencies = [ + "gl_generator", +] + [[package]] name = "h2" version = "0.3.13" @@ -540,6 +1294,21 @@ dependencies = [ "tracing", ] +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +dependencies = [ + "ahash 0.4.7", +] + [[package]] name = "hashbrown" version = "0.11.2" @@ -555,6 +1324,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "http" version = "0.2.6" @@ -626,6 +1401,12 @@ dependencies = [ "tokio-native-tls", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "0.2.3" @@ -637,6 +1418,26 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "image" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db207d030ae38f1eb6f240d5a1c1c88ff422aa005d10f8c6c6fc5e75286ab30e" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "jpeg-decoder 0.2.4", + "num-iter", + "num-rational", + "num-traits 0.2.14", + "png", + "scoped_threadpool", + "tiff", +] + [[package]] name = "indexmap" version = "1.8.1" @@ -644,7 +1445,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.11.2", +] + +[[package]] +name = "inflate" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff" +dependencies = [ + "adler32", ] [[package]] @@ -653,7 +1463,10 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -683,6 +1496,41 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +[[package]] +name = "jni" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jpeg-decoder" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" + +[[package]] +name = "jpeg-decoder" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "744c24117572563a98a7e9168a5ac1ee4a1ca7f702211258797bbe0ed0346c3c" +dependencies = [ + "rayon", +] + [[package]] name = "js-sys" version = "0.3.56" @@ -692,12 +1540,30 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "lazy-bytes-cast" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10257499f089cd156ad82d0a9cd57d9501fa2c989068992a97eb3c27836f206b" + [[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +[[package]] +name = "lebe" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7efd1d698db0759e6ef11a7cd44407407399a910c774dd804c64c032da7826ff" + [[package]] name = "lexical-core" version = "0.7.6" @@ -706,7 +1572,7 @@ checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe" dependencies = [ "arrayvec", "bitflags", - "cfg-if", + "cfg-if 1.0.0", "ryu", "static_assertions", ] @@ -717,6 +1583,16 @@ version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f" +[[package]] +name = "libloading" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" +dependencies = [ + "cfg-if 1.0.0", + "winapi", +] + [[package]] name = "linked-hash-map" version = "0.5.4" @@ -739,7 +1615,16 @@ version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", ] [[package]] @@ -750,9 +1635,27 @@ checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "memchr" -version = "2.3.4" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + +[[package]] +name = "memmap2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b6c2ebff6180198788f5db08d7ce3bc1d0b617176678831a7510825973e357" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] [[package]] name = "mime" @@ -776,6 +1679,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "miniz_oxide" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082" +dependencies = [ + "adler", +] + [[package]] name = "mio" version = "0.8.2" @@ -799,6 +1711,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom 0.2.6", +] + [[package]] name = "native-tls" version = "0.2.10" @@ -817,6 +1738,91 @@ dependencies = [ "tempfile", ] +[[package]] +name = "ndk" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d868f654c72e75f8687572699cdabe755f03effbb62542768e995d5b8d699d" +dependencies = [ + "bitflags", + "jni-sys", + "ndk-sys", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e3c5cc68637e21fe8f077f6a1c9e0b9ca495bb74895226b476310f613325884" + +[[package]] +name = "ndk-glue" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1c68f70683c5fc9a747a383744206cd371741b2f0b31781ab6770487ec572e2" +dependencies = [ + "lazy_static", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-macro", + "ndk-sys", +] + +[[package]] +name = "ndk-macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c" +dependencies = [ + "darling", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ndk-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121" + +[[package]] +name = "nix" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" +dependencies = [ + "bitflags", + "cc", + "cfg-if 1.0.0", + "libc", + "memoffset", +] + +[[package]] +name = "nix" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" +dependencies = [ + "bitflags", + "cc", + "cfg-if 1.0.0", + "libc", + "memoffset", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + [[package]] name = "nom" version = "5.1.2" @@ -828,19 +1834,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "nom" -version = "6.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c5c51b9083a3c620fa67a2a635d1ce7d95b897e957d6b28ff9a5da960a103a6" -dependencies = [ - "bitvec", - "funty", - "lexical-core", - "memchr", - "version_check", -] - [[package]] name = "nom" version = "7.1.1" @@ -851,17 +1844,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "nom_locate" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4689294073dda8a54e484212171efdcb6b12b1908fd70c3dc3eec15b8833b06d" -dependencies = [ - "bytecount", - "memchr", - "nom 6.2.1", -] - [[package]] name = "nom_locate" version = "4.0.0" @@ -882,6 +1864,38 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits 0.2.14", +] + +[[package]] +name = "num-iter" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +dependencies = [ + "autocfg", + "num-integer", + "num-traits 0.2.14", +] + +[[package]] +name = "num-rational" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +dependencies = [ + "autocfg", + "num-integer", + "num-traits 0.2.14", +] + [[package]] name = "num-traits" version = "0.1.43" @@ -910,6 +1924,56 @@ dependencies = [ "libc", ] +[[package]] +name = "num_enum" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + [[package]] name = "object" version = "0.24.0" @@ -929,7 +1993,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7ae222234c30df141154f159066c5093ff73b63204dcda7121eb082fc56a95" dependencies = [ "bitflags", - "cfg-if", + "cfg-if 1.0.0", "foreign-types", "libc", "once_cell", @@ -955,6 +2019,61 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "ordered-multimap" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c672c7ad9ec066e428c00eb917124a06f08db19e2584de982cc34b1f4c12485" +dependencies = [ + "dlv-list", + "hashbrown 0.9.1", +] + +[[package]] +name = "ordered-stream" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44630c059eacfd6e08bdaa51b1db2ce33119caa4ddc1235e923109aa5f25ccb1" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "osmesa-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" +dependencies = [ + "shared_library", +] + +[[package]] +name = "owned_ttf_parser" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1e509cfe7a12db2a90bfa057dfcdbc55a347f5da677c506b53dd099cfec9d" +dependencies = [ + "ttf-parser", +] + +[[package]] +name = "parking" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.5", +] + [[package]] name = "parking_lot" version = "0.12.0" @@ -962,7 +2081,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" dependencies = [ "lock_api", - "parking_lot_core", + "parking_lot_core 0.9.2", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +dependencies = [ + "cfg-if 1.0.0", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", ] [[package]] @@ -971,25 +2104,39 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "995f667a6c822200b0433ac218e05582f0e2efa1b922a3fd2fbaadc5f87bab37" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "libc", "redox_syscall", "smallvec", "windows-sys", ] -[[package]] -name = "paste" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" - [[package]] name = "percent-encoding" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +[[package]] +name = "pin-project" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "pin-project-lite" version = "0.2.8" @@ -1008,12 +2155,47 @@ version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" +[[package]] +name = "png" +version = "0.17.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc38c0ad57efb786dd57b9864e5b18bae478c00c824dc55a38bbc9da95dde3ba" +dependencies = [ + "bitflags", + "crc32fast", + "deflate", + "miniz_oxide 0.5.1", +] + +[[package]] +name = "polling" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "log", + "wepoll-ffi", + "winapi", +] + [[package]] name = "ppv-lite86" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +[[package]] +name = "proc-macro-crate" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +dependencies = [ + "thiserror", + "toml", +] + [[package]] name = "proc-macro2" version = "1.0.36" @@ -1023,6 +2205,15 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "quick-xml" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8533f14c8382aaad0d592c812ac3b826162128b65662331e1127b45c3d18536b" +dependencies = [ + "memchr", +] + [[package]] name = "quote" version = "1.0.17" @@ -1032,25 +2223,30 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "radium" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "941ba9d78d8e2f7ce474c015eea4d9c6d25b6a3327f9832ee29a4de27f91bbb8" - [[package]] name = "rand" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "getrandom", + "getrandom 0.1.16", "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.2.2", + "rand_core 0.5.1", "rand_hc", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.3", +] + [[package]] name = "rand_chacha" version = "0.2.2" @@ -1058,7 +2254,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.3", ] [[package]] @@ -1067,7 +2273,16 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom", + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom 0.2.6", ] [[package]] @@ -1076,7 +2291,41 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" dependencies = [ - "rand_core", + "rand_core 0.5.1", +] + +[[package]] +name = "raw-window-handle" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" +dependencies = [ + "cty", +] + +[[package]] +name = "rayon" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" +dependencies = [ + "autocfg", + "crossbeam-deque", + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "lazy_static", + "num_cpus", ] [[package]] @@ -1089,10 +2338,21 @@ dependencies = [ ] [[package]] -name = "regex" -version = "1.4.6" +name = "redox_users" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a26af418b574bd56588335b3a3659a65725d4e636eb1016c2f9e3b38c7cc759" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom 0.2.6", + "redox_syscall", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" dependencies = [ "aho-corasick", "memchr", @@ -1147,7 +2407,7 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg", + "winreg 0.10.1", ] [[package]] @@ -1156,6 +2416,16 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e52c148ef37f8c375d49d5a73aa70713125b7f19095948a923f80afdeb22ec2" +[[package]] +name = "rust-ini" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63471c4aa97a1cf8332a5f97709a79a4234698de6a1f5087faf66f2dae810e22" +dependencies = [ + "cfg-if 1.0.0", + "ordered-multimap", +] + [[package]] name = "rustc-demangle" version = "0.1.21" @@ -1172,7 +2442,7 @@ dependencies = [ "errno", "fs2", "integer-encoding", - "rand", + "rand 0.7.3", "snap", ] @@ -1182,6 +2452,15 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "schannel" version = "0.1.19" @@ -1192,6 +2471,18 @@ dependencies = [ "winapi", ] +[[package]] +name = "scoped-tls" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" + +[[package]] +name = "scoped_threadpool" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" + [[package]] name = "scopeguard" version = "1.1.0" @@ -1205,8 +2496,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" dependencies = [ "bitflags", - "core-foundation", - "core-foundation-sys", + "core-foundation 0.9.3", + "core-foundation-sys 0.8.3", "libc", "security-framework-sys", ] @@ -1217,7 +2508,7 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" dependencies = [ - "core-foundation-sys", + "core-foundation-sys 0.8.3", "libc", ] @@ -1270,6 +2561,17 @@ dependencies = [ "serde 1.0.136", ] +[[package]] +name = "serde_repr" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98d0516900518c29efa217c298fa1f4e6c6ffc85ae29fd7f4ee48f176e1a9ed5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -1282,6 +2584,31 @@ dependencies = [ "serde 1.0.136", ] +[[package]] +name = "sha1" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" +dependencies = [ + "sha1_smol", +] + +[[package]] +name = "sha1_smol" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" + +[[package]] +name = "shared_library" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" +dependencies = [ + "lazy_static", + "libc", +] + [[package]] name = "signal-hook-registry" version = "1.4.0" @@ -1297,12 +2624,50 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" +[[package]] +name = "slotmap" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +dependencies = [ + "version_check", +] + [[package]] name = "smallvec" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +[[package]] +name = "smithay-client-toolkit" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1325f292209cee78d5035530932422a30aa4c8fda1a16593ac083c1de211e68a" +dependencies = [ + "bitflags", + "calloop", + "dlib", + "lazy_static", + "log", + "memmap2", + "nix 0.22.3", + "pkg-config", + "wayland-client", + "wayland-cursor", + "wayland-protocols", +] + +[[package]] +name = "smithay-clipboard" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "610b551bd25378bfd2b8e7a0fcbd83d427e8f2f6a40c47ae0f70688e9949dd55" +dependencies = [ + "smithay-client-toolkit", + "wayland-client", +] + [[package]] name = "snap" version = "1.0.5" @@ -1319,6 +2684,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "spin" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "511254be0c5bcf062b019a6c89c01a664aa359ded62f78aa72c6fc137c0590e5" +dependencies = [ + "lock_api", +] + [[package]] name = "static_assertions" version = "1.1.0" @@ -1328,12 +2702,12 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "steam_shortcuts_util" version = "1.1.6" -source = "git+https://github.com/PhilipK/steam_shortcuts_util#45ea43c26aa34a088f4c2a5343434c546c0359a0" +source = "git+https://github.com/PhilipK/steam_shortcuts_util?rev=c8953ecfc9c612be49c537fb3add683cd83f9379#c8953ecfc9c612be49c537fb3add683cd83f9379" dependencies = [ "ascii", "crc32fast", - "nom 6.2.1", - "nom_locate 3.0.2", + "nom 7.1.1", + "nom_locate", ] [[package]] @@ -1348,6 +2722,12 @@ dependencies = [ "urlencoding", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "syn" version = "1.0.90" @@ -1371,19 +2751,13 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - [[package]] name = "tempfile" version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "fastrand", "libc", "redox_syscall", @@ -1391,6 +2765,46 @@ dependencies = [ "winapi", ] +[[package]] +name = "thiserror" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "tiff" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0247608e998cb6ce39dfc8f4a16c50361ce71e5b52e6d24ea1227ea8ea8ee0b2" +dependencies = [ + "flate2", + "jpeg-decoder 0.1.22", + "weezl", +] + [[package]] name = "tinyvec" version = "1.5.1" @@ -1418,7 +2832,7 @@ dependencies = [ "mio", "num_cpus", "once_cell", - "parking_lot", + "parking_lot 0.12.0", "pin-project-lite", "signal-hook-registry", "socket2", @@ -1482,7 +2896,7 @@ version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a1bdf54a7c28a2bbf701e1d2233f6c77f473486b94bee4f9678da5a148dca7f" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -1571,6 +2985,23 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "waker-fn" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + [[package]] name = "want" version = "0.3.0" @@ -1587,6 +3018,12 @@ version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -1599,7 +3036,7 @@ version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "wasm-bindgen-macro", ] @@ -1624,7 +3061,7 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eb6ec270a31b1d3c7e266b999739109abce8b6c87e4b31fcfcd788b65267395" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "js-sys", "wasm-bindgen", "web-sys", @@ -1659,6 +3096,89 @@ version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" +[[package]] +name = "wayland-client" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91223460e73257f697d9e23d401279123d36039a3f7a449e983f123292d4458f" +dependencies = [ + "bitflags", + "downcast-rs", + "libc", + "nix 0.22.3", + "scoped-tls", + "wayland-commons", + "wayland-scanner", + "wayland-sys", +] + +[[package]] +name = "wayland-commons" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94f6e5e340d7c13490eca867898c4cec5af56c27a5ffe5c80c6fc4708e22d33e" +dependencies = [ + "nix 0.22.3", + "once_cell", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-cursor" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c52758f13d5e7861fc83d942d3d99bf270c83269575e52ac29e5b73cb956a6bd" +dependencies = [ + "nix 0.22.3", + "wayland-client", + "xcursor", +] + +[[package]] +name = "wayland-egl" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83281d69ee162b59031c666385e93bde4039ec553b90c4191cdb128ceea29a3a" +dependencies = [ + "wayland-client", + "wayland-sys", +] + +[[package]] +name = "wayland-protocols" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60147ae23303402e41fe034f74fb2c35ad0780ee88a1c40ac09a3be1e7465741" +dependencies = [ + "bitflags", + "wayland-client", + "wayland-commons", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39a1ed3143f7a143187156a2ab52742e89dac33245ba505c17224df48939f9e0" +dependencies = [ + "proc-macro2", + "quote", + "xml-rs", +] + +[[package]] +name = "wayland-sys" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9341df79a8975679188e37dab3889bfa57c44ac2cb6da166f519a81cbe452d4" +dependencies = [ + "dlib", + "lazy_static", + "pkg-config", +] + [[package]] name = "web-sys" version = "0.3.56" @@ -1669,6 +3189,41 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webbrowser" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9c28b6b6a78440b02647358625e3febc90724126480b9da6a967b5f674b3554" +dependencies = [ + "jni", + "ndk-glue", + "url", + "web-sys", + "widestring", + "winapi", +] + +[[package]] +name = "weezl" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b77fdfd5a253be4ab714e4ffa3c49caf146b4de743e97510c0656cf90f1e8e" + +[[package]] +name = "wepoll-ffi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" +dependencies = [ + "cc", +] + +[[package]] +name = "widestring" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" + [[package]] name = "winapi" version = "0.3.9" @@ -1685,6 +3240,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -1734,6 +3298,48 @@ version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" +[[package]] +name = "winit" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b43cc931d58b99461188607efd7acb2a093e65fc621f54cad78517a6063e73a" +dependencies = [ + "bitflags", + "cocoa", + "core-foundation 0.9.3", + "core-graphics 0.22.3", + "core-video-sys", + "dispatch", + "instant", + "lazy_static", + "libc", + "log", + "mio", + "ndk", + "ndk-glue", + "ndk-sys", + "objc", + "parking_lot 0.11.2", + "percent-encoding", + "raw-window-handle", + "smithay-client-toolkit", + "wasm-bindgen", + "wayland-client", + "wayland-protocols", + "web-sys", + "winapi", + "x11-dl", +] + +[[package]] +name = "winreg" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d107f8c6e916235c4c01cabb3e8acf7bea8ef6a63ca2e7fa0527c049badfc48c" +dependencies = [ + "winapi", +] + [[package]] name = "winreg" version = "0.10.1" @@ -1744,10 +3350,50 @@ dependencies = [ ] [[package]] -name = "wyz" -version = "0.2.0" +name = "x11-clipboard" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" +checksum = "473068b7b80ac86a18328824f1054e5e007898c47b5bbc281bd7abe32bc3653c" +dependencies = [ + "xcb", +] + +[[package]] +name = "x11-dl" +version = "2.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea26926b4ce81a6f5d9d0f3a0bc401e5a37c6ae14a1bfaa8ff6099ca80038c59" +dependencies = [ + "lazy_static", + "libc", + "pkg-config", +] + +[[package]] +name = "xcb" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771e2b996df720cd1c6dd9ff90f62d91698fd3610cc078388d0564bdd6622a9c" +dependencies = [ + "libc", + "log", + "quick-xml", +] + +[[package]] +name = "xcursor" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" +dependencies = [ + "nom 7.1.1", +] + +[[package]] +name = "xml-rs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" [[package]] name = "yaml-rust" @@ -1757,3 +3403,90 @@ checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" dependencies = [ "linked-hash-map", ] + +[[package]] +name = "zbus" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bb86f3d4592e26a48b2719742aec94f8ae6238ebde20d98183ee185d1275e9a" +dependencies = [ + "async-broadcast", + "async-channel", + "async-executor", + "async-io", + "async-lock", + "async-recursion", + "async-task", + "async-trait", + "byteorder", + "derivative", + "enumflags2", + "event-listener", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "lazy_static", + "nix 0.23.1", + "once_cell", + "ordered-stream", + "rand 0.8.5", + "serde 1.0.136", + "serde_repr", + "sha1", + "static_assertions", + "winapi", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36823cc10fddc3c6b19f048903262dacaf8274170e9a255784bdd8b4570a8040" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "regex", + "syn", +] + +[[package]] +name = "zbus_names" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45dfcdcf87b71dad505d30cc27b1b7b88a64b6d1c435648f48f9dbc1fdc4b7e1" +dependencies = [ + "serde 1.0.136", + "static_assertions", + "zvariant", +] + +[[package]] +name = "zvariant" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49ea5dc38b2058fae6a5b79009388143dadce1e91c26a67f984a0fc0381c8033" +dependencies = [ + "byteorder", + "enumflags2", + "libc", + "serde 1.0.136", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c2cecc5a61c2a053f7f653a24cd15b3b0195d7f7ddb5042c837fb32e161fb7a" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml index ca49a7e..6e33955 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -steam_shortcuts_util = {git="https://github.com/PhilipK/steam_shortcuts_util"} +steam_shortcuts_util = { git = "https://github.com/PhilipK/steam_shortcuts_util",rev="c8953ecfc9c612be49c537fb3add683cd83f9379" } steamgriddb_api = "^0.2,0" serde = { version = "^1.0.136", features = ["derive"] } serde_json = "^1.0.79" @@ -13,25 +13,21 @@ tokio = { version = "^1.17.0", features = ["full"] } reqwest = { version = "^0.11.10", default_features = false } config = "^0.11.0" failure = "^0.1.8" -#https://fltk-rs.github.io/fltk-rs/ -fltk = { version = "^1.3.2", features = ["fltk-bundled"], optional = true } nom = "^7.1.1" -nom_locate = "^4.0.0" flate2 = "^1.0.22" -toml = { version = "^0.5.8", optional = true } futures = { version = "^0.3.21" } dashmap = { version = "^5.2.0", features = ["serde"] } -fltk-theme = {version ="^0.4.2" , optional = true } is_executable = "^1.0.1" rusty-leveldb = "^0.3.6" -base64="^0.13.0" - -[build-dependencies] -fl2rust = { version = "^0.4", optional = true } +base64 = "^0.13.0" +eframe = { version = "0.17.0", optional = true } +egui = { version = "0.17.0", optional = true } +image = { version = "0.24.1", optional = true, features = ["png"] } +toml = { version = "^0.5.8", optional = true } [features] -# default = ["ui"] -ui = ["fltk", "fl2rust", "toml", "fltk-theme"] +#default = ["ui"] +ui = ["eframe", "egui","toml","image"] [target.'cfg(windows)'.dependencies] diff --git a/Readme.md b/Readme.md index 91c312a..5c58660 100644 --- a/Readme.md +++ b/Readme.md @@ -2,7 +2,9 @@ ## Description -This little tool will show games from other games platforms in your Steam library. +BoilR automatically adds (almost) all your games to your Steam library. + +![BoilR Screenshot](screenshot_1.png) It uses the Steam 3rd party shortcuts feature and does not require you to set up anything. The goal is that you do not have to leave your Steam library to launch games from other launchers/stores, so that you can find all the games that you have available. @@ -14,8 +16,8 @@ Optionally you can set BoilR up to automatically download artwork from [SteamGri - [x] Automatically download art from [SteamGridDB](https://www.steamgriddb.com/) - [x] Cross Platform (Windows, Linux, Mac, Steam Deck) - [x] Standalone / No install needed -- [x] Small (~1.5mb on disk) -- [x] Lightweight (~2mb ram) +- [x] Small (~3mb on disk) +- [x] Lightweight (~30mb ram) - [x] Fast synchronization (~1 second) ## Integrations @@ -44,8 +46,7 @@ Optionally you can set BoilR up to automatically download artwork from [SteamGri ## Getting cover art for your shortcuts - Get a [SteamGridDB API key](https://www.steamgriddb.com/profile/preferences/api) -- Run BoilR put the auth key in the input. -- Click Save +- Run BoilR put the auth key in the input (in the settings section). - Click Syncrhonize diff --git a/build.rs b/build.rs deleted file mode 100644 index 58c7a04..0000000 --- a/build.rs +++ /dev/null @@ -1,18 +0,0 @@ -#[cfg(feature = "ui")] -use std::env; -#[cfg(feature = "ui")] -use std::path::PathBuf; - -fn main() { - #[cfg(feature = "ui")] - { - println!("cargo:rerun-if-changed=gui/mainview.fl"); - let g = fl2rust::Generator::default(); - let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); - g.in_out( - "gui/mainview.fl", - out_path.join("mainview.rs").to_str().unwrap(), - ) - .expect("Failed to generate rust from fl file!"); - } -} diff --git a/gui/mainview.fl b/gui/mainview.fl deleted file mode 100644 index 6c437c6..0000000 --- a/gui/mainview.fl +++ /dev/null @@ -1,129 +0,0 @@ -# data file for the Fltk User Interface Designer (fluid) -version 1.0302 -header_name {.h} -code_name {.cxx} -class UserInterface {open -} { - Function {make_window()} {open - } { - Fl_Window win { - label {BoilR} open - xywh {1 1 500 575} type Double visible - } { - - # ----- Steam ----- - Fl_Check_Button steam_create_collections { - label {Create Collections} - tooltip {Create Collections for each platform} - xywh {25 25 155 25} down_box DOWN_BOX - } - - Fl_Input steam_location_input { - label {Steam Location} - xywh {175 25 300 25} align 5 - } - - # ----- Art download ----- - Fl_Check_Button enable_steamgrid_db_checkbox { - label {Download Images} - tooltip {Download coverart for games from www.steamgriddb.com} - xywh {25 75 155 25} down_box DOWN_BOX - } - Fl_Input steamgrid_db_auth_key_input { - label {SteamGridDb API Key} - tooltip {See how to get your key here https://github.com/PhilipK/BoilR#getting-cover-art-for-your-shortcuts} - xywh {175 75 300 25} align 5 - } - - - # ----- Epic games ----- - Fl_Check_Button enable_egs_checkbox { - label {Epic Games} - xywh {25 125 155 25} down_box DOWN_BOX - } - Fl_Input epic_location_input { - label {Epic Folder} - xywh {175 125 300 25} align 5 - } - - # ----- Legendary/Rare ----- - Fl_Check_Button enable_legendary_checkbox { - label {Legendary / Rare} - xywh {25 175 155 25} down_box DOWN_BOX - } - Fl_Input legendary_executable_input { - label {Legendary Executable} - xywh {175 175 300 25} align 5 - } - - # ----- Itch ----- - Fl_Check_Button enable_itch_checkbox { - label {Itch.io} - xywh {25 225 155 25} down_box DOWN_BOX - } - Fl_Input itch_locatoin_input { - label {Itch Folder} - xywh {175 225 300 25} align 5 - } - - # ----- Origin ----- - Fl_Group origin_group { - xywh {25 275 375 50} align 5 - } { - - Fl_Check_Button enable_origin_checkbox { - label Origin - xywh {25 275 155 25} down_box DOWN_BOX - } - } - - # ----- GOG ----- - Fl_Check_Button enable_gog_checkbox { - label {GOG Galaxy} - xywh {25 325 155 25} down_box DOWN_BOX - } - Fl_Input gog_folder_input { - label {GOG Data Folder} - xywh {175 325 300 25} align 5 - } - Fl_Input gog_winedrive_input { - label {GOG Wine C Drive} - xywh {175 375 300 25} align 5 - } - - # ----- Uplay ----- - Fl_Check_Button enable_uplay_checkbox { - label Uplay - xywh {25 375 155 25} down_box DOWN_BOX - } - - # ----- Lutris ----- - Fl_Check_Button enable_lutris_checkbox { - label Lutris - xywh {25 425 155 25} down_box DOWN_BOX - } - Fl_Input lutris_executable_input { - label {Lutris Executable} - xywh {175 425 300 25} align 5 - } - - # ----- Heroic ----- - Fl_Check_Button enable_heroic_checkbox { - label Heroic - xywh {25 475 155 25} down_box DOWN_BOX - } - - - # ----- Buttons ----- - - Fl_Button save_settings_button { - label {Save Settings} - xywh {25 525 125 25} - } - Fl_Button synchronize_button { - label {Synchronize Games} - xywh {175 525 300 25} - } - } - } -} diff --git a/resources/import_games_button.png b/resources/import_games_button.png new file mode 100644 index 0000000..0dbde0f Binary files /dev/null and b/resources/import_games_button.png differ diff --git a/resources/logo32.png b/resources/logo32.png new file mode 100644 index 0000000..8690a86 Binary files /dev/null and b/resources/logo32.png differ diff --git a/resources/logo_small.png b/resources/logo_small.png new file mode 100644 index 0000000..5ffd42f Binary files /dev/null and b/resources/logo_small.png differ diff --git a/screenshot_1.png b/screenshot_1.png new file mode 100644 index 0000000..c055cb5 Binary files /dev/null and b/screenshot_1.png differ diff --git a/src/defaultconfig.toml b/src/defaultconfig.toml index 83d0e17..9be602e 100644 --- a/src/defaultconfig.toml +++ b/src/defaultconfig.toml @@ -1,4 +1,5 @@ debug= false +blacklisted_games = [] [steamgrid_db] auth_key = "Write your authentication key between these quotes" @@ -27,11 +28,12 @@ enabled = true create_symlinks = true [lutris] -enabled = true +enabled = false [heroic] enabled = true [steam] create_collections = false -optimize_for_big_picture = false \ No newline at end of file +optimize_for_big_picture = false + diff --git a/src/main.rs b/src/main.rs index 773b0e3..1b3e89c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,9 @@ mod egs; mod gog; +mod heroic; mod itch; -mod lutris; mod legendary; +mod lutris; mod origin; mod platform; mod settings; @@ -10,23 +11,23 @@ mod steam; mod steamgriddb; mod sync; mod uplay; -mod heroic; #[cfg(feature = "ui")] mod ui; use std::error::Error; +#[cfg(not(feature = "ui"))] #[tokio::main] async fn main() -> Result<(), Box> { - #[cfg(feature = "ui")] - { - ui::run_ui().await - } - #[cfg(not(feature = "ui"))] - { - let settings = settings::Settings::new()?; - settings::Settings::write_config_if_missing(); - sync::run_sync(&settings).await - } + let settings = settings::Settings::new()?; + settings::Settings::write_config_if_missing(); + let usersinfo = sync::run_sync(&settings).unwrap(); + sync::download_images(&settings,&usersinfo).await; + Ok(()) +} + +#[cfg(feature = "ui")] +fn main() -> Result<(), Box> { + ui::run_ui() } diff --git a/src/settings.rs b/src/settings.rs index a8669b4..c7a333d 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -11,6 +11,7 @@ use std::env; #[derive(Debug, Deserialize, Serialize, Clone)] pub struct Settings { pub debug: bool, + pub blacklisted_games: Vec, pub epic_games: EpicGamesLauncherSettings, pub legendary: LegendarySettings, pub itch: ItchSettings, diff --git a/src/steam/utils.rs b/src/steam/utils.rs index 05aabc4..59d43c6 100644 --- a/src/steam/utils.rs +++ b/src/steam/utils.rs @@ -52,7 +52,7 @@ pub struct SteamUsersInfo { /// Get the paths to the steam users shortcuts (one for each user) pub fn get_shortcuts_paths( settings: &SteamSettings, -) -> Result, Box> { +) -> Result, Box> { let user_location = settings.location.clone(); let steam_path_str = match user_location { Some(location) => location, @@ -107,7 +107,7 @@ pub fn get_shortcuts_paths( Ok(users_info) } -pub fn get_default_location() -> Result> { +pub fn get_default_location() -> Result> { #[cfg(target_os = "windows")] let path_string = { let key = "PROGRAMFILES(X86)"; diff --git a/src/steamgriddb/downloader.rs b/src/steamgriddb/downloader.rs index d1c6d67..e7fec18 100644 --- a/src/steamgriddb/downloader.rs +++ b/src/steamgriddb/downloader.rs @@ -230,7 +230,7 @@ async fn get_images_for_ids( download_animated: bool, ) -> Result< Vec>, - Box, + String, > { use steamgriddb_api::query_parameters::AnimtionType; use steamgriddb_api::query_parameters::QueryType::*; @@ -276,7 +276,7 @@ async fn get_images_for_ids( let image_search_result = client.get_images_for_ids(image_ids, &query_type).await; - image_search_result + image_search_result.map_err(|e| format!("Image search failed {:?}",e)) } async fn get_steam_image_url(game_id: usize, image_type: &ImageType) -> Option { diff --git a/src/sync/mod.rs b/src/sync/mod.rs index eb4f124..da9fd68 100644 --- a/src/sync/mod.rs +++ b/src/sync/mod.rs @@ -3,3 +3,5 @@ mod symlinks; mod synchronization; pub use synchronization::run_sync; +pub use synchronization::download_images; +pub use synchronization::get_platform_shortcuts; \ No newline at end of file diff --git a/src/sync/synchronization.rs b/src/sync/synchronization.rs index 4ed1e42..f8a997e 100644 --- a/src/sync/synchronization.rs +++ b/src/sync/synchronization.rs @@ -24,13 +24,15 @@ use std::{fs::File, io::Write, path::Path}; const BOILR_TAG: &str = "boilr"; -pub async fn run_sync(settings: &Settings) -> Result<(), Box> { - let mut userinfo_shortcuts = get_shortcuts_paths(&settings.steam)?; +pub fn run_sync(settings: &Settings) -> Result, String> { + let mut userinfo_shortcuts = get_shortcuts_paths(&settings.steam) + .map_err(|e| format!("Getting shortcut paths failed: {e}"))?; let platform_shortcuts = get_platform_shortcuts(settings); let all_shortcuts: Vec = platform_shortcuts .iter() .flat_map(|s| s.1.clone()) + .filter(|s| !settings.blacklisted_games.contains(&s.app_id)) .collect(); for shortcut in &all_shortcuts { println!("Appid: {} name: {}", shortcut.app_id, shortcut.app_name); @@ -69,15 +71,17 @@ pub async fn run_sync(settings: &Settings) -> Result<(), Box> { println!("Finished synchronizing games in: {:?}", duration); } + Ok(userinfo_shortcuts) +} + +pub async fn download_images(settings: &Settings, userinfo_shortcuts: &Vec) { if settings.steamgrid_db.enabled { if settings.steamgrid_db.prefer_animated { println!("downloading animated images"); - download_images_for_users(settings, &userinfo_shortcuts, true).await; + download_images_for_users(settings, userinfo_shortcuts, true).await; } - download_images_for_users(settings, &userinfo_shortcuts, false).await; + download_images_for_users(settings, userinfo_shortcuts, false).await; } - - Ok(()) } fn remove_old_shortcuts(shortcut_info: &mut ShortcutInfo) { @@ -138,7 +142,7 @@ fn write_shortcut_collections>( Ok(()) } -fn get_platform_shortcuts(settings: &Settings) -> Vec<(String, Vec)> { +pub fn get_platform_shortcuts(settings: &Settings) -> Vec<(String, Vec)> { let mut platform_results = vec![ update_platform_shortcuts(&EpicPlatform::new(settings.epic_games.clone())), update_platform_shortcuts(&LegendaryPlatform::new(settings.legendary.clone())), diff --git a/src/ui/defines.rs b/src/ui/defines.rs new file mode 100644 index 0000000..d4cd5d0 --- /dev/null +++ b/src/ui/defines.rs @@ -0,0 +1,48 @@ +pub mod ui_colors { + use egui::Color32; + + pub const TEXT_COLOR: Color32 = Color32::from_rgb(255, 212, 163); + pub const BACKGROUND_COLOR: Color32 = Color32::from_rgb(13, 43, 69); + pub const BG_STROKE_COLOR: Color32 = Color32::from_rgb(32, 60, 86); + // pub const WHITE:Color32 = Color32::from_rgb(255, 236, 214); + pub const LIGHT_ORANGE: Color32 = Color32::from_rgb(255, 212, 163); + pub const ORANGE: Color32 = Color32::from_rgb(255, 170, 94); + pub const PURLPLE: Color32 = Color32::from_rgb(84, 78, 104); +} + +pub mod ui_images { + use eframe::epi::IconData; + use egui::{ColorImage, ImageData}; + + pub const IMPORT_GAMES_IMAGE: &[u8] = include_bytes!("../../resources/import_games_button.png"); + pub const LOGO_32: &[u8] = include_bytes!("../../resources/logo32.png"); + pub const LOGO_ICON: &[u8] = include_bytes!("../../resources/logo_small.png"); + + pub fn get_import_image() -> ImageData { + ImageData::Color(load_image_from_memory(IMPORT_GAMES_IMAGE).unwrap()) + } + + pub fn get_logo() -> ImageData { + ImageData::Color(load_image_from_memory(LOGO_32).unwrap()) + } + + pub fn get_logo_icon() -> IconData { + let image = image::load_from_memory(LOGO_ICON).unwrap(); + let image_buffer = image.to_rgba8(); + let pixels = image_buffer.as_flat_samples(); + IconData { + height: image.height() as u32, + width: image.width() as u32, + rgba: pixels.as_slice().to_vec(), + } + } + + fn load_image_from_memory(image_data: &[u8]) -> Result { + let image = image::load_from_memory(image_data)?; + let size = [image.width() as _, image.height() as _]; + let image_buffer = image.to_rgba8(); + let pixels = image_buffer.as_flat_samples(); + + Ok(ColorImage::from_rgba_unmultiplied(size, pixels.as_slice())) + } +} diff --git a/src/ui/mainview.rs b/src/ui/mainview.rs deleted file mode 100644 index 8054429..0000000 --- a/src/ui/mainview.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![allow(unused_variables)] -#![allow(unused_mut)] -#![allow(unused_imports)] -include!(concat!(env!("OUT_DIR"), "/mainview.rs")); diff --git a/src/ui/mod.rs b/src/ui/mod.rs index b2e3a31..ebd1c74 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -1,5 +1,4 @@ -mod mainview; -mod ui; - -pub(crate) use mainview::UserInterface; -pub use ui::run_ui; +mod uiapp; +mod defines; +pub use uiapp::*; +pub use defines::*; diff --git a/src/ui/ui.rs b/src/ui/ui.rs deleted file mode 100644 index f0d1e47..0000000 --- a/src/ui/ui.rs +++ /dev/null @@ -1,208 +0,0 @@ -use crate::sync::run_sync; -use crate::ui::UserInterface; -use crate::{egs::get_default_location, settings::Settings}; -use fltk::{app, prelude::*}; -use fltk_theme::{WidgetTheme, ThemeType}; -use futures::executor::block_on; -use std::error::Error; -use std::{cell::RefCell, rc::Rc}; - -pub async fn run_ui() -> Result<(), Box> { - let app = app::App::default().with_scheme(app::Scheme::Gtk); - let widget_theme = WidgetTheme::new(ThemeType::Greybird); - widget_theme.apply(); - let settings = Rc::new(RefCell::new(Settings::new()?)); - let mut ui = UserInterface::make_window(); - update_ui_with_settings(&mut ui, &settings.clone().borrow()); - { - let save_ui = ui.clone(); - let mut save_button = ui.save_settings_button.clone(); - let save_settings = settings.clone(); - save_button.set_callback(move |cb| { - update_settings_with_ui_values(&mut save_settings.borrow_mut(), &save_ui); - save_settings_to_file(&save_settings.borrow()); - cb.set_label("Saved"); - }); - } - { - let mut synch_bytton = ui.synchronize_button.clone(); - let synch_ui = ui.clone(); - let sync_settings = settings.clone(); - synch_bytton.set_callback(move |cb| { - let mut settings_clone = sync_settings.borrow().clone(); - update_settings_with_ui_values(&mut settings_clone, &synch_ui); - use tokio::task; - let task = task::spawn_blocking(move || { - let setting_ref = settings_clone.clone(); - let synchro_task = run_sync(&setting_ref); - match block_on(synchro_task) { - Ok(_) => println!("Finished sync"), - Err(e) => println!("{}", e), - } - }); - match block_on(task){ - Ok(_) => cb.set_label("Synched"), - Err(_) => cb.set_label("Error Synching"), - } - }); - } - - app.run().unwrap(); - Ok(()) -} - -fn empty_or_whitespace(input: String) -> Option { - if input.trim().is_empty() { - None - } else { - Some(input) - } -} -fn update_settings_with_ui_values(settings: &mut Settings, ui: &UserInterface) { - // Steam location - settings.steam.location = empty_or_whitespace(ui.steam_location_input.value()); - settings.steam.create_collections = ui.steam_create_collections.value(); - - // Steamgrid db - settings.steamgrid_db.enabled = ui.enable_steamgrid_db_checkbox.value(); - settings.steamgrid_db.auth_key = empty_or_whitespace(ui.steamgrid_db_auth_key_input.value()); - - // Legendary - settings.legendary.enabled = ui.enable_legendary_checkbox.value(); - settings.legendary.executable = empty_or_whitespace(ui.legendary_executable_input.value()); - - // Origin - settings.origin.enabled = ui.enable_origin_checkbox.value(); - - // Epic - settings.epic_games.enabled = ui.enable_egs_checkbox.value(); - settings.epic_games.location = empty_or_whitespace(ui.epic_location_input.value()); - - // Itch - settings.itch.enabled = ui.enable_itch_checkbox.value(); - settings.itch.location = empty_or_whitespace(ui.itch_locatoin_input.value()); - - // Gog - settings.gog.enabled = ui.enable_gog_checkbox.value(); - settings.gog.location = empty_or_whitespace(ui.gog_folder_input.value()); - settings.gog.wine_c_drive = empty_or_whitespace(ui.gog_winedrive_input.value()); - - // Uplay - settings.uplay.enabled = ui.enable_uplay_checkbox.value(); - - // Lutris - settings.lutris.enabled = ui.enable_lutris_checkbox.value(); - settings.lutris.executable = empty_or_whitespace(ui.lutris_executable_input.value()); - - // Heroic - settings.heroic.enabled = ui.enable_heroic_checkbox.value(); -} - -fn save_settings_to_file(settings: &Settings) { - let toml = toml::to_string(&settings).unwrap(); - std::fs::write("config.toml", toml).unwrap(); -} - -fn update_ui_with_settings(ui: &mut UserInterface, settings: &Settings) { - use std::path::Path; - - use crate::{gog, itch, steam}; - - ui.steam_location_input.set_value( - &settings - .steam - .location - .clone() - .unwrap_or(steam::get_default_location().unwrap_or(String::from(""))), - ); - - ui.steam_create_collections - .set_value(settings.steam.create_collections); - - ui.enable_steamgrid_db_checkbox - .set_value(settings.steamgrid_db.enabled); - ui.steamgrid_db_auth_key_input.set_value( - &settings - .steamgrid_db - .auth_key - .clone() - .unwrap_or(String::from("")), - ); - ui.enable_legendary_checkbox - .set_value(settings.legendary.enabled); - ui.legendary_executable_input.set_value( - settings - .legendary - .executable - .clone() - .unwrap_or(String::from("legendary")) - .as_str(), - ); - ui.enable_egs_checkbox - .set_value(settings.epic_games.enabled); - let default_egs = get_default_location(); - let default_egs = default_egs - .map(|p| p.to_str().unwrap().to_owned()) - .unwrap_or(String::from("")); - let egs_location = settings - .epic_games - .location - .clone() - .unwrap_or(String::from(default_egs)); - ui.epic_location_input.set_value(&egs_location); - ui.enable_egs_checkbox - .set_value(settings.epic_games.enabled); - ui.enable_itch_checkbox.set_value(settings.itch.enabled); - let mut default_itch_location = itch::get_default_location(); - if !Path::new(&default_itch_location).exists() { - default_itch_location = String::from(""); - } - ui.enable_itch_checkbox.set_value(settings.itch.enabled); - ui.itch_locatoin_input.set_value( - &settings - .itch - .location - .clone() - .unwrap_or(default_itch_location), - ); - ui.enable_origin_checkbox.set_value(settings.origin.enabled); - ui.enable_gog_checkbox.set_value(settings.gog.enabled); - let default_gog_location = gog::default_location(); - let default_gog_location = if !default_gog_location.exists() { - String::from("") - } else { - default_gog_location.to_string_lossy().to_string() - }; - ui.gog_folder_input.set_value( - &settings - .gog - .location - .clone() - .unwrap_or(default_gog_location), - ); - - #[cfg(target_family = "unix")] - { - ui.gog_winedrive_input - .set_value(&settings.gog.wine_c_drive.clone().unwrap_or("".to_string())); - } - #[cfg(not(target_family = "unix"))] - { - ui.gog_winedrive_input.hide(); - ui.enable_heroic_checkbox.hide(); - } - ui.enable_uplay_checkbox.set_value(settings.uplay.enabled); - - - ui.enable_lutris_checkbox.set_value(settings.lutris.enabled); - ui.lutris_executable_input.set_value( - settings - .lutris - .executable - .clone() - .unwrap_or(String::from("lutris")) - .as_str(), - ); - - ui.enable_heroic_checkbox.set_value(settings.heroic.enabled); -} diff --git a/src/ui/uiapp.rs b/src/ui/uiapp.rs new file mode 100644 index 0000000..f3a91c6 --- /dev/null +++ b/src/ui/uiapp.rs @@ -0,0 +1,337 @@ +use eframe::{egui, epi::{self, IconData},}; +use egui::{ScrollArea, TextureHandle, Stroke, Rounding, Image}; +use futures::executor::block_on; +use steam_shortcuts_util::shortcut::ShortcutOwned; +use std::error::Error; +use tokio::runtime::Runtime; + +use crate::{settings::Settings, sync::{download_images, self}, sync::run_sync}; + +use super::{ui_images::{get_import_image, get_logo, get_logo_icon}, ui_colors::{TEXT_COLOR, BACKGROUND_COLOR, BG_STROKE_COLOR, ORANGE, PURLPLE, LIGHT_ORANGE}}; + + +#[derive(Default)] +struct UiImages{ + import_button: Option, + logo_32: Option, +} + + +struct MyEguiApp { + selected_menu: Menues, + settings: Settings, + rt: Runtime, + ui_images: UiImages, + games_to_sync:Option)>> +} + +impl MyEguiApp { + pub fn new() -> Self { + let runtime = Runtime::new().unwrap(); + Self { + selected_menu: Menues::Import, + settings: Settings::new().expect("We must be able to load our settings"), + rt: runtime, + games_to_sync:None, + ui_images: UiImages::default(), + } + } + pub fn run_sync(&self) { + let settings = self.settings.clone(); + self.rt.spawn_blocking(move || { + + MyEguiApp::save_settings_to_file(&settings); + //TODO get status back to ui + let usersinfo = run_sync(&settings).unwrap(); + let task = download_images(&settings, &usersinfo); + block_on(task); + }); + } + + + fn save_settings_to_file(settings: &Settings) { + let toml = toml::to_string(&settings).unwrap(); + std::fs::write("config.toml", toml).unwrap(); + } +} + +#[derive(PartialEq)] +enum Menues { + Import, + Settings, +} + +impl Default for Menues { + fn default() -> Menues { + Menues::Import + } +} + +impl epi::App for MyEguiApp { + fn name(&self) -> &str { + "BoilR" + } + + fn update(&mut self, ctx: &egui::Context, _frame: &epi::Frame) { + let mut style: egui::Style = (*ctx.style()).clone(); + create_style(&mut style); + ctx.set_style(style); + + egui::SidePanel::new(egui::panel::Side::Left, "Side Panel") + .default_width(40.0) + .show(ctx, |ui| { + let texture = self.get_logo_image(ui); + let size = texture.size_vec2(); + ui.image(texture, size); + ui.separator(); + ui.selectable_value(&mut self.selected_menu, Menues::Import, "Import Games"); + // ui.selectable_value(&mut self.selected_menu, Menues::Art, "Art"); + ui.selectable_value(&mut self.selected_menu, Menues::Settings, "Settings"); + }); + if self.games_to_sync.is_some(){ + + egui::TopBottomPanel::new(egui::panel::TopBottomSide::Bottom, "Bottom Panel") + .show(ctx,|ui|{ + let texture = self.get_import_image(ui); + let size = texture.size_vec2(); + let image_button = Image::new(texture, size); + if ui.add(image_button).on_hover_text("Import your games into steam").clicked() { + self.run_sync(); + } + }); + } + + egui::CentralPanel::default() + .show(ctx, |ui| { + if let Menues::Import = self.selected_menu{ + }else{ + self.games_to_sync = None; + } + match self.selected_menu { + Menues::Import => { + self.render_import_games(ui); + + }, + Menues::Settings => { + self.render_settings(ui); + }, + }; + + }); +} +} + +fn create_style(style: &mut egui::Style) { + style.spacing.item_spacing = egui::vec2(15.0, 15.0); + style.visuals.button_frame = false; + style.visuals.dark_mode = true; + style.visuals.override_text_color = Some(TEXT_COLOR); + style.visuals.widgets.noninteractive.rounding = Rounding{ + ne:0.0, + nw:0.0, + se:0.0, + sw:0.0 + }; + style.visuals.faint_bg_color = PURLPLE; + style.visuals.extreme_bg_color = BACKGROUND_COLOR; + style.visuals.widgets.active.bg_fill = BACKGROUND_COLOR; + style.visuals.widgets.active.bg_stroke = Stroke::new(2.0,BG_STROKE_COLOR); + style.visuals.widgets.active.fg_stroke = Stroke::new(2.0,LIGHT_ORANGE); + style.visuals.widgets.open.bg_fill = BACKGROUND_COLOR; + style.visuals.widgets.open.bg_stroke = Stroke::new(2.0,BG_STROKE_COLOR); + style.visuals.widgets.open.fg_stroke = Stroke::new(2.0,LIGHT_ORANGE); + style.visuals.widgets.noninteractive.bg_fill = BACKGROUND_COLOR; + style.visuals.widgets.noninteractive.bg_stroke = Stroke::new(2.0,BG_STROKE_COLOR); + style.visuals.widgets.noninteractive.fg_stroke = Stroke::new(2.0,ORANGE); + style.visuals.widgets.inactive.bg_fill = BACKGROUND_COLOR; + style.visuals.widgets.inactive.bg_stroke = Stroke::new(2.0,BG_STROKE_COLOR); + style.visuals.widgets.inactive.fg_stroke = Stroke::new(2.0,ORANGE); + style.visuals.widgets.hovered.bg_fill = BACKGROUND_COLOR; + style.visuals.widgets.hovered.bg_stroke = Stroke::new(2.0,BG_STROKE_COLOR); + style.visuals.widgets.hovered.fg_stroke = Stroke::new(2.0,LIGHT_ORANGE); +} + +impl MyEguiApp{ + + fn get_import_image(&mut self, ui:&mut egui::Ui) -> &mut TextureHandle { + self.ui_images.import_button.get_or_insert_with(|| { + // Load the texture only once. + ui.ctx().load_texture("import_image", get_import_image()) + }) + + } + + fn get_logo_image(&mut self, ui:&mut egui::Ui) -> &mut TextureHandle { + self.ui_images.logo_32.get_or_insert_with(|| { + // Load the texture only once. + ui.ctx().load_texture("logo32", get_logo()) + }) + + } + + fn render_settings(&mut self, ui: &mut egui::Ui){ + ui.heading("Settings"); + ui.label("Here you can change your settings"); + + ScrollArea::vertical().show(ui,|ui| { + ui.heading("SteamGridDB"); + ui.checkbox(&mut self.settings.steamgrid_db.enabled, "Download images"); + ui.horizontal(|ui| { + let mut empty_string ="".to_string(); + let auth_key = self.settings.steamgrid_db.auth_key.as_mut().unwrap_or(&mut empty_string); + ui.label("Authentication key: "); + if ui.text_edit_singleline(auth_key).changed(){ + self.settings.steamgrid_db.auth_key = Some(auth_key.to_string()); + } + }); + ui.horizontal(|ui| { + ui.label("To download images you need an API Key from SteamGridDB, you can find yours"); + ui.hyperlink_to("here", "https://www.steamgriddb.com/profile/preferences/api") + }); + ui.checkbox(&mut self.settings.steamgrid_db.prefer_animated, "Prefer animated images").on_hover_text("Prefer downloading animated images over static images (this can slow Steam down but looks neat)"); + + ui.separator(); + + ui.heading("Steam"); + ui.horizontal(|ui| { + let mut empty_string ="".to_string(); + let steam_location = self.settings.steam.location.as_mut().unwrap_or(&mut empty_string); + ui.label("Steam Location: "); + if ui.text_edit_singleline(steam_location).changed(){ + self.settings.steam.location = Some(steam_location.to_string()); + } + }); + ui.checkbox(&mut self.settings.steam.create_collections, "Create collections").on_hover_text("Tries to create a games collection for each platform"); + ui.checkbox(&mut self.settings.steam.optimize_for_big_picture, "Optimize for big picture").on_hover_text("Set icons to be larger horizontal images, this looks nice in steam big picture mode, but a bit off in desktop mode"); + + ui.separator(); + + ui.heading("Epic Games"); + ui.checkbox(&mut self.settings.epic_games.enabled, "Import form Epic Games"); + ui.horizontal(|ui| { + let mut empty_string ="".to_string(); + let epic_location = self.settings.epic_games.location.as_mut().unwrap_or(&mut empty_string); + ui.label("Epic Manifests Location: ").on_hover_text("The location where Epic stores its manifest files that BoilR needs to read"); + if ui.text_edit_singleline(epic_location).changed(){ + self.settings.epic_games.location = Some(epic_location.to_string()); + } + }); + + ui.separator(); + + #[cfg(target_family = "unix")] + { + ui.heading("Heroic"); + ui.checkbox(&mut self.settings.heroic.enabled, "Import form Heroic"); + + ui.separator(); + } + + ui.heading("Legendary & Rare"); + ui.checkbox(&mut self.settings.legendary.enabled, "Import form Legendary & Rare"); + ui.horizontal(|ui| { + let mut empty_string ="".to_string(); + let legendary_location = self.settings.legendary.executable.as_mut().unwrap_or(&mut empty_string); + ui.label("Legendary Executable: ").on_hover_text("The location of the legendary executable to use"); + if ui.text_edit_singleline(legendary_location).changed(){ + self.settings.legendary.executable = Some(legendary_location.to_string()); + } + }); + + ui.separator(); + + ui.heading("Itch.io"); + ui.checkbox(&mut self.settings.itch.enabled, "Import form Itch.io"); + ui.horizontal(|ui| { + let mut empty_string ="".to_string(); + let itch_location = self.settings.itch.location.as_mut().unwrap_or(&mut empty_string); + ui.label("Itch.io Folder: "); + if ui.text_edit_singleline(itch_location).changed(){ + self.settings.itch.location = Some(itch_location.to_string()); + } + }); + + ui.separator(); + + ui.heading("Origin"); + ui.checkbox(&mut self.settings.origin.enabled, "Import from Origin"); + + ui.separator(); + + ui.heading("GoG Galaxy"); + ui.checkbox(&mut self.settings.gog.enabled, "Import form GoG Galaxy"); + ui.horizontal(|ui| { + let mut empty_string ="".to_string(); + let itch_location = self.settings.gog.location.as_mut().unwrap_or(&mut empty_string); + ui.label("GoG Galaxy Folder: "); + if ui.text_edit_singleline(itch_location).changed(){ + self.settings.gog.location = Some(itch_location.to_string()); + } + }); + + ui.separator(); + + ui.heading("Uplay"); + ui.checkbox(&mut self.settings.uplay.enabled, "Import form Uplay"); + + ui.separator(); + + ui.heading("Lutris"); + ui.checkbox(&mut self.settings.lutris.enabled, "Import form Uplay"); + ui.horizontal(|ui| { + let mut empty_string ="".to_string(); + let lutris_location = self.settings.lutris.executable.as_mut().unwrap_or(&mut empty_string); + ui.label("Lutris Location: "); + if ui.text_edit_singleline(lutris_location).changed(){ + self.settings.lutris.executable = Some(lutris_location.to_string()); + } + }); + + }); + } + + fn render_import_games(&mut self, ui: &mut egui::Ui){ + ui.heading("Import Games"); + ui.label("Select the games you want to import into steam"); + ScrollArea::vertical().show(ui,|ui| { + match &self.games_to_sync{ + Some(games_to_sync) => { + for (platform_name, shortcuts) in games_to_sync{ + ui.heading(platform_name); + for shortcut in shortcuts { + let mut import_game = !self.settings.blacklisted_games.contains(&shortcut.app_id); + let checkbox = egui::Checkbox::new(&mut import_game,&shortcut.app_name); + let response = ui.add(checkbox); + if response.clicked(){ + if !self.settings.blacklisted_games.contains(&shortcut.app_id){ + self.settings.blacklisted_games.push(shortcut.app_id); + }else{ + self.settings.blacklisted_games.retain(|id| *id != shortcut.app_id); + } + } + } + } + }, + None => { + self.games_to_sync = Some(sync::get_platform_shortcuts(&self.settings)); + }, + }; + ui.label("Check the settings if BoilR didn't find the game you where looking for"); + + }); + } +} + + + +pub fn run_ui() -> Result<(), Box> { + let app = MyEguiApp::new(); + + let mut native_options = eframe::NativeOptions::default(); + native_options.initial_window_size = Some(egui::Vec2{ + x:500., + y:500. + }); + native_options.icon_data = Some(get_logo_icon()); + eframe::run_native(Box::new(app), native_options); +}