From e757529c4f05201232339698c201200f4d37ad52 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Wed, 28 Dec 2022 06:23:57 +0000 Subject: [PATCH 01/37] chore: move electron project into an electron folder rather than main --- app/{main => electron}/.gitignore | 0 app/{main => electron}/jest.config.js | 0 app/{main => electron}/nodemon.json | 0 app/{main => electron}/package.json | 0 app/{main => electron}/src/assets/logo-dark.ico | Bin app/{main => electron}/src/assets/logo-dark.png | Bin .../src/assets/logo-dark256x256.png | Bin app/{main => electron}/src/assets/logo-dark@2x.png | Bin .../src/assets/notification-dark.png | Bin app/{main => electron}/src/assets/tray-dark-lb.png | Bin app/{main => electron}/src/assets/tray-dark-sb.png | Bin app/{main => electron}/src/assets/tray-dark.png | Bin app/{main => electron}/src/assets/tray-lb.png | Bin app/{main => electron}/src/assets/tray-sb.png | Bin app/{main => electron}/src/assets/tray.png | Bin app/{main => electron}/src/helpers/analytics.ts | 0 app/{main => electron}/src/helpers/autoUpdater.ts | 0 .../src/helpers/blockShortcutKeys.ts | 0 app/{main => electron}/src/helpers/contextMenu.ts | 0 .../src/helpers/getFromStorage.ts | 0 app/{main => electron}/src/helpers/getIcon.ts | 0 app/{main => electron}/src/helpers/getTrayIcon.ts | 0 .../src/helpers/globalShortcuts.ts | 0 app/{main => electron}/src/helpers/index.ts | 0 app/{main => electron}/src/helpers/isMacOS.ts | 0 app/{main => electron}/src/helpers/isWindow.ts | 0 .../__tests__/fullScreenBreak.test.ts | 0 .../src/lifecycleEventHandlers/fullScreenBreak.ts | 0 app/{main => electron}/src/main.ts | 0 app/{main => electron}/src/preload.ts | 0 app/{main => electron}/src/store.ts | 0 app/{main => electron}/tsconfig.json | 0 release-please-config.json | 2 +- snap/snapcraft.yaml | 10 +++++----- 34 files changed, 6 insertions(+), 6 deletions(-) rename app/{main => electron}/.gitignore (100%) rename app/{main => electron}/jest.config.js (100%) rename app/{main => electron}/nodemon.json (100%) rename app/{main => electron}/package.json (100%) rename app/{main => electron}/src/assets/logo-dark.ico (100%) rename app/{main => electron}/src/assets/logo-dark.png (100%) rename app/{main => electron}/src/assets/logo-dark256x256.png (100%) rename app/{main => electron}/src/assets/logo-dark@2x.png (100%) rename app/{main => electron}/src/assets/notification-dark.png (100%) rename app/{main => electron}/src/assets/tray-dark-lb.png (100%) rename app/{main => electron}/src/assets/tray-dark-sb.png (100%) rename app/{main => electron}/src/assets/tray-dark.png (100%) rename app/{main => electron}/src/assets/tray-lb.png (100%) rename app/{main => electron}/src/assets/tray-sb.png (100%) rename app/{main => electron}/src/assets/tray.png (100%) rename app/{main => electron}/src/helpers/analytics.ts (100%) rename app/{main => electron}/src/helpers/autoUpdater.ts (100%) rename app/{main => electron}/src/helpers/blockShortcutKeys.ts (100%) rename app/{main => electron}/src/helpers/contextMenu.ts (100%) rename app/{main => electron}/src/helpers/getFromStorage.ts (100%) rename app/{main => electron}/src/helpers/getIcon.ts (100%) rename app/{main => electron}/src/helpers/getTrayIcon.ts (100%) rename app/{main => electron}/src/helpers/globalShortcuts.ts (100%) rename app/{main => electron}/src/helpers/index.ts (100%) rename app/{main => electron}/src/helpers/isMacOS.ts (100%) rename app/{main => electron}/src/helpers/isWindow.ts (100%) rename app/{main => electron}/src/lifecycleEventHandlers/__tests__/fullScreenBreak.test.ts (100%) rename app/{main => electron}/src/lifecycleEventHandlers/fullScreenBreak.ts (100%) rename app/{main => electron}/src/main.ts (100%) rename app/{main => electron}/src/preload.ts (100%) rename app/{main => electron}/src/store.ts (100%) rename app/{main => electron}/tsconfig.json (100%) diff --git a/app/main/.gitignore b/app/electron/.gitignore similarity index 100% rename from app/main/.gitignore rename to app/electron/.gitignore diff --git a/app/main/jest.config.js b/app/electron/jest.config.js similarity index 100% rename from app/main/jest.config.js rename to app/electron/jest.config.js diff --git a/app/main/nodemon.json b/app/electron/nodemon.json similarity index 100% rename from app/main/nodemon.json rename to app/electron/nodemon.json diff --git a/app/main/package.json b/app/electron/package.json similarity index 100% rename from app/main/package.json rename to app/electron/package.json diff --git a/app/main/src/assets/logo-dark.ico b/app/electron/src/assets/logo-dark.ico similarity index 100% rename from app/main/src/assets/logo-dark.ico rename to app/electron/src/assets/logo-dark.ico diff --git a/app/main/src/assets/logo-dark.png b/app/electron/src/assets/logo-dark.png similarity index 100% rename from app/main/src/assets/logo-dark.png rename to app/electron/src/assets/logo-dark.png diff --git a/app/main/src/assets/logo-dark256x256.png b/app/electron/src/assets/logo-dark256x256.png similarity index 100% rename from app/main/src/assets/logo-dark256x256.png rename to app/electron/src/assets/logo-dark256x256.png diff --git a/app/main/src/assets/logo-dark@2x.png b/app/electron/src/assets/logo-dark@2x.png similarity index 100% rename from app/main/src/assets/logo-dark@2x.png rename to app/electron/src/assets/logo-dark@2x.png diff --git a/app/main/src/assets/notification-dark.png b/app/electron/src/assets/notification-dark.png similarity index 100% rename from app/main/src/assets/notification-dark.png rename to app/electron/src/assets/notification-dark.png diff --git a/app/main/src/assets/tray-dark-lb.png b/app/electron/src/assets/tray-dark-lb.png similarity index 100% rename from app/main/src/assets/tray-dark-lb.png rename to app/electron/src/assets/tray-dark-lb.png diff --git a/app/main/src/assets/tray-dark-sb.png b/app/electron/src/assets/tray-dark-sb.png similarity index 100% rename from app/main/src/assets/tray-dark-sb.png rename to app/electron/src/assets/tray-dark-sb.png diff --git a/app/main/src/assets/tray-dark.png b/app/electron/src/assets/tray-dark.png similarity index 100% rename from app/main/src/assets/tray-dark.png rename to app/electron/src/assets/tray-dark.png diff --git a/app/main/src/assets/tray-lb.png b/app/electron/src/assets/tray-lb.png similarity index 100% rename from app/main/src/assets/tray-lb.png rename to app/electron/src/assets/tray-lb.png diff --git a/app/main/src/assets/tray-sb.png b/app/electron/src/assets/tray-sb.png similarity index 100% rename from app/main/src/assets/tray-sb.png rename to app/electron/src/assets/tray-sb.png diff --git a/app/main/src/assets/tray.png b/app/electron/src/assets/tray.png similarity index 100% rename from app/main/src/assets/tray.png rename to app/electron/src/assets/tray.png diff --git a/app/main/src/helpers/analytics.ts b/app/electron/src/helpers/analytics.ts similarity index 100% rename from app/main/src/helpers/analytics.ts rename to app/electron/src/helpers/analytics.ts diff --git a/app/main/src/helpers/autoUpdater.ts b/app/electron/src/helpers/autoUpdater.ts similarity index 100% rename from app/main/src/helpers/autoUpdater.ts rename to app/electron/src/helpers/autoUpdater.ts diff --git a/app/main/src/helpers/blockShortcutKeys.ts b/app/electron/src/helpers/blockShortcutKeys.ts similarity index 100% rename from app/main/src/helpers/blockShortcutKeys.ts rename to app/electron/src/helpers/blockShortcutKeys.ts diff --git a/app/main/src/helpers/contextMenu.ts b/app/electron/src/helpers/contextMenu.ts similarity index 100% rename from app/main/src/helpers/contextMenu.ts rename to app/electron/src/helpers/contextMenu.ts diff --git a/app/main/src/helpers/getFromStorage.ts b/app/electron/src/helpers/getFromStorage.ts similarity index 100% rename from app/main/src/helpers/getFromStorage.ts rename to app/electron/src/helpers/getFromStorage.ts diff --git a/app/main/src/helpers/getIcon.ts b/app/electron/src/helpers/getIcon.ts similarity index 100% rename from app/main/src/helpers/getIcon.ts rename to app/electron/src/helpers/getIcon.ts diff --git a/app/main/src/helpers/getTrayIcon.ts b/app/electron/src/helpers/getTrayIcon.ts similarity index 100% rename from app/main/src/helpers/getTrayIcon.ts rename to app/electron/src/helpers/getTrayIcon.ts diff --git a/app/main/src/helpers/globalShortcuts.ts b/app/electron/src/helpers/globalShortcuts.ts similarity index 100% rename from app/main/src/helpers/globalShortcuts.ts rename to app/electron/src/helpers/globalShortcuts.ts diff --git a/app/main/src/helpers/index.ts b/app/electron/src/helpers/index.ts similarity index 100% rename from app/main/src/helpers/index.ts rename to app/electron/src/helpers/index.ts diff --git a/app/main/src/helpers/isMacOS.ts b/app/electron/src/helpers/isMacOS.ts similarity index 100% rename from app/main/src/helpers/isMacOS.ts rename to app/electron/src/helpers/isMacOS.ts diff --git a/app/main/src/helpers/isWindow.ts b/app/electron/src/helpers/isWindow.ts similarity index 100% rename from app/main/src/helpers/isWindow.ts rename to app/electron/src/helpers/isWindow.ts diff --git a/app/main/src/lifecycleEventHandlers/__tests__/fullScreenBreak.test.ts b/app/electron/src/lifecycleEventHandlers/__tests__/fullScreenBreak.test.ts similarity index 100% rename from app/main/src/lifecycleEventHandlers/__tests__/fullScreenBreak.test.ts rename to app/electron/src/lifecycleEventHandlers/__tests__/fullScreenBreak.test.ts diff --git a/app/main/src/lifecycleEventHandlers/fullScreenBreak.ts b/app/electron/src/lifecycleEventHandlers/fullScreenBreak.ts similarity index 100% rename from app/main/src/lifecycleEventHandlers/fullScreenBreak.ts rename to app/electron/src/lifecycleEventHandlers/fullScreenBreak.ts diff --git a/app/main/src/main.ts b/app/electron/src/main.ts similarity index 100% rename from app/main/src/main.ts rename to app/electron/src/main.ts diff --git a/app/main/src/preload.ts b/app/electron/src/preload.ts similarity index 100% rename from app/main/src/preload.ts rename to app/electron/src/preload.ts diff --git a/app/main/src/store.ts b/app/electron/src/store.ts similarity index 100% rename from app/main/src/store.ts rename to app/electron/src/store.ts diff --git a/app/main/tsconfig.json b/app/electron/tsconfig.json similarity index 100% rename from app/main/tsconfig.json rename to app/electron/tsconfig.json diff --git a/release-please-config.json b/release-please-config.json index d9863015..e8afdf41 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -10,7 +10,7 @@ "extra-files": [ { "type": "json", - "path": "app/main/package.json", + "path": "app/electron/package.json", "jsonpath": "$.version" }, { diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 0ee92e7c..94624482 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -10,7 +10,7 @@ architectures: apps: pomatez: - command: desktop-launch $SNAP/app/main/pomatez --no-sandbox + command: desktop-launch $SNAP/app/electron/pomatez --no-sandbox extensions: [gnome-3-28] plugs: - audio-playback @@ -31,7 +31,7 @@ apps: parts: pomatez: - source: app/main + source: app/electron plugin: nodejs nodejs-version: 12.18.1 @@ -54,8 +54,8 @@ parts: override-build: | snapcraftctl build - rm -rf $SNAPCRAFT_PART_INSTALL/app/main - mkdir -p $SNAPCRAFT_PART_INSTALL/app/main - mv dist/linux-unpacked/* $SNAPCRAFT_PART_INSTALL/app/main + rm -rf $SNAPCRAFT_PART_INSTALL/app/electron + mkdir -p $SNAPCRAFT_PART_INSTALL/app/electron + mv dist/linux-unpacked/* $SNAPCRAFT_PART_INSTALL/app/electron prime: - -node_modules From f1ee205cf010e6403ef4781295c14c98a1978ee4 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Wed, 28 Dec 2022 15:35:43 +0000 Subject: [PATCH 02/37] feat: add base tauri app --- .github/workflows/build-tauri.yml | 42 + app/renderer/package.json | 4 +- app/tauri/.gitignore | 4 + app/tauri/Cargo.lock | 3603 +++++++++++++++++++++++++ app/tauri/Cargo.toml | 27 + app/tauri/build.rs | 3 + app/tauri/icons/128x128.png | Bin 0 -> 3512 bytes app/tauri/icons/128x128@2x.png | Bin 0 -> 7012 bytes app/tauri/icons/32x32.png | Bin 0 -> 974 bytes app/tauri/icons/Square107x107Logo.png | Bin 0 -> 2863 bytes app/tauri/icons/Square142x142Logo.png | Bin 0 -> 3858 bytes app/tauri/icons/Square150x150Logo.png | Bin 0 -> 3966 bytes app/tauri/icons/Square284x284Logo.png | Bin 0 -> 7737 bytes app/tauri/icons/Square30x30Logo.png | Bin 0 -> 903 bytes app/tauri/icons/Square310x310Logo.png | Bin 0 -> 8591 bytes app/tauri/icons/Square44x44Logo.png | Bin 0 -> 1299 bytes app/tauri/icons/Square71x71Logo.png | Bin 0 -> 2011 bytes app/tauri/icons/Square89x89Logo.png | Bin 0 -> 2468 bytes app/tauri/icons/StoreLogo.png | Bin 0 -> 1523 bytes app/tauri/icons/icon.icns | Bin 0 -> 98451 bytes app/tauri/icons/icon.ico | Bin 0 -> 86642 bytes app/tauri/icons/icon.png | Bin 0 -> 14183 bytes app/tauri/src/main.rs | 17 + app/tauri/tauri.conf.json | 65 + package.json | 7 +- release-please-config.json | 5 + 26 files changed, 3773 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/build-tauri.yml create mode 100644 app/tauri/.gitignore create mode 100644 app/tauri/Cargo.lock create mode 100644 app/tauri/Cargo.toml create mode 100644 app/tauri/build.rs create mode 100644 app/tauri/icons/128x128.png create mode 100644 app/tauri/icons/128x128@2x.png create mode 100644 app/tauri/icons/32x32.png create mode 100644 app/tauri/icons/Square107x107Logo.png create mode 100644 app/tauri/icons/Square142x142Logo.png create mode 100644 app/tauri/icons/Square150x150Logo.png create mode 100644 app/tauri/icons/Square284x284Logo.png create mode 100644 app/tauri/icons/Square30x30Logo.png create mode 100644 app/tauri/icons/Square310x310Logo.png create mode 100644 app/tauri/icons/Square44x44Logo.png create mode 100644 app/tauri/icons/Square71x71Logo.png create mode 100644 app/tauri/icons/Square89x89Logo.png create mode 100644 app/tauri/icons/StoreLogo.png create mode 100644 app/tauri/icons/icon.icns create mode 100644 app/tauri/icons/icon.ico create mode 100644 app/tauri/icons/icon.png create mode 100644 app/tauri/src/main.rs create mode 100644 app/tauri/tauri.conf.json diff --git a/.github/workflows/build-tauri.yml b/.github/workflows/build-tauri.yml new file mode 100644 index 00000000..1a458e58 --- /dev/null +++ b/.github/workflows/build-tauri.yml @@ -0,0 +1,42 @@ +name: Test Build Tauri + +on: + push: +jobs: + build: + name: "Test Build" + + runs-on: ${{ matrix.os }} + + strategy: + matrix: + include: + - os: ubuntu-latest + name: linux + - os: macos-latest + name: mac + - os: windows-latest + name: win + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js 16.x + uses: actions/setup-node@v2 + with: + node-version: 16.x + cache: "yarn" + - name: install Rust stable + uses: dtolnay/rust-toolchain@stable + - name: Install NPM Packages + run: | + yarn install --immutable --network-timeout 120000 + - name: Build + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: yarn build:tauri + # Possibly set up some basic unit testing just to make sure parts render and none of the libraries are straight up breaking + - uses: actions/upload-artifact@v2 + with: + name: built-app-${{ matrix.name }} + path: | + app/electron/dist/*.* diff --git a/app/renderer/package.json b/app/renderer/package.json index 88ea4f12..c294017d 100644 --- a/app/renderer/package.json +++ b/app/renderer/package.json @@ -12,9 +12,9 @@ "homepage": "./", "scripts": { "clean": "rimraf build/", - "prebuild": "copyfiles -u 3 \"src/assets/logos/*\" ../main/src/assets", + "prebuild": "yarn clean && copyfiles -u 3 \"src/assets/logos/*\" ../electron/src/assets", "build": "react-scripts build", - "postbuild": "copyfiles -u 1 \"build/**/*\" ../main/build && yarn clean", + "postbuild": "copyfiles -u 1 \"build/**/*\" ../electron/build", "dev:renderer": "react-scripts start", "start": "yarn dev:renderer", "gen:tts": "node tts-generator.js" diff --git a/app/tauri/.gitignore b/app/tauri/.gitignore new file mode 100644 index 00000000..f4dfb82b --- /dev/null +++ b/app/tauri/.gitignore @@ -0,0 +1,4 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ + diff --git a/app/tauri/Cargo.lock b/app/tauri/Cargo.lock new file mode 100644 index 00000000..46d054dc --- /dev/null +++ b/app/tauri/Cargo.lock @@ -0,0 +1,3603 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "anyhow" +version = "1.0.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" + +[[package]] +name = "atk" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd" +dependencies = [ + "atk-sys", + "bitflags", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 6.0.3", +] + +[[package]] +name = "attohttpc" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fcf00bc6d5abb29b5f97e3c61a90b6d3caa12f3faf897d4a3e3607c050a35a7" +dependencies = [ + "flate2", + "http", + "log", + "native-tls", + "serde", + "serde_json", + "serde_urlencoded", + "url", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +dependencies = [ + "generic-array", +] + +[[package]] +name = "brotli" +version = "3.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bstr" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +dependencies = [ + "memchr", +] + +[[package]] +name = "bumpalo" +version = "3.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" + +[[package]] +name = "bytemuck" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaa3a8d9a1ca92e282c96a32d6511b695d7d994d1d102ba85d279f9b2756947f" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" + +[[package]] +name = "cairo-rs" +version = "0.15.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc" +dependencies = [ + "bitflags", + "cairo-sys-rs", + "glib", + "libc", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" +dependencies = [ + "glib-sys", + "libc", + "system-deps 6.0.3", +] + +[[package]] +name = "cargo_toml" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497049e9477329f8f6a559972ee42e117487d01d1e8c2cc9f836ea6fa23a9e1a" +dependencies = [ + "serde", + "toml", +] + +[[package]] +name = "cc" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74f89d248799e3f15f91b70917f65381062a01bb8e222700ea0e5a7ff9785f9c" +dependencies = [ + "byteorder", + "uuid 0.8.2", +] + +[[package]] +name = "cfg-expr" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7" +dependencies = [ + "smallvec", +] + +[[package]] +name = "cfg-expr" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0357a6402b295ca3a86bc148e84df46c02e41f41fef186bda662557ef6328aa" +dependencies = [ + "smallvec", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cocoa" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" +dependencies = [ + "bitflags", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" +dependencies = [ + "bitflags", + "block", + "core-foundation", + "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.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[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.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags", + "core-foundation", + "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", + "foreign-types", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa 0.4.8", + "matches", + "phf 0.8.0", + "proc-macro2", + "quote", + "smallvec", + "syn", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "ctor" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "cty" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" + +[[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 = "dbus" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f8bcdd56d2e5c4ed26a529c5a9029f5db8290d433497506f958eae3be148eb6" +dependencies = [ + "libc", + "libdbus-sys", + "winapi", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version 0.4.0", + "syn", +] + +[[package]] +name = "digest" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dtoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" + +[[package]] +name = "dtoa-short" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dunce" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c" + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "encoding_rs" +version = "0.8.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "fastrand" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +dependencies = [ + "instant", +] + +[[package]] +name = "field-offset" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" +dependencies = [ + "memoffset", + "rustc_version 0.3.3", +] + +[[package]] +name = "filetime" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "windows-sys 0.42.0", +] + +[[package]] +name = "flate2" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures-channel" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" + +[[package]] +name = "futures-executor" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" + +[[package]] +name = "futures-macro" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-task" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" + +[[package]] +name = "futures-util" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" +dependencies = [ + "futures-core", + "futures-macro", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gdk" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8" +dependencies = [ + "bitflags", + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a" +dependencies = [ + "bitflags", + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps 6.0.3", +] + +[[package]] +name = "gdk-sys" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps 6.0.3", +] + +[[package]] +name = "gdkx11-sys" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps 6.0.3", + "x11", +] + +[[package]] +name = "generator" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d266041a359dfa931b370ef684cceb84b166beb14f7f0421f4a6a3d0c446d12e" +dependencies = [ + "cc", + "libc", + "log", + "rustversion", + "windows 0.39.0", +] + +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "gio" +version = "0.15.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-io", + "gio-sys", + "glib", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 6.0.3", + "winapi", +] + +[[package]] +name = "glib" +version = "0.15.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "once_cell", + "smallvec", + "thiserror", +] + +[[package]] +name = "glib-macros" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a68131a662b04931e71891fb14aaf65ee4b44d08e8abc10f49e77418c86c64" +dependencies = [ + "anyhow", + "heck 0.4.0", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "glib-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4" +dependencies = [ + "libc", + "system-deps 6.0.3", +] + +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" + +[[package]] +name = "globset" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" +dependencies = [ + "aho-corasick", + "bstr", + "fnv", + "log", + "regex", +] + +[[package]] +name = "gobject-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a" +dependencies = [ + "glib-sys", + "libc", + "system-deps 6.0.3", +] + +[[package]] +name = "gtk" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0" +dependencies = [ + "atk", + "bitflags", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "once_cell", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps 6.0.3", +] + +[[package]] +name = "gtk3-macros" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24f518afe90c23fba585b2d7697856f9e6a7bbc62f65588035e66f6afb01a2e9" +dependencies = [ + "anyhow", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "html5ever" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" +dependencies = [ + "log", + "mac", + "markup5ever", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "http" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.5", +] + +[[package]] +name = "http-range" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" + +[[package]] +name = "ico" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031530fe562d8c8d71c0635013d6d155bbfe8ba0aa4b4d2d24ce8af6b71047bd" +dependencies = [ + "byteorder", + "png", +] + +[[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.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "ignore" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d" +dependencies = [ + "crossbeam-utils", + "globset", + "lazy_static", + "log", + "memchr", + "regex", + "same-file", + "thread_local", + "walkdir", + "winapi-util", +] + +[[package]] +name = "image" +version = "0.24.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-rational", + "num-traits", +] + +[[package]] +name = "indexmap" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +dependencies = [ + "autocfg", + "hashbrown", +] + +[[package]] +name = "infer" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20b2b533137b9cad970793453d4f921c2e91312a6d88b1085c07bc15fc51bb3b" +dependencies = [ + "cfb", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" + +[[package]] +name = "javascriptcore-rs" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c" +dependencies = [ + "bitflags", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 5.0.0", +] + +[[package]] +name = "jni" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +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 = "js-sys" +version = "0.3.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3fa5a61630976fc4c353c70297f2e93f1930e3ccee574d59d618ccbd5154ce" +dependencies = [ + "serde", + "serde_json", + "treediff", +] + +[[package]] +name = "kuchiki" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" +dependencies = [ + "cssparser", + "html5ever", + "matches", + "selectors", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.139" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" + +[[package]] +name = "libdbus-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c185b5b7ad900923ef3a8ff594083d4d9b5aea80bb4f32b8342363138c0d456b" +dependencies = [ + "pkg-config", +] + +[[package]] +name = "line-wrap" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" +dependencies = [ + "safemem", +] + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "loom" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "serde", + "serde_json", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "mac-notification-sys" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e72d50edb17756489e79d52eb146927bec8eba9dd48faadf9ef08bca3791ad5" +dependencies = [ + "cc", + "dirs-next", + "objc-foundation", + "objc_id", + "time", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "markup5ever" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" +dependencies = [ + "log", + "phf 0.8.0", + "phf_codegen", + "string_cache", + "string_cache_codegen", + "tendril", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matches" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "miniz_oxide" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +dependencies = [ + "adler", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "ndk" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" +dependencies = [ + "bitflags", + "jni-sys", + "ndk-sys", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "notify-rust" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc2e370356160e41aba3fd0fbac26d86a89ddd2ac4300c03de999a77cfa2509" +dependencies = [ + "dbus", + "mac-notification-sys", + "tauri-winrt-notification", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +dependencies = [ + "hermit-abi", + "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", + "objc_exception", +] + +[[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_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "once_cell" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" + +[[package]] +name = "open" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8" +dependencies = [ + "pathdiff", + "windows-sys 0.42.0", +] + +[[package]] +name = "openssl" +version = "0.10.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b102428fd03bc5edf97f62620f7298614c45cedf287c271e7ed450bbaf83f2e1" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23bbbf7854cd45b83958ebe919f0e8e516793727652e27fda10a8384cfc790b7" +dependencies = [ + "autocfg", + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "os_info" +version = "3.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4750134fb6a5d49afc80777394ad5d95b04bc12068c6abb92fae8f43817270f" +dependencies = [ + "log", + "serde", + "winapi", +] + +[[package]] +name = "os_pipe" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6a252f1f8c11e84b3ab59d7a488e48e4478a93937e027076638c49536204639" +dependencies = [ + "libc", + "windows-sys 0.42.0", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "pango" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f" +dependencies = [ + "bitflags", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 6.0.3", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-sys 0.42.0", +] + +[[package]] +name = "paste" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" + +[[package]] +name = "pathdiff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" + +[[package]] +name = "percent-encoding" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" + +[[package]] +name = "pest" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f6e86fb9e7026527a0d46bc308b841d73170ef8f443e1807f6ef88526a816d4" +dependencies = [ + "thiserror", + "ucd-trie", +] + +[[package]] +name = "phf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_macros 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_macros 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", +] + +[[package]] +name = "phf_codegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "phf_macros" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" + +[[package]] +name = "plist" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd39bc6cdc9355ad1dc5eeedefee696bb35c34caf21768741e81826c0bbd7225" +dependencies = [ + "base64", + "indexmap", + "line-wrap", + "serde", + "time", + "xml-rs", +] + +[[package]] +name = "png" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" +dependencies = [ + "bitflags", + "crc32fast", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "pomatez" +version = "0.0.0" +dependencies = [ + "serde", + "serde_json", + "tauri", + "tauri-build", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" +dependencies = [ + "once_cell", + "thiserror", + "toml", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", +] + +[[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.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.8", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed7e3d950b66e19e0c372f3fa3fbbcf85b1746b571f74e0c2af6042a5c93420a" +dependencies = [ + "cty", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom 0.2.8", + "redox_syscall", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + +[[package]] +name = "rfd" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0149778bd99b6959285b0933288206090c50e2327f47a9c463bfdbf45c8823ea" +dependencies = [ + "block", + "dispatch", + "glib-sys", + "gobject-sys", + "gtk-sys", + "js-sys", + "lazy_static", + "log", + "objc", + "objc-foundation", + "objc_id", + "raw-window-handle", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows 0.37.0", +] + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver 1.0.16", +] + +[[package]] +name = "rustversion" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" + +[[package]] +name = "ryu" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[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.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" +dependencies = [ + "lazy_static", + "windows-sys 0.36.1", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "security-framework" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "selectors" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" +dependencies = [ + "bitflags", + "cssparser", + "derive_more", + "fxhash", + "log", + "matches", + "phf 0.8.0", + "phf_codegen", + "precomputed-hash", + "servo_arc", + "smallvec", + "thin-slice", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[package]] +name = "serde" +version = "1.0.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" +dependencies = [ + "itoa 1.0.5", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa 1.0.5", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" +dependencies = [ + "serde", + "serde_with_macros", +] + +[[package]] +name = "serde_with_macros" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "servo_arc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared_child" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "siphasher" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" + +[[package]] +name = "slab" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "soup2" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0" +dependencies = [ + "bitflags", + "gio", + "glib", + "libc", + "once_cell", + "soup2-sys", +] + +[[package]] +name = "soup2-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf" +dependencies = [ + "bitflags", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps 5.0.0", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "state" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" +dependencies = [ + "loom", +] + +[[package]] +name = "string_cache" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared 0.10.0", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strum" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7ac893c7d471c8a21f31cfe213ec4f6d9afeed25537c772e08ef3f005f8729e" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb" +dependencies = [ + "heck 0.3.3", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "syn" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-deps" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e" +dependencies = [ + "cfg-expr 0.9.1", + "heck 0.3.3", + "pkg-config", + "toml", + "version-compare 0.0.11", +] + +[[package]] +name = "system-deps" +version = "6.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff" +dependencies = [ + "cfg-expr 0.11.0", + "heck 0.4.0", + "pkg-config", + "toml", + "version-compare 0.1.1", +] + +[[package]] +name = "tao" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac8e6399427c8494f9849b58694754d7cc741293348a6836b6c8d2c5aa82d8e6" +dependencies = [ + "bitflags", + "cairo-rs", + "cc", + "cocoa", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dispatch", + "gdk", + "gdk-pixbuf", + "gdk-sys", + "gdkx11-sys", + "gio", + "glib", + "glib-sys", + "gtk", + "image", + "instant", + "jni", + "lazy_static", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "once_cell", + "parking_lot", + "paste", + "png", + "raw-window-handle", + "scopeguard", + "serde", + "unicode-segmentation", + "uuid 1.2.2", + "windows 0.39.0", + "windows-implement", + "x11-dl", +] + +[[package]] +name = "tar" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "tauri" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b48820ee3bb6a5031a83b2b6e11f8630bdc5a2f68cb841ab8ebc7a15a916679" +dependencies = [ + "anyhow", + "attohttpc", + "cocoa", + "dirs-next", + "embed_plist", + "encoding_rs", + "flate2", + "futures-util", + "glib", + "glob", + "gtk", + "heck 0.4.0", + "http", + "ignore", + "notify-rust", + "objc", + "once_cell", + "open", + "os_info", + "os_pipe", + "percent-encoding", + "rand 0.8.5", + "raw-window-handle", + "regex", + "rfd", + "semver 1.0.16", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "shared_child", + "state", + "tar", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "tempfile", + "thiserror", + "tokio", + "url", + "uuid 1.2.2", + "webkit2gtk", + "webview2-com", + "windows 0.39.0", +] + +[[package]] +name = "tauri-build" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8807c85d656b2b93927c19fe5a5f1f1f348f96c2de8b90763b3c2d561511f9b4" +dependencies = [ + "anyhow", + "cargo_toml", + "heck 0.4.0", + "json-patch", + "semver 1.0.16", + "serde_json", + "tauri-utils", + "winres", +] + +[[package]] +name = "tauri-codegen" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14388d484b6b1b5dc0f6a7d6cc6433b3b230bec85eaa576adcdf3f9fafa49251" +dependencies = [ + "base64", + "brotli", + "ico", + "json-patch", + "plist", + "png", + "proc-macro2", + "quote", + "regex", + "semver 1.0.16", + "serde", + "serde_json", + "sha2", + "tauri-utils", + "thiserror", + "time", + "uuid 1.2.2", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069319e5ecbe653a799b94b0690d9f9bf5d00f7b1d3989aa331c524d4e354075" +dependencies = [ + "heck 0.4.0", + "proc-macro2", + "quote", + "syn", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-runtime" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c507d954d08ac8705d235bc70ec6975b9054fb95ff7823af72dbb04186596f3b" +dependencies = [ + "gtk", + "http", + "http-range", + "rand 0.8.5", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror", + "uuid 1.2.2", + "webview2-com", + "windows 0.39.0", +] + +[[package]] +name = "tauri-runtime-wry" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36b1c5764a41a13176a4599b5b7bd0881bea7d94dfe45e1e755f789b98317e30" +dependencies = [ + "cocoa", + "gtk", + "percent-encoding", + "rand 0.8.5", + "raw-window-handle", + "tauri-runtime", + "tauri-utils", + "uuid 1.2.2", + "webkit2gtk", + "webview2-com", + "windows 0.39.0", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5abbc109a6eb45127956ffcc26ef0e875d160150ac16cfa45d26a6b2871686f1" +dependencies = [ + "brotli", + "ctor", + "glob", + "heck 0.4.0", + "html5ever", + "infer", + "json-patch", + "kuchiki", + "memchr", + "phf 0.10.1", + "proc-macro2", + "quote", + "semver 1.0.16", + "serde", + "serde_json", + "serde_with", + "thiserror", + "url", + "walkdir", + "windows 0.39.0", +] + +[[package]] +name = "tauri-winrt-notification" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c58de036c4d2e20717024de2a3c4bf56c301f07b21bc8ef9b57189fce06f1f3b" +dependencies = [ + "quick-xml", + "strum", + "windows 0.39.0", +] + +[[package]] +name = "tempfile" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +dependencies = [ + "cfg-if", + "fastrand", + "libc", + "redox_syscall", + "remove_dir_all", + "winapi", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "thin-slice" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" + +[[package]] +name = "thiserror" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +dependencies = [ + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" +dependencies = [ + "itoa 1.0.5", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" + +[[package]] +name = "time-macros" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +dependencies = [ + "time-core", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "tokio" +version = "1.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab6d665857cc6ca78d6e80303a02cea7a7851e85dfbd77cbdc09bd129f1ef46" +dependencies = [ + "autocfg", + "bytes", + "memchr", + "num_cpus", + "pin-project-lite", + "windows-sys 0.42.0", +] + +[[package]] +name = "toml" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f" +dependencies = [ + "serde", +] + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +dependencies = [ + "lazy_static", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "treediff" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "761e8d5ad7ce14bb82b7e61ccc0ca961005a275a060b9644a2431aa11553c2ff" +dependencies = [ + "serde_json", +] + +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "ucd-trie" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" + +[[package]] +name = "unicode-bidi" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" + +[[package]] +name = "unicode-ident" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" + +[[package]] +name = "url" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" + +[[package]] +name = "uuid" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c" +dependencies = [ + "getrandom 0.2.8", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version-compare" +version = "0.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" + +[[package]] +name = "version-compare" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[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 = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" + +[[package]] +name = "web-sys" +version = "0.3.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webkit2gtk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370" +dependencies = [ + "bitflags", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup2", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3" +dependencies = [ + "atk-sys", + "bitflags", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pango-sys", + "pkg-config", + "soup2-sys", + "system-deps 6.0.3", +] + +[[package]] +name = "webview2-com" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows 0.39.0", + "windows-implement", +] + +[[package]] +name = "webview2-com-macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "webview2-com-sys" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7" +dependencies = [ + "regex", + "serde", + "serde_json", + "thiserror", + "windows 0.39.0", + "windows-bindgen", + "windows-metadata", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647" +dependencies = [ + "windows_aarch64_msvc 0.37.0", + "windows_i686_gnu 0.37.0", + "windows_i686_msvc 0.37.0", + "windows_x86_64_gnu 0.37.0", + "windows_x86_64_msvc 0.37.0", +] + +[[package]] +name = "windows" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" +dependencies = [ + "windows-implement", + "windows_aarch64_msvc 0.39.0", + "windows_i686_gnu 0.39.0", + "windows_i686_msvc 0.39.0", + "windows_x86_64_gnu 0.39.0", + "windows_x86_64_msvc 0.39.0", +] + +[[package]] +name = "windows-bindgen" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41" +dependencies = [ + "windows-metadata", + "windows-tokens", +] + +[[package]] +name = "windows-implement" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" +dependencies = [ + "syn", + "windows-tokens", +] + +[[package]] +name = "windows-metadata" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278" + +[[package]] +name = "windows-sys" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc 0.36.1", + "windows_i686_gnu 0.36.1", + "windows_i686_msvc 0.36.1", + "windows_x86_64_gnu 0.36.1", + "windows_x86_64_msvc 0.36.1", +] + +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.0", + "windows_i686_gnu 0.42.0", + "windows_i686_msvc 0.42.0", + "windows_x86_64_gnu 0.42.0", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.0", +] + +[[package]] +name = "windows-tokens" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_gnu" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1" + +[[package]] +name = "windows_i686_gnu" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_i686_msvc" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c" + +[[package]] +name = "windows_i686_msvc" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" + +[[package]] +name = "winres" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" +dependencies = [ + "toml", +] + +[[package]] +name = "wry" +version = "0.23.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c1ad8e2424f554cc5bdebe8aa374ef5b433feff817aebabca0389961fc7ef98" +dependencies = [ + "base64", + "block", + "cocoa", + "core-graphics", + "crossbeam-channel", + "dunce", + "gdk", + "gio", + "glib", + "gtk", + "html5ever", + "http", + "kuchiki", + "libc", + "log", + "objc", + "objc_id", + "once_cell", + "serde", + "serde_json", + "sha2", + "soup2", + "tao", + "thiserror", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows 0.39.0", + "windows-implement", +] + +[[package]] +name = "x11" +version = "2.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2638d5b9c17ac40575fb54bb461a4b1d2a8d1b4ffcc4ff237d254ec59ddeb82" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1536d6965a5d4e573c7ef73a2c15ebcd0b2de3347bdf526c34c297c00ac40f0" +dependencies = [ + "lazy_static", + "libc", + "pkg-config", +] + +[[package]] +name = "xattr" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" +dependencies = [ + "libc", +] + +[[package]] +name = "xml-rs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" diff --git a/app/tauri/Cargo.toml b/app/tauri/Cargo.toml new file mode 100644 index 00000000..f9d205ac --- /dev/null +++ b/app/tauri/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "pomatez" +version = "0.0.0" +description = "A Tauri App" +authors = ["Roldan Montilla Jr"] +license = "MIT" +repository = "" +edition = "2021" +rust-version = "1.57" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[build-dependencies] +tauri-build = { version = "1.2", features = [] } + +[dependencies] +serde_json = "1.0" +serde = { version = "1.0", features = ["derive"] } +tauri = { version = "1.2", features = ["api-all"] } + +[features] +# by default Tauri runs in production mode +# when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL +default = ["custom-protocol"] +# this feature is used used for production builds where `devPath` points to the filesystem +# DO NOT remove this +custom-protocol = ["tauri/custom-protocol"] diff --git a/app/tauri/build.rs b/app/tauri/build.rs new file mode 100644 index 00000000..795b9b7c --- /dev/null +++ b/app/tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/app/tauri/icons/128x128.png b/app/tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..6be5e50e9b9ae84d9e2ee433f32ef446495eaf3b GIT binary patch literal 3512 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 literal 0 HcmV?d00001 diff --git a/app/tauri/icons/128x128@2x.png b/app/tauri/icons/128x128@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e81becee571e96f76aa5667f9324c05e5e7a4479 GIT binary patch literal 7012 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 Sh@|Ye~|0>}wMPLT8jm@Y!H33Sz}5aFI6 zM9Lzqz|;A*0sGs=2A1uU!1nk2dGF7knQwr99SAFen)x(eCO;F8y2C~0FD1YxRTPcy zPWVxkUYmeuz}Tv?7&Fe-!UE{)ZW)Mb;H)^#eHDv$`dkZGguJz@^MA!ZNGAUqt{|0H zpZ7Ch9S`q5!>R%}>}62!+(T^evyO+ImSo2wpu)su4^3nw5(%)KD%gbSev^*HZZ&3( z#&c@Z0gH|}Ck)w6fh0&NBJ62ib%R}(3@$VFl*_#l2W$wQ-~4RmZZAt5O*^2Q5}Xr8Hy@c`#pM?kc?hFWxRXr*mUfUCXf4ka5DD~ zat6d85COB05l#(P9*cQZ3EC8fVdS~?&vN#rce(aF9@xp80O2{{FBvU+{X>Hoh;xI` z{$e^Nw1y*VbO8wv`8|-m?NwNaKGTGaF{P^JLB^DbOYWIbn%eT`*!^C1H36=O8Z-M> zkD~88ry`eSo`tEBN4>w7OWZwUzlh{WM1m8R6zepqGcGMaV7vWY9b?K4b6~|HVG)ec wi>I@ws#sZo7or4_*4M>7;p5{nr2pZ?Uu4>Krr0kU)&Kwi07*qoM6N<$f)&@lf&c&j literal 0 HcmV?d00001 diff --git a/app/tauri/icons/Square107x107Logo.png b/app/tauri/icons/Square107x107Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca4f27198838968bd60ed7d371bfa23496b7fe5 GIT binary patch literal 2863 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 Y2S8W#vM)6=T>t<807*qoM6N<$f*y@n<^TWy literal 0 HcmV?d00001 diff --git a/app/tauri/icons/Square284x284Logo.png b/app/tauri/icons/Square284x284Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c021d2ba76619c08969ab688db3b27f29257aa6f GIT binary patch literal 7737 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 literal 0 HcmV?d00001 diff --git a/app/tauri/icons/Square30x30Logo.png b/app/tauri/icons/Square30x30Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..621970023096ed9f494ba18ace15421a45cd65fa GIT binary patch literal 903 zcmV;219<$2P)2 z+CUKPMqaqGiH;zb!R4$B-WXS^YzQr=@UH>k4?*L)&R=zYjBrZenKdc9|JlS$SO*RJ zKt8FSTDAdk1g_WPAO!p^V!AuL;Lm;uQyV;zKq)J3i(;q*;k+pD%f3eltU`PYdy9(k0&%` zuWAPcV6|-y?|?7O1W!KSK}pbk8#~!|FA@(VJkt^V@0lio{afoAeo*f&$W2s6${5!1eKvAGD2$GZwSB98L2ZVS- zKn8ENRkZ*sb!@QugOrQNK3(sy1v%J#m|rpB+h|Nkqa3FRT>74xSs{#&saU2Lf!_Iq zKmuKAESh`gs!fneGWn+nf}l?7jE$HW!Af&vE5=G!QU)U2v&HLIBGXKk4nQx{hsHjL zLPMAo5=*uInFbq7(aa`Y2VX5wCmaeqvECOFv)a>0t>ZaEb*cJccER=BB?KFZhV$c^ znL*l8x*UYZv4WK|j?~Jt6~~F%{pk~z5A*>^M`?r5m9@RJ_x|uEtX(6Vk@Y()MVto* z93wr)%3m%|#OZ~srm>zF(JvDuTq*@;d&^>_BJm5hOU`3FjG70L#Vzv9I?`<7$T@

jU?lMi@tgxr7CqX_r3uw^y4tVU3Pm0sw;|1WSUO%?=bG`*Kmz6u4{#ti;T7AWIBAEh!(Y zz>O01&#X?Ds@L)Sb{CkG#Yz4$3o d@96)?#cz^xWoA}>B$xmI002ovPDHLkV1l3&k#zt7 literal 0 HcmV?d00001 diff --git a/app/tauri/icons/Square310x310Logo.png b/app/tauri/icons/Square310x310Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f9bc04839491e66c07b16ab03743c0c53b4109cc GIT binary patch literal 8591 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 JPDHLkV1lm|RXG3v literal 0 HcmV?d00001 diff --git a/app/tauri/icons/Square71x71Logo.png b/app/tauri/icons/Square71x71Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..63440d7984936a9caa89275928d8dce97e4d033b GIT binary patch literal 2011 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∓t$dRJGIadE?vc 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 Kx8Vjl{{H|h@<;Lj literal 0 HcmV?d00001 diff --git a/app/tauri/icons/icon.ico b/app/tauri/icons/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b3636e4b22ba65db9061cd60a77b02c92022dfd6 GIT binary patch literal 86642 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 AKmY&$ literal 0 HcmV?d00001 diff --git a/app/tauri/icons/icon.png b/app/tauri/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e1cd2619e0b5ec089cbba5ec7b03ddf2b1dfceb6 GIT binary patch literal 14183 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

5l#v3A#xI3*z~1~fvo9Q(N^(==!|_FZ z*duZ=+M1~)8E|otX8KNZlr?qels#x_1Xq@9IIw~@9uAREJVH)Xw^}UclF6327}E42 zT)E&?U%TK?(+K7%R!`H5oX0i)4Qn5??Iw3p5J~6_u+aWehY{DSn}3V2p$bgjnAu?o)v@iC254fXeMv50$9YrpU`N?u@QIWs)T?SP|fa}(|9 zqAX+!7`cx=4)cCBg5h~pu(?@9`)aCr#oyz$ld=#RFxYCNZCZls@4v2~*e-t6PEVvV z&bbK3b3wt(Coc!ufAbXXC<**#HQ%J9k`New6iG<5RjtO4XVO?dCvwxD{kJ#tfQr(X zg^NTwF-FwAeS_{V4bfel8l`~NbfrTR2s!G>WduFWxH(t~aK4q=6rEE^$+Uox>gJO2 z{L<;6Q6nHa5#ZEM>H58not!)z(6*_=^~8}jWf*IG$AUKVWOZ4?)GfF z+BM#*wKKmLFD7E~W3U!$IVm$k_k1f&Kz6WV8@55P?r~bcg-Za-!rvW?ns&)KOGT2~ zlkAyqhQj=P$Eg3w#K~}zH@J5bo-BfHjInKSz$@?+Z)NPD4pHj^_Qxmi`UqoTy=`sV zLVxrXGuBr=QRm|}wg75yetQQK4fY3#P_~J}zEfPnb2C4Wo!E(d*(cA;b?7$g2in<( zPn)ghX}nzJPmb6(3Dpeg_GW~Hc}Lt=lgsSZz z!5QXyz7KaR;D`3Ee}d`af{H>WWZ|Io1QI3~4Ll_`g1(cRnhLK73Ro)7zPCd={1W2x zRp%Xlvv4>!<2@}$hz|!V{T}_eHx2xkLl^hQoZTCnsjCl|W_@5Fx2(+j0ogy&Y+;L- z<)G$*CiN7hOm^s!{U>1F7U=iNk{+u~dAC!eDz%=|glFW0jEZU1&o(G_c#wTxUjnG} z#cg3>jEpUi#Mlq@t?Msg_#geK^Lx@DyHWf7=AS5vVyM7YOjvUVCfcpVR<(+5!H?9- zySI6s>o3m&*zr||=wcPGyBkQV`EWJl@bH8qobjOp+sXL*)=&yX)8aAbf~tGv?a2SN zu^Ddo-z?DWk9h9Yz#5p^NU#x~wYSd?H@w@!2Gb4G)6-utEMV~~M85Br5ff(v5O1|T z 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 String { + format!("Hello, {}! You've been greeted from Rust!", name) +} + +fn main() { + tauri::Builder::default() + .invoke_handler(tauri::generate_handler![greet]) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} diff --git a/app/tauri/tauri.conf.json b/app/tauri/tauri.conf.json new file mode 100644 index 00000000..ad4bee11 --- /dev/null +++ b/app/tauri/tauri.conf.json @@ -0,0 +1,65 @@ +{ + "build": { + "beforeDevCommand": "yarn dev:tauri", + "beforeBuildCommand": "yarn build", + "devPath": "http://localhost:3000", + "distDir": "../renderer/build" + }, + "package": { + "productName": "pomatez", + "version": "0.0.0" + }, + "tauri": { + "allowlist": { + "all": true + }, + "bundle": { + "active": true, + "category": "DeveloperTool", + "copyright": "", + "deb": { + "depends": [] + }, + "externalBin": [], + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "identifier": "com.roldanjr.pomatez", + "longDescription": "", + "macOS": { + "entitlements": null, + "exceptionDomain": "", + "frameworks": [], + "providerShortName": null, + "signingIdentity": null + }, + "resources": [], + "shortDescription": "", + "targets": "all", + "windows": { + "certificateThumbprint": null, + "digestAlgorithm": "sha256", + "timestampUrl": "" + } + }, + "security": { + "csp": null + }, + "updater": { + "active": false + }, + "windows": [ + { + "fullscreen": false, + "height": 600, + "resizable": true, + "title": "pomatez", + "width": 800 + } + ] + } +} diff --git a/package.json b/package.json index 61e9c606..36b79948 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,9 @@ "release": "yarn build && lerna run release --stream", "clean": "lerna exec -- rimraf build/ dist/", "gen:tts": "lerna run gen:tts --stream", - "format": "prettier --write ." + "format": "prettier --write .", + "tauri": "tauri", + "tauri:dev": "tauri dev" }, "config": { "commitizen": { @@ -53,7 +55,8 @@ "rollup": "^2.79.1", "rollup-plugin-typescript2": "^0.27.3", "typescript": "4.9.4", - "wait-on": "^5.3.0" + "wait-on": "^5.3.0", + "@tauri-apps/cli": "1.2.2" }, "resolutions": { "//": "Check https://github.com/facebook/create-react-app/issues/11773 to see if it has been fixed yet", diff --git a/release-please-config.json b/release-please-config.json index e8afdf41..d8b4193a 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -13,6 +13,11 @@ "path": "app/electron/package.json", "jsonpath": "$.version" }, + { + "type": "json", + "path": "app/tauri/tauri.conf.json", + "jsonpath": "$.package.version" + }, { "type": "json", "path": "app/renderer/package.json", From 5d99a8fd599b9c0f74369a8c39825bd5e786329c Mon Sep 17 00:00:00 2001 From: Sekwah Date: Thu, 29 Dec 2022 07:03:58 +0000 Subject: [PATCH 03/37] chore(ci): just test on linux for now --- .github/workflows/build-tauri.yml | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build-tauri.yml b/.github/workflows/build-tauri.yml index 1a458e58..bbdeca2a 100644 --- a/.github/workflows/build-tauri.yml +++ b/.github/workflows/build-tauri.yml @@ -13,10 +13,10 @@ jobs: include: - os: ubuntu-latest name: linux - - os: macos-latest - name: mac - - os: windows-latest - name: win +# - os: macos-latest +# name: mac +# - os: windows-latest +# name: win steps: - uses: actions/checkout@v2 @@ -31,12 +31,10 @@ jobs: run: | yarn install --immutable --network-timeout 120000 - name: Build - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: yarn build:tauri # Possibly set up some basic unit testing just to make sure parts render and none of the libraries are straight up breaking - - uses: actions/upload-artifact@v2 - with: - name: built-app-${{ matrix.name }} - path: | - app/electron/dist/*.* +# - uses: actions/upload-artifact@v2 +# with: +# name: built-app-${{ matrix.name }} +# path: | +# app/electron/dist/*.* From 0fed52a291608d70af7cdd5ba51010e3698439b8 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Thu, 29 Dec 2022 07:17:41 +0000 Subject: [PATCH 04/37] chore(ci): enable installing libgtk on linux build --- .github/workflows/build-tauri.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-tauri.yml b/.github/workflows/build-tauri.yml index bbdeca2a..882d6f83 100644 --- a/.github/workflows/build-tauri.yml +++ b/.github/workflows/build-tauri.yml @@ -11,7 +11,7 @@ jobs: strategy: matrix: include: - - os: ubuntu-latest + - os: ubuntu-20.04 name: linux # - os: macos-latest # name: mac @@ -27,6 +27,11 @@ jobs: cache: "yarn" - name: install Rust stable uses: dtolnay/rust-toolchain@stable + - name: install dependencies (ubuntu only) + if: matrix.os == 'ubuntu-20.04' + run: | + sudo apt-get update + sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev librsvg2-dev patchelf - name: Install NPM Packages run: | yarn install --immutable --network-timeout 120000 From 32985712f9e1f5f93ebb59a144a475b5691c93f9 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Thu, 29 Dec 2022 07:32:51 +0000 Subject: [PATCH 05/37] chore(ci): Upload files from build --- .github/workflows/build-tauri.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-tauri.yml b/.github/workflows/build-tauri.yml index 882d6f83..4a2e3e44 100644 --- a/.github/workflows/build-tauri.yml +++ b/.github/workflows/build-tauri.yml @@ -38,8 +38,9 @@ jobs: - name: Build run: yarn build:tauri # Possibly set up some basic unit testing just to make sure parts render and none of the libraries are straight up breaking -# - uses: actions/upload-artifact@v2 -# with: -# name: built-app-${{ matrix.name }} -# path: | -# app/electron/dist/*.* + - uses: actions/upload-artifact@v2 + with: + name: built-app-${{ matrix.name }} + path: | + app/tauri/target/release/bundle/deb/*.deb + app/tauri/target/release/bundle/appimage/*.AppImage From 18ed7c53bea8cde356b1031ccc66b9d209c23926 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Thu, 29 Dec 2022 19:48:50 +0000 Subject: [PATCH 06/37] chore(ci): enable building on other operating systems --- .github/workflows/build-tauri.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-tauri.yml b/.github/workflows/build-tauri.yml index 4a2e3e44..62ab4772 100644 --- a/.github/workflows/build-tauri.yml +++ b/.github/workflows/build-tauri.yml @@ -13,10 +13,10 @@ jobs: include: - os: ubuntu-20.04 name: linux -# - os: macos-latest -# name: mac -# - os: windows-latest -# name: win + - os: macos-latest + name: mac + - os: windows-latest + name: win steps: - uses: actions/checkout@v2 From 41fb8893c92f815d3d5fe457c07007050f24e288 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Thu, 29 Dec 2022 23:16:41 +0000 Subject: [PATCH 07/37] chore(ci): add upload targets --- .github/workflows/build-tauri.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build-tauri.yml b/.github/workflows/build-tauri.yml index 62ab4772..1ad6b662 100644 --- a/.github/workflows/build-tauri.yml +++ b/.github/workflows/build-tauri.yml @@ -44,3 +44,6 @@ jobs: path: | app/tauri/target/release/bundle/deb/*.deb app/tauri/target/release/bundle/appimage/*.AppImage + app/tauri/target/release/bundle/msi/*.msi + app/tauri/target/release/bundle/dmg/*.dmg + app/tauri/target/release/bundle/macos/*.app From bf891c5d7d2f4ca546943e7d1ebd68902973e33b Mon Sep 17 00:00:00 2001 From: Sekwah Date: Fri, 30 Dec 2022 02:19:44 +0000 Subject: [PATCH 08/37] feat: make tauri version draggable --- app/renderer/src/components/Titlebar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/renderer/src/components/Titlebar.tsx b/app/renderer/src/components/Titlebar.tsx index cb367010..68780566 100644 --- a/app/renderer/src/components/Titlebar.tsx +++ b/app/renderer/src/components/Titlebar.tsx @@ -44,7 +44,7 @@ const Titlebar: React.FC = ({ darkMode, timerType }) => { }, [darkMode, timerType]); return ( - + From f1f4fc257b87a028a8d161a16de153c1ff5fb65e Mon Sep 17 00:00:00 2001 From: Sekwah Date: Fri, 30 Dec 2022 02:30:37 +0000 Subject: [PATCH 09/37] feat(tauri): debug menu in dev mode --- app/tauri/src/main.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/tauri/src/main.rs b/app/tauri/src/main.rs index 1eddd4c6..78d3e286 100644 --- a/app/tauri/src/main.rs +++ b/app/tauri/src/main.rs @@ -3,6 +3,8 @@ all(not(debug_assertions), target_os = "windows"), windows_subsystem = "windows" )] +use tauri::Manager; + // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command #[tauri::command] fn greet(name: &str) -> String { @@ -11,6 +13,15 @@ fn greet(name: &str) -> String { fn main() { tauri::Builder::default() + .setup(|app| { + #[cfg(debug_assertions)] // only include this code on debug builds + { + let window = app.get_window("main").unwrap(); + window.open_devtools(); + window.close_devtools(); + } + Ok(()) + }) .invoke_handler(tauri::generate_handler![greet]) .run(tauri::generate_context!()) .expect("error while running tauri application"); From f4d8d7714781e72f13b36b2231d0b5a7fdf390a1 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Fri, 30 Dec 2022 02:55:48 +0000 Subject: [PATCH 10/37] feat: restructure connector in a way that allows easy switching out for platforms --- app/renderer/src/App.tsx | 6 ++-- app/renderer/src/components/Titlebar.tsx | 4 +-- .../src/contexts/ConnnectorContext.tsx | 22 ++++++++++++ .../ElectronConnector.tsx} | 36 +++++++++---------- app/renderer/src/contexts/index.ts | 2 +- .../src/extensions/window.extension.ts | 3 ++ .../src/routes/Settings/HelpSection.tsx | 4 +-- .../src/routes/Tasks/TaskDetails/index.tsx | 4 +-- app/tauri/src/main.rs | 1 - 9 files changed, 52 insertions(+), 30 deletions(-) create mode 100644 app/renderer/src/contexts/ConnnectorContext.tsx rename app/renderer/src/contexts/{ElectronContext.tsx => connectors/ElectronConnector.tsx} (87%) diff --git a/app/renderer/src/App.tsx b/app/renderer/src/App.tsx index f4bf24a0..10edeced 100644 --- a/app/renderer/src/App.tsx +++ b/app/renderer/src/App.tsx @@ -3,7 +3,7 @@ import { HashRouter as Router, Switch, Route } from "react-router-dom"; import { ThemeProvider, CounterProvider, - ElectronProvider, + ConnectorProvider, } from "contexts"; import { Layout, Preloader } from "components"; import { compactRoutes, routes } from "config"; @@ -17,7 +17,7 @@ export default function App() { return ( - + }> @@ -47,7 +47,7 @@ export default function App() { - + ); diff --git a/app/renderer/src/components/Titlebar.tsx b/app/renderer/src/components/Titlebar.tsx index 68780566..1de3e1b4 100644 --- a/app/renderer/src/components/Titlebar.tsx +++ b/app/renderer/src/components/Titlebar.tsx @@ -9,7 +9,7 @@ import { StyledMarkLogo, StyledMarkName, } from "styles"; -import { ElectronContext } from "contexts"; +import { ConnnectorContext } from "contexts"; import { APP_NAME } from "config"; import Json from "../../package.json"; @@ -28,7 +28,7 @@ type Props = { const Titlebar: React.FC = ({ darkMode, timerType }) => { const { onMinimizeCallback, onExitCallback } = - useContext(ElectronContext); + useContext(ConnnectorContext); const getAppIcon = useCallback(() => { switch (timerType) { diff --git a/app/renderer/src/contexts/ConnnectorContext.tsx b/app/renderer/src/contexts/ConnnectorContext.tsx new file mode 100644 index 00000000..faccac59 --- /dev/null +++ b/app/renderer/src/contexts/ConnnectorContext.tsx @@ -0,0 +1,22 @@ +import React from "react"; +import isElectron from "is-electron"; +import { ElectronConnectorProvider } from "./connectors/ElectronConnector"; + +export type ConnectorProps = { + onMinimizeCallback?: () => void; + onExitCallback?: () => void; + openExternalCallback?: () => void; +}; + +export const ConnnectorContext = React.createContext( + {} +); + +export const ConnectorProvider: React.FC = ({ children }) => { + let Connector: React.FC = () => <>{children}; + if (isElectron()) { + Connector = ElectronConnectorProvider; + } + + return ; +}; diff --git a/app/renderer/src/contexts/ElectronContext.tsx b/app/renderer/src/contexts/connectors/ElectronConnector.tsx similarity index 87% rename from app/renderer/src/contexts/ElectronContext.tsx rename to app/renderer/src/contexts/connectors/ElectronConnector.tsx index eb36a1cc..4607df0b 100644 --- a/app/renderer/src/contexts/ElectronContext.tsx +++ b/app/renderer/src/contexts/connectors/ElectronConnector.tsx @@ -1,35 +1,32 @@ -import React, { useCallback, useEffect, useContext } from "react"; +import React, { useCallback, useContext, useEffect } from "react"; +import { ConnnectorContext } from "../ConnnectorContext"; import { useSelector } from "react-redux"; +import { AppStateTypes, SettingTypes } from "../../store"; +import { CounterContext } from "../CounterContext"; import isElectron from "is-electron"; import { - SET_MINIMIZE, - SET_CLOSE, - SET_SHOW, SET_ALWAYS_ON_TOP, + SET_CLOSE, + SET_COMPACT_MODE, SET_FULLSCREEN_BREAK, - SET_UI_THEME, + SET_MINIMIZE, SET_NATIVE_TITLEBAR, + SET_SHOW, + SET_UI_THEME, TRAY_ICON_UPDATE, SET_COMPACT_MODE, SET_OPEN_AT_LOGIN, } from "@pomatez/shareables"; - -import { AppStateTypes, SettingTypes } from "store"; -import { CounterContext } from "./CounterContext"; -import { TraySVG } from "components"; -import { encodeSvg } from "utils"; - -type ElectronProps = { - onMinimizeCallback?: () => void; - onExitCallback?: () => void; - openExternalCallback?: () => void; -}; +import { encodeSvg } from "../../utils"; +import { TraySVG } from "../../components"; const ElectronContext = React.createContext({}); const ElectronProvider: React.FC = ({ children }) => { const { electron } = window; + // TODO do logic to switch out the connectors based on the platform + const timer = useSelector((state: AppStateTypes) => state.timer); const settings: SettingTypes = useSelector( @@ -152,7 +149,7 @@ const ElectronProvider: React.FC = ({ children }) => { }, [electron, timer.playing, timerType, dashOffset]); return ( - { }} > {children} - + ); }; -export { ElectronContext, ElectronProvider }; + +export { ElectronContext, ElectronProvider }; \ No newline at end of file diff --git a/app/renderer/src/contexts/index.ts b/app/renderer/src/contexts/index.ts index b8e112c4..146a0532 100644 --- a/app/renderer/src/contexts/index.ts +++ b/app/renderer/src/contexts/index.ts @@ -1,3 +1,3 @@ export * from "./ThemeContext"; export * from "./CounterContext"; -export * from "./ElectronContext"; +export * from "./ConnnectorContext"; diff --git a/app/renderer/src/extensions/window.extension.ts b/app/renderer/src/extensions/window.extension.ts index 2ea2aaed..44fed387 100644 --- a/app/renderer/src/extensions/window.extension.ts +++ b/app/renderer/src/extensions/window.extension.ts @@ -10,6 +10,9 @@ declare global { options?: Electron.OpenExternalOptions ) => Promise; }; + __TAURI__: { + invoke: (command: string, ...args: any[]) => void; + }; } } diff --git a/app/renderer/src/routes/Settings/HelpSection.tsx b/app/renderer/src/routes/Settings/HelpSection.tsx index 27c7dd34..dabbe8d2 100644 --- a/app/renderer/src/routes/Settings/HelpSection.tsx +++ b/app/renderer/src/routes/Settings/HelpSection.tsx @@ -1,10 +1,10 @@ import React, { useContext, useEffect } from "react"; import SettingSection from "./SettingSection"; -import { ElectronContext } from "contexts"; +import { ConnnectorContext } from "contexts"; import { Help } from "components"; const HelpSection: React.FC = () => { - const { openExternalCallback } = useContext(ElectronContext); + const { openExternalCallback } = useContext(ConnnectorContext); useEffect(() => { if (openExternalCallback) { diff --git a/app/renderer/src/routes/Tasks/TaskDetails/index.tsx b/app/renderer/src/routes/Tasks/TaskDetails/index.tsx index 40ac7a82..c38035a3 100644 --- a/app/renderer/src/routes/Tasks/TaskDetails/index.tsx +++ b/app/renderer/src/routes/Tasks/TaskDetails/index.tsx @@ -14,7 +14,7 @@ import { setTaskCardDone, setTaskCardNotDone, } from "store"; -import { ElectronContext } from "contexts"; +import { ConnnectorContext } from "contexts"; import autoSize from "autosize"; import { @@ -51,7 +51,7 @@ const TaskDetails = React.forwardRef( (state: AppStateTypes) => state.tasks.present ); - const { openExternalCallback } = useContext(ElectronContext); + const { openExternalCallback } = useContext(ConnnectorContext); const card = tasks .find((list) => list._id === listId) diff --git a/app/tauri/src/main.rs b/app/tauri/src/main.rs index 78d3e286..081bf743 100644 --- a/app/tauri/src/main.rs +++ b/app/tauri/src/main.rs @@ -18,7 +18,6 @@ fn main() { { let window = app.get_window("main").unwrap(); window.open_devtools(); - window.close_devtools(); } Ok(()) }) From 67cb272172337952f3c0f9e98554af45fab298c0 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Fri, 30 Dec 2022 03:08:19 +0000 Subject: [PATCH 11/37] feat(tauri): add base connector with placeholders for logging --- .../src/contexts/ConnnectorContext.tsx | 4 + .../contexts/connectors/ElectronConnector.tsx | 88 ++++++-------- .../contexts/connectors/TauriConnector.tsx | 109 ++++++++++++++++++ 3 files changed, 148 insertions(+), 53 deletions(-) create mode 100644 app/renderer/src/contexts/connectors/TauriConnector.tsx diff --git a/app/renderer/src/contexts/ConnnectorContext.tsx b/app/renderer/src/contexts/ConnnectorContext.tsx index faccac59..03ed45fd 100644 --- a/app/renderer/src/contexts/ConnnectorContext.tsx +++ b/app/renderer/src/contexts/ConnnectorContext.tsx @@ -1,6 +1,7 @@ import React from "react"; import isElectron from "is-electron"; import { ElectronConnectorProvider } from "./connectors/ElectronConnector"; +import { TauriConnectorProvider } from "./connectors/TauriConnector"; export type ConnectorProps = { onMinimizeCallback?: () => void; @@ -16,6 +17,9 @@ export const ConnectorProvider: React.FC = ({ children }) => { let Connector: React.FC = () => <>{children}; if (isElectron()) { Connector = ElectronConnectorProvider; + } else if (window.__TAURI__) { + Connector = TauriConnectorProvider; + console.log("Is tauri!!!"); } return ; diff --git a/app/renderer/src/contexts/connectors/ElectronConnector.tsx b/app/renderer/src/contexts/connectors/ElectronConnector.tsx index 4607df0b..dc94549e 100644 --- a/app/renderer/src/contexts/connectors/ElectronConnector.tsx +++ b/app/renderer/src/contexts/connectors/ElectronConnector.tsx @@ -38,94 +38,76 @@ const ElectronProvider: React.FC = ({ children }) => { const dashOffset = (duration - count) * (24 / duration); const onMinimizeCallback = useCallback(() => { - if (isElectron()) { - electron.send(SET_MINIMIZE, { - minimizeToTray: settings.minimizeToTray, - }); - } + electron.send(SET_MINIMIZE, { + minimizeToTray: settings.minimizeToTray, + }); }, [electron, settings.minimizeToTray]); const onExitCallback = useCallback(() => { - if (isElectron()) { - electron.send(SET_CLOSE, { - closeToTray: settings.closeToTray, - }); - } + electron.send(SET_CLOSE, { + closeToTray: settings.closeToTray, + }); }, [electron, settings.closeToTray]); const openExternalCallback = useCallback(() => { - if (isElectron()) { - const links = document.querySelectorAll("a"); - - Array.prototype.forEach.call(links, (link: HTMLAnchorElement) => { - const url = link.getAttribute("href"); - if (url?.indexOf("http") === 0) { - link.addEventListener("click", (e) => { - e.preventDefault(); - electron.openExternal(url); - }); - } - }); - } + const links = document.querySelectorAll("a"); + + Array.prototype.forEach.call(links, (link: HTMLAnchorElement) => { + const url = link.getAttribute("href"); + if (url?.indexOf("http") === 0) { + link.addEventListener("click", (e) => { + e.preventDefault(); + electron.openExternal(url); + }); + } + }); }, [electron]); useEffect(() => { - if (isElectron() && !settings.enableFullscreenBreak) { + if (!settings.enableFullscreenBreak) { electron.send(SET_SHOW); } }, [electron, timer.timerType, settings.enableFullscreenBreak]); useEffect(() => { - if (isElectron()) { - electron.send(SET_ALWAYS_ON_TOP, { - alwaysOnTop: settings.alwaysOnTop, - }); - } + electron.send(SET_ALWAYS_ON_TOP, { + alwaysOnTop: settings.alwaysOnTop, + }); }, [electron, settings.alwaysOnTop]); useEffect(() => { - if (isElectron()) { - electron.send(SET_FULLSCREEN_BREAK, { - shouldFullscreen, - alwaysOnTop: settings.alwaysOnTop, - }); - } + electron.send(SET_FULLSCREEN_BREAK, { + shouldFullscreen, + alwaysOnTop: settings.alwaysOnTop, + }); }, [electron, settings.alwaysOnTop, shouldFullscreen]); useEffect(() => { - if (isElectron()) { - electron.send(SET_COMPACT_MODE, { - compactMode: settings.compactMode, - }); - } + electron.send(SET_COMPACT_MODE, { + compactMode: settings.compactMode, + }); }, [electron, settings.compactMode]); useEffect(() => { - if (isElectron()) { - electron.send(SET_UI_THEME, { - isDarkMode: settings.enableDarkTheme, - }); - } + electron.send(SET_UI_THEME, { + isDarkMode: settings.enableDarkTheme, + }); }, [electron, settings.enableDarkTheme]); useEffect(() => { - if (isElectron()) { - electron.send(SET_NATIVE_TITLEBAR, { - useNativeTitlebar: settings.useNativeTitlebar, - }); - } + electron.send(SET_NATIVE_TITLEBAR, { + useNativeTitlebar: settings.useNativeTitlebar, + }); }, [electron, settings.useNativeTitlebar]); useEffect(() => { - if (isElectron()) { electron.send(SET_OPEN_AT_LOGIN, { openAtLogin: settings.openAtLogin, }); - } }, [electron, settings.openAtLogin]); useEffect(() => { - if (isElectron() && timer.playing) { + if (timer.playing) { const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d"); diff --git a/app/renderer/src/contexts/connectors/TauriConnector.tsx b/app/renderer/src/contexts/connectors/TauriConnector.tsx new file mode 100644 index 00000000..1e40cc69 --- /dev/null +++ b/app/renderer/src/contexts/connectors/TauriConnector.tsx @@ -0,0 +1,109 @@ +import React, { useCallback, useContext, useEffect } from "react"; +import { ConnnectorContext } from "../ConnnectorContext"; +import { useSelector } from "react-redux"; +import { AppStateTypes, SettingTypes } from "../../store"; +import { CounterContext } from "../CounterContext"; +import { + SET_ALWAYS_ON_TOP, + SET_CLOSE, + SET_COMPACT_MODE, + SET_FULLSCREEN_BREAK, + SET_MINIMIZE, + SET_NATIVE_TITLEBAR, + SET_SHOW, + SET_UI_THEME, + TRAY_ICON_UPDATE, +} from "@pomatez/shareables"; +import { encodeSvg } from "../../utils"; +import { TraySVG } from "../../components"; + +export const TauriConnectorProvider: React.FC = ({ children }) => { + const { invoke } = window.__TAURI__; + + // TODO do logic to switch out the connectors based on the platform + + const timer = useSelector((state: AppStateTypes) => state.timer); + + const settings: SettingTypes = useSelector( + (state: AppStateTypes) => state.settings + ); + + const { count, duration, timerType, shouldFullscreen } = + useContext(CounterContext); + const dashOffset = (duration - count) * (24 / duration); + + const onMinimizeCallback = useCallback(() => { + console.log("Minimize callback"); + }, [invoke, settings.minimizeToTray]); + + const onExitCallback = useCallback(() => { + console.log("onExitCallback callback"); + }, [invoke, settings.closeToTray]); + + const openExternalCallback = useCallback(() => {}, [invoke]); + + useEffect(() => { + console.log("Fullscreen break", settings.enableFullscreenBreak); + }, [timer.timerType, settings.enableFullscreenBreak]); + + useEffect(() => { + console.log("alwaysOnTop", settings.alwaysOnTop); + }, [settings.alwaysOnTop]); + + useEffect(() => { + console.log( + "Fullscreen break", + settings.alwaysOnTop, + shouldFullscreen + ); + }, [settings.alwaysOnTop, shouldFullscreen]); + + useEffect(() => { + console.log("Compact mode", settings.compactMode); + }, [settings.compactMode]); + + useEffect(() => { + console.log("Dark theme", settings.enableDarkTheme); + }, [settings.enableDarkTheme]); + + useEffect(() => { + console.log("Native titlebar", settings.useNativeTitlebar); + }, [settings.useNativeTitlebar]); + + useEffect(() => { + console.log("Tray icon update", timerType, count, duration); + // if (isElectron() && timer.playing) { + // const canvas = document.createElement("canvas"); + // const ctx = canvas.getContext("2d"); + // + // canvas.width = 16; + // canvas.height = 16; + // + // let svgXML = encodeSvg( + // + // ); + // + // const img = new Image(); + // img.src = svgXML; + // + // img.onload = function () { + // ctx?.drawImage(img, 0, 0); + // const dataUrl = canvas.toDataURL("image/png"); + // + // electron.send(TRAY_ICON_UPDATE, dataUrl); + // }; + // } + }, [timer.playing, timerType, dashOffset]); + + return ( + + {children} + + ); +}; From 6e62298a835ca9983b29ecd88ea716e12284ba1c Mon Sep 17 00:00:00 2001 From: Sekwah Date: Fri, 30 Dec 2022 13:16:07 +0000 Subject: [PATCH 12/37] chore: ran tauri icon command to generate logos --- app/tauri/icons/128x128.png | Bin 3512 -> 7058 bytes app/tauri/icons/128x128@2x.png | Bin 7012 -> 14964 bytes app/tauri/icons/32x32.png | Bin 974 -> 1355 bytes app/tauri/icons/Square107x107Logo.png | Bin 2863 -> 5679 bytes app/tauri/icons/Square142x142Logo.png | Bin 3858 -> 7762 bytes app/tauri/icons/Square150x150Logo.png | Bin 3966 -> 8336 bytes app/tauri/icons/Square284x284Logo.png | Bin 7737 -> 16346 bytes app/tauri/icons/Square30x30Logo.png | Bin 903 -> 1235 bytes app/tauri/icons/Square310x310Logo.png | Bin 8591 -> 18121 bytes app/tauri/icons/Square44x44Logo.png | Bin 1299 -> 2000 bytes app/tauri/icons/Square71x71Logo.png | Bin 2011 -> 3547 bytes app/tauri/icons/Square89x89Logo.png | Bin 2468 -> 4560 bytes app/tauri/icons/StoreLogo.png | Bin 1523 -> 2448 bytes app/tauri/icons/icon.icns | Bin 98451 -> 181023 bytes app/tauri/icons/icon.ico | Bin 86642 -> 24898 bytes app/tauri/icons/icon.png | Bin 14183 -> 15939 bytes 16 files changed, 0 insertions(+), 0 deletions(-) diff --git a/app/tauri/icons/128x128.png b/app/tauri/icons/128x128.png index 6be5e50e9b9ae84d9e2ee433f32ef446495eaf3b..9d375b698d64cab9a07dd5361f5cc4d4b82d7d32 100644 GIT binary patch literal 7058 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 literal 3512 zcmZu!WmMA*AN{X@5ssAZ4hg}RDK$z$WD|)8q(Kox0Y~SUfFLF9LkQ9xg5+pHkQyZj zDkY+HjTi%7-|z1|=iYmM_nvdV|6(x4dJME&v;Y7w80hPm{B_*_NJI5kd(|C={uqeDoRfwZhH52|yc%gW$KbRklqd;%n)9tb&?n%O# z$I0;L220R)^IP6y+es|?jxHrGen$?c~Bsw*Vxb3o8plQHeWI3rbjnBXp5pX9HqTWuO>G zRQ{}>rVd7UG#(iE9qW9^MqU@3<)pZ?zUHW{NsmJ3Q4JG-!^a+FH@N-?rrufSTz2kt zsgbV-mlAh#3rrU*1c$Q$Z`6#5MxevV3T81n(EysY$fPI=d~2yQytIX6UQcZ`_MJMH3pUWgl6li~-BSONf3r zlK536r=fc$;FlAxA5ip~O=kQ!Qh+@yRTggr$ElyB$t>1K#>Hh3%|m=#j@fIWxz~Oa zgy8sM9AKNAkAx&dl@8aS_MC^~#q@_$-@o%paDKBaJg)rmjzgGPbH+z?@%*~H z4Ii75`f~aOqqMxb_Jba7)!g1S=~t@5e>RJqC}WVq>IR^>tY_)GT-x_Hi8@jjRrZt% zs90pIfuTBs5ws%(&Bg^gO#XP^6!+?5EEHq;WE@r54GqKkGM0^mI(aNojm| zVG0S*Btj0xH4a^Wh8c?C&+Ox@d{$wqZ^64`j}ljEXJ0;$6#<9l77O|Of)T8#)>|}? z!eHacCT*gnqRm_0=_*z3T%RU}4R(J^q}+K>W49idR5qsz5BFnH>DY zoff)N<@8y)T8m(My#E^L{o;-3SAO(=sw7J4=+500{sYI8=`J5Rfc?52z#IMHj;)WGr>E}we@ zIeKIKWvt9mLppaRtRNDP^*{VOO>LEQS6poJ4e5#Tt_kpo9^o<^zeimWaxvv^KHW!f zk-MMgwmgEVmij6UvM$Jz%~(=A+NO*@yOJ(%+v>uPzvg-~P(3wM4dJ;e7gXUCee(v_ zud^!+*E>d$h9u_3)OdCSgJY$ApFE= z?JmWBujk!hsYX-|Fd>r2iajAbIXjSILOtZeLDV8nTz!Qy6drGY7;oJbA_yUNw_?xV zUO8laCHa*D)_8xw2-6D8o`mn`S15xu3$J4z-Y*Acx9)J}CZl+3yOqv-uRhLw4X!7D zqKS~W3lRFn>n)Xig#`S_m5Fj4_2rk7UzOjPUO&%PpLJwT&HPE&OlA^k^ zjS6jJ7u5mnLW<@KNz~w7(5PBhPpq=q^-u(DSAi|8yy^1X%&$Gf)k{qL`7L|;>XhhB zC^Y3l?}c;n)D$d14fpog45M`S*5bX+%X9o>zp;&7hW!kYCGP!%Oxcw};!lTYP4~W~ zDG002IqTB#@iUuit2pR+plj0Vc_n{1Z2l(6A>o9HFS_w*)0A4usa-i^q*prKijrJo ze_PaodFvh;oa>V@K#b+bQd}pZvoN8_)u!s^RJj}6o_Rg*{&8(qM4P(xDX&KFt%+c8tp? zm=B9yat!6um~{(HjsUkGq5ElYEYr$qW((2}RS39kyE`ToyKaD~@^<+Ky_!4ZE)P)p4d zc%dI#r_Q5bzEfEFOH$N*XaZvv*ouFd_%mQ`b>ju2Glir&B4VvuIFR%Fz(Cxl`j$BM zESp)*0ajFR^PVKAYo?bn!?oy(ZvuUpJ@64 zLdjd~9ci_tAugLI7=ev99k9&?gd8>`-=A#R790}GnYntJc$w$7LP~@A0KwX;D0;nj>cU;=Q!nVd z@Ja)8=95#^J~i5=zrr(~^L6D7YRe7DXcjqNamn+yznIq8oNGM{?HGtJDq7$a5dzww zN+@353p$wrTREs8zCZ-3BJxV-_SZT^rqt+YK(;;1Lj+p~WnT^Y+(i`6BMzvLe80FQ}7CC6@o|^-8js7ZZpwQv0UheBtsR z-mPLgMA{n~#;OBm7__VDjagWHu;>~@q$-xjXFlY&tE?atr^Bqj>*usf^{jv?n#3(ef zO=KtsOwh?{b&U2mu@F~PfpUth&2Mj6wkCedJ}`4%DM%)Vd?^-%csXSD-R49TY5}4G z=fw-hb9*TvxNFe*Xxg-Z*yDEtdWDcQj z{Lb9MmQK4Ft@O|b+YA`O`&Pe$a#GSp;Dw9Fe|%u=J5-mfb@{|if<_Acg8k(e{6C4@ zofnb45l7U^(=3rVrR$K*#FUddX9PGlZ&W#Jz#Mj7!d%Q?D!monnG zpGGcD6A8>TFlCIFBLr#9^GpjaAowCtrG%}|Aiev}^3Q0Fjs-otJx48Ojk(Lo4|jKYWN%L&b8)10oqmJ- zDdfZ9H4j8$-KzHX8B~9*gl81Lv<~`P=m0$Q`wnQah2Hy`6SQyBr|a%Vc*%#l1+H7p zK`ft1XTnFN@K%JON6q(oKLoToebQ!73}NPoOOPD8HDhulKZK8IT62XeGf}&=?=1E^O#oFET7Jh|AE2Zi)-}sSL>9 zrqJAD;{wTm-OFsgQ!GIX=ageM-Ys?lqoHJFU$=#E2@amhup;WPq(c6j&3t$r-FIjk ztL*!wn}n9o1%}fy&d^WQO`{@+;)3qYj9R`5H{fP!4J||Z{Qi~&iikTbs8+kM2I&bR zyf#uQVE^dXPF1Y5kDq+*)6~+pBvErhAH&MCoKaPoyTI@V_OK!y!zT~)p?Mkq(o&aB znadm7y3BXEYE)o;0w+-1<5Z9ov?1R>mMKr2EXIUk2$VLDZIh@ znDNHcu3>xDlnmK{6>I22t!KG}K{wv`F;gMnk(dsu-vTZ>GqQ!gZ;6%IVdt?S5O4fY z+=V6_-CV4w-~0EoYL}Ak{rxmD*n#HLm(d96<^~zrd*m?& z{eU|}-9A_P0mlszy18QVsHYY4NaqEuW2BO$B0$V20%aFf6bSVt(KaFw%oDy$8;R zu5RKuw1Z|tqO2W4{?BU#$?p{sTSG2KMkT>)MUj%O1<6T0=BW+L9lHRTHY6IWjM+-2}HP)%tvd8}yAzYEn diff --git a/app/tauri/icons/128x128@2x.png b/app/tauri/icons/128x128@2x.png index e81becee571e96f76aa5667f9324c05e5e7a4479..f0608d0f67af02d8f82c9a118f429df3922274a2 100644 GIT binary patch literal 14964 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 Sh@|HWu^G0- zO1Lo61P*t1q2}>=B9hm&UbzAu=f}T^j{u`eEO>L0N0JItYX%0wnC$bKN*r z-vB4$N#1`Viho_NHX>oC%)vf?=$m(7jQj?DpdgD3w97XlzWZHd)^155X!vpFWE33- zn+2-2*W#^j`{B94GmQ$%16e%)spc9$(+Y}imaC~R2fftV+ z#l4$0Au-`ZK6_ot*fpp?gsitou9|+0&Y5gc=JJ6moq;(BTDdl4Uln7mGV+Ts{PPmA zyO(bcXH_MIWi>rm3ui@M3TPo_fE5s#ByXitPI8_e|6=IKX(jH@jV;@-@x}=oH!M; zXkg}LxfVxO#h-nj*gxrpfwo;)O+2V{({*eF!L#jDkV0;0E@%jpn-x~|&e>(dc6}*E zhY>k_kSgO}|KBHt=KzIZ>~EKVS_>kYq<=7Iw+DJpa9Pe3JWmBYrc;@XbiM+4{SW%u z&u*UPfr912%&RTAUpJM(Gsl_vs%XX1T~D5~S8w2o zqOm2e^z~>AYu#4IrW;QKxg~UN3ep7=D)lPd62J}D2;H7*ERF(AOA=kt7M@rF5y`EV zE~m)}x38PErKgCP=Uw)#Wop^n)PE2bV|KT-7#O`egpxI-sCu~83E!2<+*fPr)>)1Z zaU&wE#PTCtS$@eN*(x_d3$ zXjbR2<+qGxQj}HH$9xr9M7wE)H0&}P!o;k v4K$wXnV}Hl`3MoN3*GHe{Qlj=nVA0pLJf5c61$ki00000NkvXXu0mjf!xV?T delta 953 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 VoWz*3aOD61002ovPDHLkV1fy27asrs delta 2857 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 Hu0mjfIbL;I diff --git a/app/tauri/icons/Square142x142Logo.png b/app/tauri/icons/Square142x142Logo.png index b81f820394d1504ff4b4091473a8263542c9edc4..7ff294b5c7addab53ebc894168183f8a1d62bcf9 100644 GIT binary patch literal 7762 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

*`%6YgGrfgkv>wqm9_U7 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 Y2M+?~AWRDyzW@LL07*qoM6N<$f_;b!$^ZZW literal 3858 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 Y2S8W#vM)6=T>t<807*qoM6N<$f*y@n<^TWy diff --git a/app/tauri/icons/Square284x284Logo.png b/app/tauri/icons/Square284x284Logo.png index c021d2ba76619c08969ab688db3b27f29257aa6f..9b475ec1aad529057fb3cb2cb227de806bb4c0ce 100644 GIT binary patch literal 16346 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 diff --git a/app/tauri/icons/Square30x30Logo.png b/app/tauri/icons/Square30x30Logo.png index 621970023096ed9f494ba18ace15421a45cd65fa..0c1938d2d2a42bbe43a5f464a216ed3c6b62c8d6 100644 GIT binary patch delta 1216 zcmV;x1V8(S2h$0VBYy;%NklN+UhUeYw-Iu0O!JAa?sg>8@R#QKdjFoStm z&2o})4EOzpj!*XE@Vg%XY6?qCftGBpz>^;zLS=0o40_4+Wi?Csk|r7G?m|mbBZhhh z8B=J54VxvTK(Tk5x)R^$`vgEl~)M6dWY*&-s&P~n25#V*t_i} z44oJh5Ok!MkAHQcs&)%TFWI@RuUNrfJ|}OPdATZJD3_^4^5zFHcJHe;@(V1S>i!9P z>gx<0(;d5>ft_}8zkDGO>O4p%T?<$_Kp;dCURe0K)(J177n-sW7-)wazi6a3-tAy* z>Gc@>_l$u@-rk4evNE&pD008qBUE0I=PjRBsrkYzxPKHhCjsHu-kvmk{kiXWdn%j{ z^YqV1mDj^9E*A*q7fOn64YO(W{~)!&Ow7pvAP{iBgL+H>fvdFf^ z;K;4tRAa&l=W*7F`1uSm_2MN`NhG%KL~_fca0^Ox{6u0@QyD(|4&>-RP+WoY9PpUZ z82pGZO@E?9%u-m)-?WYR{cpnF-sqK?e?}FFB3aZ(*?SwJA2q=kISIwFRqlN7slO@{ zHqpo_|8RbTjN5?tw^NCPldlU{0n~f|973 zz>BqZxV;7P;@@zi8=!KoBPl@W==+eD&HyImSXph>O)Vp^E(cB+BS2OaWNcX1rXVJm z4V_@A3Ft1z>cQO1*_|EL^Oxe9PMnGvOqbl7??kA4xH+(v)^*O5)E{>BKND^P~4-l_^@OTth|~wPWO6L`~6wQMqu@} z!Rl#+GA)1qiUN}{Gl-nFy$GE6){7}6k$<3%g?=20PU~f{mX};QtLYUp;FTA7=TVES zGC6x-H5pw0Glxl;!Gc;IV0OU5M;8<~%P)Cu4r--S$xL7&6s9`*oW{;wi>Nfu_Q3e- zSA7Qa?C-P}Ub0*k@nW(xl?i(yj@+Dx9(S}cF`G(?r5L+_Xv@Ri9=A!(-er01wSQih zF?fO{Oo@@c9^SXBZg+JlESSyK434aoQBAf})r7%*4gb+2(edei?y*i)gUi#Pj1Bo+ z$?Hs7IIau*Us60fY?Ey}l?|?*KnPRlR`^oaF;vqae=Ww_ej4mwtE*phpbyYsCgbN; zmANiWtW58mfxdyxJp-;LGrZuiAKIfOkZIp!I|1Sp1m5EwhwXS ey%wK(jrBi)#t-8I;VV7>00002+CUKPMqaqGiH;zb!R4$B-WXS^YPmyx`A%2~!(9 zlH^ygDKV3p{Mk(=Xu`Wk{D@#IGk_gPQV&dinMYoVnA6*V3f_c6n`cZswXQR5@9G>J znhN<@*4bB}41X%vU2>E|D#2?#wmFX{G-a=92L)iYZ4U2%FU9H$9f`ktCuA&iizSf&?&-uZ+;0$pk>ntSJ}O^`}5`KJhipib(HjhGn0 zN^@i@#!6RG1|rZaEb*cJccER=BB?KFZhV$c^nL*l8x*UYZv4WK|j?~Jt6~~F%{pk~z z5A*>^M`?r5m9@RJ_x|uEtX(6Vk@Y()MVto*93wr)%3m%|#OZ~srm>zF(JvDuTq*@; zd&^>_BJm5hOU`3FjG70L#Vzv9I?`<7$T@Ry00000NkvXX Hu0mjfG5V4e diff --git a/app/tauri/icons/Square310x310Logo.png b/app/tauri/icons/Square310x310Logo.png index f9bc04839491e66c07b16ab03743c0c53b4109cc..bc59a59f56e55d2e83c2b4ea06cccc8fe70d5d83 100644 GIT binary patch literal 18121 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 literal 8591 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 Riu&JN+8TQ5)JiG#t8nh=ANrX_7r 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 Un#_3+IRF3v07*qoM6N<$f_@|1;{X5v delta 1998 zcmV;<2Qm2D8`}?%BYyx1a7bBm000XU000XU0RWnu7ytkO0drDELIAGL9O(c600d`2 zO+f$vv5yPNQT)H*aaHEvPo@cmVc5e+e_{&xs)A1KOmM( zQA_I2nc11y4Zxf^bLPyMbKMbeO^`dQOZc)19^3)pt>O{-dui&FW00~7L->flx5aw* z7z*af#X(VOupl-;qA=&hNJl^$#cH8gzZE6am5C#F?>6w~CfEp~C%~`q28P2HiWGoD zW-gAh6i>XyUw?gYOMs&{#aj0bIAW&aptUqd)>0foY(q5Ma^Y$-6G!e=Tln%6Wo6l>2<4JECa7FT%MyN5bKJW?A>!au)W;b$3(1B{VaALEdIHK_wP!R&^&1=K;@}Nz zz}RXi*neVNLFcXEjsGBO-LlIJ_9C(9GAXuLTaWXYBX?I{f^r>rHH*sm()GzY;)y_K zC4pG$l!1wRaq#9`i86Kr+wt%Lp<83lq@x7Bc+~kD7&vz;-52pYhf9^cUJaN~#g4OG z2QA=;{?W`wITJf(pw%Y67s?G_QcOUGi6G6&et&PLGzgD`kaswri%ShjuDLoroJuA= z(cuWB9uW0=v==xxZYm{k42e=Y2^(+{J;xiId=cph;|w**sMBgN9~)zo@U4S!FzgzF zs9ic9*Jmu8T2AFduTeUQ4&$_5o_oUmd&|3NpN%bo(aw-iQ#~OQaXVFq4@{g`jjp#bFDBE`=B2RK#uI3M53EaaNN1updHZaY7NkHVPx48GiF` zx%Xhj*p`U%BWV^9mt(}^&aUyiI4a#dcnV=eD zc)ZH#7^?n`On7+0ILl42wj7KziNcV@L^r;y2i0n>+6o0|;Y%xPZ3QV-jrot+C4a~F z0Tz(eV64%%J~8ly5LSbSKL>Edq;w&zs&Xs0O0ycQotoD}7%D-MawgdX3vAu0raMUP z)Mv~{MWbR(S_xv|QUu#_sO6A2bqlWvmiXwRRCa(Prkd;tCrIm!27Jr$U`;N=2=!;hRog_6mGdn=4yvld!|r>!jSz!B`2gR@DX zAHduN>_1#?gSqF6RwG(q=6_;L8dvOPm%?mNX$QN?RRrwl2a%25H7Gn?W7W^8?DdZ>F4hrf1p(Gq>^_N0)PFReyM+w1s!0ohit@TniKzt!igQ67TZ#g3_=SC$=7$n2(GFTK@fW z?)7ZiwV`H6%_N{8SC*mEAUsXxZEuzR{##QU0^Oh$$%QT3I5c)6NLylo;!}vs;!tp2 z9GrEM;=nW{63#4dMrB0ucqeBYm=MxxXAMkXYn7Ez=OEXHNq=f(L}FowBanh(6|RU< zUUcpz#BdegW4j@h8fY<@{y&2axp$LV3zQcjw_PWDN#yPXQm^Oi=3Hts*R* ze9xbK#-RJ)XGh)%5BocY9jHZ9m^jmrP^Gh5chojnY_^MY-9wtehJla^f%Jyms}^L= goH=vm%=xL;wH) diff --git a/app/tauri/icons/Square89x89Logo.png b/app/tauri/icons/Square89x89Logo.png index f3f705af2f2e044682ac042b37dba6682a0c8a6b..f4f67532788952d3c3b2fb82311648c3843a8b6c 100644 GIT binary patch literal 4560 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 Z9~7@qMtVKz_LBer002ovPDHLkV1mg=tatzb diff --git a/app/tauri/icons/StoreLogo.png b/app/tauri/icons/StoreLogo.png index 455638826192851ad1ae604d66f2ca352979442c..f48ca7c3cbc8d27065ece4f19a43890eaa896336 100644 GIT binary patch delta 2438 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 EfN?3#xh7$lM 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�PV4FlgCi7YYPqoEuMe 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 literal 98451 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∓t$dRJGIadE?vc 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 Kx8Vjl{{H|h@<;Lj diff --git a/app/tauri/icons/icon.ico b/app/tauri/icons/icon.ico index b3636e4b22ba65db9061cd60a77b02c92022dfd6..46d2d4cd8631eb8f94b5273949a76246194fac1e 100644 GIT binary patch literal 24898 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 literal 86642 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 AKmY&$ diff --git a/app/tauri/icons/icon.png b/app/tauri/icons/icon.png index e1cd2619e0b5ec089cbba5ec7b03ddf2b1dfceb6..d574c8c515c59b9cf2d0609775246a0da780879e 100644 GIT binary patch literal 15939 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 JdS?3J{{c;q7oz|G literal 14183 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

5l#v3A#xI3*z~1~fvo9Q(N^(==!|_FZ z*duZ=+M1~)8E|otX8KNZlr?qels#x_1Xq@9IIw~@9uAREJVH)Xw^}UclF6327}E42 zT)E&?U%TK?(+K7%R!`H5oX0i)4Qn5??Iw3p5J~6_u+aWehY{DSn}3V2p$bgjnAu?o)v@iC254fXeMv50$9YrpU`N?u@QIWs)T?SP|fa}(|9 zqAX+!7`cx=4)cCBg5h~pu(?@9`)aCr#oyz$ld=#RFxYCNZCZls@4v2~*e-t6PEVvV z&bbK3b3wt(Coc!ufAbXXC<**#HQ%J9k`New6iG<5RjtO4XVO?dCvwxD{kJ#tfQr(X zg^NTwF-FwAeS_{V4bfel8l`~NbfrTR2s!G>WduFWxH(t~aK4q=6rEE^$+Uox>gJO2 z{L<;6Q6nHa5#ZEM>H58not!)z(6*_=^~8}jWf*IG$AUKVWOZ4?)GfF z+BM#*wKKmLFD7E~W3U!$IVm$k_k1f&Kz6WV8@55P?r~bcg-Za-!rvW?ns&)KOGT2~ zlkAyqhQj=P$Eg3w#K~}zH@J5bo-BfHjInKSz$@?+Z)NPD4pHj^_Qxmi`UqoTy=`sV zLVxrXGuBr=QRm|}wg75yetQQK4fY3#P_~J}zEfPnb2C4Wo!E(d*(cA;b?7$g2in<( zPn)ghX}nzJPmb6(3Dpeg_GW~Hc}Lt=lgsSZz z!5QXyz7KaR;D`3Ee}d`af{H>WWZ|Io1QI3~4Ll_`g1(cRnhLK73Ro)7zPCd={1W2x zRp%Xlvv4>!<2@}$hz|!V{T}_eHx2xkLl^hQoZTCnsjCl|W_@5Fx2(+j0ogy&Y+;L- z<)G$*CiN7hOm^s!{U>1F7U=iNk{+u~dAC!eDz%=|glFW0jEZU1&o(G_c#wTxUjnG} z#cg3>jEpUi#Mlq@t?Msg_#geK^Lx@DyHWf7=AS5vVyM7YOjvUVCfcpVR<(+5!H?9- zySI6s>o3m&*zr||=wcPGyBkQV`EWJl@bH8qobjOp+sXL*)=&yX)8aAbf~tGv?a2SN zu^Ddo-z?DWk9h9Yz#5p^NU#x~wYSd?H@w@!2Gb4G)6-utEMV~~M85Br5ff(v5O1|T z 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 Date: Fri, 30 Dec 2022 13:34:59 +0000 Subject: [PATCH 13/37] chore: flag tauri to build with global variable --- app/renderer/package.json | 2 +- app/tauri/tauri.conf.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/renderer/package.json b/app/renderer/package.json index c294017d..a2cd4451 100644 --- a/app/renderer/package.json +++ b/app/renderer/package.json @@ -32,7 +32,7 @@ } }, "dependencies": { - "@pomatez/shareables": "^1.0.0", + "@pomatez/shareables": "*", "@types/autosize": "^3.0.7", "@types/jest": "^26.0.24", "@types/node": "^14.18.63", diff --git a/app/tauri/tauri.conf.json b/app/tauri/tauri.conf.json index ad4bee11..e1c9baf7 100644 --- a/app/tauri/tauri.conf.json +++ b/app/tauri/tauri.conf.json @@ -2,6 +2,7 @@ "build": { "beforeDevCommand": "yarn dev:tauri", "beforeBuildCommand": "yarn build", + "withGlobalTauri": true, "devPath": "http://localhost:3000", "distDir": "../renderer/build" }, From 90d662ab4a0cee61d6e3020ef4a465a18b49f272 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Fri, 30 Dec 2022 14:21:08 +0000 Subject: [PATCH 14/37] fix(tauri): catch audio playing errors gracefully https://github.com/tauri-apps/tauri/issues/3478 As the sounds are triggered by a timer rather than a user interaction the sounds don't work at the moment. One fix for now if its taking a while to merge would be to trigger the audio in rust. This could be achieved by passing the sound location or reading the data and sending it to rust to play. --- app/renderer/src/hooks/useNotification.ts | 8 ++++++-- app/renderer/src/routes/Timer/Control/Control.tsx | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/renderer/src/hooks/useNotification.ts b/app/renderer/src/hooks/useNotification.ts index 4cf8702d..db3e22f2 100644 --- a/app/renderer/src/hooks/useNotification.ts +++ b/app/renderer/src/hooks/useNotification.ts @@ -23,11 +23,15 @@ export const useNotification = ( // in all Operating System if (!constantOptions?.mute) { - new Audio(bell).play(); + new Audio(bell).play().catch((e) => { + console.warn("There was a problem playing sound", e); + }); if (audioSrc) { setTimeout(() => { - new Audio(audioSrc).play(); + new Audio(audioSrc).play().catch((e) => { + console.warn("There was a problem playing sound", e); + }); }, 1500); } } diff --git a/app/renderer/src/routes/Timer/Control/Control.tsx b/app/renderer/src/routes/Timer/Control/Control.tsx index 7a7cacb6..f95a6cfd 100644 --- a/app/renderer/src/routes/Timer/Control/Control.tsx +++ b/app/renderer/src/routes/Timer/Control/Control.tsx @@ -52,7 +52,9 @@ const Control: React.FC = ({ resetTimerAction }) => { const warnSound = new Audio(WarningBell); setWarn(true); - warnSound.play(); + warnSound.play().catch((e) => { + console.warn("There was a problem playing sound", e); + }); }, []); const onResetCallback = useCallback(() => { From 69bab0008b962a81d7908a4f9118d30b060f02fb Mon Sep 17 00:00:00 2001 From: Sekwah Date: Sat, 31 Dec 2022 00:55:43 +0000 Subject: [PATCH 15/37] feat(tauri): add easy command interface for frontend -> backend --- .../contexts/connectors/TauriConnector.tsx | 4 +++ app/tauri/Cargo.lock | 2 +- app/tauri/Cargo.toml | 9 ++++-- app/tauri/README.MD | 8 +++++ app/tauri/src/commands.rs | 31 +++++++++++++++++++ app/tauri/src/main.rs | 18 +++++------ app/tauri/tauri.conf.json | 4 +-- app/tauri/util/cargo-version-updater.js | 23 ++++++++++++++ package.json | 3 +- 9 files changed, 85 insertions(+), 17 deletions(-) create mode 100644 app/tauri/README.MD create mode 100644 app/tauri/src/commands.rs create mode 100644 app/tauri/util/cargo-version-updater.js diff --git a/app/renderer/src/contexts/connectors/TauriConnector.tsx b/app/renderer/src/contexts/connectors/TauriConnector.tsx index 1e40cc69..6cd37ed8 100644 --- a/app/renderer/src/contexts/connectors/TauriConnector.tsx +++ b/app/renderer/src/contexts/connectors/TauriConnector.tsx @@ -33,16 +33,19 @@ export const TauriConnectorProvider: React.FC = ({ children }) => { const dashOffset = (duration - count) * (24 / duration); const onMinimizeCallback = useCallback(() => { + invoke("my_custom_command"); console.log("Minimize callback"); }, [invoke, settings.minimizeToTray]); const onExitCallback = useCallback(() => { + invoke("my_custom_command"); console.log("onExitCallback callback"); }, [invoke, settings.closeToTray]); const openExternalCallback = useCallback(() => {}, [invoke]); useEffect(() => { + invoke("my_custom_command"); console.log("Fullscreen break", settings.enableFullscreenBreak); }, [timer.timerType, settings.enableFullscreenBreak]); @@ -71,6 +74,7 @@ export const TauriConnectorProvider: React.FC = ({ children }) => { }, [settings.useNativeTitlebar]); useEffect(() => { + invoke("my_custom_command"); console.log("Tray icon update", timerType, count, duration); // if (isElectron() && timer.playing) { // const canvas = document.createElement("canvas"); diff --git a/app/tauri/Cargo.lock b/app/tauri/Cargo.lock index 46d054dc..1a467701 100644 --- a/app/tauri/Cargo.lock +++ b/app/tauri/Cargo.lock @@ -1856,7 +1856,7 @@ dependencies = [ [[package]] name = "pomatez" -version = "0.0.0" +version = "1.2.2" dependencies = [ "serde", "serde_json", diff --git a/app/tauri/Cargo.toml b/app/tauri/Cargo.toml index f9d205ac..31c78dda 100644 --- a/app/tauri/Cargo.toml +++ b/app/tauri/Cargo.toml @@ -1,10 +1,13 @@ [package] name = "pomatez" -version = "0.0.0" -description = "A Tauri App" +# In the current version of release please, unless the toml file is in the root of the project it cannot be updated. +# https://github.com/googleapis/release-please/issues/1724 +# util/cargo-version-updater.js will run to keep this value up to date before rust builds. +version = "1.2.2" +description = "Attractive pomodoro timer for Windows, Mac, and Linux." authors = ["Roldan Montilla Jr"] license = "MIT" -repository = "" +repository = "https://github.com/roldanjr/pomatez" edition = "2021" rust-version = "1.57" diff --git a/app/tauri/README.MD b/app/tauri/README.MD new file mode 100644 index 00000000..550332b3 --- /dev/null +++ b/app/tauri/README.MD @@ -0,0 +1,8 @@ +We are just experimenting with the Tauri implementation at the moment. + +The plan is to try to make it as modular and modifiable as possible. + +If you have any suggestions for best practices feel free to make some comments ore start a discussion. + +Though keep in mind some parts may be coded in specific ways just to experiment with features of rust. +The aim is to do it in a way that it can be replaced with simpler/better solutions. \ No newline at end of file diff --git a/app/tauri/src/commands.rs b/app/tauri/src/commands.rs new file mode 100644 index 00000000..52a66414 --- /dev/null +++ b/app/tauri/src/commands.rs @@ -0,0 +1,31 @@ + +// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command +use tauri::{Builder, Wry}; + +#[tauri::command] +fn greet(name: &str) -> String { + format!("Hello, {}! You've been greeted from Rust!", name) +} + +#[tauri::command] +fn my_custom_command() { + println!("I was invoked from JS!"); +} + +/** + * We could do this by passing the object into a custom function that adds the commands but I wanted + * to practice more with rust. Plus it makes the setup cleaner. + + * Switch to a function that takes and returns tauri::Builder or uses a reference if we need to + * switch it. + */ +pub trait CommandRegister { + fn register_pomatez_commands(self) -> tauri::Builder; +} + +impl CommandRegister for Builder { + fn register_pomatez_commands(self) -> tauri::Builder { + self.invoke_handler(tauri::generate_handler![greet]) + .invoke_handler(tauri::generate_handler![my_custom_command]) + } +} diff --git a/app/tauri/src/main.rs b/app/tauri/src/main.rs index 081bf743..9cb3c5a8 100644 --- a/app/tauri/src/main.rs +++ b/app/tauri/src/main.rs @@ -3,13 +3,11 @@ all(not(debug_assertions), target_os = "windows"), windows_subsystem = "windows" )] -use tauri::Manager; +#[macro_use] +mod commands; -// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command -#[tauri::command] -fn greet(name: &str) -> String { - format!("Hello, {}! You've been greeted from Rust!", name) -} +use tauri::{Manager}; +use commands::CommandRegister; fn main() { tauri::Builder::default() @@ -20,8 +18,8 @@ fn main() { window.open_devtools(); } Ok(()) - }) - .invoke_handler(tauri::generate_handler![greet]) - .run(tauri::generate_context!()) - .expect("error while running tauri application"); + }).register_pomatez_commands().run(tauri::generate_context!()).expect("error while running tauri application"); } +// fn register_commands(app: Builder) -> Builder { +// app.invoke_handler(tauri::generate_handler![greet]) +// } diff --git a/app/tauri/tauri.conf.json b/app/tauri/tauri.conf.json index e1c9baf7..80afd75a 100644 --- a/app/tauri/tauri.conf.json +++ b/app/tauri/tauri.conf.json @@ -1,14 +1,14 @@ { "build": { "beforeDevCommand": "yarn dev:tauri", - "beforeBuildCommand": "yarn build", + "beforeBuildCommand": "yarn run tauri:updateversion && yarn build", "withGlobalTauri": true, "devPath": "http://localhost:3000", "distDir": "../renderer/build" }, "package": { "productName": "pomatez", - "version": "0.0.0" + "version": "1.2.2" }, "tauri": { "allowlist": { diff --git a/app/tauri/util/cargo-version-updater.js b/app/tauri/util/cargo-version-updater.js new file mode 100644 index 00000000..20a44c79 --- /dev/null +++ b/app/tauri/util/cargo-version-updater.js @@ -0,0 +1,23 @@ +let fs = require("fs"); +let path = require("path"); +let tauriConfig = require("../tauri.conf.json"); + +let cargo = fs.readFileSync( + path.join(__dirname, "../Cargo.toml"), + "utf8" +); + +let versionRegex = /\nversion = "([0-9.]+)"/g; + +let newContents = cargo.replace( + versionRegex, + `\nversion = "${tauriConfig.package.version}"` +); + +fs.writeFileSync( + path.join(__dirname, "../Cargo.toml"), + newContents, + "utf8" +); + +console.log("Setting Cargo.toml to version " + process.argv[2]); diff --git a/package.json b/package.json index 36b79948..1fae09e7 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,8 @@ "gen:tts": "lerna run gen:tts --stream", "format": "prettier --write .", "tauri": "tauri", - "tauri:dev": "tauri dev" + "tauri:dev": "tauri dev", + "tauri:updateversion": "node ./app/tauri/util/cargo-version-updater.js" }, "config": { "commitizen": { From a325e0be081e1958a16760146baaa128cda85f13 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Sat, 31 Dec 2022 04:08:20 +0000 Subject: [PATCH 16/37] feat(tauri): added connection hooks for all of the base tauri commands --- .../contexts/connectors/TauriConnector.tsx | 118 +++++++++++------- app/tauri/src/commands.rs | 49 +++++++- 2 files changed, 116 insertions(+), 51 deletions(-) diff --git a/app/renderer/src/contexts/connectors/TauriConnector.tsx b/app/renderer/src/contexts/connectors/TauriConnector.tsx index 6cd37ed8..9ce7619b 100644 --- a/app/renderer/src/contexts/connectors/TauriConnector.tsx +++ b/app/renderer/src/contexts/connectors/TauriConnector.tsx @@ -20,6 +20,18 @@ import { TraySVG } from "../../components"; export const TauriConnectorProvider: React.FC = ({ children }) => { const { invoke } = window.__TAURI__; + /** + * Rust uses lowercase snake_case for function names so we need to convert to lower case for the calls. + * @param event + * @param payload + */ + const send = useCallback( + (event: string, ...payload: any) => { + invoke(event.toLowerCase(), ...payload); + }, + [invoke] + ); + // TODO do logic to switch out the connectors based on the platform const timer = useSelector((state: AppStateTypes) => state.timer); @@ -33,71 +45,83 @@ export const TauriConnectorProvider: React.FC = ({ children }) => { const dashOffset = (duration - count) * (24 / duration); const onMinimizeCallback = useCallback(() => { - invoke("my_custom_command"); + send(SET_MINIMIZE, { + minimizeToTray: settings.minimizeToTray, + }); console.log("Minimize callback"); - }, [invoke, settings.minimizeToTray]); + }, [send, settings.minimizeToTray]); const onExitCallback = useCallback(() => { - invoke("my_custom_command"); - console.log("onExitCallback callback"); - }, [invoke, settings.closeToTray]); + send(SET_CLOSE, { + closeToTray: settings.closeToTray, + }); + }, [send, settings.closeToTray]); - const openExternalCallback = useCallback(() => {}, [invoke]); + /** + * Not needed as tauri already opens these externally. + */ + const openExternalCallback = useCallback(() => {}, []); useEffect(() => { - invoke("my_custom_command"); - console.log("Fullscreen break", settings.enableFullscreenBreak); - }, [timer.timerType, settings.enableFullscreenBreak]); + if (!settings.enableFullscreenBreak) { + send(SET_SHOW); + } + }, [send, timer.timerType, settings.enableFullscreenBreak]); useEffect(() => { - console.log("alwaysOnTop", settings.alwaysOnTop); - }, [settings.alwaysOnTop]); + send(SET_ALWAYS_ON_TOP, { + alwaysOnTop: settings.alwaysOnTop, + }); + }, [send, settings.alwaysOnTop]); useEffect(() => { - console.log( - "Fullscreen break", - settings.alwaysOnTop, - shouldFullscreen - ); - }, [settings.alwaysOnTop, shouldFullscreen]); + send(SET_FULLSCREEN_BREAK, { + shouldFullscreen, + alwaysOnTop: settings.alwaysOnTop, + }); + }, [send, settings.alwaysOnTop, shouldFullscreen]); useEffect(() => { - console.log("Compact mode", settings.compactMode); - }, [settings.compactMode]); + send(SET_COMPACT_MODE, { + compactMode: settings.compactMode, + }); + }, [send, settings.compactMode]); useEffect(() => { - console.log("Dark theme", settings.enableDarkTheme); - }, [settings.enableDarkTheme]); + send(SET_UI_THEME, { + isDarkMode: settings.enableDarkTheme, + }); + }, [send, settings.enableDarkTheme]); useEffect(() => { - console.log("Native titlebar", settings.useNativeTitlebar); - }, [settings.useNativeTitlebar]); + send(SET_NATIVE_TITLEBAR, { + useNativeTitlebar: settings.useNativeTitlebar, + }); + }, [send, settings.useNativeTitlebar]); useEffect(() => { - invoke("my_custom_command"); - console.log("Tray icon update", timerType, count, duration); - // if (isElectron() && timer.playing) { - // const canvas = document.createElement("canvas"); - // const ctx = canvas.getContext("2d"); - // - // canvas.width = 16; - // canvas.height = 16; - // - // let svgXML = encodeSvg( - // - // ); - // - // const img = new Image(); - // img.src = svgXML; - // - // img.onload = function () { - // ctx?.drawImage(img, 0, 0); - // const dataUrl = canvas.toDataURL("image/png"); - // - // electron.send(TRAY_ICON_UPDATE, dataUrl); - // }; - // } - }, [timer.playing, timerType, dashOffset]); + if (timer.playing) { + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d"); + + canvas.width = 16; + canvas.height = 16; + + let svgXML = encodeSvg( + + ); + + const img = new Image(); + img.src = svgXML; + + img.onload = function () { + ctx?.drawImage(img, 0, 0); + const dataUrl = canvas.toDataURL("image/png"); + + send(TRAY_ICON_UPDATE, dataUrl); + }; + } + }, [send, timer.playing, timerType, dashOffset]); return ( String { } #[tauri::command] -fn my_custom_command() { - println!("I was invoked from JS!"); +fn set_minimize() { + println!("Minimize!"); +} + +#[tauri::command] +fn set_close() { + println!("set_close!"); +} + +#[tauri::command] +fn set_show() { + println!("set_show!"); +} + +#[tauri::command] +fn set_always_on_top() { + println!("set_always_on_top!"); +} + +#[tauri::command] +fn set_fullscreen_break() { + println!("set_fullscreen_break!"); +} + +#[tauri::command] +fn set_compact_mode() { + println!("set_compact_mode!"); +} + +#[tauri::command] +fn set_ui_theme() { + println!("set_ui_theme!"); +} + +#[tauri::command] +fn set_native_titlebar() { + println!("set_native_titlebar!"); +} + +#[tauri::command] +fn tray_icon_update() { + println!("tray_icon_update!"); } /** @@ -25,7 +65,8 @@ pub trait CommandRegister { impl CommandRegister for Builder { fn register_pomatez_commands(self) -> tauri::Builder { - self.invoke_handler(tauri::generate_handler![greet]) - .invoke_handler(tauri::generate_handler![my_custom_command]) + self.invoke_handler(tauri::generate_handler![greet, set_show, set_always_on_top, + set_fullscreen_break, set_compact_mode, set_ui_theme, set_native_titlebar, + tray_icon_update, set_close, set_minimize]) } } From 2e8faf9841d09db74e783b356d6ca14a94340ee6 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Sat, 31 Dec 2022 16:21:30 +0000 Subject: [PATCH 17/37] feat(tauri): pass the data from the frontend into the commands --- .../contexts/connectors/TauriConnector.tsx | 2 +- app/tauri/src/commands.rs | 41 ++++++++----------- app/tauri/src/main.rs | 14 +------ app/tauri/tauri.conf.json | 4 +- 4 files changed, 24 insertions(+), 37 deletions(-) diff --git a/app/renderer/src/contexts/connectors/TauriConnector.tsx b/app/renderer/src/contexts/connectors/TauriConnector.tsx index 9ce7619b..aedad44e 100644 --- a/app/renderer/src/contexts/connectors/TauriConnector.tsx +++ b/app/renderer/src/contexts/connectors/TauriConnector.tsx @@ -118,7 +118,7 @@ export const TauriConnectorProvider: React.FC = ({ children }) => { ctx?.drawImage(img, 0, 0); const dataUrl = canvas.toDataURL("image/png"); - send(TRAY_ICON_UPDATE, dataUrl); + send(TRAY_ICON_UPDATE, { dataUrl }); }; } }, [send, timer.playing, timerType, dashOffset]); diff --git a/app/tauri/src/commands.rs b/app/tauri/src/commands.rs index 845fee99..a87ae613 100644 --- a/app/tauri/src/commands.rs +++ b/app/tauri/src/commands.rs @@ -1,55 +1,50 @@ // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command -use tauri::{Builder, Wry}; +use tauri::{Builder, Runtime, Wry}; #[tauri::command] -fn greet(name: &str) -> String { - format!("Hello, {}! You've been greeted from Rust!", name) +fn set_minimize(minimize_to_tray: bool, _window: tauri::Window) { + println!("Minimize! {}", minimize_to_tray.to_string().as_str()); } #[tauri::command] -fn set_minimize() { - println!("Minimize!"); -} - -#[tauri::command] -fn set_close() { +fn set_close(_window: tauri::Window) { println!("set_close!"); } #[tauri::command] -fn set_show() { +fn set_show(_window: tauri::Window) { println!("set_show!"); } #[tauri::command] -fn set_always_on_top() { - println!("set_always_on_top!"); +fn set_always_on_top(always_on_top: bool, _window: tauri::Window) { + println!("set_always_on_top! {}", always_on_top); } #[tauri::command] -fn set_fullscreen_break() { - println!("set_fullscreen_break!"); +fn set_fullscreen_break(should_fullscreen: bool, always_on_top: bool, _window: tauri::Window) { + println!("set_fullscreen_break! {} {}", should_fullscreen, always_on_top); } #[tauri::command] -fn set_compact_mode() { - println!("set_compact_mode!"); +fn set_compact_mode(compact_mode: bool, _window: tauri::Window) { + println!("set_compact_mode! {}", compact_mode); } #[tauri::command] -fn set_ui_theme() { - println!("set_ui_theme!"); +fn set_ui_theme(is_dark_mode: bool, _window: tauri::Window) { + println!("set_ui_theme! {}", is_dark_mode); } #[tauri::command] -fn set_native_titlebar() { - println!("set_native_titlebar!"); +fn set_native_titlebar(use_native_titlebar: bool, _window: tauri::Window) { + println!("set_native_titlebar! {}", use_native_titlebar); } #[tauri::command] -fn tray_icon_update() { - println!("tray_icon_update!"); +fn tray_icon_update(data_url: String, _window: tauri::Window) { + println!("tray_icon_update! {}", data_url); } /** @@ -65,7 +60,7 @@ pub trait CommandRegister { impl CommandRegister for Builder { fn register_pomatez_commands(self) -> tauri::Builder { - self.invoke_handler(tauri::generate_handler![greet, set_show, set_always_on_top, + self.invoke_handler(tauri::generate_handler![set_show, set_always_on_top, set_fullscreen_break, set_compact_mode, set_ui_theme, set_native_titlebar, tray_icon_update, set_close, set_minimize]) } diff --git a/app/tauri/src/main.rs b/app/tauri/src/main.rs index 9cb3c5a8..62d7a98c 100644 --- a/app/tauri/src/main.rs +++ b/app/tauri/src/main.rs @@ -6,20 +6,10 @@ windows_subsystem = "windows" #[macro_use] mod commands; -use tauri::{Manager}; use commands::CommandRegister; fn main() { tauri::Builder::default() - .setup(|app| { - #[cfg(debug_assertions)] // only include this code on debug builds - { - let window = app.get_window("main").unwrap(); - window.open_devtools(); - } - Ok(()) - }).register_pomatez_commands().run(tauri::generate_context!()).expect("error while running tauri application"); + .register_pomatez_commands().run(tauri::generate_context!()) + .expect("error while running tauri application"); } -// fn register_commands(app: Builder) -> Builder { -// app.invoke_handler(tauri::generate_handler![greet]) -// } diff --git a/app/tauri/tauri.conf.json b/app/tauri/tauri.conf.json index 80afd75a..e413a46b 100644 --- a/app/tauri/tauri.conf.json +++ b/app/tauri/tauri.conf.json @@ -59,7 +59,9 @@ "height": 600, "resizable": true, "title": "pomatez", - "width": 800 + "width": 800, + "minWidth": 340, + "minHeight": 502 } ] } From 76ace97c75875d0e15bf67902fc6c366d554e52b Mon Sep 17 00:00:00 2001 From: Sekwah Date: Sun, 1 Jan 2023 17:37:17 +0000 Subject: [PATCH 18/37] feat(tauri): compact mode resizing --- .../src/contexts/ConnnectorContext.tsx | 1 - app/tauri/src/commands.rs | 66 +++++++++++++++++-- 2 files changed, 60 insertions(+), 7 deletions(-) diff --git a/app/renderer/src/contexts/ConnnectorContext.tsx b/app/renderer/src/contexts/ConnnectorContext.tsx index 03ed45fd..40130d47 100644 --- a/app/renderer/src/contexts/ConnnectorContext.tsx +++ b/app/renderer/src/contexts/ConnnectorContext.tsx @@ -19,7 +19,6 @@ export const ConnectorProvider: React.FC = ({ children }) => { Connector = ElectronConnectorProvider; } else if (window.__TAURI__) { Connector = TauriConnectorProvider; - console.log("Is tauri!!!"); } return ; diff --git a/app/tauri/src/commands.rs b/app/tauri/src/commands.rs index a87ae613..4d00d1a3 100644 --- a/app/tauri/src/commands.rs +++ b/app/tauri/src/commands.rs @@ -1,6 +1,16 @@ - +use std::sync::Mutex; // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command -use tauri::{Builder, Runtime, Wry}; +use tauri::{Builder, PhysicalSize, Runtime, Wry}; + +#[non_exhaustive] +struct WindowSize; + +impl WindowSize { + pub const MIN: PhysicalSize = PhysicalSize { width : 340, height: 502}; + pub const COMPACT: PhysicalSize = PhysicalSize { width : 340, height: 100}; +} + +static ORIGINAL_SIZE: Mutex> = Mutex::new(WindowSize::MIN); #[tauri::command] fn set_minimize(minimize_to_tray: bool, _window: tauri::Window) { @@ -8,8 +18,8 @@ fn set_minimize(minimize_to_tray: bool, _window: tauri::Window) { } #[tauri::command] -fn set_close(_window: tauri::Window) { - println!("set_close!"); +fn set_close(close_to_tray: bool, _window: tauri::Window) { + println!("set_close! {}", close_to_tray); } #[tauri::command] @@ -27,9 +37,53 @@ fn set_fullscreen_break(should_fullscreen: bool, always_on_top: bool println!("set_fullscreen_break! {} {}", should_fullscreen, always_on_top); } +fn try_set_min_size(size: Option>, window: &tauri::Window) { + match window.set_min_size(size) {//Some(size)) { + Ok(_) => (), + Err(e) => println!("There was a problem setting min size! {:?}", e), + } +} + +fn try_set_size(size: PhysicalSize, window: &tauri::Window) { + match window.set_size(size) { + Ok(_) => (), + Err(e) => println!("There was a problem setting the window size! {:?}", e), + } + println!("Set size to {:?}", size); +} + +// fn try_set_resizeable(resizeable: bool, window: &tauri::Window) { +// match window.set_resizable(resizeable) { +// Ok(_) => (), +// Err(e) => println!("There was a problem making the window resizeable {:?}", e) +// } +// } + +// Atm resizeable seems to cause a problem where the size cannot be set smaller than a certain amount +// https://github.com/tauri-apps/tao/issues/561, just use resizeable until this is fixed. +// fn set_window_fixed_size(size: PhysicalSize, window: &tauri::Window) { +// try_set_size(size, window); +// try_set_resizeable(false, window); +// } + +fn set_window_resizeable(min_size: PhysicalSize, size: PhysicalSize, window: &tauri::Window) { + // try_set_resizeable(true, window); + try_set_min_size(Some(min_size), window); + try_set_size(size, window); +} + + #[tauri::command] -fn set_compact_mode(compact_mode: bool, _window: tauri::Window) { - println!("set_compact_mode! {}", compact_mode); +fn set_compact_mode(compact_mode: bool, window: tauri::Window) { + if compact_mode { + { + let mut size = ORIGINAL_SIZE.lock().unwrap(); + *size = window.outer_size().unwrap().clone(); + } + set_window_resizeable(WindowSize::COMPACT, WindowSize::COMPACT, &window); + } else { + set_window_resizeable(WindowSize::MIN, ORIGINAL_SIZE.lock().unwrap().clone(), &window); + } } #[tauri::command] From f8c3cea292aae4bae75f9c07a7b54bd4fbf625ef Mon Sep 17 00:00:00 2001 From: Sekwah Date: Tue, 3 Jan 2023 05:52:42 +0000 Subject: [PATCH 19/37] feat(tauri): always on top command --- app/tauri/src/commands.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/tauri/src/commands.rs b/app/tauri/src/commands.rs index 4d00d1a3..97cd6f02 100644 --- a/app/tauri/src/commands.rs +++ b/app/tauri/src/commands.rs @@ -28,8 +28,12 @@ fn set_show(_window: tauri::Window) { } #[tauri::command] -fn set_always_on_top(always_on_top: bool, _window: tauri::Window) { +fn set_always_on_top(always_on_top: bool, window: tauri::Window) { println!("set_always_on_top! {}", always_on_top); + match window.set_always_on_top(always_on_top) { + Ok(_) => (), + Err(e) => println!("There was a problem altering always on top: {}", e), + } } #[tauri::command] From ba75f3dcdee4afae1d30295a58a302feacd0e921 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Tue, 3 Jan 2023 06:31:28 +0000 Subject: [PATCH 20/37] feat(tauri): full screen mode --- app/tauri/src/commands.rs | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/app/tauri/src/commands.rs b/app/tauri/src/commands.rs index 97cd6f02..78f423e1 100644 --- a/app/tauri/src/commands.rs +++ b/app/tauri/src/commands.rs @@ -30,15 +30,28 @@ fn set_show(_window: tauri::Window) { #[tauri::command] fn set_always_on_top(always_on_top: bool, window: tauri::Window) { println!("set_always_on_top! {}", always_on_top); - match window.set_always_on_top(always_on_top) { - Ok(_) => (), - Err(e) => println!("There was a problem altering always on top: {}", e), - } + try_set_always_on_top(always_on_top, &window); } #[tauri::command] -fn set_fullscreen_break(should_fullscreen: bool, always_on_top: bool, _window: tauri::Window) { +fn set_fullscreen_break(should_fullscreen: bool, always_on_top: bool, window: tauri::Window) { println!("set_fullscreen_break! {} {}", should_fullscreen, always_on_top); + try_set_always_on_top(always_on_top, &window); + try_set_fullscreen(should_fullscreen, &window); +} + +fn try_set_fullscreen(fullscreen: bool, window: &tauri::Window) { + match window.set_fullscreen(fullscreen) { + Ok(_) => (), + Err(e) => println!("There was a problem setting fullscreen: {}", e), + } +} + +fn try_set_always_on_top(always_on_top: bool, window: &tauri::Window) { + match window.set_always_on_top(always_on_top) { + Ok(_) => (), + Err(e) => println!("There was a problem altering always on top: {}", e), + } } fn try_set_min_size(size: Option>, window: &tauri::Window) { From 7a74056ac09d774ddec9e818669d39c2ec1dcff6 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Sat, 30 Sep 2023 21:07:43 +0100 Subject: [PATCH 21/37] chore: wait-on updated due to breaking node change in 17 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1fae09e7..7500cf97 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "rollup": "^2.79.1", "rollup-plugin-typescript2": "^0.27.3", "typescript": "4.9.4", - "wait-on": "^5.3.0", + "wait-on": "7.0.1", "@tauri-apps/cli": "1.2.2" }, "resolutions": { From 7c34758752928f7f10e9e57e8c63e532722c1dee Mon Sep 17 00:00:00 2001 From: Sekwah Date: Sat, 30 Sep 2023 21:13:12 +0100 Subject: [PATCH 22/37] chore: finished tauri rebase --- .../contexts/connectors/ElectronConnector.tsx | 15 +-- yarn.lock | 124 ++++++++++++++---- 2 files changed, 99 insertions(+), 40 deletions(-) diff --git a/app/renderer/src/contexts/connectors/ElectronConnector.tsx b/app/renderer/src/contexts/connectors/ElectronConnector.tsx index dc94549e..ae4a191c 100644 --- a/app/renderer/src/contexts/connectors/ElectronConnector.tsx +++ b/app/renderer/src/contexts/connectors/ElectronConnector.tsx @@ -3,7 +3,6 @@ import { ConnnectorContext } from "../ConnnectorContext"; import { useSelector } from "react-redux"; import { AppStateTypes, SettingTypes } from "../../store"; import { CounterContext } from "../CounterContext"; -import isElectron from "is-electron"; import { SET_ALWAYS_ON_TOP, SET_CLOSE, @@ -14,15 +13,12 @@ import { SET_SHOW, SET_UI_THEME, TRAY_ICON_UPDATE, - SET_COMPACT_MODE, SET_OPEN_AT_LOGIN, } from "@pomatez/shareables"; import { encodeSvg } from "../../utils"; import { TraySVG } from "../../components"; -const ElectronContext = React.createContext({}); - -const ElectronProvider: React.FC = ({ children }) => { +export const ElectronConnectorProvider: React.FC = ({ children }) => { const { electron } = window; // TODO do logic to switch out the connectors based on the platform @@ -101,9 +97,9 @@ const ElectronProvider: React.FC = ({ children }) => { }, [electron, settings.useNativeTitlebar]); useEffect(() => { - electron.send(SET_OPEN_AT_LOGIN, { - openAtLogin: settings.openAtLogin, - }); + electron.send(SET_OPEN_AT_LOGIN, { + openAtLogin: settings.openAtLogin, + }); }, [electron, settings.openAtLogin]); useEffect(() => { @@ -142,6 +138,3 @@ const ElectronProvider: React.FC = ({ children }) => { ); }; - - -export { ElectronContext, ElectronProvider }; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 999153bc..a1a215d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3461,7 +3461,7 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@sideway/formula@^3.0.0": +"@sideway/formula@^3.0.1": version "3.0.1" resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== @@ -3649,6 +3649,66 @@ dependencies: defer-to-connect "^1.0.1" +"@tauri-apps/cli-darwin-arm64@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-1.2.2.tgz#f18b0689b399b64dc67da41c0fd4da474be324fe" + integrity sha512-W+Cp2weUMlvmGkRJeUjypbz9Lpl6o98xkgKAtobZSum5SNwpsBQfawJTESakNoD+FXyVg/snIk5sRdHge+tAaA== + +"@tauri-apps/cli-darwin-x64@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-1.2.2.tgz#4450bd244f586da346651f62a5a41686cee36db7" + integrity sha512-vmVAqt+ECH2d6cbcGJ7ddcCAZgmKe5xmxlL5r4xoaphu7OqU4gnv4VFURYkVltOfwzIFQVOPVSqwYyIDToCYNQ== + +"@tauri-apps/cli-linux-arm-gnueabihf@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-1.2.2.tgz#a4d5b95665620605fb0f54cb77f8134239b58370" + integrity sha512-yYTdQurgi4QZR8z+fANjl522jdQz/VtesFpw+C/A0+zXg7tiRjicsywBDdPsvNzCqFeGKKkmTR+Lny5qxhGaeQ== + +"@tauri-apps/cli-linux-arm64-gnu@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-1.2.2.tgz#c992907586b42e2085160d45b3a17316c99febea" + integrity sha512-ZSOVT6Eq1ay2+27B8KfA0MnpO7KYzONU6TjenH7DNcQki6eWGG5JoNu8QQ9Mdn3dAzY0XBP9i1ZHQOFu4iPtEg== + +"@tauri-apps/cli-linux-arm64-musl@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.2.2.tgz#f8bd7901ce525b8433919e2cfe7ec22aace0f776" + integrity sha512-/NHSkqNQ+Pr4PshvyD1CeNFaPCaCpe1OeuAQgVi0rboSecC9fXN96G5dQbSBoxOUcCo6f8aTVE7zkZ4WchFVog== + +"@tauri-apps/cli-linux-x64-gnu@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-1.2.2.tgz#a558862d7101b0a641c5a994c9ee74edb8300fc5" + integrity sha512-4YTmfPuyvlHsvCkATDMwhklfuQm3HKxYXv/IOW9H0ra6pS9efVhrFYIC9Vfv6XaKN85Vnn/FYTEGMJLwCxZw2Q== + +"@tauri-apps/cli-linux-x64-musl@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-1.2.2.tgz#573e965a638864a65b606783d3dbd34114939277" + integrity sha512-wr46tbscwFuCcA931R+ItOiUTT0djMmgKLd1HFCmFF82V9BKE2reIjr6O9l0NCXCo2WeD4pe3jA/Pt1dxDu+JA== + +"@tauri-apps/cli-win32-ia32-msvc@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-1.2.2.tgz#0fe38283ffeb71acac6a6a317951dc75ec2d3dad" + integrity sha512-6VmbVJOWUZJK5/JKhb3mNFKrKGfq0KV7lJGumfN95WJgkHeyL61p8bZit+o6ZgUGUhrOabkAawhDkrRY+ZQhIw== + +"@tauri-apps/cli-win32-x64-msvc@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.2.2.tgz#9b8ea7c63f2883af105e204fc4f1f11a83990a59" + integrity sha512-YRPJguJma+zSuRZpFoSZqls6+laggG1vqG0FPQWQTi+ywATgMpai2b2RZnffDlpHKp9mt4V/s2dtqOy6bpGZHg== + +"@tauri-apps/cli@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-1.2.2.tgz#cf7cb90d11c3c3b757efe07b7e2c48abde045ada" + integrity sha512-D8zib3A0vWCvPPSyYLxww/OdDlVcY7fpcDVBH6qUvheOjj2aCyU7H9AYMRBwpgCfz8zY5+vomee+laLeB0H13w== + optionalDependencies: + "@tauri-apps/cli-darwin-arm64" "1.2.2" + "@tauri-apps/cli-darwin-x64" "1.2.2" + "@tauri-apps/cli-linux-arm-gnueabihf" "1.2.2" + "@tauri-apps/cli-linux-arm64-gnu" "1.2.2" + "@tauri-apps/cli-linux-arm64-musl" "1.2.2" + "@tauri-apps/cli-linux-x64-gnu" "1.2.2" + "@tauri-apps/cli-linux-x64-musl" "1.2.2" + "@tauri-apps/cli-win32-ia32-msvc" "1.2.2" + "@tauri-apps/cli-win32-x64-msvc" "1.2.2" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -5134,12 +5194,13 @@ axe-core@^4.6.2: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.8.2.tgz#2f6f3cde40935825cf4465e3c1c9e77b240ff6ae" integrity sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g== -axios@^0.21.1: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== +axios@^0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.14.9" + form-data "^4.0.0" axios@^1.0.0: version "1.5.0" @@ -8683,12 +8744,12 @@ flow-parser@0.*: resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.196.0.tgz#d62f85e02792fe625509a11343a8611ff976facd" integrity sha512-739keKrDa+/5wpGFirMVK04elYMBjnwX2VH0WneKm3zx4K60ic8acJ6Ya6BekuHKLHIuz36ZUOQuGSUjc8D21A== -follow-redirects@^1.0.0, follow-redirects@^1.14.0: +follow-redirects@^1.0.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== -follow-redirects@^1.15.0: +follow-redirects@^1.14.9, follow-redirects@^1.15.0: version "1.15.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== @@ -11378,15 +11439,15 @@ jiti@^1.18.2: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.20.0.tgz#2d823b5852ee8963585c8dd8b7992ffc1ae83b42" integrity sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA== -joi@^17.3.0: - version "17.7.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.7.0.tgz#591a33b1fe1aca2bc27f290bcad9b9c1c570a6b3" - integrity sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg== +joi@^17.7.0: + version "17.10.2" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.10.2.tgz#4ecc348aa89ede0b48335aad172e0f5591e55b29" + integrity sha512-hcVhjBxRNW/is3nNLdGLIjkgXetkeGc2wyhydhz8KumG23Aerk4HPjU5zaPAMRqXQFc0xNqXTC7+zQjxr0GlKA== dependencies: "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.0" + "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" js-message@1.0.7: @@ -12473,6 +12534,11 @@ minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +minimist@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" @@ -15586,13 +15652,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^6.6.3: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - rxjs@^7.5.1, rxjs@^7.5.5: version "7.8.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" @@ -15600,6 +15659,13 @@ rxjs@^7.5.1, rxjs@^7.5.5: dependencies: tslib "^2.1.0" +rxjs@^7.8.0: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + safe-array-concat@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" @@ -17131,7 +17197,7 @@ tslib@2.0.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== -tslib@^1.8.1, tslib@^1.9.0: +tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -17716,16 +17782,16 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" -wait-on@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-5.3.0.tgz#584e17d4b3fe7b46ac2b9f8e5e102c005c2776c7" - integrity sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg== +wait-on@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-7.0.1.tgz#5cff9f8427e94f4deacbc2762e6b0a489b19eae9" + integrity sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog== dependencies: - axios "^0.21.1" - joi "^17.3.0" + axios "^0.27.2" + joi "^17.7.0" lodash "^4.17.21" - minimist "^1.2.5" - rxjs "^6.6.3" + minimist "^1.2.7" + rxjs "^7.8.0" walker@^1.0.7, walker@~1.0.5: version "1.0.8" From dadf80f2ec9b6e1860021a33c5d99da83b011601 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Sun, 1 Oct 2023 03:43:27 +0100 Subject: [PATCH 23/37] feat(tauri): add tray icon updating and a number of other commands --- app/renderer/package.json | 1 + app/renderer/src/App.tsx | 19 +- app/renderer/src/components/Layout.tsx | 2 +- .../contexts/connectors/TauriConnector.tsx | 18 +- .../src/styles/components/titlebar.ts | 1 + app/tauri/Cargo.lock | 1610 +++++++++++++++-- app/tauri/Cargo.toml | 9 +- app/tauri/src/commands.rs | 126 +- app/tauri/src/main.rs | 6 +- app/tauri/tauri.conf.json | 12 +- app/tauri/util/cargo-version-updater.js | 4 +- package.json | 4 +- yarn.lock | 115 +- 13 files changed, 1645 insertions(+), 282 deletions(-) diff --git a/app/renderer/package.json b/app/renderer/package.json index a2cd4451..fd72f947 100644 --- a/app/renderer/package.json +++ b/app/renderer/package.json @@ -57,6 +57,7 @@ "redux-devtools-extension": "^2.13.8", "redux-undo": "^1.0.1", "styled-components": "^5.3.11", + "tauri-plugin-autostart-api": "https://github.com/tauri-apps/tauri-plugin-autostart#v1", "use-stay-awake": "^0.1.5" }, "devDependencies": { diff --git a/app/renderer/src/App.tsx b/app/renderer/src/App.tsx index 10edeced..86dbdeeb 100644 --- a/app/renderer/src/App.tsx +++ b/app/renderer/src/App.tsx @@ -1,4 +1,4 @@ -import React, { Suspense } from "react"; +import React, { Suspense, useEffect } from "react"; import { HashRouter as Router, Switch, Route } from "react-router-dom"; import { ThemeProvider, @@ -14,6 +14,23 @@ export default function App() { const settings = useSelector( (state: AppStateTypes) => state.settings ); + + useEffect(() => { + const contextEvent = (event: MouseEvent) => { + if (event.target) { + let target = event.target as HTMLElement; + if (target.tagName === "TEXTAREA") { + return true; + } + } + event.preventDefault(); + return false; + }; + document.addEventListener("contextmenu", contextEvent); + return () => + document.removeEventListener("contextmenu", contextEvent); + }, []); + return ( diff --git a/app/renderer/src/components/Layout.tsx b/app/renderer/src/components/Layout.tsx index 827bf4a5..5ad23c25 100644 --- a/app/renderer/src/components/Layout.tsx +++ b/app/renderer/src/components/Layout.tsx @@ -76,7 +76,7 @@ const Layout: React.FC = ({ history, location, children }) => { return ( - {!useNativeTitlebar.current && ( + {!settings.useNativeTitlebar && ( { const { invoke } = window.__TAURI__; + const settings: SettingTypes = useSelector( + (state: AppStateTypes) => state.settings + ); + /** * Rust uses lowercase snake_case for function names so we need to convert to lower case for the calls. * @param event @@ -32,14 +38,18 @@ export const TauriConnectorProvider: React.FC = ({ children }) => { [invoke] ); + useEffect(() => { + if (settings.openAtLogin) { + enable().catch((err) => console.error(err)); + } else { + disable().catch((err) => console.error(err)); + } + }, [settings.openAtLogin]); + // TODO do logic to switch out the connectors based on the platform const timer = useSelector((state: AppStateTypes) => state.timer); - const settings: SettingTypes = useSelector( - (state: AppStateTypes) => state.settings - ); - const { count, duration, timerType, shouldFullscreen } = useContext(CounterContext); const dashOffset = (duration - count) * (24 / duration); diff --git a/app/renderer/src/styles/components/titlebar.ts b/app/renderer/src/styles/components/titlebar.ts index 40e014ce..d217a17e 100644 --- a/app/renderer/src/styles/components/titlebar.ts +++ b/app/renderer/src/styles/components/titlebar.ts @@ -38,6 +38,7 @@ export const StyledMarkWrapper = styled.div` column-gap: 0.8rem; padding-left: 1rem; + pointer-events: none; `; export const StyledMarkLogo = styled.img` diff --git a/app/tauri/Cargo.lock b/app/tauri/Cargo.lock index 1a467701..eabb3eb8 100644 --- a/app/tauri/Cargo.lock +++ b/app/tauri/Cargo.lock @@ -17,6 +17,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "aho-corasick" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab" +dependencies = [ + "memchr", +] + [[package]] name = "alloc-no-stdlib" version = "2.0.4" @@ -32,12 +41,149 @@ dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anyhow" version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" +[[package]] +name = "async-broadcast" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +dependencies = [ + "event-listener", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-executor" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c1da3ae8dabd9c00f453a329dfe1fb28da3c0a72e2478cdcd93171740c20499" +dependencies = [ + "async-lock", + "async-task", + "concurrent-queue", + "fastrand 2.0.1", + "futures-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock", + "autocfg", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite", + "log", + "parking", + "polling", + "rustix", + "slab", + "socket2", + "waker-fn", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener", +] + +[[package]] +name = "async-process" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9" +dependencies = [ + "async-io", + "async-lock", + "autocfg", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix", + "signal-hook", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-recursion" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.37", +] + +[[package]] +name = "async-task" +version = "4.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9441c6b2fe128a7c2bf680a44c34d0df31ce09e5b7e401fcca3faa483dbc921" + +[[package]] +name = "async-trait" +version = "0.1.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.37", +] + [[package]] name = "atk" version = "0.15.1" @@ -63,19 +209,20 @@ dependencies = [ ] [[package]] -name = "attohttpc" -version = "0.22.0" +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "auto-launch" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fcf00bc6d5abb29b5f97e3c61a90b6d3caa12f3faf897d4a3e3607c050a35a7" +checksum = "1f012b8cc0c850f34117ec8252a44418f2e34a2cf501de89e29b241ae5f79471" dependencies = [ - "flate2", - "http", - "log", - "native-tls", - "serde", - "serde_json", - "serde_urlencoded", - "url", + "dirs", + "thiserror", + "winreg 0.10.1", ] [[package]] @@ -90,6 +237,12 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +[[package]] +name = "base64" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" + [[package]] name = "bitflags" version = "1.3.2" @@ -111,6 +264,21 @@ dependencies = [ "generic-array", ] +[[package]] +name = "blocking" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" +dependencies = [ + "async-channel", + "async-lock", + "async-task", + "atomic-waker", + "fastrand 1.8.0", + "futures-lite", + "log", +] + [[package]] name = "brotli" version = "3.3.4" @@ -164,6 +332,9 @@ name = "bytes" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" +dependencies = [ + "serde", +] [[package]] name = "cairo-rs" @@ -191,19 +362,22 @@ dependencies = [ [[package]] name = "cargo_toml" -version = "0.13.3" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497049e9477329f8f6a559972ee42e117487d01d1e8c2cc9f836ea6fa23a9e1a" +checksum = "599aa35200ffff8f04c1925aa1acc92fa2e08874379ef42e210a80e527e60838" dependencies = [ "serde", - "toml", + "toml 0.7.8", ] [[package]] name = "cc" -version = "1.0.78" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] [[package]] name = "cesu8" @@ -213,12 +387,13 @@ checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] name = "cfb" -version = "0.6.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74f89d248799e3f15f91b70917f65381062a01bb8e222700ea0e5a7ff9785f9c" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" dependencies = [ "byteorder", - "uuid 0.8.2", + "fnv", + "uuid", ] [[package]] @@ -245,6 +420,19 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.48.5", +] + [[package]] name = "cocoa" version = "0.24.1" @@ -292,6 +480,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "concurrent-queue" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "convert_case" version = "0.4.0" @@ -400,7 +597,7 @@ dependencies = [ "proc-macro2", "quote", "smallvec", - "syn", + "syn 1.0.107", ] [[package]] @@ -410,7 +607,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" dependencies = [ "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -420,7 +617,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -431,9 +628,9 @@ checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" [[package]] name = "darling" -version = "0.13.4" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" dependencies = [ "darling_core", "darling_macro", @@ -441,38 +638,38 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.13.4" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.37", ] [[package]] name = "darling_macro" -version = "0.13.4" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", "quote", - "syn", + "syn 2.0.37", ] [[package]] -name = "dbus" -version = "0.9.6" +name = "derivative" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8bcdd56d2e5c4ed26a529c5a9029f5db8290d433497506f958eae3be148eb6" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "libc", - "libdbus-sys", - "winapi", + "proc-macro2", + "quote", + "syn 1.0.107", ] [[package]] @@ -485,7 +682,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.0", - "syn", + "syn 1.0.107", ] [[package]] @@ -498,6 +695,15 @@ dependencies = [ "crypto-common", ] +[[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-next" version = "2.0.0" @@ -508,6 +714,17 @@ dependencies = [ "dirs-sys-next", ] +[[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 = "dirs-sys-next" version = "0.1.2" @@ -546,6 +763,19 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c" +[[package]] +name = "embed-resource" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd0a2c9b742a980060d22545a7a83b573acd6b73045b9de6370c9530ce652f27" +dependencies = [ + "cc", + "rustc_version 0.4.0", + "toml 0.7.8", + "vswhom", + "winreg 0.51.0", +] + [[package]] name = "embed_plist" version = "1.2.2" @@ -561,6 +791,60 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "enumflags2" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5998b4f30320c9d93aed72f63af821bfdac50465b75428fce77b48ec482c3939" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.37", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + [[package]] name = "fastrand" version = "1.8.0" @@ -570,13 +854,19 @@ dependencies = [ "instant", ] +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + [[package]] name = "field-offset" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" dependencies = [ - "memoffset", + "memoffset 0.6.5", "rustc_version 0.3.3", ] @@ -674,6 +964,21 @@ version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.8.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + [[package]] name = "futures-macro" version = "0.3.25" @@ -682,9 +987,15 @@ checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] +[[package]] +name = "futures-sink" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" + [[package]] name = "futures-task" version = "0.3.25" @@ -698,8 +1009,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" dependencies = [ "futures-core", + "futures-io", "futures-macro", + "futures-sink", "futures-task", + "memchr", "pin-project-lite", "pin-utils", "slab", @@ -773,6 +1087,20 @@ dependencies = [ "system-deps 6.0.3", ] +[[package]] +name = "gdkwayland-sys" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cca49a59ad8cfdf36ef7330fe7bdfbe1d34323220cc16a0de2679ee773aee2c2" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps 6.0.3", +] + [[package]] name = "gdkx11-sys" version = "0.15.1" @@ -893,7 +1221,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -918,7 +1246,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" dependencies = [ - "aho-corasick", + "aho-corasick 0.7.20", "bstr", "fnv", "log", @@ -988,7 +1316,26 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.107", +] + +[[package]] +name = "h2" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 1.9.2", + "slab", + "tokio", + "tokio-util", + "tracing", ] [[package]] @@ -997,6 +1344,12 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12" + [[package]] name = "heck" version = "0.3.3" @@ -1021,6 +1374,18 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "html5ever" version = "0.25.2" @@ -1029,22 +1394,47 @@ checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" dependencies = [ "log", "mac", - "markup5ever", + "markup5ever 0.10.1", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] -name = "http" -version = "0.2.8" +name = "html5ever" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" dependencies = [ - "bytes", - "fnv", - "itoa 1.0.5", -] + "log", + "mac", + "markup5ever 0.11.0", + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "http" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.5", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] [[package]] name = "http-range" @@ -1052,11 +1442,83 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa 1.0.5", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows 0.48.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "ico" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "031530fe562d8c8d71c0635013d6d155bbfe8ba0aa4b4d2d24ce8af6b71047bd" +checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" dependencies = [ "byteorder", "png", @@ -1116,14 +1578,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" +dependencies = [ + "equivalent", + "hashbrown 0.14.1", + "serde", ] [[package]] name = "infer" -version = "0.7.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20b2b533137b9cad970793453d4f921c2e91312a6d88b1085c07bc15fc51bb3b" +checksum = "f178e61cdbfe084aa75a2f4f7a25a5bb09701a47ae1753608f194b15783c937a" +dependencies = [ + "cfb", +] + +[[package]] +name = "infer" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3" dependencies = [ "cfb", ] @@ -1137,6 +1620,23 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.3", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipnet" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" + [[package]] name = "itoa" version = "0.4.8" @@ -1203,12 +1703,13 @@ dependencies = [ [[package]] name = "json-patch" -version = "0.2.7" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3fa5a61630976fc4c353c70297f2e93f1930e3ccee574d59d618ccbd5154ce" +checksum = "4f7765dccf8c39c3a470fc694efe322969d791e713ca46bc7b5c506886157572" dependencies = [ "serde", "serde_json", + "thiserror", "treediff", ] @@ -1219,7 +1720,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" dependencies = [ "cssparser", - "html5ever", + "html5ever 0.25.2", + "matches", + "selectors", +] + +[[package]] +name = "kuchikiki" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" +dependencies = [ + "cssparser", + "html5ever 0.26.0", + "indexmap 1.9.2", "matches", "selectors", ] @@ -1230,6 +1744,30 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +[[package]] +name = "libappindicator" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2d3cb96d092b4824cb306c9e544c856a4cb6210c1081945187f7f1924b47e8" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1b3b6681973cea8cc3bce7391e6d7d5502720b80a581c9a95c9cbaf592826aa" +dependencies = [ + "gtk-sys", + "libloading", + "once_cell", +] + [[package]] name = "libc" version = "0.2.139" @@ -1237,12 +1775,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" [[package]] -name = "libdbus-sys" -version = "0.2.2" +name = "libloading" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c185b5b7ad900923ef3a8ff594083d4d9b5aea80bb4f32b8342363138c0d456b" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ - "pkg-config", + "cfg-if", + "winapi", ] [[package]] @@ -1254,6 +1793,12 @@ dependencies = [ "safemem", ] +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + [[package]] name = "lock_api" version = "0.4.9" @@ -1266,12 +1811,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "loom" @@ -1324,7 +1866,21 @@ checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" dependencies = [ "log", "phf 0.8.0", - "phf_codegen", + "phf_codegen 0.8.0", + "string_cache", + "string_cache_codegen", + "tendril", +] + +[[package]] +name = "markup5ever" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" +dependencies = [ + "log", + "phf 0.10.1", + "phf_codegen 0.10.0", "string_cache", "string_cache_codegen", "tendril", @@ -1336,7 +1892,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "regex-automata", + "regex-automata 0.1.10", ] [[package]] @@ -1347,9 +1903,9 @@ checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" [[package]] name = "memoffset" @@ -1360,6 +1916,21 @@ dependencies = [ "autocfg", ] +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + [[package]] name = "miniz_oxide" version = "0.6.2" @@ -1369,6 +1940,18 @@ dependencies = [ "adler", ] +[[package]] +name = "mio" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", +] + [[package]] name = "native-tls" version = "0.2.11" @@ -1421,6 +2004,18 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags", + "cfg-if", + "libc", + "memoffset 0.7.1", +] + [[package]] name = "nodrop" version = "0.1.14" @@ -1433,9 +2028,12 @@ version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cc2e370356160e41aba3fd0fbac26d86a89ddd2ac4300c03de999a77cfa2509" dependencies = [ - "dbus", "mac-notification-sys", + "serde", "tauri-winrt-notification", + "zbus", + "zvariant", + "zvariant_derive", ] [[package]] @@ -1484,7 +2082,7 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ - "hermit-abi", + "hermit-abi 0.2.6", "libc", ] @@ -1506,7 +2104,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1587,7 +2185,7 @@ checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1609,6 +2207,16 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + [[package]] name = "os_info" version = "3.5.1" @@ -1661,6 +2269,12 @@ dependencies = [ "system-deps 6.0.3", ] +[[package]] +name = "parking" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e52c774a4c39359c1d1c52e43f73dd91a75a614652c825408eec30c95a9b2067" + [[package]] name = "parking_lot" version = "0.12.1" @@ -1684,12 +2298,6 @@ dependencies = [ "windows-sys 0.42.0", ] -[[package]] -name = "paste" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" - [[package]] name = "pathdiff" version = "0.2.1" @@ -1744,6 +2352,16 @@ dependencies = [ "phf_shared 0.8.0", ] +[[package]] +name = "phf_codegen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", +] + [[package]] name = "phf_generator" version = "0.8.0" @@ -1775,7 +2393,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1789,7 +2407,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1834,8 +2452,8 @@ version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd39bc6cdc9355ad1dc5eeedefee696bb35c34caf21768741e81826c0bbd7225" dependencies = [ - "base64", - "indexmap", + "base64 0.13.1", + "indexmap 1.9.2", "line-wrap", "serde", "time", @@ -1854,14 +2472,33 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + [[package]] name = "pomatez" -version = "1.2.2" +version = "1.3.0" dependencies = [ + "base64 0.21.4", "serde", "serde_json", "tauri", "tauri-build", + "tauri-plugin-autostart", + "window-shadows", ] [[package]] @@ -1884,7 +2521,7 @@ checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" dependencies = [ "once_cell", "thiserror", - "toml", + "toml 0.5.10", ] [[package]] @@ -1896,7 +2533,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.107", "version_check", ] @@ -1919,9 +2556,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.49" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" +checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" dependencies = [ "unicode-ident", ] @@ -1937,9 +2574,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.23" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -2056,13 +2693,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.0" +version = "1.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" +checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff" dependencies = [ - "aho-corasick", + "aho-corasick 1.1.1", "memchr", - "regex-syntax", + "regex-automata 0.3.9", + "regex-syntax 0.7.5", ] [[package]] @@ -2071,7 +2709,18 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "regex-syntax", + "regex-syntax 0.6.28", +] + +[[package]] +name = "regex-automata" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9" +dependencies = [ + "aho-corasick 1.1.1", + "memchr", + "regex-syntax 0.7.5", ] [[package]] @@ -2080,6 +2729,12 @@ version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +[[package]] +name = "regex-syntax" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + [[package]] name = "remove_dir_all" version = "0.5.3" @@ -2089,6 +2744,45 @@ dependencies = [ "winapi", ] +[[package]] +name = "reqwest" +version = "0.11.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" +dependencies = [ + "base64 0.21.4", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "winreg 0.50.0", +] + [[package]] name = "rfd" version = "0.10.0" @@ -2132,8 +2826,22 @@ dependencies = [ ] [[package]] -name = "rustversion" -version = "1.0.11" +name = "rustix" +version = "0.37.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b24138615de35e32031d041a09032ef3487a616d901ca4db224e7d557efae2" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.45.0", +] + +[[package]] +name = "rustversion" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" @@ -2216,7 +2924,7 @@ dependencies = [ "log", "matches", "phf 0.8.0", - "phf_codegen", + "phf_codegen 0.8.0", "precomputed-hash", "servo_arc", "smallvec", @@ -2252,29 +2960,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.152" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.152" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.37", ] [[package]] name = "serde_json" -version = "1.0.91" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" +checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" dependencies = [ "itoa 1.0.5", "ryu", @@ -2289,7 +2997,16 @@ checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", +] + +[[package]] +name = "serde_spanned" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +dependencies = [ + "serde", ] [[package]] @@ -2306,24 +3023,31 @@ dependencies = [ [[package]] name = "serde_with" -version = "1.14.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" +checksum = "1ca3b16a3d82c4088f343b7480a93550b3eabe1a358569c2dfe38bbcead07237" dependencies = [ + "base64 0.21.4", + "chrono", + "hex", + "indexmap 1.9.2", + "indexmap 2.0.2", "serde", + "serde_json", "serde_with_macros", + "time", ] [[package]] name = "serde_with_macros" -version = "1.5.2" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" +checksum = "2e6be15c453eb305019bfa438b1593c731f36a289a7853f7707ee29e870b3b3c" dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 2.0.37", ] [[package]] @@ -2345,7 +3069,7 @@ checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -2358,6 +3082,17 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "sha1" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sha2" version = "0.10.6" @@ -2388,6 +3123,25 @@ dependencies = [ "winapi", ] +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + [[package]] name = "siphasher" version = "0.3.10" @@ -2409,6 +3163,16 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +[[package]] +name = "socket2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "soup2" version = "0.2.1" @@ -2452,6 +3216,12 @@ dependencies = [ "loom", ] +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "string_cache" version = "0.8.4" @@ -2502,7 +3272,7 @@ dependencies = [ "heck 0.3.3", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -2516,6 +3286,30 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sys-locale" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8a11bd9c338fdba09f7881ab41551932ad42e405f61d01e8406baea71c07aee" +dependencies = [ + "js-sys", + "libc", + "wasm-bindgen", + "web-sys", + "windows-sys 0.45.0", +] + [[package]] name = "system-deps" version = "5.0.0" @@ -2525,7 +3319,7 @@ dependencies = [ "cfg-expr 0.9.1", "heck 0.3.3", "pkg-config", - "toml", + "toml 0.5.10", "version-compare 0.0.11", ] @@ -2538,15 +3332,15 @@ dependencies = [ "cfg-expr 0.11.0", "heck 0.4.0", "pkg-config", - "toml", + "toml 0.5.10", "version-compare 0.1.1", ] [[package]] name = "tao" -version = "0.15.8" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac8e6399427c8494f9849b58694754d7cc741293348a6836b6c8d2c5aa82d8e6" +checksum = "2bbc1134456b525a0e560ff48b185acb5178621df0dafa96e927826becb5184e" dependencies = [ "bitflags", "cairo-rs", @@ -2555,10 +3349,12 @@ dependencies = [ "core-foundation", "core-graphics", "crossbeam-channel", + "dirs-next", "dispatch", "gdk", "gdk-pixbuf", "gdk-sys", + "gdkwayland-sys", "gdkx11-sys", "gio", "glib", @@ -2568,6 +3364,7 @@ dependencies = [ "instant", "jni", "lazy_static", + "libappindicator", "libc", "log", "ndk", @@ -2576,18 +3373,29 @@ dependencies = [ "objc", "once_cell", "parking_lot", - "paste", "png", "raw-window-handle", "scopeguard", "serde", + "tao-macros", "unicode-segmentation", - "uuid 1.2.2", + "uuid", "windows 0.39.0", "windows-implement", "x11-dl", ] +[[package]] +name = "tao-macros" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec114582505d158b669b136e6851f85840c109819d77c42bb7c0709f727d18c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + [[package]] name = "tar" version = "0.4.38" @@ -2601,12 +3409,12 @@ dependencies = [ [[package]] name = "tauri" -version = "1.2.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b48820ee3bb6a5031a83b2b6e11f8630bdc5a2f68cb841ab8ebc7a15a916679" +checksum = "72aee3277d0a0df01472cc704ab5934a51a1f25348838df17bfb3c5cb727880c" dependencies = [ "anyhow", - "attohttpc", + "bytes", "cocoa", "dirs-next", "embed_plist", @@ -2619,6 +3427,7 @@ dependencies = [ "heck 0.4.0", "http", "ignore", + "infer 0.9.0", "notify-rust", "objc", "once_cell", @@ -2626,9 +3435,11 @@ dependencies = [ "os_info", "os_pipe", "percent-encoding", + "png", "rand 0.8.5", "raw-window-handle", "regex", + "reqwest", "rfd", "semver 1.0.16", "serde", @@ -2637,6 +3448,7 @@ dependencies = [ "serialize-to-javascript", "shared_child", "state", + "sys-locale", "tar", "tauri-macros", "tauri-runtime", @@ -2646,7 +3458,7 @@ dependencies = [ "thiserror", "tokio", "url", - "uuid 1.2.2", + "uuid", "webkit2gtk", "webview2-com", "windows 0.39.0", @@ -2654,27 +3466,30 @@ dependencies = [ [[package]] name = "tauri-build" -version = "1.2.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8807c85d656b2b93927c19fe5a5f1f1f348f96c2de8b90763b3c2d561511f9b4" +checksum = "defbfc551bd38ab997e5f8e458f87396d2559d05ce32095076ad6c30f7fc5f9c" dependencies = [ "anyhow", "cargo_toml", + "dirs-next", "heck 0.4.0", "json-patch", "semver 1.0.16", + "serde", "serde_json", "tauri-utils", - "winres", + "tauri-winres", + "walkdir", ] [[package]] name = "tauri-codegen" -version = "1.2.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14388d484b6b1b5dc0f6a7d6cc6433b3b230bec85eaa576adcdf3f9fafa49251" +checksum = "7b3475e55acec0b4a50fb96435f19631fb58cbcd31923e1a213de5c382536bbb" dependencies = [ - "base64", + "base64 0.21.4", "brotli", "ico", "json-patch", @@ -2690,29 +3505,42 @@ dependencies = [ "tauri-utils", "thiserror", "time", - "uuid 1.2.2", + "uuid", "walkdir", ] [[package]] name = "tauri-macros" -version = "1.2.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069319e5ecbe653a799b94b0690d9f9bf5d00f7b1d3989aa331c524d4e354075" +checksum = "613740228de92d9196b795ac455091d3a5fbdac2654abb8bb07d010b62ab43af" dependencies = [ "heck 0.4.0", "proc-macro2", "quote", - "syn", + "syn 1.0.107", "tauri-codegen", "tauri-utils", ] +[[package]] +name = "tauri-plugin-autostart" +version = "0.0.0" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#9b96996b5a90a6a57d587ce4312975f13a4d8bc2" +dependencies = [ + "auto-launch", + "log", + "serde", + "serde_json", + "tauri", + "thiserror", +] + [[package]] name = "tauri-runtime" -version = "0.12.1" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c507d954d08ac8705d235bc70ec6975b9054fb95ff7823af72dbb04186596f3b" +checksum = "07f8e9e53e00e9f41212c115749e87d5cd2a9eebccafca77a19722eeecd56d43" dependencies = [ "gtk", "http", @@ -2723,16 +3551,17 @@ dependencies = [ "serde_json", "tauri-utils", "thiserror", - "uuid 1.2.2", + "url", + "uuid", "webview2-com", "windows 0.39.0", ] [[package]] name = "tauri-runtime-wry" -version = "0.12.2" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36b1c5764a41a13176a4599b5b7bd0881bea7d94dfe45e1e755f789b98317e30" +checksum = "8141d72b6b65f2008911e9ef5b98a68d1e3413b7a1464e8f85eb3673bb19a895" dependencies = [ "cocoa", "gtk", @@ -2741,7 +3570,7 @@ dependencies = [ "raw-window-handle", "tauri-runtime", "tauri-utils", - "uuid 1.2.2", + "uuid", "webkit2gtk", "webview2-com", "windows 0.39.0", @@ -2750,18 +3579,20 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "1.2.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5abbc109a6eb45127956ffcc26ef0e875d160150ac16cfa45d26a6b2871686f1" +checksum = "34d55e185904a84a419308d523c2c6891d5e2dbcee740c4997eb42e75a7b0f46" dependencies = [ "brotli", "ctor", + "dunce", "glob", "heck 0.4.0", - "html5ever", - "infer", + "html5ever 0.26.0", + "infer 0.12.0", "json-patch", - "kuchiki", + "kuchikiki", + "log", "memchr", "phf 0.10.1", "proc-macro2", @@ -2776,6 +3607,16 @@ dependencies = [ "windows 0.39.0", ] +[[package]] +name = "tauri-winres" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" +dependencies = [ + "embed-resource", + "toml 0.7.8", +] + [[package]] name = "tauri-winrt-notification" version = "0.1.0" @@ -2794,7 +3635,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" dependencies = [ "cfg-if", - "fastrand", + "fastrand 1.8.0", "libc", "redox_syscall", "remove_dir_all", @@ -2820,22 +3661,22 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.37", ] [[package]] @@ -2897,12 +3738,39 @@ checksum = "eab6d665857cc6ca78d6e80303a02cea7a7851e85dfbd77cbdc09bd129f1ef46" dependencies = [ "autocfg", "bytes", + "libc", "memchr", + "mio", "num_cpus", "pin-project-lite", + "socket2", "windows-sys 0.42.0", ] +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + [[package]] name = "toml" version = "0.5.10" @@ -2912,6 +3780,46 @@ dependencies = [ "serde", ] +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.0.2", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + [[package]] name = "tracing" version = "0.1.37" @@ -2932,7 +3840,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -2976,13 +3884,19 @@ dependencies = [ [[package]] name = "treediff" -version = "3.0.2" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "761e8d5ad7ce14bb82b7e61ccc0ca961005a275a060b9644a2431aa11553c2ff" +checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" dependencies = [ "serde_json", ] +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + [[package]] name = "typenum" version = "1.16.0" @@ -2995,6 +3909,16 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" +[[package]] +name = "uds_windows" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d" +dependencies = [ + "tempfile", + "winapi", +] + [[package]] name = "unicode-bidi" version = "0.3.8" @@ -3040,12 +3964,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" - [[package]] name = "uuid" version = "1.2.2" @@ -3085,6 +4003,32 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "waker-fn" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" + [[package]] name = "walkdir" version = "2.3.2" @@ -3096,6 +4040,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" @@ -3129,7 +4082,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.107", "wasm-bindgen-shared", ] @@ -3163,7 +4116,7 @@ checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3174,6 +4127,19 @@ version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" +[[package]] +name = "wasm-streams" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "web-sys" version = "0.3.60" @@ -3251,7 +4217,7 @@ checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -3300,6 +4266,18 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "window-shadows" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29d30320647cfc3dc45554c8ad825b84831def81f967a2f7589931328ff9b16d" +dependencies = [ + "cocoa", + "objc", + "raw-window-handle", + "windows-sys 0.42.0", +] + [[package]] name = "windows" version = "0.37.0" @@ -3327,6 +4305,15 @@ dependencies = [ "windows_x86_64_msvc 0.39.0", ] +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.5", +] + [[package]] name = "windows-bindgen" version = "0.39.0" @@ -3343,7 +4330,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" dependencies = [ - "syn", + "syn 1.0.107", "windows-tokens", ] @@ -3372,13 +4359,61 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.0", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] @@ -3389,9 +4424,15 @@ checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.0" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" @@ -3413,9 +4454,15 @@ checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" [[package]] name = "windows_aarch64_msvc" -version = "0.42.0" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" @@ -3437,9 +4484,15 @@ checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" [[package]] name = "windows_i686_gnu" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" @@ -3461,9 +4514,15 @@ checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" [[package]] name = "windows_i686_msvc" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" @@ -3485,15 +4544,27 @@ checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" [[package]] name = "windows_x86_64_gnu" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" @@ -3515,26 +4586,61 @@ checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" [[package]] name = "windows_x86_64_msvc" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] -name = "winres" -version = "0.1.12" +name = "windows_x86_64_msvc" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "winnow" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" dependencies = [ - "toml", + "memchr", +] + +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "winreg" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "937f3df7948156640f46aacef17a70db0de5917bda9c92b0f751f3a955b588fc" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", ] [[package]] name = "wry" -version = "0.23.4" +version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c1ad8e2424f554cc5bdebe8aa374ef5b433feff817aebabca0389961fc7ef98" +checksum = "88ef04bdad49eba2e01f06e53688c8413bd6a87b0bc14b72284465cf96e3578e" dependencies = [ - "base64", + "base64 0.13.1", "block", "cocoa", "core-graphics", @@ -3544,7 +4650,7 @@ dependencies = [ "gio", "glib", "gtk", - "html5ever", + "html5ever 0.25.2", "http", "kuchiki", "libc", @@ -3596,8 +4702,122 @@ dependencies = [ "libc", ] +[[package]] +name = "xdg-home" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd" +dependencies = [ + "nix", + "winapi", +] + [[package]] name = "xml-rs" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" + +[[package]] +name = "zbus" +version = "3.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31de390a2d872e4cd04edd71b425e29853f786dc99317ed72d73d6fcf5ebb948" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "byteorder", + "derivative", + "enumflags2", + "event-listener", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix", + "once_cell", + "ordered-stream", + "rand 0.8.5", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "winapi", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "3.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d1794a946878c0e807f55a397187c11fc7a038ba5d868e7db4f3bd7760bc9d" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "regex", + "syn 1.0.107", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + +[[package]] +name = "zvariant" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c" +dependencies = [ + "byteorder", + "enumflags2", + "libc", + "serde", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.107", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] diff --git a/app/tauri/Cargo.toml b/app/tauri/Cargo.toml index 31c78dda..8e48a203 100644 --- a/app/tauri/Cargo.toml +++ b/app/tauri/Cargo.toml @@ -3,7 +3,7 @@ name = "pomatez" # In the current version of release please, unless the toml file is in the root of the project it cannot be updated. # https://github.com/googleapis/release-please/issues/1724 # util/cargo-version-updater.js will run to keep this value up to date before rust builds. -version = "1.2.2" +version = "1.3.0" description = "Attractive pomodoro timer for Windows, Mac, and Linux." authors = ["Roldan Montilla Jr"] license = "MIT" @@ -14,12 +14,15 @@ rust-version = "1.57" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [build-dependencies] -tauri-build = { version = "1.2", features = [] } +tauri-build = { version = "1.4.0", features = [] } [dependencies] serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } -tauri = { version = "1.2", features = ["api-all"] } +tauri = { version = "1.4.1", features = [ "system-tray", "api-all", "icon-png"] } +tauri-plugin-autostart = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } +window-shadows = "0.2.1" +base64 = { version = "0.21.4", features = [] } [features] # by default Tauri runs in production mode diff --git a/app/tauri/src/commands.rs b/app/tauri/src/commands.rs index 78f423e1..e17f55c6 100644 --- a/app/tauri/src/commands.rs +++ b/app/tauri/src/commands.rs @@ -1,17 +1,34 @@ +// Originally was only meant to have the commands, though due to the global mutex values adding a few extra for convenience for now +// Will tidy up in the future + use std::sync::Mutex; // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command -use tauri::{Builder, PhysicalSize, Runtime, Wry}; +use tauri::{Builder, Icon, PhysicalSize, Runtime, Wry}; +#[cfg(any(target_os = "macos", target_os = "windows"))] +use window_shadows::set_shadow; +use tauri::{CustomMenuItem, SystemTrayMenu, SystemTrayMenuItem, SystemTrayEvent}; + +use tauri::SystemTray; +use tauri::Manager; +use base64; +use base64::Engine; +use base64::engine::general_purpose; #[non_exhaustive] struct WindowSize; impl WindowSize { - pub const MIN: PhysicalSize = PhysicalSize { width : 340, height: 502}; - pub const COMPACT: PhysicalSize = PhysicalSize { width : 340, height: 100}; + + // Not sure why, if its due to UI scaling or what though these values seem to size smaller than the same values on electron + pub const MIN: PhysicalSize = PhysicalSize { width : 420, height: 602}; + pub const COMPACT: PhysicalSize = PhysicalSize { width : 420, height: 80}; } static ORIGINAL_SIZE: Mutex> = Mutex::new(WindowSize::MIN); +static HAS_DECORATIONS: Mutex = Mutex::new(true); +static IS_COMPACT: Mutex = Mutex::new(false); + #[tauri::command] fn set_minimize(minimize_to_tray: bool, _window: tauri::Window) { println!("Minimize! {}", minimize_to_tray.to_string().as_str()); @@ -69,35 +86,44 @@ fn try_set_size(size: PhysicalSize, window: &tauri::Window) println!("Set size to {:?}", size); } -// fn try_set_resizeable(resizeable: bool, window: &tauri::Window) { -// match window.set_resizable(resizeable) { -// Ok(_) => (), -// Err(e) => println!("There was a problem making the window resizeable {:?}", e) -// } -// } +fn try_set_resizeable(resizeable: bool, window: &tauri::Window) { + println!("Window resizeable {:?}", resizeable); + match window.set_resizable(resizeable) { + Ok(_) => (), + Err(e) => println!("There was a problem making the window resizeable {:?}", e) + } +} // Atm resizeable seems to cause a problem where the size cannot be set smaller than a certain amount // https://github.com/tauri-apps/tao/issues/561, just use resizeable until this is fixed. -// fn set_window_fixed_size(size: PhysicalSize, window: &tauri::Window) { -// try_set_size(size, window); -// try_set_resizeable(false, window); -// } +fn set_window_fixed_size(size: PhysicalSize, window: &tauri::Window) { + let decorations = HAS_DECORATIONS.lock().unwrap(); + let new_height = size.height + (if *decorations { 0 } else { 34 }); + let new_size = PhysicalSize { width : size.width, height: new_height}; + try_set_size(new_size, window); + try_set_resizeable(false, window); +} fn set_window_resizeable(min_size: PhysicalSize, size: PhysicalSize, window: &tauri::Window) { - // try_set_resizeable(true, window); - try_set_min_size(Some(min_size), window); + try_set_resizeable(true, window); try_set_size(size, window); + try_set_min_size(Some(min_size), window); } #[tauri::command] fn set_compact_mode(compact_mode: bool, window: tauri::Window) { + { + let mut compact = IS_COMPACT.lock().unwrap(); + *compact = compact_mode; + drop(compact); + } if compact_mode { { let mut size = ORIGINAL_SIZE.lock().unwrap(); *size = window.outer_size().unwrap().clone(); } - set_window_resizeable(WindowSize::COMPACT, WindowSize::COMPACT, &window); + set_window_fixed_size(WindowSize::COMPACT, &window); } else { set_window_resizeable(WindowSize::MIN, ORIGINAL_SIZE.lock().unwrap().clone(), &window); } @@ -109,13 +135,43 @@ fn set_ui_theme(is_dark_mode: bool, _window: tauri::Window) { } #[tauri::command] -fn set_native_titlebar(use_native_titlebar: bool, _window: tauri::Window) { +fn set_native_titlebar(use_native_titlebar: bool, window: tauri::Window) { + { + let mut decorations = HAS_DECORATIONS.lock().unwrap(); + if *decorations == use_native_titlebar { + println!("set_native_titlebar! {} already set", use_native_titlebar); + return; + } + *decorations = use_native_titlebar; + drop(decorations); + } + match window.set_decorations(use_native_titlebar) { + Ok(_) => (), + Err(e) => println!("There was a problem setting the window decorations! {:?}", e), + } + #[cfg(not(target_os = "linux"))] + match set_shadow(&window, true) { + Ok(_) => (), + Err(e) => println!("There was a problem setting the window shadows! {:?}", e), + } println!("set_native_titlebar! {}", use_native_titlebar); } #[tauri::command] -fn tray_icon_update(data_url: String, _window: tauri::Window) { - println!("tray_icon_update! {}", data_url); +fn tray_icon_update(data_url: String, window: tauri::Window) { + println!("tray_icon_update!"); + let base64_str = data_url.trim_start_matches("data:image/png;base64,"); + + let decoded_vec = match general_purpose::STANDARD.decode(base64_str) { + Ok(vec) => vec, + Err(e) => { + eprintln!("Error decoding Base64 string: {}", e); + return; + } + }; + + let icon: Icon = Icon::Raw(decoded_vec); + let _ = window.app_handle().tray_handle().set_icon(icon); } /** @@ -125,14 +181,42 @@ fn tray_icon_update(data_url: String, _window: tauri::Window) { * Switch to a function that takes and returns tauri::Builder or uses a reference if we need to * switch it. */ -pub trait CommandRegister { +pub trait PomatezExtras { fn register_pomatez_commands(self) -> tauri::Builder; + fn set_pomatez_system_tray(self) -> tauri::Builder; } -impl CommandRegister for Builder { +impl PomatezExtras for Builder { fn register_pomatez_commands(self) -> tauri::Builder { self.invoke_handler(tauri::generate_handler![set_show, set_always_on_top, set_fullscreen_break, set_compact_mode, set_ui_theme, set_native_titlebar, tray_icon_update, set_close, set_minimize]) } + + fn set_pomatez_system_tray(self) -> tauri::Builder { + println!("Setting system tray"); + let show = CustomMenuItem::new("show".to_string(), "Show"); + let quit = CustomMenuItem::new("quit".to_string(), "Quit"); + let tray_menu = SystemTrayMenu::new() + .add_item(show) + .add_native_item(SystemTrayMenuItem::Separator) + .add_item(quit); + let tray = SystemTray::new().with_menu(tray_menu); + self.system_tray(tray).on_system_tray_event(|app, event| match event { + SystemTrayEvent::MenuItemClick { id, .. } => { + match id.as_str() { + "show" => { + let window = app.get_window("main").unwrap(); + window.show().unwrap(); + window.set_focus().unwrap(); + } + "quit" => { + app.exit(0); + } + _ => {} + } + } + _ => {} + }) + } } diff --git a/app/tauri/src/main.rs b/app/tauri/src/main.rs index 62d7a98c..3e47075e 100644 --- a/app/tauri/src/main.rs +++ b/app/tauri/src/main.rs @@ -3,13 +3,17 @@ all(not(debug_assertions), target_os = "windows"), windows_subsystem = "windows" )] +use tauri_plugin_autostart::MacosLauncher; + #[macro_use] mod commands; -use commands::CommandRegister; +use commands::PomatezExtras; fn main() { tauri::Builder::default() + .plugin(tauri_plugin_autostart::init(MacosLauncher::LaunchAgent, None)) + .set_pomatez_system_tray() .register_pomatez_commands().run(tauri::generate_context!()) .expect("error while running tauri application"); } diff --git a/app/tauri/tauri.conf.json b/app/tauri/tauri.conf.json index e413a46b..b99c3617 100644 --- a/app/tauri/tauri.conf.json +++ b/app/tauri/tauri.conf.json @@ -8,12 +8,16 @@ }, "package": { "productName": "pomatez", - "version": "1.2.2" + "version": "1.3.0" }, "tauri": { "allowlist": { "all": true }, + "systemTray": { + "iconPath": "icons/icon.png", + "iconAsTemplate": true + }, "bundle": { "active": true, "category": "DeveloperTool", @@ -56,12 +60,10 @@ "windows": [ { "fullscreen": false, - "height": 600, + "height": 502, "resizable": true, "title": "pomatez", - "width": 800, - "minWidth": 340, - "minHeight": 502 + "width": 340 } ] } diff --git a/app/tauri/util/cargo-version-updater.js b/app/tauri/util/cargo-version-updater.js index 20a44c79..c7be5483 100644 --- a/app/tauri/util/cargo-version-updater.js +++ b/app/tauri/util/cargo-version-updater.js @@ -20,4 +20,6 @@ fs.writeFileSync( "utf8" ); -console.log("Setting Cargo.toml to version " + process.argv[2]); +console.log( + "Setting Cargo.toml to version " + tauriConfig.package.version +); diff --git a/package.json b/package.json index 7500cf97..922c7d63 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "commit": "git-cz", "dev:renderer": "lerna run dev:renderer --stream", "dev:main": "lerna run dev:main --stream", + "dev:tauri": "lerna run dev:renderer --stream", "dev:app": "cross-env ELECTRON_ENABLE_LOGGING=1 lerna run start --parallel --stream", "prebuild": "lerna run prepare --stream", "lerna": "lerna", @@ -19,6 +20,7 @@ "build:mac": "yarn build && lerna run build:mac --stream", "build:linux": "yarn build && lerna run build:linux --stream", "build:snap": "yarn build && lerna run build:snap --stream", + "build:tauri": "tauri build", "release:mw": "yarn build && lerna run release:mw --stream", "release": "yarn build && lerna run release --stream", "clean": "lerna exec -- rimraf build/ dist/", @@ -57,7 +59,7 @@ "rollup-plugin-typescript2": "^0.27.3", "typescript": "4.9.4", "wait-on": "7.0.1", - "@tauri-apps/cli": "1.2.2" + "@tauri-apps/cli": "1.4.0" }, "resolutions": { "//": "Check https://github.com/facebook/create-react-app/issues/11773 to see if it has been fixed yet", diff --git a/yarn.lock b/yarn.lock index a1a215d9..8b83d0d8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3649,65 +3649,76 @@ dependencies: defer-to-connect "^1.0.1" -"@tauri-apps/cli-darwin-arm64@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-1.2.2.tgz#f18b0689b399b64dc67da41c0fd4da474be324fe" - integrity sha512-W+Cp2weUMlvmGkRJeUjypbz9Lpl6o98xkgKAtobZSum5SNwpsBQfawJTESakNoD+FXyVg/snIk5sRdHge+tAaA== +"@tauri-apps/api@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-1.5.0.tgz#46a0f9b6edd4bfc39be32afc4ad242e0b8cca3ea" + integrity sha512-yQY9wpVNuiYhLLuyDlu1nBpqJELT1fGp7OctN4rW9I2W1T2p7A3tqPxsEzQprEwneQRBAlPM9vC8NsnMbct+pg== -"@tauri-apps/cli-darwin-x64@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-1.2.2.tgz#4450bd244f586da346651f62a5a41686cee36db7" - integrity sha512-vmVAqt+ECH2d6cbcGJ7ddcCAZgmKe5xmxlL5r4xoaphu7OqU4gnv4VFURYkVltOfwzIFQVOPVSqwYyIDToCYNQ== +"@tauri-apps/cli-darwin-arm64@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-1.4.0.tgz#e76bb8515ae31f03f2cbd440c1a09b237a79b3ac" + integrity sha512-nA/ml0SfUt6/CYLVbHmT500Y+ijqsuv5+s9EBnVXYSLVg9kbPUZJJHluEYK+xKuOj6xzyuT/+rZFMRapmJD3jQ== -"@tauri-apps/cli-linux-arm-gnueabihf@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-1.2.2.tgz#a4d5b95665620605fb0f54cb77f8134239b58370" - integrity sha512-yYTdQurgi4QZR8z+fANjl522jdQz/VtesFpw+C/A0+zXg7tiRjicsywBDdPsvNzCqFeGKKkmTR+Lny5qxhGaeQ== +"@tauri-apps/cli-darwin-x64@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-1.4.0.tgz#dd1472460550d0aa0ec6e699b073be2d77e5b962" + integrity sha512-ov/F6Zr+dg9B0PtRu65stFo2G0ow2TUlneqYYrkj+vA3n+moWDHfVty0raDjMLQbQt3rv3uayFMXGPMgble9OA== -"@tauri-apps/cli-linux-arm64-gnu@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-1.2.2.tgz#c992907586b42e2085160d45b3a17316c99febea" - integrity sha512-ZSOVT6Eq1ay2+27B8KfA0MnpO7KYzONU6TjenH7DNcQki6eWGG5JoNu8QQ9Mdn3dAzY0XBP9i1ZHQOFu4iPtEg== +"@tauri-apps/cli-linux-arm-gnueabihf@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-1.4.0.tgz#325e90e47d260ba71a499850ce769b5a6bdfd48d" + integrity sha512-zwjbiMncycXDV7doovymyKD7sCg53ouAmfgpUqEBOTY3vgBi9TwijyPhJOqoG5vUVWhouNBC08akGmE4dja15g== -"@tauri-apps/cli-linux-arm64-musl@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.2.2.tgz#f8bd7901ce525b8433919e2cfe7ec22aace0f776" - integrity sha512-/NHSkqNQ+Pr4PshvyD1CeNFaPCaCpe1OeuAQgVi0rboSecC9fXN96G5dQbSBoxOUcCo6f8aTVE7zkZ4WchFVog== +"@tauri-apps/cli-linux-arm64-gnu@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-1.4.0.tgz#b5d8f5cba3f8f7c7d44d071681f0ab0a37f2c46e" + integrity sha512-5MCBcziqXC72mMXnkZU68mutXIR6zavDxopArE2gQtK841IlE06bIgtLi0kUUhlFJk2nhPRgiDgdLbrPlyt7fw== -"@tauri-apps/cli-linux-x64-gnu@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-1.2.2.tgz#a558862d7101b0a641c5a994c9ee74edb8300fc5" - integrity sha512-4YTmfPuyvlHsvCkATDMwhklfuQm3HKxYXv/IOW9H0ra6pS9efVhrFYIC9Vfv6XaKN85Vnn/FYTEGMJLwCxZw2Q== +"@tauri-apps/cli-linux-arm64-musl@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.4.0.tgz#f805ab2ee415875900f4b456f17dc4900d2a7911" + integrity sha512-7J3pRB6n6uNYgIfCeKt2Oz8J7oSaz2s8GGFRRH2HPxuTHrBNCinzVYm68UhVpJrL3bnGkU0ziVZLsW/iaOGfUg== -"@tauri-apps/cli-linux-x64-musl@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-1.2.2.tgz#573e965a638864a65b606783d3dbd34114939277" - integrity sha512-wr46tbscwFuCcA931R+ItOiUTT0djMmgKLd1HFCmFF82V9BKE2reIjr6O9l0NCXCo2WeD4pe3jA/Pt1dxDu+JA== +"@tauri-apps/cli-linux-x64-gnu@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-1.4.0.tgz#d3f5e69c22420c7ac9e4021b7a94bce2e48cb45d" + integrity sha512-Zh5gfAJxOv5AVWxcwuueaQ2vIAhlg0d6nZui6nMyfIJ8dbf3aZQ5ZzP38sYow5h/fbvgL+3GSQxZRBIa3c2E1w== -"@tauri-apps/cli-win32-ia32-msvc@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-1.2.2.tgz#0fe38283ffeb71acac6a6a317951dc75ec2d3dad" - integrity sha512-6VmbVJOWUZJK5/JKhb3mNFKrKGfq0KV7lJGumfN95WJgkHeyL61p8bZit+o6ZgUGUhrOabkAawhDkrRY+ZQhIw== +"@tauri-apps/cli-linux-x64-musl@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-1.4.0.tgz#2e7f718272ffdd9ace80f57a35023ba0c74767ad" + integrity sha512-OLAYoICU3FaYiTdBsI+lQTKnDHeMmFMXIApN0M+xGiOkoIOQcV9CConMPjgmJQ867+NHRNgUGlvBEAh9CiJodQ== -"@tauri-apps/cli-win32-x64-msvc@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.2.2.tgz#9b8ea7c63f2883af105e204fc4f1f11a83990a59" - integrity sha512-YRPJguJma+zSuRZpFoSZqls6+laggG1vqG0FPQWQTi+ywATgMpai2b2RZnffDlpHKp9mt4V/s2dtqOy6bpGZHg== +"@tauri-apps/cli-win32-arm64-msvc@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-1.4.0.tgz#85cdb52a06feb92da785def4d02512099464525e" + integrity sha512-gZ05GENFbI6CB5MlOUsLlU0kZ9UtHn9riYtSXKT6MYs8HSPRffPHaHSL0WxsJweWh9nR5Hgh/TUU8uW3sYCzCg== -"@tauri-apps/cli@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-1.2.2.tgz#cf7cb90d11c3c3b757efe07b7e2c48abde045ada" - integrity sha512-D8zib3A0vWCvPPSyYLxww/OdDlVcY7fpcDVBH6qUvheOjj2aCyU7H9AYMRBwpgCfz8zY5+vomee+laLeB0H13w== +"@tauri-apps/cli-win32-ia32-msvc@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-1.4.0.tgz#0b7c921204058215aec9a5a00f735e73909bd330" + integrity sha512-JsetT/lTx/Zq98eo8T5CiRyF1nKeX04RO8JlJrI3ZOYsZpp/A5RJvMd/szQ17iOzwiHdge+tx7k2jHysR6oBlQ== + +"@tauri-apps/cli-win32-x64-msvc@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.4.0.tgz#23abe3f08c0df89111c29602f91c21a23577b908" + integrity sha512-z8Olcnwp5aYhzqUAarFjqF+oELCjuYWnB2HAJHlfsYNfDCAORY5kct3Fklz8PSsubC3U2EugWn8n42DwnThurg== + +"@tauri-apps/cli@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-1.4.0.tgz#72732ae61e6b7d097e44a8a2ef5f211b2d01d98b" + integrity sha512-VXYr2i2iVFl98etQSQsqLzXgX96bnWiNZd1YADgatqwy/qecbd6Kl5ZAPB5R4ynsgE8A1gU7Fbzh7dCEQYFfmA== optionalDependencies: - "@tauri-apps/cli-darwin-arm64" "1.2.2" - "@tauri-apps/cli-darwin-x64" "1.2.2" - "@tauri-apps/cli-linux-arm-gnueabihf" "1.2.2" - "@tauri-apps/cli-linux-arm64-gnu" "1.2.2" - "@tauri-apps/cli-linux-arm64-musl" "1.2.2" - "@tauri-apps/cli-linux-x64-gnu" "1.2.2" - "@tauri-apps/cli-linux-x64-musl" "1.2.2" - "@tauri-apps/cli-win32-ia32-msvc" "1.2.2" - "@tauri-apps/cli-win32-x64-msvc" "1.2.2" + "@tauri-apps/cli-darwin-arm64" "1.4.0" + "@tauri-apps/cli-darwin-x64" "1.4.0" + "@tauri-apps/cli-linux-arm-gnueabihf" "1.4.0" + "@tauri-apps/cli-linux-arm64-gnu" "1.4.0" + "@tauri-apps/cli-linux-arm64-musl" "1.4.0" + "@tauri-apps/cli-linux-x64-gnu" "1.4.0" + "@tauri-apps/cli-linux-x64-musl" "1.4.0" + "@tauri-apps/cli-win32-arm64-msvc" "1.4.0" + "@tauri-apps/cli-win32-ia32-msvc" "1.4.0" + "@tauri-apps/cli-win32-x64-msvc" "1.4.0" "@tootallnate/once@1": version "1.1.2" @@ -16835,6 +16846,12 @@ tar@^6.1.2: mkdirp "^1.0.3" yallist "^4.0.0" +"tauri-plugin-autostart-api@https://github.com/tauri-apps/tauri-plugin-autostart#v1": + version "0.0.0" + resolved "https://github.com/tauri-apps/tauri-plugin-autostart#ddb8917170309ce52fb9d433f58570b5caf6b27a" + dependencies: + "@tauri-apps/api" "1.5.0" + temp-dir@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" From 11ab40e4097d9501489bbbd2d2255230a8f6aca5 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Sun, 1 Oct 2023 03:55:31 +0100 Subject: [PATCH 24/37] chore(tauri): update bundle config --- app/tauri/tauri.conf.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/tauri/tauri.conf.json b/app/tauri/tauri.conf.json index b99c3617..35cb146e 100644 --- a/app/tauri/tauri.conf.json +++ b/app/tauri/tauri.conf.json @@ -7,7 +7,7 @@ "distDir": "../renderer/build" }, "package": { - "productName": "pomatez", + "productName": "Pomatez", "version": "1.3.0" }, "tauri": { @@ -20,7 +20,10 @@ }, "bundle": { "active": true, - "category": "DeveloperTool", + "publisher": "Roldan Montilla Jr", + "shortDescription": "Attractive pomodoro timer for Windows, Mac, and Linux.", + "category": "Productivity", + "targets": ["all"], "copyright": "", "deb": { "depends": [] From f57caa005debd0aa78271c5f639f117b65e092c3 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Sun, 1 Oct 2023 10:12:00 +0100 Subject: [PATCH 25/37] feat(tauri): add closing logic --- app/tauri/src/commands.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/app/tauri/src/commands.rs b/app/tauri/src/commands.rs index e17f55c6..55d23a9a 100644 --- a/app/tauri/src/commands.rs +++ b/app/tauri/src/commands.rs @@ -30,13 +30,23 @@ static HAS_DECORATIONS: Mutex = Mutex::new(true); static IS_COMPACT: Mutex = Mutex::new(false); #[tauri::command] -fn set_minimize(minimize_to_tray: bool, _window: tauri::Window) { +fn set_minimize(minimize_to_tray: bool, window: tauri::Window) { println!("Minimize! {}", minimize_to_tray.to_string().as_str()); + if minimize_to_tray { + window.hide().unwrap(); + } else { + window.close().unwrap(); + } } #[tauri::command] -fn set_close(close_to_tray: bool, _window: tauri::Window) { +fn set_close(close_to_tray: bool, window: tauri::Window) { println!("set_close! {}", close_to_tray); + if close_to_tray { + window.hide().unwrap(); + } else { + window.close().unwrap(); + } } #[tauri::command] @@ -203,6 +213,11 @@ impl PomatezExtras for Builder { .add_item(quit); let tray = SystemTray::new().with_menu(tray_menu); self.system_tray(tray).on_system_tray_event(|app, event| match event { + SystemTrayEvent::LeftClick { .. } => { + let window = app.get_window("main").unwrap(); + window.show().unwrap(); + window.set_focus().unwrap(); + } SystemTrayEvent::MenuItemClick { id, .. } => { match id.as_str() { "show" => { From 0b3df63371f4f323ea61e921ce1ca8734ce07cf6 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Sun, 1 Oct 2023 10:12:18 +0100 Subject: [PATCH 26/37] feat(tauri): improve installer --- app/tauri/installer/banner.bmp | Bin 0 -> 114514 bytes app/tauri/installer/dialog.bmp | Bin 0 -> 615402 bytes app/tauri/tauri.conf.json | 7 ++++++- 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 app/tauri/installer/banner.bmp create mode 100644 app/tauri/installer/dialog.bmp diff --git a/app/tauri/installer/banner.bmp b/app/tauri/installer/banner.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b62cbb3c0adf8f143c729795749d4ac96df08152 GIT binary patch literal 114514 zcmeI*X>1f_9LMo(OQ8i8x^H-ecu*i>L_@?IiA{_rO3-*GXuPY4M#U4g3MwGC0tH2a zi6mMyBv=nns>X<@ShWfPgNPh*wLr^G_vrq89&k1@yMyg+cW1}#cf(}5%kIuIpLvqs zKF`cNPsQl5YYTk(F-Aw&0`Hub5&!yth zv5%Pl)6sQd!W)GL0tg_000IagfB*srAbz#3q(SO z#9A69c6h%#OG}eP!lAr2W#*F7L&;Sza;eC3JIYmToVno&JAmg+#X1r?q>02mu5TKmdWf5Qw!& zc-`{jX7$0>3S|5ABH22%n{0h0%Zu8^ju}OA`1Jzk@~D3E$i}+7U}q-~KmY**5J*)Z zT)!$QACD~X$@)p%W%5|Rj2IMt}Pj!eL?`5kLR|1Q3w0 zx}MA0zSifEAH1Zm=knUj?pZhbC1|}iP4|&E?&3%yfB*srAdvS0t)IMN%k0{ROFf&{ zW^VuZe0N)!L+fku{y4FN2q1s}0$p1ms>U`m-W(Rszn1wvx#1k|^@*EVZLVJ!(Ls!0U#LVfE<`>xgKqCe~B1J z^7SyWUkD(800Ia|G~rzKS5Njxt6zMAI{#fY#xG};yK^sCdH;ZHR=+Q-=i%F$c5_4# zKmY**5Xf7B=fGUE|I@-M=Jd_BIYE0tg_000Ma{(Amr$ zc5*-tsWDBhebiI0_q)>0CbRRlTC!sZAb< zPgTY8<>Mu`rEX%0teQ}IbUw|?&dAKzs9ZPh!3sr@5I_I{1hOWOjm);*_vQ5WAvJH< zT9x5f5AR%dli69T7JM-R2q1uf2L*DG*=COKnN=uHT#^3xD`d6@D-=aS009IL$eKVd zGh1hO)4T$iczJrcO=f4UTJXgPAb?l%cW`R+fsxrBtWXpQ z0R#|0AZr4-$ZVbCRb%=j^^@z@oHG7+uaVhVs}_7Q0tg_0fCmL~mDxiE1mtgZ-MF=_ z{m$LJ$ZQYR5sHKW0tg`B4S`H#_Q8a?IHz@BF3xh**50hHRkLRH%JDtPY;RNxN`U|Z z2q54=fzD?3sV4?x?;Lx3dGT$%+s)qc{(+=(+BNr)*&eJS6bS(Y5J12q0-eoleXe=S z%l7v2x~F@zo7v+o>?=nW_-yU$**CSH_11ISoX_@1C88JzAbF8kYOde}bGtUfb3#j#AuY*(rX8$kd81Q76uKqfN#zKY~F^WNEo^3+wy z*MXlsC?IPdEwSab&in7x7%bK{bVvRsvprIYCK5dJk8L7=00Iag;Hp6A=TB{!y>n)fT&(Wh>PU9x;yt&I>??`$ zl7zQ6xN6465I_I{1Q5uDKs4Aa!6g^ia$AordfG|e>mwgEv@B_S^Wb}TODr161s&T& z009ILK)`i@&@ZcPnXUWC^;{npse89_(Ux}F=5-^=WYZM;wcJaaWhlYJd009ILK)_KT+R`Mg8&-<3{MOuNceNVx zWyJ#$YWPgrT7!;d zH&3MrDqXzujyr0obmtvK?#QV=_fy{&FMo%T)W@5Da>pIEe|(lk%{wLPZ(LpGu`bHn{`+rX3S0(`?!B|;#k)@`k4^$4KmysDfTQx)UU}^aeg5mOzl1647-ZxgTAv9= z&knZpj|5171W3TM1niZ$)^gcg#+$YF&p-c^%t$wG+z=+m47`00%=g^n{`f<(I%U+`yM@AN&#Qa=m& z*)TsZ)@KQy`9}gIKmsI?aRTrM8y3E#Py)OIHt9`%!{=0ZG{r1~$63EGu ztkQGOaKH7v*Uti;4gH*8sh=Ht&lR;hrtu@3| zoxFDKnz)*-UcD-rk*-|1BAK1MbzQEqweIKY{loo+*6U{g&x1Yf*3Xdj*`j7=@3Mwh zPXZ*6eggK&Q(e}Y^;(z7TCY)NqwGdGugiXW8sv%&UcP);(wlz$^;gNRDLu?wxgUBT zd-oIDaKCZi9cj1O=GM=W^*Kxb6U$$c011#l_9b8~OLZA*)oVvujWQf%JoLk=oxl9@ zi#SV{E?p8w>EgwU;%@r+=byzB>B5Bz;;rO~{NWg`uyMrJyxrOT(cf9`EABP!Iqtnx zyS2?t-Oj#c3a^|5NWgmp%$n`0Uc=7PT8;7?Wjl1ho{l)vC|7jxr=NZjXX*U;^O9CN zckZ0{TT1Ji%-=iXqrY>;+Sxs_S3khL#(jr&o9%AxFQ;yM?|tQwNq_{hF9EY&W8JLT zu#?~qH`~|R53cQMt<@;kp$%poF|S+o^6c5O;wYUtb4Hw{AAkH&9Hk$A_(9xF-+%wT zWOZ^k&)DA)18jH3Pk(3SZ@ow6&*poH`waa@{Y-1O)#lbQYIuIqvbVGE+s7*>0TLhq z_XwCZ+a0}zjfL`BYc-{PIi5>f|hc*6*y>htH09n7LtHGc_;G?6GdXH`e>6@2S>(XgahTbv4x4pxf}d zIMQukrLwpevX>ylYJ4<0-y=5*k|0nusy{{3Q3UwrX}*h~BN?Gs07@7}%QEbZB|N4%As zomYS7DBpU!z3VkI!Mf(9mu8-twPuf{^}gu)WxbEMztDGRIO=GyzhQH0-PZOt>UXH; z;rXGD-0^$JZ%BXyNWc{WX3chHW5Xv7y+&Il+OMs8jdB|{8OnB){m=ug4_Ys<)S9C8 zM(dAWYP~XR<>#M&F4pwfXP=2VefsIAVoslY@`+f}?%lh^S^D_nkHt~?=%bIsQ_0ae zu-#eytk;9j=4-~fnF-dd+{|1xYrWL>K;IiI_5ITKP~TH5agU+t&~DV#?CCb@cX)2_ z{Fr^@Iv!0wbLQvJmFJfGkN^pgKz1ZxE-S4zHvE{djbI~bpE!J;@O_%?Yv?s>Yn0z8 z$5GZp2edwzbwg{4)*7utX06hiX4S|KKm1V4Y1gh@Voe`>@PQz`|Ni?9)6Shc#a`O6 zV~03O+qZ8QPbPckv6m-ob962GTFpz%!^{cmR+jjzIcxU%UYP3w`hMwqsP8H6FEk!n z4%=MY-0-z%dmHsS)bCKw)3!Er+uHvN&z<=>%#QCNubBi$fCOA2U@j}QW?S2_wT-QP z;=27B{&2)AX}w1IjdC32Jaj;7f?jIfFzbod7_%;E?Xv2cRWrA3+a@|~-MUqD+OlPf z=(KtBW-+Htn>L9xZQQs~9Hk8#Hi$Qpqw`twhR^2wo7ZuT`kM7p^RTkAvczZ2*~}jL zukQ(#`d;aKr|%{1FSH#R4qF_)6|=pK_7c?VP`|@-10T8B);70mQ?p%pQ@IZbkN^ot zD*MK&+2&Yrl)136wND(j6!aSYaM;(-YuH{W$5GBh2ec+=y?~BrP0>rOHD)c+x@FZh zt)1)FuNR%xty?GNw07-UL0YqBO{%nd^=fgHR;^kk=Jeis?@4AQ^Lh2UqkLMgNnb0L zW(JxKmYSKFrRJ-bn!T>)=zD^tzE8RipzkH_FZ3N64jbI8+wi-fKBwEZt+uvq*LLI| z=X*&4BtQZrV4r}tv!T~!%{IrL!LJGbCgO?^7mOHjv|S?p2<_MKhikotZHDq4<-gVf zXoJ=atsz=hwAPsQNNbkXFspvP`|i7f^v*l)q@=gsep`^#x5qj?!zdy(Z@L>Z`Acr;_=&dfi?=tob!x57zay>TAbRGtrDRJIxYH%~vnA_Un6r zrM^GTRgMp&p0&9O`x2)<%8L+^((tkN^pg zfLXKc_3zStadSI1`gG|wZ1_as4~KmXy9;(1%6F9e+TPXL0KL!}qBTWpjMg3Kkk%%v zW@&xHQtRg{ue>7W^zzFu3)0G!D^t=-FTEt@^x}&zioNv03onQ@J^%dk;>~0|pEY0R zeCu_6ZTecx*N=6u(X7mM0nJnM)w-|Q>wBT^jlNfAz1MXst?Q_pY2AjO9I0Y{px{o>ljMwx51v0+oeCyMrK_`{*su*;y) zDF3wOAhHw&$Vg&~B~UsJEg1hI$-g9JH;C_y_oCbPT!f_eIUN|4wo%36KB@I3nOo zvr)F{{@5sU;pc?E6E-&Djo=f9Z3W*b+Bsog!zP0^qx{!epzT3ugjs{3BU)dy?qKOi zYqhRvy@QrM{`liYdhD^s#GIBdUoJ?GKKiJUmMvQ*=CpL_Qn98bOO}W=End7>ypgQu zvE~Jz&H2T;z81aI*Ql=>EOh-sGt$h=^#Es@kNW|gw`#n;hx(pE*HQO^O%6Xg{N!jC zLH!N&IJ2#dc5QPkn$~Ri$IWfp`dP%1e6H5(|WA!LTHB860I#-Yqb7oJ%T=I?b5nt);q1Iixw>s zq(>fkL>4Ywn35JOSRmFkfBt+ir+M?{3DVrTb8ky?=FAaqBqGU(jvX+wiZT-iG=cVjEy)DX`~r5W{5dWpFUl5 znl^2knA6m$Q^lI5Oqn9yNY?Y1^P%&Hr8)2Vn)Fg%tG;${uvZrVH#0}A_x5z&Y~Q24 zr1f3jLw!$ie^K{>Zo_|$`WotOsK22ehj=uMm1gyi>%Q9dG}|19MqAs_8_Vq^KmysB zfIZFDG2@6ogJ$ctZ1lNB8H}g`EyN9Q8D`aiiXbJ_E3|(XI_&jE+S^y9(M@sM*=MwBfar010H2fFsR@ z9R$tReY_Ayq~pa=7Gtb4l+7rk5g!hpINCsAf1zAQd9U?Y`+cDe+9rf%Ku5G4skO$c z!DiisWs8lI2F;T2($Nhq~>wBp0Def=oV6eYYPec1Q zVi{m-qg@+)wh`|D|G4g}t=qH_*GM}%qi-&MPXZ*69SOLq*|3wK+31svu__UJhO!xD zw6?KfbHSeq8(Q1RW?hCRXr0iuq1F+tEzlb1j@BUPk=7=yRa(EazCrJ__UUDOe7qoy z7%{>~!-o$SYl@4D6LT6iY?zqS(4j*`r`Xt7LDHWyx-_3hubcCNb)8>*4SK1s4fP6r zy?UvcXhxcuW@t~}HG8e=u;2Cl!To}!>$;V;*R_trhk|+<;tOGGBOVQ7>A(kreqV@H zL|=ZitC%$#acI^UH2TJ~V+q7-CIJ#~hk!H9hCPJ-Iq+%f_%ql|u%8egjJ8X}9-*v8 zyXG=wU&llZl+GR7ONVxCq$ljiq_hM)p$^wcV7OHEAdgQ)BfVlCym> z@SQmy#=4_CtL?X4qq=5XyOD14NX03Inc}Hff+-R>8|fzdwrYucq3=z*HZ6_&)xNE| zZd7B@zjc00}rJkd~c|_H46e!`BJ>33e3h zDZ~pS_H5qVITH5JKdIN*Os{nvZOGtg!#|F(bP$t>F?Mtu8v64?voR)*9>Y}k(WYiQ ze?R#x36KB@m?zn)h#N**wJyK8%znOx0sSJ4KKW=T!Pq*8bwFQ0 z#4A#>&2JpnNq_`MApHcKX||3Vhn~TK|514b4U$eZ)9W zv(x`h@|Pq)0wmywfUBB~7&NWfx}TS}v#HtH&#t!mQlQxw9}SufI~()G(9U-B)^R%t zkN^p!kASLHmvdA!V-IYpW^tmRaTn>DO0 zb7!itNG2ysdG)(M)oJr}nKc{j+3<~H+#PcaT3U8Co<*I!|K#%wBtQZr;C}?%(QNe3 z&W@U0u}pEpb{-Pd-(}kwHg;@ue_1$prc?|s7Vx@F&Gx@{pE)K067W9)-q!4L#qW{U zP3uXW+BKDK1xurv<<(eX4Ww$hlG3_)L#b3gTv|4&DfQ~smdfD|NV&3MQnNxyW1o@_ z{a0#LDJNkM{zGb1i7rm`>s>7 z{qNmpj!A$7{EvXgG+T{HZBNIVRw*IFhYgl_(~?!&Z#Ok|^%RL7&{sOQX)dt?ddn0w zwslnhUNV2?WJws@M|wpMmO0ZV%Glx25)~IOvnGv|Dkbk1jDbC%M+cccW~g-R6Jz&W z_RgQtZP5ez$h1kxQu6-b^qo`vZkqC`BVH||dGY1nQ?vc=-Di$TfCT)HfGe7<#~XL* z8+V}DVGo8#Y-DGdJ8PN@i|i)TXU&w^)5gk>fsry}`V{Hdu7k{;oFqersX06%Tg!kU zLuB%#@zONnAsMf>0b#K^|y4fdu7?8c~UhZ z%i}# z(x^o{857rECX7yyegmT=Zcq=SPgV6=_0pw%l~lX*$l*g|%EYlUVcaNb+p@9K zL8eX|XLp}cMei|u<};>DF#3Jj(=qcl*y`OMZg2Nk*soNPd!%u_>Z$ayPPGWBQ7PQv zZ_LNHzwVxIAhK6iBkp}{QoOWj(MYOSEG=V3jgWEb^W+Jmo%;8w+5Y$LGsh%A0{%z9 z+nQaz*gs^4e7tEa@ z392p-Ufgjzdk>}8lg5v6crNJq>=~1dV>YZ^)!46p-|o`0i({R)=BriH`i8#3{)cT3 ztt}UNzr%A{e;*q&P)5bas(xz^r~C%Ik;W?RE>-m2lm`nkr;mgB z41PCuRJ@E=lOT=iR+CW)!z3YYu=MNQ&EYxqG4wL3e;=t`wVVtaJV5&Pgl^xm z)5j*crrB@4`KB>;slC2lY0VLWXHh5rdy|-B5+DH*@IHa`Xg22c(sP9Pi)MFFU*1hJ>0(4ZQGz>(85Iv=19dd_WNm>HCt<5WfcoQZ`M@l->3U+$E;MgxN$tQ4(i`w zsWn@lyGNG}MjLo!uP(P8%lx}y|1Dtj8*i%WBw-KzLuvPLL+2CXVhr1ObmDNQzc(KX z>$;78XpGivTiwD_nvMChF~_UDdA+n=W63`fAOR8}f!hgW7tO9zwuEY%9xG)^{MWEO zJGON`*Ecj9bIugOns z)mMCmX3taceXz-q2WWP$ZXG2_+1X_?ClVtX5aqq za0>~L010F^0d3p-?|=W3zyJPQFrV>_8#m;SKmHK&yk3sx2+4?@-K;@vL)$`?_B5`K z^;^DJY-`#`jW>3`=f?l+*14TAHW^~99)EO^)3$7A8rqkeH?Dh|{^Gk7%~skD|1KSoE z2Fi$`QSxwy)^_t_FCVeWwys+}BGvxUsy|+pawR;f*;lV#HJ-2Q*RLDT8=gBnfBIRZ zot@dG0MADPB;YRubUB$(&7L-GYO1o{o+eng%~E~2pwrOj$>WAg*@_r-vbHF%lOWWp|&lCI4&0o?*Nd#8$&E zZvDOa^N69*GTgzjuphJ)?dKC!JbR7GWsGCN$L@+|>+@7oao(`E@j1NszYX1o&91*s zYYEM6P^*%ZF7|Izx>v2=Ys9m;5`&gjdp3OITC-6%L>-Zu?JuPT^GO0EkktfyL9?MH zgF4rf$e5vqzC^aKBO~GyWzOtL5*`}rvgV|vN&0)k2dsSM`m>{DgW6SO(frw}jn|Iu zDf_x-*N)P(fvuk5=or`z+k4T1*;2oj^M2*kDx~fQUaM+(BmUdju|4@+tELSMpZdrV zv0_b#XS2&eT_5tGnn2?&X*GZ&AM?&(55|8jmg%lo2~y@diAlliV2@FbwaAX*Xcc$ul}xoq;39e zYIY!(7Q8kRAc3qVU{ACE{PWM-+OyA{J136%dcE}0OKMC~_k81ZBOa8PDEOUkwP8p0 z>?oy6+U(zoCGL@-LkCHT`~I1xJ?u>#tE=Y2essw~HNHst#x|)@sf;XFzprCyC-!EZ zv*OtOBm2mT6)VK7*?afyO*O9<`g-ZOal}i|H=fmRKhIABB;aoZvP!eFLRZpzPT0wq zGrLN8=WW*3<5wvkYK$wEQ9IpwTwnZ5&Gxr9pZO&L67WX?)a=w_n>f-##D*_jG+)}a zYT|<3Us&3=ZYs;v{umF`(J=#QJ2l%M-+tzq1W3T&2)Lrzm?H$faXm)}##H&}qmN|E zmMwz5UWRXcs(Ze1f7Gj%P3jqAogr4dYsWT%*zw}`6*9*5#1fyoc4{NDr%yIw%3G-Y z{qZ`}ljnYReB*oe>`C#BpE+|z=o|O9(t-IU0TS>v0@Q5R>};)L7;B_+`<6yO?@HGPI)ok;4({T#Z@>K}moHxyJr3IG)2HRwv15X9&~)55eB;jS z>~d;sunMK_X9^GomBJsgJ6?=62F>gnKY8+`&^PX{B?R+L0wmx|1gP1pPqA-xG015aS0Z(YQ zF?OkgzFut44y-zXyS{O1wy(YM%nu2WfIkzUW(St0x??k^XJ2ZzKfmqFI|-10zZ0Nl zQ?uRCZfdr_zwyjJ36Ow46G%(5uUxs3($@=fgrKk2fddC*_wL=YWy=;}U$5+?`OY+3 zkAt>x<3`baz2F-^apFWuUoZ3>ymsxH{PD*ha^uDg`RlL02067VJgT~4CRMA?Zl^v^&46x~0Ynw`BgIW3!;n(fWEk;f(h5+DKR1gP26_>`TN9gNq_`Mz?%fDnhjgqYG+@%bV<&gJ12S^H0>MTx^?R<-}uz2w~c3s@h$De zjYovtClO(`@zJV9l#p7LOR3NINrRddq@o%x4C{5Pm6M3j|4R9i|29&EQulEzwM-sM ztyA0PQlny6D(;RnyPujPWW|aV^442#iS~`}+qX~5apOP#{IfBx9(?2Qn=$SW&fkacTT$-?=wWzDL0 zWaSIb$tNFwD63b!D-U;Qok}~*wjb9$?<+vPY0iwv(xpSoRNOtG*%%X-njJ``2(N_% zNFcKaWQAr=N*<&1c!jKZ=1Ez*`dxYBwU=d7{4ja@&DZ3WmtHWmJAT+;sad(S@m=zm zk*Rcp8tr+Fw#Rf}WDjXryHYCl)a=Z9GkG2oAORA%oq)$Q+l?_*v}TV=h%@Zz%^TOt zf_XD#!@4!HeA!~zxPGmn)lKSElX^8GWXq=YQm=aXRN7%rW4O(8S`IsV{MbZk*RoM6 z?v6COe`H@{{%rcjZ-2+Qg#<`|1UyB+UCsXHn{VXc!GlI$FSKW`TD8iU*K7K;X)d*A z#|(;8+PqqJy}v`|&7LmJ8rGCXb*iZOIvaP##Bq`kH&`Z&9i{x{FUr=< z8>DXaa;da~`s_Jh} zv+JnXvQF)q8>vO3TB-CPMLU#U=$Nx^o!Ur)S{3c@m&q|%Df!D5=eHcA>w6_H1f)#@RXe**C7oRKat`anQW;Uh}9V zKmvhDfSMindYTz^CTezImJhrt5+DKJB0$ZiW_v=@soB2uUNbi&KmvhDz#Yy0{`>Dm zkEvqzjXR4Q_k4AAKZWeDQ_QHy)Vf2Cs?)NFZwnWK^?PuU;+C>>1Oi zv)wuyx7|~-v*!KfSxJBdvKIkrw(r}p{@`bzW@oQ*gI7xeB#<=(sM*wPPt*yh*;(`c z@~k940@;gzJufL4>jjesX%@uf906*!>vnc{kr1gCT39+& z50Q~AgJoX#AbGTJA$fLSA$etR0eK~+fU&-;Pa&DxEl5VR2$uF$L!@fS!czJn*U#e# zyEn6sLCyBuJIN!F011$QBLdWH$68vZXo%9>!ZNjUu)G^rP`;R&SH54ETP`ijA-_Ly zhy0O7!amsd^n%>7cS>G)dsso4+%Z_%Rw*pd|IF4^Z=R2u?dT2Tb`l@~67U>>v^4wb z)vNN$FTWUbgupj`{P=PC^2;v;zVYqbx67I}Yiz#p8G#Wu4lV6byRfVn6eI_y=aq{~ zl|DayOP`^`S0B4m&MnR%C+FpoBeQbJ!D+c=&!oF#@8r9T^`mOrDfQiXwa+!RuUX%J zQ^)#wX--4`pBfM(57!6`8+<_jNO|d{m*m}d-%at2@87>)jvhTK@Qt54cTODn#xedL zl71FF_jL0}BtQZr5Lg6sIjPG{j3sGq&(1EIT_?P-%oNG5kED6b8< zTlP)KE$0^5bX*_*qB_@SlkS$8U4o^0soUq?@TP6-$zxNq1FKx%)sO%Q_$GnuuGwuW zhsX=jh2-10ccs|V*OV=MVqQ*JH9Vhcw=N`g!-GBI#|~Ax4jmuUrjV?Q&nw@}&nd9G zq2Iqfey1FpokyM?P)M3Z_@CdLn(dqKH*-Y-BoJ5x+|leGe)u6^eB*V(LzMr!kepqV zGsSm(ap|41Jt>cjZdFKXgn34%9oe#>D%QGo>0lY(uAuB1n@8F9cN*FaKl%>~bIIfV z3Q6@a|Iu!%W`F$g$3owDV3ifT8WJFZtS8_|vv1tEA?WL+ed9m<^plu1`?JqJOKH!3 z_0?BphM%-&mr?E2(>ez!n^xJ?N*`h4{-}K4Zx72SJ!%E1xuG*(C&Sb^`_&7QH6!vF zzH{UWZRlUm$Ro+^g8d@q+^pGKwrmkhzEhLQQDVY$q&OW4bwqixjez$+Vg zMI=B1zDFPdW@pdvNSm)CO~}Z0*v^Tqf{iw7Xf@)#-yfS-B2|1?R@l{P zT?_2)=!QYEdqSR+xbwra@F+zuYsEFd+#=LL;@rbcm&+l>~FvQR=)b`D}iqu zn!R@IT7hQIoavjIjo9vI2NpE?NkgyE|7w2sf_~9I8hKydr-0!PK;ADb$tg>F7xGD8 z`N01DQu=yr-MZEAjUPC0K#m$n4HI`d!WzwyTc1er4qiQ+th4NzLh){36KB@*eBpjv;X+xk5qBvKmPcm zXy5qfpMNepckVQN&KUeE06%V)l)nKYw1dZyfy*=o`2HK5{DwkN^od zBM@ks9Z@_)=~@9puP;A(r#v$tzfZRRrdR*bSM4P=9vgh*(CyXA_g}79*4Ia<+0NcF zen$c%Kmwj25J;L0J$pyZ<$)&B~)Hh=9wq2)ctABM!!7Q(r zP_sSrKJq9eKmsJ-j6k4hHe$7&P-BM~b8;xneou`%8fbH8Y0btmLfO`6qepDr71f7( zLH9yg>iZu!fWC2O?-{=%0TLhqPY`fLvw!{dSHU=Fx;^{rufLW(d-fRZ+3VJ=lhIlQ~KA>x@(4Jzx?vcvTD_; zl=kd{2M@|O-+UvO5035Go_Je%3=$xL>`ovMG`mUp5IHu-rd^mDvq^dXjSqLXZqdF< zu$mJzr=i=JJG6G`tkG?1c6KjGc>N?m0+~U;-!&Wl?@gof8=Cdgk{mL)k$?5Sc2}eA z?VqIPG`Xb4I)$J7owx#man$VX=gnxum;tA5%CrrO#E_Ds%a#He}VxUL=pb~ZITv))>shXhCOLs@k56W8FAxg-}vlVvoclJ8mYLm(+g~4aIZ_q=e0K6o?Sc0 z>=~1#dd2Wey*^j%Tl0SCx4m<09;0m^F?kpd&iuVM*9Q&gpJHck-@e`Ojeq&&mva30 z@lpTrM~NzuPD%I@yht6R$FI@K%4sQ6(LHzZ2R zmb_0I*Q+6;6NgL8z`jzWQW;4a87HwZ{iRp8PR21u#Sb->rHcMbVxtEb-*;}`QfgO= zFxK(A?hm(5Ilenu+pk`b;dg-lVP==ii=U@v2U4lPYasy=@Kpl-sM(cD7M8=a@*4K! zMm7F6VzAuNHSAle$Umi7!`f26Ru!2)XS#H5*Fq+YO_Uam>&T3$6QoJ~8uG}znZ~gv zj~^|wr%zJ9`Im8?N@a@6j49)##Qo63V3|HSSz0%1AVXsY7-{zO$0B^u1=~GO|FOb3or7GFs_*t*YhJwz4v9(l}|?s)-C46e;7!j&%E)jO$Xi z_6Or^w)VcM`7*7IpPKEfZ#eTs0wfSf1l-Z=GiT1o$&)8V`^G=`-~-vPVS^Djo|(S! z$sL1@`89u4C z+m?+bdO&YUQ1U{|((xW$+8cKCgmI%%G<(jBDbln-E#>y zp6kMI%B#7x4@}K%^Ft&S$dobH2Mz2mufF=KK(lx3*kNe)S6_W)v}aSZGxLq+xk!Kn z0-1onX?B~+h2{L>T*jPMv%93fKQ`Ku;h*l)qqE_oZrZSxp_vh-i%7*X#gxyyvXl#Z zP^}l2u!sJsbg!^fDqA8&vzIKKt8{jt^z7PELLd5vz~^19Vrk?1FlDRbb9ME(e5r>7 zZRa>fh45m6`a!*#l~VSt8WCpr&~bcyoKDIvPaczyZq0^nKi)UL(cb_4!rW57Y~c(Y z%aytVH9L??30@lskbtic@Hfp~+$-47qBD==kVfS)7Gs6BY_usqtZZXfbV=_6z3<(< zv-DMQXdT)#ck8$M7|xc^`@TK9Wazl{+8d`|#nzqJ85VH*S=--g-;s%$c1b zjnQSlvt=pe2j4v*pW*Y}mXz1)=W~`9U;hr{m+JXLwvEp3bym>q*Is)~)~;Qf$~XS) zx8I7@H;z7pH*VZ8`V`_>Lmxx)a~R0)8?TK7NPq+~Lcm;B>i*g3((KvZ*KGKB&n!}Y zaW(GQ^v(snu0y`A%W36rsT#`_W5k`Dms=2PpVs~v`JS4ck++b)B>@s30oMq4OtUk= z&W>vyqI|t~syR3Bl(v=K?~|PoP4dUz_O2Zyh^_}sa3ylTfmGhc`*WY~>|X5^AGYCbQ2)X~h$bLA4j za$>H{FR`Szck4J&g9fDXjeqvpXU1GI@Qq{MblxFX`*~e>bd_IrrHIAK8EiHb3h@^EKeDBIW8O@9N_dCYi9D61)f12ku|IXcY zYPN5^*USwGkU(G(@E6SvFH%^J&bE#3g?3tZHO1ck{K%0bhHw1C z4?oN_-+2A9A#zUj%f>j`Nv+a9_LGJU1Y}yb^u4Tv&XkygvAr zuK;#x6V z#EtLVxzm_m9rLW4edCyG26KeaH||?y0CPhEB;Y>;T-EH07ca`WbLT{B_7`7#A<*ni zn>NYYZ@(?`=Fat+9za9-)D1CWseVy0Rb6UitZf#$`uW7%vTanJ6uY=(gIb%U|3Z^gMU@15T`SDn(q#(3s?l>NO`NqVo$R%FB~)*^Ta{35if!HWRIvP{Y~7ir{$hrXEA8B#bW1z+FVMYAV$3^M%UKP=3t=7r9f_Vlh5WZ3Ne>ZZ2W z(WZ@Yx~=~0jA%A|;74cWlu~Mp6RmsUD(3y1((%XpWil@4O@P=6TmQKD(=JzU-6patdO;oaske-wmoCB-b9hLprGOJB z9-h}|w=QOBlg@}{zZ;iN4o=IJdY%rY-#@DM?G>thd!Wh-?BJfN9+5gP`HXgL^S1P? z*H-@bvx{;X{n|&j$rv|h=Z{wH*>Ak@hOA$|-k3XP&z?QT{BI{toG|)&(Kqfp?>uut z0wmzS1pGy_7x%RF&HhHkiIrDz*v|ALt?vfZLmTfMstr1|P9h%dOQo;wYBplipuZDT z9J=+~Zx799#J6EAQT-kE$9U;aMdp`CW$VMv?r*XAZF$MKon2MMv36R;Khndd*~jPPl89m%vlm;bc(Y5YJvq6}tu|!DcYl<8 zml6A|`%u@o>4Q(p&TdlP)@F=0XsciSDb=s*^!yxBR?Uy8wGnaV7|U&X$AZ$ZtnIhs zO?kn7AFI6V8hcktjGX?hyGyhqpgjTOy-sLP&Gw%+lQ|^;5+H%w38Y7}j~+cL`}glR zeB)cTY`N(hpO>OZ?&^vw`_Ft>`Nma0ukYsPG~%{g`HiD}VDlcIlT+S|z182UQi%{{ zkLHkP`rGEys9G|_@RPqd=x%vUwMjec>xDVJ7j-WnBbwfBXAf7~E@SLalkaCcQt!_`(Q(N&ODM+YGyD74cfC}z}+f# zJckiG4!<;f(ePI{HO=oC->i^)r`pe9Cp*(@XIh4Mv#+P;GRAF*ZB$4Sn->!J_tDP` z@!__-A+y zos7QHpQib#-!E<@0TLhqPZCH=vw#2ncR}2^wzE&4KAmD` zfBf;svUTfL$qYNYbM+7vU!BA7Gb3)xo^GUP8~o&%HQxwq?$Qp%QbXQRC-8J$;+6K> z>N+{4X~eBI_4KfE_M7NI0}VTS!-fq;+&Jb}KXmAjG2c4vY)`(iJQfL%Kz1hJOtWv? zxFL=-`@n$%qBZ-y_uiBF^S$dEuU<;EH!sX>#6M5&a4UAqnU3(g5Mx|7%%T0woV%og zXmNAy?2OoSO&}_{AcJky&IeYeON_#fO!sR$<*}25wwUYn|WQ2gf zXg1=!zM5g1Bjo9uablj?v(rnD% zpfwwFF`+%%o@Q^`woO*8S|tk?EbzL9F6kX)=#MAHLUX1+f$|;tdHty3?9oSVYA5f- zpMjUwY|I(6Yu7Gg-Z!&voSJR#?c+8QAOR9^kAOdEcHer1jTp2mDh9ew9nZy~1&T&n zuOm+N4M+SL`g*mgQrN3?Dr&ZS?;ZCh0TLjA^bqhT&8`|+SWeEf#i2dcH{uB zmCH$=-o2!6pWbdI{H97oX|J{?Tl4yc8cQAhvX9KlqvkI4Zd*3aP0jZHyUH_=011$Q zJ?Yv2z=w8e)_4&H@+~_G--8wL7N`U%q3MzdN&^0tcBsl z|0|8^*OngLyGnF)v`eW+x31E#UQH=g^xjP4Q%}W$DqkA_QG;pAl3wtP2 z^SGpE0i%D{g(W$qYfbO_#ld=Tbd*b)jdAsywP$xzrfCNY&@Cf*$W@F6mkH*_# zqW4U?OE8YNw=~*%+-eoe7@8eXsz{pWtO9+Hijs)%;%V+{Jx_W+S5)JZel^3^cCaO> zK&Fj7L(LAnvVm7b0wmyj1l-Z=pMLsDU}qmceq79U_L?>;3(a)Ro}&B?*B-mW=*ONJv1ghWG#lgLVLo-UZya;C zB5wTR#f!#VGqkgPuMA+0NPqU_MGJNAZcI=R~YuC!6MUSMZVY+;_$6o7NPq+ahJZh7b}7}ay=}CuUHkZ)T+*Pd_hZO!X?EIiWtr(4Z&N8) zzF%OA6<-~ndF|NL?0_i>cp)S}0)9XsEzQPU$2xA@+@1~J_-CJeCOdcTly&RYWx8)% zYehE|7kzHAO{>-?c;6pfIii$mqaGw}S~ZvYwW~QzZCkgHK`O?)e5s;d_1i}j3z3~; z@)~`+zF&|_T2;zi8yojxNKBM5SIpL}Ta9_uG4I>aqesP&ZybFIkzW;^^y0Bd+gun|)qEI>RX-#EGu4-Re`?Xf~wbtujAI%}NyZS~OKfI#zCW<9cZNpuZILkAhQTqH5;FG-1wh={watX|LwQmM7L+3Ideu% zoH!we4jmF`_6Hw)AR9JpkR?kNXSuDX^)AearMAr<4O{fEn*Xa?0L-=Bw{DPpGu!45 zzodK#OL`T`wDH6>TSv>-Au+~yc<_y5zBgz#=6}<^am+E3mS$(xGtcvo011$QzY+*U z&4#X^57d(0LGsH@KlzEdxg?>v(m3^ans%BrleA(#hrG4Xv4gHyOQ%5V~C^w^}*?RB(k1w<{O%g@$fKb493U9 zyl?h=<7jJf)Sm6H?-27%0wh2JnMEKi&Axv9y3w9(*6fofPs(kYz0`L#8yeWCT!?H; zEFc&w4Q<>%EX*lS_RB9d)Ld9vBYkCAH$2#|tR5+H#P+8+sgGBt#zRQAo85+v2zoSB|+WXLK$oRZ3>PcBB3< zzk31sM)kXfU5&cMiFqo2%D<2KP<*9MVJ{!l>_99Xcugcg0=`DT9nJpv=br_>acyVs z+qX|X{P08Bv}uzpTe{SzHN~tmtt*Gfsu2ZJ`ffIqpdqD#$jm|5iHNCF~c!N z3i1N2zM$gF-WXa?nw0l#t=3$J4jF8Wt%EsZ;2XyrGRKb}7ueaDTZVSFuf6%q4+)Tf zzY?(Owz;pD**6Z&K7018ea&9xKbj4lL4UC5Mj`U?_O} z*9l}t&DI(SpL3Mb?)4)J%K61MpE>j!?cV4M{cc=7nbf|Zw5SlAA^&t~b)L4BgJpWB zg0gxsxj z=~+8SI#mmjRuzM!wMw1UdM~vtrcsd5PQEfazib(mR}QIm^NUN>{98AD-#G3s%D(?% zYCd^9QvJS?nk!7@!J03B`8+h%<{PJ-9Vn#&uY&|gz?TV_bsN5M%(;Yd(6n#-%9Sgk zedEyVBS((N7hilKAAR(ZY}v9!9$mJ~Z}rBii)D)zmdN^rWo1l3**7JxF$c%BoAKt* zTAiT3u*ZK@eW%g)8wu;!X4YoCKaK%=de7v1vSLsn=~<_+ii`8^T%Fcy^Va8Ku|tgU z@GveOeB+q+4fDTY9yqjTV;sF}*RC1k>ankvFP8+&8wrqrKM3RTyjCp&w+8)uBg6Pzde4ZTvG}Cvd|`t7_!p~aw|JJuWTNb zU!ERNNa90T>Djdc=Yv_*GQ>+O|~y?KQYsa(>wuk{##_?em=C?x@}g9J#x9|*Xj*%vQf zlym3K$#>s{q(8X zzVJ3P4tL{rm5~3*yG@+1a~y@0P7wx5{J7 zm(w?{+PX8Md;a`et=X6}26M+?es%c9F>apKH;(=YfBp5B(Ko^T-1*Y`z`T$E36Ov< z6EK&ZR^PZi%|3SQm>f88K%m*%wr!Kg9(yd?>Xkoht*7!HH!M~*Z{BQ-Ws83Mm_x>% zW~1*QHQSd<0_KebNWdQmP_whIjqC~Cre^!YTh2U^00{&N0ctiiJ0sd{PqQ(XjMX zZD6?ajbl7KjEjfy@!%WBczMuljGu@3*MIx%H{*GNZye+7A(@}MtbG1?ZW15?67VMi z=CV__XH&Cjd%J3TQ?vc)ZD(FdfCT)V05zNX?5aN7+mD*eZ{FedFJM|Gj+k%{TJpmtV@KpMEMkcI=QRo_IW4`-bi5Sa#YrB5s(`=MQ7- zV5}X?Ap_qy=3A$4+@DGU=9L6Uz#j-?M6-A9+^IDC32JsW?w<|KMxQ^cW@D^dYPLU= z0L&u^kbplC$f#yNsWiK6iT`BVR4ME~GNDbOEKB2B1xcAKgn|K*oojJc5E8$W*hxZxZB?6c40{rBIOC!c&$N)@>$+om$b?vb7~ zg0n1js~()C?4jA{KY%fIFxC#{kilFsu(L6K9>&pQ+_+yC5zIUZkbsX7FzdD}n*G&R zU&-g6e{N{@Q%bY5Q~NEiHFeCM)@=0sqh|Zqi_Pqi00{&n0cv(?9fIE=^ud2*%eqMD zgM}rm$iG~^c4~G&774s45+DH|Cg7@O|M0^PhHuR?erSl) zDjp&YONU7KgCSBUEJW&-43V-$LZnOOV5wTdwk@q|ap!w*ty`;_lzi|WsavhAln)P; zYUPSb-ty<%CZT&}p32?K|sGBUb{Or1DRdPep)?on8g|2Snp&Gz9Jn^_|P5(r2F z&NTblwQKV0ufH1Y*+2gHqkQ}AxAOJZU(237djxYiJ@r)DzVWE8O{7Vihh@x&7#TS< zT9U_4kg20%WahMF>D{NlL=TCTip7Ft;UZwwlcRmx z)DDwzW0ItIkM8O`36eZ=u#6fyK-%{nD5K&A%jm@6GOS-ai5=Kq5)$HN-n^Nro)PAe zbL%`ka9@bL-nW1})hho(og5=!+1!ULAeDZd`0`hYI{2o1T*EaPf zX?V1ZQ`b0m?ra&Am>`ozC&-xiXc^F}k4#NYkgkz2k~n;@j7=D9+@nd8C&;uhgQa7y z{!a4(%|`zL^!>y5co-)Sy#voW3?;v@8&UK|H4Ad3-R6bX<(CJ{)lW`FR(2QF!L zw9@RRZMsTwVw^;FZ6~8fj*uyn$I0l}o-%#f6zSMKQmTap$*^HVrA3(sWMXo>B#j*- z6Gsh|Dm9uo)eNnNX)P0@9+tATTTA64|B&&?qa-1!i^LC&k>T+PGB!!o55}u)(cP3@ z4VFIr2TAhSQ4(6@L64kU=grXU$oz(8ua3zti#rsQol2)S#T1ZtlvZzy&M%vX<&!n) zyV{|_9y@o>w)JH6$T%4_OkLNQ(K2oNG?}dGFXKi=Ntd=ABzbha#E%?la7a!XE`7VS zld+@XWwP=&lrLA#X+Eggne>wKG$cR*Byf{}H#NI#(SORMgaHy28!vS#6qlYox=48O z2c&nG){>+&yLQViQoB}lsa6u29V<0M|1A%9ZmaC!PBJNJm^5n9!Kr3wJxpuau3or| z9-SneJ9m^8bt_8eP90U7^*z$PLvyKBtEMcNK2Bny2TG;NHKfC&Z_bm-h(y0vd2wQJXv+7U&hSC6g|Ug9C?)1{4+ zFJHlFKB(C&Mo54JNFZ|wxT4t?E?f}!#xXbYp+kpc@7}$}oXO8T{j}3EJzUwft((=8 zW=$Iz?Wtz%sj6)1(Begm--oHT-6|2KrHtCYa)mO+wrUkZ)zbBNDD$!Ht=FnpQX1BW z78f>-Z{DYNrBJC~ySkJrQS`R&%==|zy@%4_m+kIhH%WjVO7Kv})E+ zN{89v2JqXe6-ueNf?`sp_vY6VZ?Bw{{Z^_VSGG{lZQTm=g*%v#?QkzdRE^! z#>_=8b&>vkx=YtiZPIP)rB{D?ckd)I10!W<%mArf zEh5v;Ke1gwS=^(bEbUc5S}LD-daonBzbkQnko4}}S#U2(+@HSlQ?q^h-Dd7cfCK`M zfIFIf^5jXwH@cgb!4xQV#lDHv*q(hr#%GPh2DS0S%e~2vYZR^jqsCxlvSSDCTskpS^O@lJ!{9w^d z`87JXYiVe8+>n9Nsa^AQUBA|B^!xbu9&JpkLK3Aud+VIm;|^4Qjh0R8Db0>jZ4{kVoL~dxBX_?qJT=?@-goAh1W3TY z3An4-hYueX*x8tW@!4meO_$C@4d^Yy1`m>uOWj6^;L6ScrHfVs!`U@T{^Uq zXq5-p`K_DPSHAHfQmW`Z>ADu{v0eELyBhtv=5#3_LmCy5r~Bm>#Lm0&TTkrMpmtSB zP-Dp;rXW(q6pV@=D)nksa{K%v<3|`{>(I{j?=pb7Cjk=h9|F!a8*?&UzI@r33mLxg zQ>RYJkt0WB|Ni~PTuv*Vd(Q20{+8w-?#UMWR6guMsb0x*~&hDe) zu*wv7K1Qc2$4k#XaZL&dV$m|QEnDZa#C<`k-qOd=Y_t>T?d~i`sxjj}{P07g?;pm; zgKr#t0)P7Hrxf4#AAkIjY8*6kUoZc8OPEsPrjKPDrar8TYZyfy)FkTN5edE6I z-ZK{@Kmz_rz+KJ8+)W1#95Ci`qGo4r8=ac%pYJ?#O#&p~zXYh+*;{ur;xnLT`|o?t zoRa_v_$L9gX2WlZd5-m%Du^40Z~WrLivr&`=0=8{jk%IBXY%vU(>IF3Gub=M2rp+)bDd0&_V%|NQf} zwP!ah8!Tg67n1R93K?UC)GtFj*59?+QU0OXyLaz4`u?F0AlkFhClKw~_B0!HLbhl7 zZdt&bkpKz!J^@c^cFT&vGOleNNo>n~`$`~1yJV{#BD=WSG4U&O9TS@)q9n^T(gQQE-hO%(}TuB(2C{1fbsP$RWym1Se zKXalaPnsrE#tfHvb7o1W9(`}CJ2=uAZg;H?Rj+16X`qHLF!`m2Bvwi>l zW)4Y!1OkgddNmvKLcCzHvlsQuFOAFOk))Qnq*iDiDSB^SX;D6pEL7uaYpr}{exk&U ze?&^Cd90UCijhT6y)3I=c~a)go+C@2eOXp49WRk1XUW=CFU!lzACY;>o|T>3H_4*O z39|U9S7hb#8S>~eugI7&W8~$>=E&S-&q$p*m=`-OExJ{2NPFM3j^#h!7r(Ed+)9O9 z;AFeDPVHLAlaDQtsQ$g>=_ejlW0JSH?YGcu^dG<&JG8R{t6bpKkN^qzCILs9edERr zG5f|b?*ryW#@tPq4+7&=zWCycsmk#uBlAnc@I3N(-<a}a+$@vpx-25lx&1dGxf(4Jriq}`E^*IthZK-Tn`-Zfw)lwGCpDjCf zZj&Wb6D4`>lk(c*)8)C9Z^@2ro271p7P9*7l~TXWt$D%97yqX$U%F6=7cDL0lSj+2 zUd<(W%vgDJ@d8O4K2%1l^`})`pifLfs=NoHj<;*oSe{tEBqf1Mr831_zU~ofJo2~S zctv8P``P`?sKk**Tm$+MpbsGW0>U?rIb|?@9@?`p*NpD#W%iBx=G(wrkpKyhfNvA< zq-HMI05+y4hUnKJuEtk&Cs><@k z^X2Jho|7k*%#&FQmP*T-CFP}O9+ye87RvLBlI5+{o1{yJw(`Q$%Oz>j3|TNWNuGc9 zDd{#KHbqm$MmCkV-hN%W#*9|up+6y|9xR}As;E4(c$$ozI!|Vg?k@51)8vU2?$1f) zZ@ON(=)GzlmaT@2T0o{cbaN zBtQazN5GSs9k1rT=vnhF!!JI%Rc@(QDv$K7eV4>Fz2%b~*1NSlwtTq^88J#qs`;yR z`JdLZO6WhNM$H;&?w=UjTh05?N~R_!$$RV8OY#5QC4JgfS9OEMGIGj%85P+`UU=?# znYnm*n#W2jPl5dXz<#}?tD0jR*Vwa52V>52>-AEz1Ft;b6_Ef5_%;DoH5>CjU~Xj0 z1A+MnJVvAJ>uuI?^)8QL_u5w`u?F0Ao>ELPoVaVqpu)+o#J9FebDfR|R85BaR4tZDBj<`8W}81l#J3*I#$JeKe4?iq~SR zn~YB$Ys{s7=+GfKapHvGhe50&`tzf%hZsiG{qQ_-ta1M+3z$n1AOZg%VAXBwSZFAR zQ69rTj`A6Od)|M4r_`-knLg$;`?^!Y-&Hgx;-*I$#?%^OLnBL9>U_XjftI0M87 z)TmTOX3v@_2UQ<0=(XyX_1NREx8Wy8U+oV*cwctx*dg1uZ#UAmZQBHC>(;GC+OlPf=(KtBW_N>mklbdH>Y*$WL>JXR@SXuD{E7wHR^Nfv}Vm3(P{PS)pA=}wMtfd zI;~d6G?Jb3S@M9qS@V4Bv-SGaHK$^*E;S=?(+t&8v)!Z^8|fx{eJ{4C`=RfTzGwO# z>U)a&yL0DGW4u!M!?j*x{!PR?z!!tDZqbgd=ir29n{90Kv&MB2AOR8}fs7G=4WxA& z<*n9jJzogsMb^3vd;6psV;W^QY;Kg}NQf)f3FEIIMhOXR;O2y}IFK-omQI*&!kiGF zjm;+1qdeH#ZtptuHuE)O-5wik)9lPVHD}EpOY=R^ z_X_t-Cw(t*Z!s4L;>}QBgFhTG4qC7EI4aOKFI?lgcBK011!)30O57<*!+{wVxdA+bFZ4-LSV%jw43RoM4OV1Z}sMpaD9a zI(16yCDaKVC9|Gb*LB^&TT8R9dEy+_{5$*Xh=<;8kE7;n?>=CgzE@b9?<3Z6f3;S_ zw#NO3-^J_?*Zr}zUZaf#&l3{=NPq-LfCM~GK$o$)9a8uI(z=cIZNvqmtVSC*>@3*b z&~Kekrdt!V-JD>jrIpZj?kJ(2;A+x(<1b5BuM7J*;$z~9wQp-*IkX$)Hp*`#Xt<*Uo6KH<=BJgQ z6YeC`Ap$A6bM1QHw3y<1d-p?cvv(hHk5N~{eTP<~{^qFtT0cYP=ZfnjKmsH{0-h(J z%Uiv)>NadD_(4%#qufUMZB8iD(@N0#v=a2e6G_)8{B7xpYfpc-c5lMgqNPql6gzkGHK}WJv@&q#+ z!<~DDeYFqV><7m)p`Q=^ykN;c5+DH*Ac4#yU@m{LuFGXCQBIrn8yap+DAzrabe(|9 zTlFJXSa^cH^`7FhzV~LW#xr4lUNY|~<(Wu;1W14c%mmD3v0gXpw^_r@<#}eV+tZdn z-IkeLt>?1dcl|u*rTMwxIth>f36Mb65YT0^v!%5>=jZ>W@=f?N4`=sXf0s2+CeKO& zBtQZr;3@%KUUO;dhn!tFxcYo>KN27T5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* pAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5(q>B{}0#^>XHBe literal 0 HcmV?d00001 diff --git a/app/tauri/tauri.conf.json b/app/tauri/tauri.conf.json index 35cb146e..e5fd3915 100644 --- a/app/tauri/tauri.conf.json +++ b/app/tauri/tauri.conf.json @@ -51,7 +51,12 @@ "windows": { "certificateThumbprint": null, "digestAlgorithm": "sha256", - "timestampUrl": "" + "timestampUrl": "", + "wix": { + "license": "../../LICENSE", + "bannerPath": "./installer/banner.bmp", + "dialogImagePath": "./installer/dialog.bmp" + } } }, "security": { From efc7bd28623c75d7791d638f8779dc4ed868573b Mon Sep 17 00:00:00 2001 From: Sekwah Date: Fri, 6 Oct 2023 13:59:18 +0100 Subject: [PATCH 27/37] fix(tauri): allow context menu on list titles --- app/renderer/src/App.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/renderer/src/App.tsx b/app/renderer/src/App.tsx index 86dbdeeb..33191497 100644 --- a/app/renderer/src/App.tsx +++ b/app/renderer/src/App.tsx @@ -19,7 +19,11 @@ export default function App() { const contextEvent = (event: MouseEvent) => { if (event.target) { let target = event.target as HTMLElement; - if (target.tagName === "TEXTAREA") { + if ( + target.tagName === "TEXTAREA" || + (target.tagName === "INPUT" && + (target as HTMLInputElement).type === "text") + ) { return true; } } From 8d5a2739f0fd4e2b3da29b6330f07a66f472756f Mon Sep 17 00:00:00 2001 From: Sekwah Date: Fri, 6 Oct 2023 16:42:26 +0100 Subject: [PATCH 28/37] fix(tauri): update to tauri v2 (fixes audio) --- .gitignore | 1 + app/renderer/package.json | 4 +- app/renderer/public/index.html | 2 +- app/renderer/src/components/Titlebar.tsx | 7 +- .../contexts/connectors/TauriConnector.tsx | 14 +- .../src/extensions/window.extension.ts | 3 - app/tauri/Cargo.lock | 1119 ++++++----------- app/tauri/Cargo.toml | 8 +- app/tauri/src/commands.rs | 63 +- app/tauri/src/main.rs | 5 +- app/tauri/tauri.conf.json | 27 +- package.json | 7 +- yarn.lock | 171 +-- 13 files changed, 516 insertions(+), 915 deletions(-) diff --git a/.gitignore b/.gitignore index 5fefbc2c..78d48e2d 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ yarn-error.log* .idea/ *.iml +/lerna-debug.log diff --git a/app/renderer/package.json b/app/renderer/package.json index fd72f947..540b3559 100644 --- a/app/renderer/package.json +++ b/app/renderer/package.json @@ -33,6 +33,9 @@ }, "dependencies": { "@pomatez/shareables": "*", + "@tauri-apps/api": "2.0.0-alpha.8", + "@tauri-apps/plugin-autostart": "^2.0.0-alpha.1", + "@tauri-apps/plugin-window": "^2.0.0-alpha.1", "@types/autosize": "^3.0.7", "@types/jest": "^26.0.24", "@types/node": "^14.18.63", @@ -57,7 +60,6 @@ "redux-devtools-extension": "^2.13.8", "redux-undo": "^1.0.1", "styled-components": "^5.3.11", - "tauri-plugin-autostart-api": "https://github.com/tauri-apps/tauri-plugin-autostart#v1", "use-stay-awake": "^0.1.5" }, "devDependencies": { diff --git a/app/renderer/public/index.html b/app/renderer/public/index.html index 15e54280..0204f51f 100644 --- a/app/renderer/public/index.html +++ b/app/renderer/public/index.html @@ -4,7 +4,7 @@ - + Pomatez diff --git a/app/renderer/src/components/Titlebar.tsx b/app/renderer/src/components/Titlebar.tsx index 1de3e1b4..e9603a66 100644 --- a/app/renderer/src/components/Titlebar.tsx +++ b/app/renderer/src/components/Titlebar.tsx @@ -27,8 +27,9 @@ type Props = { }; const Titlebar: React.FC = ({ darkMode, timerType }) => { - const { onMinimizeCallback, onExitCallback } = - useContext(ConnnectorContext); + const { onMinimizeCallback, onExitCallback } = useContext( + ConnnectorContext + ); const getAppIcon = useCallback(() => { switch (timerType) { @@ -44,7 +45,7 @@ const Titlebar: React.FC = ({ darkMode, timerType }) => { }, [darkMode, timerType]); return ( - + diff --git a/app/renderer/src/contexts/connectors/TauriConnector.tsx b/app/renderer/src/contexts/connectors/TauriConnector.tsx index 4fe62388..6da66dd9 100644 --- a/app/renderer/src/contexts/connectors/TauriConnector.tsx +++ b/app/renderer/src/contexts/connectors/TauriConnector.tsx @@ -17,11 +17,10 @@ import { } from "@pomatez/shareables"; import { encodeSvg } from "../../utils"; import { TraySVG } from "../../components"; -import { enable, disable } from "tauri-plugin-autostart-api"; +import { enable, disable } from "@tauri-apps/plugin-autostart"; +import { invoke } from "@tauri-apps/api/tauri"; export const TauriConnectorProvider: React.FC = ({ children }) => { - const { invoke } = window.__TAURI__; - const settings: SettingTypes = useSelector( (state: AppStateTypes) => state.settings ); @@ -31,12 +30,9 @@ export const TauriConnectorProvider: React.FC = ({ children }) => { * @param event * @param payload */ - const send = useCallback( - (event: string, ...payload: any) => { - invoke(event.toLowerCase(), ...payload); - }, - [invoke] - ); + const send = useCallback(async (event: string, ...payload: any) => { + await invoke(event.toLowerCase(), ...payload); + }, []); useEffect(() => { if (settings.openAtLogin) { diff --git a/app/renderer/src/extensions/window.extension.ts b/app/renderer/src/extensions/window.extension.ts index 44fed387..2ea2aaed 100644 --- a/app/renderer/src/extensions/window.extension.ts +++ b/app/renderer/src/extensions/window.extension.ts @@ -10,9 +10,6 @@ declare global { options?: Electron.OpenExternalOptions ) => Promise; }; - __TAURI__: { - invoke: (command: string, ...args: any[]) => void; - }; } } diff --git a/app/tauri/Cargo.lock b/app/tauri/Cargo.lock index eabb3eb8..d72e4954 100644 --- a/app/tauri/Cargo.lock +++ b/app/tauri/Cargo.lock @@ -8,15 +8,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "aho-corasick" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" -dependencies = [ - "memchr", -] - [[package]] name = "aho-corasick" version = "1.1.1" @@ -186,9 +177,9 @@ dependencies = [ [[package]] name = "atk" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd" +checksum = "39991bc421ddf72f70159011b323ff49b0f783cc676a7287c59453da2e2531cf" dependencies = [ "atk-sys", "bitflags", @@ -198,14 +189,14 @@ dependencies = [ [[package]] name = "atk-sys" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6" +checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.0.3", + "system-deps", ] [[package]] @@ -216,9 +207,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "auto-launch" -version = "0.5.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f012b8cc0c850f34117ec8252a44418f2e34a2cf501de89e29b241ae5f79471" +checksum = "5904a4d734f0235edf29aab320a14899f3e090446e594ff96508a6215f76f89c" dependencies = [ "dirs", "thiserror", @@ -300,15 +291,6 @@ dependencies = [ "alloc-stdlib", ] -[[package]] -name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "memchr", -] - [[package]] name = "bumpalo" version = "3.11.1" @@ -338,26 +320,27 @@ dependencies = [ [[package]] name = "cairo-rs" -version = "0.15.12" +version = "0.16.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc" +checksum = "f3125b15ec28b84c238f6f476c6034016a5f6cc0221cb514ca46c532139fc97d" dependencies = [ "bitflags", "cairo-sys-rs", "glib", "libc", + "once_cell", "thiserror", ] [[package]] name = "cairo-sys-rs" -version = "0.15.1" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" +checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" dependencies = [ "glib-sys", "libc", - "system-deps 6.0.3", + "system-deps", ] [[package]] @@ -396,15 +379,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "cfg-expr" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7" -dependencies = [ - "smallvec", -] - [[package]] name = "cfg-expr" version = "0.11.0" @@ -443,8 +417,24 @@ dependencies = [ "block", "cocoa-foundation", "core-foundation", - "core-graphics", - "foreign-types", + "core-graphics 0.22.3", + "foreign-types 0.3.2", + "libc", + "objc", +] + +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics 0.23.1", + "foreign-types 0.5.0", "libc", "objc", ] @@ -459,7 +449,7 @@ dependencies = [ "block", "core-foundation", "core-graphics-types", - "foreign-types", + "foreign-types 0.3.2", "libc", "objc", ] @@ -520,7 +510,20 @@ dependencies = [ "bitflags", "core-foundation", "core-graphics-types", - "foreign-types", + "foreign-types 0.3.2", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212" +dependencies = [ + "bitflags", + "core-foundation", + "core-graphics-types", + "foreign-types 0.5.0", "libc", ] @@ -532,7 +535,7 @@ checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" dependencies = [ "bitflags", "core-foundation", - "foreign-types", + "foreign-types 0.3.2", "libc", ] @@ -870,18 +873,6 @@ dependencies = [ "rustc_version 0.3.3", ] -[[package]] -name = "filetime" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "windows-sys 0.42.0", -] - [[package]] name = "flate2" version = "1.0.25" @@ -904,7 +895,28 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-shared", + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.37", ] [[package]] @@ -913,11 +925,17 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" dependencies = [ "percent-encoding", ] @@ -1030,9 +1048,9 @@ dependencies = [ [[package]] name = "gdk" -version = "0.15.4" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8" +checksum = "aa9cb33da481c6c040404a11f8212d193889e9b435db2c14fd86987f630d3ce1" dependencies = [ "bitflags", "cairo-rs", @@ -1046,9 +1064,9 @@ dependencies = [ [[package]] name = "gdk-pixbuf" -version = "0.15.11" +version = "0.16.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a" +checksum = "c3578c60dee9d029ad86593ed88cb40f35c1b83360e12498d055022385dd9a05" dependencies = [ "bitflags", "gdk-pixbuf-sys", @@ -1059,22 +1077,22 @@ dependencies = [ [[package]] name = "gdk-pixbuf-sys" -version = "0.15.10" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7" +checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" dependencies = [ "gio-sys", "glib-sys", "gobject-sys", "libc", - "system-deps 6.0.3", + "system-deps", ] [[package]] name = "gdk-sys" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" +checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -1084,33 +1102,33 @@ dependencies = [ "libc", "pango-sys", "pkg-config", - "system-deps 6.0.3", + "system-deps", ] [[package]] name = "gdkwayland-sys" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca49a59ad8cfdf36ef7330fe7bdfbe1d34323220cc16a0de2679ee773aee2c2" +checksum = "4511710212ed3020b61a8622a37aa6f0dd2a84516575da92e9b96928dcbe83ba" dependencies = [ "gdk-sys", "glib-sys", "gobject-sys", "libc", "pkg-config", - "system-deps 6.0.3", + "system-deps", ] [[package]] name = "gdkx11-sys" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178" +checksum = "9fa2bf8b5b8c414bc5d05e48b271896d0fd3ddb57464a3108438082da61de6af" dependencies = [ "gdk-sys", "glib-sys", "libc", - "system-deps 6.0.3", + "system-deps", "x11", ] @@ -1161,45 +1179,50 @@ dependencies = [ [[package]] name = "gio" -version = "0.15.12" +version = "0.16.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b" +checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092" dependencies = [ "bitflags", "futures-channel", "futures-core", "futures-io", + "futures-util", "gio-sys", "glib", "libc", "once_cell", + "pin-project-lite", + "smallvec", "thiserror", ] [[package]] name = "gio-sys" -version = "0.15.10" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d" +checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.0.3", + "system-deps", "winapi", ] [[package]] name = "glib" -version = "0.15.12" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d" +checksum = "16aa2475c9debed5a32832cb5ff2af5a3f9e1ab9e69df58eaadc1ab2004d6eba" dependencies = [ "bitflags", "futures-channel", "futures-core", "futures-executor", "futures-task", + "futures-util", + "gio-sys", "glib-macros", "glib-sys", "gobject-sys", @@ -1211,12 +1234,12 @@ dependencies = [ [[package]] name = "glib-macros" -version = "0.15.11" +version = "0.16.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a68131a662b04931e71891fb14aaf65ee4b44d08e8abc10f49e77418c86c64" +checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b" dependencies = [ "anyhow", - "heck 0.4.0", + "heck", "proc-macro-crate", "proc-macro-error", "proc-macro2", @@ -1226,12 +1249,12 @@ dependencies = [ [[package]] name = "glib-sys" -version = "0.15.10" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4" +checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" dependencies = [ "libc", - "system-deps 6.0.3", + "system-deps", ] [[package]] @@ -1240,35 +1263,22 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" -[[package]] -name = "globset" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" -dependencies = [ - "aho-corasick 0.7.20", - "bstr", - "fnv", - "log", - "regex", -] - [[package]] name = "gobject-sys" -version = "0.15.10" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a" +checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" dependencies = [ "glib-sys", "libc", - "system-deps 6.0.3", + "system-deps", ] [[package]] name = "gtk" -version = "0.15.5" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0" +checksum = "e4d3507d43908c866c805f74c9dd593c0ce7ba5c38e576e41846639cdcd4bee6" dependencies = [ "atk", "bitflags", @@ -1289,9 +1299,9 @@ dependencies = [ [[package]] name = "gtk-sys" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84" +checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" dependencies = [ "atk-sys", "cairo-sys-rs", @@ -1302,14 +1312,14 @@ dependencies = [ "gobject-sys", "libc", "pango-sys", - "system-deps 6.0.3", + "system-deps", ] [[package]] name = "gtk3-macros" -version = "0.15.4" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24f518afe90c23fba585b2d7697856f9e6a7bbc62f65588035e66f6afb01a2e9" +checksum = "096eb63c6fedf03bafe65e5924595785eaf1bcb7200dac0f2cbe9c9738f05ad8" dependencies = [ "anyhow", "proc-macro-crate", @@ -1350,15 +1360,6 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12" -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - [[package]] name = "heck" version = "0.4.0" @@ -1386,20 +1387,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "html5ever" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" -dependencies = [ - "log", - "mac", - "markup5ever 0.10.1", - "proc-macro2", - "quote", - "syn 1.0.107", -] - [[package]] name = "html5ever" version = "0.26.0" @@ -1408,7 +1395,7 @@ checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" dependencies = [ "log", "mac", - "markup5ever 0.11.0", + "markup5ever", "proc-macro2", "quote", "syn 1.0.107", @@ -1416,9 +1403,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", @@ -1436,12 +1423,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "http-range" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" - [[package]] name = "httparse" version = "1.8.0" @@ -1478,19 +1459,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -] - [[package]] name = "iana-time-zone" version = "0.1.57" @@ -1532,32 +1500,14 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", ] -[[package]] -name = "ignore" -version = "0.4.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d" -dependencies = [ - "crossbeam-utils", - "globset", - "lazy_static", - "log", - "memchr", - "regex", - "same-file", - "thread_local", - "walkdir", - "winapi-util", -] - [[package]] name = "image" version = "0.24.5" @@ -1595,18 +1545,18 @@ dependencies = [ [[package]] name = "infer" -version = "0.9.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f178e61cdbfe084aa75a2f4f7a25a5bb09701a47ae1753608f194b15783c937a" +checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3" dependencies = [ "cfb", ] [[package]] name = "infer" -version = "0.12.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3" +checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199" dependencies = [ "cfb", ] @@ -1651,9 +1601,9 @@ checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" [[package]] name = "javascriptcore-rs" -version = "0.16.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c" +checksum = "4cfcc681b896b083864a4a3c3b3ea196f14ff66b8641a68fde209c6d84434056" dependencies = [ "bitflags", "glib", @@ -1662,28 +1612,30 @@ dependencies = [ [[package]] name = "javascriptcore-rs-sys" -version = "0.4.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c" +checksum = "b0983ba5b3ab9a0c0918de02c42dc71f795d6de08092f88a98ce9fdfdee4ba91" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 5.0.0", + "system-deps", ] [[package]] name = "jni" -version = "0.20.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" dependencies = [ "cesu8", + "cfg-if", "combine", "jni-sys", "log", "thiserror", "walkdir", + "windows-sys 0.45.0", ] [[package]] @@ -1714,15 +1666,14 @@ dependencies = [ ] [[package]] -name = "kuchiki" -version = "0.8.1" +name = "keyboard-types" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" +checksum = "0b7668b7cff6a51fe61cdde64cd27c8a220786f399501b57ebe36f7d8112fd68" dependencies = [ - "cssparser", - "html5ever 0.25.2", - "matches", - "selectors", + "bitflags", + "serde", + "unicode-segmentation", ] [[package]] @@ -1732,7 +1683,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" dependencies = [ "cssparser", - "html5ever 0.26.0", + "html5ever", "indexmap 1.9.2", "matches", "selectors", @@ -1746,9 +1697,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libappindicator" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2d3cb96d092b4824cb306c9e544c856a4cb6210c1081945187f7f1924b47e8" +checksum = "89e1edfdc9b0853358306c6dfb4b77c79c779174256fe93d80c0b5ebca451a2f" dependencies = [ "glib", "gtk", @@ -1759,9 +1710,9 @@ dependencies = [ [[package]] name = "libappindicator-sys" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1b3b6681973cea8cc3bce7391e6d7d5502720b80a581c9a95c9cbaf592826aa" +checksum = "08fcb2bea89cee9613982501ec83eaa2d09256b24540ae463c52a28906163918" dependencies = [ "gtk-sys", "libloading", @@ -1836,19 +1787,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" -[[package]] -name = "mac-notification-sys" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e72d50edb17756489e79d52eb146927bec8eba9dd48faadf9ef08bca3791ad5" -dependencies = [ - "cc", - "dirs-next", - "objc-foundation", - "objc_id", - "time", -] - [[package]] name = "malloc_buf" version = "0.0.6" @@ -1858,20 +1796,6 @@ dependencies = [ "libc", ] -[[package]] -name = "markup5ever" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" -dependencies = [ - "log", - "phf 0.8.0", - "phf_codegen 0.8.0", - "string_cache", - "string_cache_codegen", - "tendril", -] - [[package]] name = "markup5ever" version = "0.11.0" @@ -1953,33 +1877,35 @@ dependencies = [ ] [[package]] -name = "native-tls" -version = "0.2.11" +name = "muda" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "41fe753ec4d3e8137a1d3ecb1aee1192b8f7661fe1247641968f5bf5f2e6ebbe" dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", + "cocoa 0.25.0", + "crossbeam-channel", + "gdk", + "gdk-pixbuf", + "gtk", + "keyboard-types", + "objc", + "once_cell", + "png", + "thiserror", + "windows-sys 0.48.0", ] [[package]] name = "ndk" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" +checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" dependencies = [ "bitflags", "jni-sys", "ndk-sys", "num_enum", + "raw-window-handle", "thiserror", ] @@ -1991,9 +1917,9 @@ checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] name = "ndk-sys" -version = "0.3.0" +version = "0.4.1+23.1.7779620" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" +checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" dependencies = [ "jni-sys", ] @@ -2022,20 +1948,6 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" -[[package]] -name = "notify-rust" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc2e370356160e41aba3fd0fbac26d86a89ddd2ac4300c03de999a77cfa2509" -dependencies = [ - "mac-notification-sys", - "serde", - "tauri-winrt-notification", - "zbus", - "zvariant", - "zvariant_derive", -] - [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -2117,17 +2029,6 @@ dependencies = [ "objc_exception", ] -[[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_exception" version = "0.1.2" @@ -2148,125 +2049,50 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] -name = "open" -version = "3.2.0" +name = "ordered-stream" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" dependencies = [ - "pathdiff", - "windows-sys 0.42.0", + "futures-core", + "pin-project-lite", ] [[package]] -name = "openssl" -version = "0.10.45" +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "pango" +version = "0.16.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b102428fd03bc5edf97f62620f7298614c45cedf287c271e7ed450bbaf83f2e1" +checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94" dependencies = [ "bitflags", - "cfg-if", - "foreign-types", + "gio", + "glib", "libc", "once_cell", - "openssl-macros", - "openssl-sys", + "pango-sys", ] [[package]] -name = "openssl-macros" -version = "0.1.0" +name = "pango-sys" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23bbbf7854cd45b83958ebe919f0e8e516793727652e27fda10a8384cfc790b7" -dependencies = [ - "autocfg", - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "ordered-stream" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" -dependencies = [ - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "os_info" -version = "3.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4750134fb6a5d49afc80777394ad5d95b04bc12068c6abb92fae8f43817270f" -dependencies = [ - "log", - "serde", - "winapi", -] - -[[package]] -name = "os_pipe" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6a252f1f8c11e84b3ab59d7a488e48e4478a93937e027076638c49536204639" -dependencies = [ - "libc", - "windows-sys 0.42.0", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "pango" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f" -dependencies = [ - "bitflags", - "glib", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa" +checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.0.3", + "system-deps", ] [[package]] @@ -2298,17 +2124,11 @@ dependencies = [ "windows-sys 0.42.0", ] -[[package]] -name = "pathdiff" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" - [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pest" @@ -2498,7 +2318,7 @@ dependencies = [ "tauri", "tauri-build", "tauri-plugin-autostart", - "window-shadows", + "tauri-plugin-window", ] [[package]] @@ -2563,15 +2383,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "quick-xml" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea" -dependencies = [ - "memchr", -] - [[package]] name = "quote" version = "1.0.33" @@ -2697,7 +2508,7 @@ version = "1.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff" dependencies = [ - "aho-corasick 1.1.1", + "aho-corasick", "memchr", "regex-automata 0.3.9", "regex-syntax 0.7.5", @@ -2718,7 +2529,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9" dependencies = [ - "aho-corasick 1.1.1", + "aho-corasick", "memchr", "regex-syntax 0.7.5", ] @@ -2759,12 +2570,10 @@ dependencies = [ "http", "http-body", "hyper", - "hyper-tls", "ipnet", "js-sys", "log", "mime", - "native-tls", "once_cell", "percent-encoding", "pin-project-lite", @@ -2772,7 +2581,6 @@ dependencies = [ "serde_json", "serde_urlencoded", "tokio", - "tokio-native-tls", "tokio-util", "tower-service", "url", @@ -2783,30 +2591,6 @@ dependencies = [ "winreg 0.50.0", ] -[[package]] -name = "rfd" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0149778bd99b6959285b0933288206090c50e2327f47a9c463bfdbf45c8823ea" -dependencies = [ - "block", - "dispatch", - "glib-sys", - "gobject-sys", - "gtk-sys", - "js-sys", - "lazy_static", - "log", - "objc", - "objc-foundation", - "objc_id", - "raw-window-handle", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "windows 0.37.0", -] - [[package]] name = "rustc_version" version = "0.3.3" @@ -2866,16 +2650,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "schannel" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" -dependencies = [ - "lazy_static", - "windows-sys 0.36.1", -] - [[package]] name = "scoped-tls" version = "1.0.1" @@ -2888,29 +2662,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -[[package]] -name = "security-framework" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "selectors" version = "0.22.0" @@ -2945,9 +2696,6 @@ name = "semver" version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" -dependencies = [ - "serde", -] [[package]] name = "semver-parser" @@ -3113,16 +2861,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "shared_child" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "signal-hook" version = "0.3.17" @@ -3174,31 +2912,31 @@ dependencies = [ ] [[package]] -name = "soup2" -version = "0.2.1" +name = "soup3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0" +checksum = "82bc46048125fefd69d30b32b9d263d6556c9ffe82a7a7df181a86d912da5616" dependencies = [ "bitflags", + "futures-channel", "gio", "glib", "libc", "once_cell", - "soup2-sys", + "soup3-sys", ] [[package]] -name = "soup2-sys" -version = "0.2.0" +name = "soup3-sys" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf" +checksum = "014bbeb1c4cdb30739dc181e8d98b7908f124d9555843afa89b5570aaf4ec62b" dependencies = [ - "bitflags", "gio-sys", "glib-sys", "gobject-sys", "libc", - "system-deps 5.0.0", + "system-deps", ] [[package]] @@ -3209,9 +2947,9 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "state" -version = "0.5.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" +checksum = "2b8c4a4445d81357df8b1a650d0d0d6fbbbfe99d064aa5e02f3e4022061476d8" dependencies = [ "loom", ] @@ -3255,24 +2993,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] -name = "strum" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7ac893c7d471c8a21f31cfe213ec4f6d9afeed25537c772e08ef3f005f8729e" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.22.0" +name = "swift-rs" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb" +checksum = "1bbdb58577b6301f8d17ae2561f32002a5bae056d444e0f69e611e504a276204" dependencies = [ - "heck 0.3.3", - "proc-macro2", - "quote", - "syn 1.0.107", + "base64 0.21.4", + "serde", + "serde_json", ] [[package]] @@ -3297,59 +3025,32 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "sys-locale" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a11bd9c338fdba09f7881ab41551932ad42e405f61d01e8406baea71c07aee" -dependencies = [ - "js-sys", - "libc", - "wasm-bindgen", - "web-sys", - "windows-sys 0.45.0", -] - -[[package]] -name = "system-deps" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e" -dependencies = [ - "cfg-expr 0.9.1", - "heck 0.3.3", - "pkg-config", - "toml 0.5.10", - "version-compare 0.0.11", -] - [[package]] name = "system-deps" version = "6.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff" dependencies = [ - "cfg-expr 0.11.0", - "heck 0.4.0", + "cfg-expr", + "heck", "pkg-config", "toml 0.5.10", - "version-compare 0.1.1", + "version-compare", ] [[package]] name = "tao" -version = "0.16.3" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbc1134456b525a0e560ff48b185acb5178621df0dafa96e927826becb5184e" +checksum = "9f76221bce9db3af6b2b9cca4e92d8ea46c4cc88d785bc4b1a5cbcaab06f0b56" dependencies = [ "bitflags", "cairo-rs", "cc", - "cocoa", + "cocoa 0.24.1", "core-foundation", - "core-graphics", + "core-graphics 0.22.3", "crossbeam-channel", - "dirs-next", "dispatch", "gdk", "gdk-pixbuf", @@ -3364,7 +3065,6 @@ dependencies = [ "instant", "jni", "lazy_static", - "libappindicator", "libc", "log", "ndk", @@ -3379,10 +3079,12 @@ dependencies = [ "serde", "tao-macros", "unicode-segmentation", + "url", "uuid", - "windows 0.39.0", + "windows 0.48.0", "windows-implement", "x11-dl", + "zbus", ] [[package]] @@ -3396,88 +3098,72 @@ dependencies = [ "syn 1.0.107", ] -[[package]] -name = "tar" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" -dependencies = [ - "filetime", - "libc", - "xattr", -] - [[package]] name = "tauri" -version = "1.5.0" +version = "2.0.0-alpha.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72aee3277d0a0df01472cc704ab5934a51a1f25348838df17bfb3c5cb727880c" +checksum = "46acc0b6d20fe3a7c27e6036d9ef52d2c28afd1b6178ffc2dd4881f9994fecd7" dependencies = [ "anyhow", "bytes", - "cocoa", + "cocoa 0.25.0", "dirs-next", "embed_plist", - "encoding_rs", - "flate2", "futures-util", "glib", "glob", "gtk", - "heck 0.4.0", + "heck", "http", - "ignore", - "infer 0.9.0", - "notify-rust", + "infer 0.15.0", + "jni", + "libc", + "log", + "mime", + "muda", "objc", "once_cell", - "open", - "os_info", - "os_pipe", "percent-encoding", "png", "rand 0.8.5", "raw-window-handle", - "regex", "reqwest", - "rfd", - "semver 1.0.16", "serde", "serde_json", "serde_repr", "serialize-to-javascript", - "shared_child", "state", - "sys-locale", - "tar", + "swift-rs", + "tauri-build", "tauri-macros", "tauri-runtime", "tauri-runtime-wry", "tauri-utils", - "tempfile", "thiserror", "tokio", + "tray-icon", "url", "uuid", "webkit2gtk", "webview2-com", - "windows 0.39.0", + "windows 0.48.0", ] [[package]] name = "tauri-build" -version = "1.5.0" +version = "2.0.0-alpha.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defbfc551bd38ab997e5f8e458f87396d2559d05ce32095076ad6c30f7fc5f9c" +checksum = "dc47d3c84f4aeac397cd956267f3b8060c5a2dba78288a5ccf9a8b7a8c1e7025" dependencies = [ "anyhow", "cargo_toml", - "dirs-next", - "heck 0.4.0", + "heck", "json-patch", + "plist", "semver 1.0.16", "serde", "serde_json", + "swift-rs", "tauri-utils", "tauri-winres", "walkdir", @@ -3485,9 +3171,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "1.4.1" +version = "2.0.0-alpha.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b3475e55acec0b4a50fb96435f19631fb58cbcd31923e1a213de5c382536bbb" +checksum = "7f98a67c7ef3cb3c25de91fe1fa16cc3681997f6ec99da0a7496d6feae2ea91e" dependencies = [ "base64 0.21.4", "brotli", @@ -3497,7 +3183,6 @@ dependencies = [ "png", "proc-macro2", "quote", - "regex", "semver 1.0.16", "serde", "serde_json", @@ -3505,17 +3190,18 @@ dependencies = [ "tauri-utils", "thiserror", "time", + "url", "uuid", "walkdir", ] [[package]] name = "tauri-macros" -version = "1.4.1" +version = "2.0.0-alpha.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613740228de92d9196b795ac455091d3a5fbdac2654abb8bb07d010b62ab43af" +checksum = "b01cb5f945c71e040c5d191c32598565ae26cc266a9d5d4f7dd2dc324c5cfdd0" dependencies = [ - "heck 0.4.0", + "heck", "proc-macro2", "quote", "syn 1.0.107", @@ -3525,8 +3211,9 @@ dependencies = [ [[package]] name = "tauri-plugin-autostart" -version = "0.0.0" -source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#9b96996b5a90a6a57d587ce4312975f13a4d8bc2" +version = "2.0.0-alpha.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f67ab81fb8a86b98627843c00b6d2f3951d18827a02272feb5830b8ce96d9c59" dependencies = [ "auto-launch", "log", @@ -3536,15 +3223,26 @@ dependencies = [ "thiserror", ] +[[package]] +name = "tauri-plugin-window" +version = "2.0.0-alpha.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "646c4d192ac58631b56059b5a3b26b254b42dcae91a455a818a22687bb841c39" +dependencies = [ + "serde", + "tauri", + "thiserror", +] + [[package]] name = "tauri-runtime" -version = "0.14.1" +version = "1.0.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07f8e9e53e00e9f41212c115749e87d5cd2a9eebccafca77a19722eeecd56d43" +checksum = "525c4dea52547a13e58816c655bd0928f6c30026515e7b2a77166bcd984da6d0" dependencies = [ "gtk", "http", - "http-range", + "jni", "rand 0.8.5", "raw-window-handle", "serde", @@ -3553,18 +3251,19 @@ dependencies = [ "thiserror", "url", "uuid", - "webview2-com", - "windows 0.39.0", + "windows 0.48.0", ] [[package]] name = "tauri-runtime-wry" -version = "0.14.1" +version = "1.0.0-alpha.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8141d72b6b65f2008911e9ef5b98a68d1e3413b7a1464e8f85eb3673bb19a895" +checksum = "fce46e920b62699045e02db3006017d24324119189dfab2b12261aeebf98f4be" dependencies = [ - "cocoa", + "cocoa 0.24.1", "gtk", + "http", + "jni", "percent-encoding", "rand 0.8.5", "raw-window-handle", @@ -3573,26 +3272,25 @@ dependencies = [ "uuid", "webkit2gtk", "webview2-com", - "windows 0.39.0", + "windows 0.48.0", "wry", ] [[package]] name = "tauri-utils" -version = "1.5.0" +version = "2.0.0-alpha.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34d55e185904a84a419308d523c2c6891d5e2dbcee740c4997eb42e75a7b0f46" +checksum = "06bcd7c6f67fd6371dcc22da7d7f26ec12c4eae26ad7bc54943bb9f35b5db302" dependencies = [ "brotli", "ctor", "dunce", "glob", - "heck 0.4.0", - "html5ever 0.26.0", + "heck", + "html5ever", "infer 0.12.0", "json-patch", "kuchikiki", - "log", "memchr", "phf 0.10.1", "proc-macro2", @@ -3604,7 +3302,7 @@ dependencies = [ "thiserror", "url", "walkdir", - "windows 0.39.0", + "windows 0.48.0", ] [[package]] @@ -3617,17 +3315,6 @@ dependencies = [ "toml 0.7.8", ] -[[package]] -name = "tauri-winrt-notification" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58de036c4d2e20717024de2a3c4bf56c301f07b21bc8ef9b57189fce06f1f3b" -dependencies = [ - "quick-xml", - "strum", - "windows 0.39.0", -] - [[package]] name = "tempfile" version = "3.3.0" @@ -3747,16 +3434,6 @@ dependencies = [ "windows-sys 0.42.0", ] -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - [[package]] name = "tokio-util" version = "0.7.8" @@ -3882,6 +3559,25 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "tray-icon" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b164327e17101c78ba3dfdf879b977027ef1bd7855668ac30063de21fc02447" +dependencies = [ + "cocoa 0.25.0", + "core-graphics 0.23.1", + "crossbeam-channel", + "dirs-next", + "libappindicator", + "muda", + "objc", + "once_cell", + "png", + "thiserror", + "windows-sys 0.48.0", +] + [[package]] name = "treediff" version = "4.0.2" @@ -3921,9 +3617,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" @@ -3948,9 +3644,9 @@ checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" [[package]] name = "url" -version = "2.3.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" dependencies = [ "form_urlencoded", "idna", @@ -3966,9 +3662,9 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "uuid" -version = "1.2.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" dependencies = [ "getrandom 0.2.8", ] @@ -3979,18 +3675,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version-compare" -version = "0.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" - [[package]] name = "version-compare" version = "0.1.1" @@ -4152,9 +3836,9 @@ dependencies = [ [[package]] name = "webkit2gtk" -version = "0.18.2" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370" +checksum = "6f8db2963d7f1bd4ac2a208ab925881b4779dd20fee853b09a0bbf69289827c2" dependencies = [ "bitflags", "cairo-rs", @@ -4170,20 +3854,18 @@ dependencies = [ "javascriptcore-rs", "libc", "once_cell", - "soup2", + "soup3", "webkit2gtk-sys", ] [[package]] name = "webkit2gtk-sys" -version = "0.18.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3" +checksum = "864ebc9a39649baf49e46c713cd8b741cca14dd59d24cd77bc611ba9419fa18d" dependencies = [ - "atk-sys", "bitflags", "cairo-sys-rs", - "gdk-pixbuf-sys", "gdk-sys", "gio-sys", "glib-sys", @@ -4191,46 +3873,46 @@ dependencies = [ "gtk-sys", "javascriptcore-rs-sys", "libc", - "pango-sys", "pkg-config", - "soup2-sys", - "system-deps 6.0.3", + "soup3-sys", + "system-deps", ] [[package]] name = "webview2-com" -version = "0.19.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178" +checksum = "79e563ffe8e84d42e43ffacbace8780c0244fc8910346f334613559d92e203ad" dependencies = [ "webview2-com-macros", "webview2-com-sys", - "windows 0.39.0", + "windows 0.48.0", "windows-implement", + "windows-interface", ] [[package]] name = "webview2-com-macros" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" +checksum = "ac1345798ecd8122468840bcdf1b95e5dc6d2206c5e4b0eafa078d061f59c9bc" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.37", ] [[package]] name = "webview2-com-sys" -version = "0.19.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7" +checksum = "19d39576804304cf9ead192467ef47f7859a1a12fec3bd459d5ba34b8cd65ed5" dependencies = [ "regex", "serde", "serde_json", "thiserror", - "windows 0.39.0", + "windows 0.48.0", "windows-bindgen", "windows-metadata", ] @@ -4266,38 +3948,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "window-shadows" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29d30320647cfc3dc45554c8ad825b84831def81f967a2f7589931328ff9b16d" -dependencies = [ - "cocoa", - "objc", - "raw-window-handle", - "windows-sys 0.42.0", -] - -[[package]] -name = "windows" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647" -dependencies = [ - "windows_aarch64_msvc 0.37.0", - "windows_i686_gnu 0.37.0", - "windows_i686_msvc 0.37.0", - "windows_x86_64_gnu 0.37.0", - "windows_x86_64_msvc 0.37.0", -] - [[package]] name = "windows" version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" dependencies = [ - "windows-implement", "windows_aarch64_msvc 0.39.0", "windows_i686_gnu 0.39.0", "windows_i686_msvc 0.39.0", @@ -4311,14 +3967,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ + "windows-implement", + "windows-interface", "windows-targets 0.48.5", ] [[package]] name = "windows-bindgen" -version = "0.39.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41" +checksum = "1fe21a77bc54b7312dbd66f041605e098990c98be48cd52967b85b5e60e75ae6" dependencies = [ "windows-metadata", "windows-tokens", @@ -4326,32 +3984,31 @@ dependencies = [ [[package]] name = "windows-implement" -version = "0.39.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" +checksum = "5e2ee588991b9e7e6c8338edf3333fbe4da35dc72092643958ebb43f0ab2c49c" dependencies = [ + "proc-macro2", + "quote", "syn 1.0.107", - "windows-tokens", ] [[package]] -name = "windows-metadata" -version = "0.39.0" +name = "windows-interface" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278" +checksum = "e6fb8df20c9bcaa8ad6ab513f7b40104840c8867d5751126e4df3b08388d0cc7" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] [[package]] -name = "windows-sys" -version = "0.36.1" +name = "windows-metadata" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" -dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", -] +checksum = "422ee0e5f0e2cc372bb6addbfff9a8add712155cd743df9c15f6ab000f31432d" [[package]] name = "windows-sys" @@ -4418,9 +4075,9 @@ dependencies = [ [[package]] name = "windows-tokens" -version = "0.39.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" +checksum = "b34c9a3b28cb41db7385546f7f9a8179348dffc89923dde66857b1ba5312f6b4" [[package]] name = "windows_aarch64_gnullvm" @@ -4434,18 +4091,6 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" -[[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a" - [[package]] name = "windows_aarch64_msvc" version = "0.39.0" @@ -4464,18 +4109,6 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" -[[package]] -name = "windows_i686_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - -[[package]] -name = "windows_i686_gnu" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1" - [[package]] name = "windows_i686_gnu" version = "0.39.0" @@ -4494,18 +4127,6 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" -[[package]] -name = "windows_i686_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - -[[package]] -name = "windows_i686_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c" - [[package]] name = "windows_i686_msvc" version = "0.39.0" @@ -4524,18 +4145,6 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" -[[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d" - [[package]] name = "windows_x86_64_gnu" version = "0.39.0" @@ -4566,18 +4175,6 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" -[[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d" - [[package]] name = "windows_x86_64_msvc" version = "0.39.0" @@ -4636,23 +4233,24 @@ dependencies = [ [[package]] name = "wry" -version = "0.24.4" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ef04bdad49eba2e01f06e53688c8413bd6a87b0bc14b72284465cf96e3578e" +checksum = "bf906b43b8042615c85a978dceb4d4b72214d27b850b54abc3edeb7c5a67abab" dependencies = [ - "base64 0.13.1", + "base64 0.21.4", "block", - "cocoa", - "core-graphics", + "cocoa 0.24.1", + "core-graphics 0.22.3", "crossbeam-channel", "dunce", "gdk", "gio", "glib", "gtk", - "html5ever 0.25.2", + "html5ever", "http", - "kuchiki", + "javascriptcore-rs", + "kuchikiki", "libc", "log", "objc", @@ -4661,14 +4259,14 @@ dependencies = [ "serde", "serde_json", "sha2", - "soup2", + "soup3", "tao", "thiserror", "url", "webkit2gtk", "webkit2gtk-sys", "webview2-com", - "windows 0.39.0", + "windows 0.48.0", "windows-implement", ] @@ -4684,24 +4282,15 @@ dependencies = [ [[package]] name = "x11-dl" -version = "2.20.1" +version = "2.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1536d6965a5d4e573c7ef73a2c15ebcd0b2de3347bdf526c34c297c00ac40f0" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" dependencies = [ - "lazy_static", "libc", + "once_cell", "pkg-config", ] -[[package]] -name = "xattr" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" -dependencies = [ - "libc", -] - [[package]] name = "xdg-home" version = "1.0.0" diff --git a/app/tauri/Cargo.toml b/app/tauri/Cargo.toml index 8e48a203..1a5bea2f 100644 --- a/app/tauri/Cargo.toml +++ b/app/tauri/Cargo.toml @@ -14,14 +14,14 @@ rust-version = "1.57" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [build-dependencies] -tauri-build = { version = "1.4.0", features = [] } +tauri-build = { version = "2.0.0-alpha.8", features = [] } [dependencies] serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } -tauri = { version = "1.4.1", features = [ "system-tray", "api-all", "icon-png"] } -tauri-plugin-autostart = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } -window-shadows = "0.2.1" +tauri = { version = "2.0.0-alpha.14", features = ["tray-icon", "icon-png"] } +tauri-plugin-window = "2.0.0-alpha" +tauri-plugin-autostart = "2.0.0-alpha" base64 = { version = "0.21.4", features = [] } [features] diff --git a/app/tauri/src/commands.rs b/app/tauri/src/commands.rs index 55d23a9a..102e9196 100644 --- a/app/tauri/src/commands.rs +++ b/app/tauri/src/commands.rs @@ -4,11 +4,11 @@ use std::sync::Mutex; // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command use tauri::{Builder, Icon, PhysicalSize, Runtime, Wry}; -#[cfg(any(target_os = "macos", target_os = "windows"))] -use window_shadows::set_shadow; -use tauri::{CustomMenuItem, SystemTrayMenu, SystemTrayMenuItem, SystemTrayEvent}; +use tauri::{ + menu::{MenuBuilder, MenuItemBuilder}, + tray::{ClickType, TrayIconBuilder}, +}; -use tauri::SystemTray; use tauri::Manager; use base64; use base64::Engine; @@ -159,11 +159,7 @@ fn set_native_titlebar(use_native_titlebar: bool, window: tauri::Win Ok(_) => (), Err(e) => println!("There was a problem setting the window decorations! {:?}", e), } - #[cfg(not(target_os = "linux"))] - match set_shadow(&window, true) { - Ok(_) => (), - Err(e) => println!("There was a problem setting the window shadows! {:?}", e), - } + window.start_dragging(); println!("set_native_titlebar! {}", use_native_titlebar); } @@ -181,7 +177,13 @@ fn tray_icon_update(data_url: String, window: tauri::Window) { }; let icon: Icon = Icon::Raw(decoded_vec); - let _ = window.app_handle().tray_handle().set_icon(icon); + let tray = window.app_handle().tray(); + + if let Some(tray) = tray { + if let Err(e) = tray.set_icon(Some(icon)) { + eprintln!("Error setting tray icon: {}", e); + } + } } /** @@ -205,21 +207,17 @@ impl PomatezExtras for Builder { fn set_pomatez_system_tray(self) -> tauri::Builder { println!("Setting system tray"); - let show = CustomMenuItem::new("show".to_string(), "Show"); - let quit = CustomMenuItem::new("quit".to_string(), "Quit"); - let tray_menu = SystemTrayMenu::new() - .add_item(show) - .add_native_item(SystemTrayMenuItem::Separator) - .add_item(quit); - let tray = SystemTray::new().with_menu(tray_menu); - self.system_tray(tray).on_system_tray_event(|app, event| match event { - SystemTrayEvent::LeftClick { .. } => { - let window = app.get_window("main").unwrap(); - window.show().unwrap(); - window.set_focus().unwrap(); - } - SystemTrayEvent::MenuItemClick { id, .. } => { - match id.as_str() { + self.setup(|app| { + // Was defined in tauri.config.json to start in v1 + // That was created with an id of 1 though this gives more control + + let show = MenuItemBuilder::with_id("show", "Show").build(app); + let quit = MenuItemBuilder::with_id("quit", "Quit").build(app); + let menu = MenuBuilder::new(app).items(&[&show, &quit]).build()?; + let tray = TrayIconBuilder::new() + .menu(&menu) + .tooltip("Pomatez") + .on_menu_event(move |app, event| match event.id().as_ref() { "show" => { let window = app.get_window("main").unwrap(); window.show().unwrap(); @@ -229,9 +227,18 @@ impl PomatezExtras for Builder { app.exit(0); } _ => {} - } - } - _ => {} + }) + .on_tray_event(|tray, event| { + if event.click_type == ClickType::Left { + let app = tray.app_handle(); + let window = app.get_window("main").unwrap(); + window.show().unwrap(); + window.set_focus().unwrap(); + } + }) + .icon(Icon::File("./icons/icon.png".into())) + .build(app)?; + Ok(()) }) } } diff --git a/app/tauri/src/main.rs b/app/tauri/src/main.rs index 3e47075e..e9e42b9b 100644 --- a/app/tauri/src/main.rs +++ b/app/tauri/src/main.rs @@ -4,6 +4,7 @@ windows_subsystem = "windows" )] use tauri_plugin_autostart::MacosLauncher; +use tauri_plugin_window; #[macro_use] mod commands; @@ -13,7 +14,9 @@ use commands::PomatezExtras; fn main() { tauri::Builder::default() .plugin(tauri_plugin_autostart::init(MacosLauncher::LaunchAgent, None)) + .plugin(tauri_plugin_window::init()) + .register_pomatez_commands() .set_pomatez_system_tray() - .register_pomatez_commands().run(tauri::generate_context!()) + .run(tauri::generate_context!()) .expect("error while running tauri application"); } diff --git a/app/tauri/tauri.conf.json b/app/tauri/tauri.conf.json index e5fd3915..b090dca0 100644 --- a/app/tauri/tauri.conf.json +++ b/app/tauri/tauri.conf.json @@ -1,30 +1,21 @@ { "build": { - "beforeDevCommand": "yarn dev:tauri", "beforeBuildCommand": "yarn run tauri:updateversion && yarn build", - "withGlobalTauri": true, + "beforeDevCommand": "yarn dev:tauri", "devPath": "http://localhost:3000", - "distDir": "../renderer/build" + "distDir": "../renderer/build", + "withGlobalTauri": true }, "package": { "productName": "Pomatez", "version": "1.3.0" }, + "plugins": {}, "tauri": { - "allowlist": { - "all": true - }, - "systemTray": { - "iconPath": "icons/icon.png", - "iconAsTemplate": true - }, "bundle": { "active": true, - "publisher": "Roldan Montilla Jr", - "shortDescription": "Attractive pomodoro timer for Windows, Mac, and Linux.", "category": "Productivity", - "targets": ["all"], - "copyright": "", + "copyright": "Copyright © 2020 Roldan Montilla Jr", "deb": { "depends": [] }, @@ -45,6 +36,7 @@ "providerShortName": null, "signingIdentity": null }, + "publisher": "Roldan Montilla Jr", "resources": [], "shortDescription": "", "targets": "all", @@ -53,18 +45,15 @@ "digestAlgorithm": "sha256", "timestampUrl": "", "wix": { - "license": "../../LICENSE", "bannerPath": "./installer/banner.bmp", - "dialogImagePath": "./installer/dialog.bmp" + "dialogImagePath": "./installer/dialog.bmp", + "license": "../../LICENSE" } } }, "security": { "csp": null }, - "updater": { - "active": false - }, "windows": [ { "fullscreen": false, diff --git a/package.json b/package.json index 922c7d63..f3ead324 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ ] }, "devDependencies": { + "@tauri-apps/cli": "^2.0.0-alpha.14", "commitizen": "^4.1.2", "copyfiles": "2.4.1", "cross-env": "^7.0.3", @@ -58,11 +59,13 @@ "rollup": "^2.79.1", "rollup-plugin-typescript2": "^0.27.3", "typescript": "4.9.4", - "wait-on": "7.0.1", - "@tauri-apps/cli": "1.4.0" + "wait-on": "7.0.1" }, "resolutions": { "//": "Check https://github.com/facebook/create-react-app/issues/11773 to see if it has been fixed yet", "react-error-overlay": "6.0.9" + }, + "dependencies": { + "@tauri-apps/api": "^2.0.0-alpha.8" } } diff --git a/yarn.lock b/yarn.lock index 8b83d0d8..ef02c628 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3649,76 +3649,95 @@ dependencies: defer-to-connect "^1.0.1" -"@tauri-apps/api@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-1.5.0.tgz#46a0f9b6edd4bfc39be32afc4ad242e0b8cca3ea" - integrity sha512-yQY9wpVNuiYhLLuyDlu1nBpqJELT1fGp7OctN4rW9I2W1T2p7A3tqPxsEzQprEwneQRBAlPM9vC8NsnMbct+pg== - -"@tauri-apps/cli-darwin-arm64@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-1.4.0.tgz#e76bb8515ae31f03f2cbd440c1a09b237a79b3ac" - integrity sha512-nA/ml0SfUt6/CYLVbHmT500Y+ijqsuv5+s9EBnVXYSLVg9kbPUZJJHluEYK+xKuOj6xzyuT/+rZFMRapmJD3jQ== - -"@tauri-apps/cli-darwin-x64@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-1.4.0.tgz#dd1472460550d0aa0ec6e699b073be2d77e5b962" - integrity sha512-ov/F6Zr+dg9B0PtRu65stFo2G0ow2TUlneqYYrkj+vA3n+moWDHfVty0raDjMLQbQt3rv3uayFMXGPMgble9OA== - -"@tauri-apps/cli-linux-arm-gnueabihf@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-1.4.0.tgz#325e90e47d260ba71a499850ce769b5a6bdfd48d" - integrity sha512-zwjbiMncycXDV7doovymyKD7sCg53ouAmfgpUqEBOTY3vgBi9TwijyPhJOqoG5vUVWhouNBC08akGmE4dja15g== - -"@tauri-apps/cli-linux-arm64-gnu@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-1.4.0.tgz#b5d8f5cba3f8f7c7d44d071681f0ab0a37f2c46e" - integrity sha512-5MCBcziqXC72mMXnkZU68mutXIR6zavDxopArE2gQtK841IlE06bIgtLi0kUUhlFJk2nhPRgiDgdLbrPlyt7fw== - -"@tauri-apps/cli-linux-arm64-musl@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.4.0.tgz#f805ab2ee415875900f4b456f17dc4900d2a7911" - integrity sha512-7J3pRB6n6uNYgIfCeKt2Oz8J7oSaz2s8GGFRRH2HPxuTHrBNCinzVYm68UhVpJrL3bnGkU0ziVZLsW/iaOGfUg== - -"@tauri-apps/cli-linux-x64-gnu@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-1.4.0.tgz#d3f5e69c22420c7ac9e4021b7a94bce2e48cb45d" - integrity sha512-Zh5gfAJxOv5AVWxcwuueaQ2vIAhlg0d6nZui6nMyfIJ8dbf3aZQ5ZzP38sYow5h/fbvgL+3GSQxZRBIa3c2E1w== - -"@tauri-apps/cli-linux-x64-musl@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-1.4.0.tgz#2e7f718272ffdd9ace80f57a35023ba0c74767ad" - integrity sha512-OLAYoICU3FaYiTdBsI+lQTKnDHeMmFMXIApN0M+xGiOkoIOQcV9CConMPjgmJQ867+NHRNgUGlvBEAh9CiJodQ== - -"@tauri-apps/cli-win32-arm64-msvc@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-1.4.0.tgz#85cdb52a06feb92da785def4d02512099464525e" - integrity sha512-gZ05GENFbI6CB5MlOUsLlU0kZ9UtHn9riYtSXKT6MYs8HSPRffPHaHSL0WxsJweWh9nR5Hgh/TUU8uW3sYCzCg== - -"@tauri-apps/cli-win32-ia32-msvc@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-1.4.0.tgz#0b7c921204058215aec9a5a00f735e73909bd330" - integrity sha512-JsetT/lTx/Zq98eo8T5CiRyF1nKeX04RO8JlJrI3ZOYsZpp/A5RJvMd/szQ17iOzwiHdge+tx7k2jHysR6oBlQ== - -"@tauri-apps/cli-win32-x64-msvc@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.4.0.tgz#23abe3f08c0df89111c29602f91c21a23577b908" - integrity sha512-z8Olcnwp5aYhzqUAarFjqF+oELCjuYWnB2HAJHlfsYNfDCAORY5kct3Fklz8PSsubC3U2EugWn8n42DwnThurg== - -"@tauri-apps/cli@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-1.4.0.tgz#72732ae61e6b7d097e44a8a2ef5f211b2d01d98b" - integrity sha512-VXYr2i2iVFl98etQSQsqLzXgX96bnWiNZd1YADgatqwy/qecbd6Kl5ZAPB5R4ynsgE8A1gU7Fbzh7dCEQYFfmA== +"@tauri-apps/api@2.0.0-alpha.6": + version "2.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-alpha.6.tgz#16b94359e5c8266ed2b774b4f2e1339c594c4cb4" + integrity sha512-ZMOc3eu9amwvkC6M69h3hWt4/EsFaAXmtkiw4xd2LN59/lTb4ZQiVfq2QKlRcu1rj3n/Tcr7U30ZopvHwXBGIg== + +"@tauri-apps/api@2.0.0-alpha.8", "@tauri-apps/api@^2.0.0-alpha.8": + version "2.0.0-alpha.8" + resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-alpha.8.tgz#8caecf6e514ab2090f207e466aef9fec6fa0ed0b" + integrity sha512-3hZ+7EzUA11KN+O/Y4KgmjR+ldhXLdNllkw//hv/AaNsktEopCRBuKfVRLzVK3yov+Z+GzgxqFlwgJ1v6g1iKw== + +"@tauri-apps/cli-darwin-arm64@2.0.0-alpha.14": + version "2.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-alpha.14.tgz#1f27250f5659d0b058be36837c7e95afc721dc2f" + integrity sha512-3K416rvSUt8el/fdPnSnHJOI2j5Os9Kyy17XZp+z3PKRRuo/iJPp9L3w0zFGYsh7C+ylzV4OBUSVTi+e+gO5qA== + +"@tauri-apps/cli-darwin-x64@2.0.0-alpha.14": + version "2.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-alpha.14.tgz#446f87b8629756cd68985ba368e0df0da1dfd7a3" + integrity sha512-aLEUGG8Z0UpTENe4/UG6DU8bnB2e1uxyxYvcmFKrHv+EAtR9nLH14alBxPl2K54YXy3JLR4bKROW15a/sFrX9g== + +"@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-alpha.14": + version "2.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-alpha.14.tgz#3212d346a519f8ba0ab9370f5fbf449275c18368" + integrity sha512-Lu7unNvurBccxfHIaUQ0gPgUioTkQBMtWGrqO/auZ/JbjPR1W2eBlRwVNXf+nBWX9HwomPR3YD5yZuZmzxRV2g== + +"@tauri-apps/cli-linux-arm64-gnu@2.0.0-alpha.14": + version "2.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-alpha.14.tgz#577e9d66b23250f14792c5e25a732aad02290319" + integrity sha512-g8HkwKvAsWLLMJzPup7B1BCilYmXKwXdee7sf8QFbaIUSccR8i5pXLK5N/quKw5lmldYgFveEyuW9Qs8RgTYnQ== + +"@tauri-apps/cli-linux-arm64-musl@2.0.0-alpha.14": + version "2.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-alpha.14.tgz#72c24b8de5ab37ea6c0060be8965d48856c018de" + integrity sha512-ag4UuX6zg7vmBFWmg9ChyiJI7GTMkc8tjr/qobd3Lg9ddmjnVWwLUHt6v1kYhXiU7iLPD5DYDIjU8x/POc3hSA== + +"@tauri-apps/cli-linux-x64-gnu@2.0.0-alpha.14": + version "2.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-alpha.14.tgz#d9abbd46b689751162ff8f2aca3c213bf24d3028" + integrity sha512-+CviROc4fzrGqqyHQXh3uc2dGr/oYr19I8r2k+LJ2CDfmtj7CbNd/oC5oehHbHdw1oGFKuDPudrTGvzdRNygYA== + +"@tauri-apps/cli-linux-x64-musl@2.0.0-alpha.14": + version "2.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-alpha.14.tgz#6dfc09a7c335d019db08f28637b51bb3f67f7cfb" + integrity sha512-aCP51HOAQXgVhyPHXKy627bYVRkNnpCvSU3L03pYV8YDoGo+veeuek5UiW7PlNdwx52B/yC3Jz7Dr3gEbFimfQ== + +"@tauri-apps/cli-win32-arm64-msvc@2.0.0-alpha.14": + version "2.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-alpha.14.tgz#9154b1340bb04967347e96fdba618697b427b537" + integrity sha512-b6Ei5ERUF0KS1bttM7i6U62GmjIvlgK03XZqvL/KLNvUfqRMu8F7JA1ejSExgTxhEhKSWA768HiTXpXk2GjFFw== + +"@tauri-apps/cli-win32-ia32-msvc@2.0.0-alpha.14": + version "2.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-alpha.14.tgz#e80318d4a495575e80fb77fc62babd9867e15523" + integrity sha512-TDkvu5pd37bKxZ6N+BqngCNGcefY7aHxyJ3BdBGxF+wRMjEMh70mgEXk8i0uM/aUi/Kl1GQoO6xJfUDlIMPXOA== + +"@tauri-apps/cli-win32-x64-msvc@2.0.0-alpha.14": + version "2.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-alpha.14.tgz#eef8d38a0cc39c9b8c23bd9e8c16c290fb441f2a" + integrity sha512-9yfoEe2RSykKr5hCifVAL5o0gHXgRCS+Wo+RJjQ9L2+QHY7XPLZYAhj/h8jdcAdRveyIQwat3k7wl+SW87v1eg== + +"@tauri-apps/cli@^2.0.0-alpha.14": + version "2.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-2.0.0-alpha.14.tgz#f4b0b83fccdc3f70b75d3779e3fd6b93b971af60" + integrity sha512-4/IQwN5S94D6LTXQrDWbSea0pGb9TTC4BwxHUFmhep4NjFxms161v1zadAUIsq/N2x6WwCBGrsdq9SIkgKv49Q== optionalDependencies: - "@tauri-apps/cli-darwin-arm64" "1.4.0" - "@tauri-apps/cli-darwin-x64" "1.4.0" - "@tauri-apps/cli-linux-arm-gnueabihf" "1.4.0" - "@tauri-apps/cli-linux-arm64-gnu" "1.4.0" - "@tauri-apps/cli-linux-arm64-musl" "1.4.0" - "@tauri-apps/cli-linux-x64-gnu" "1.4.0" - "@tauri-apps/cli-linux-x64-musl" "1.4.0" - "@tauri-apps/cli-win32-arm64-msvc" "1.4.0" - "@tauri-apps/cli-win32-ia32-msvc" "1.4.0" - "@tauri-apps/cli-win32-x64-msvc" "1.4.0" + "@tauri-apps/cli-darwin-arm64" "2.0.0-alpha.14" + "@tauri-apps/cli-darwin-x64" "2.0.0-alpha.14" + "@tauri-apps/cli-linux-arm-gnueabihf" "2.0.0-alpha.14" + "@tauri-apps/cli-linux-arm64-gnu" "2.0.0-alpha.14" + "@tauri-apps/cli-linux-arm64-musl" "2.0.0-alpha.14" + "@tauri-apps/cli-linux-x64-gnu" "2.0.0-alpha.14" + "@tauri-apps/cli-linux-x64-musl" "2.0.0-alpha.14" + "@tauri-apps/cli-win32-arm64-msvc" "2.0.0-alpha.14" + "@tauri-apps/cli-win32-ia32-msvc" "2.0.0-alpha.14" + "@tauri-apps/cli-win32-x64-msvc" "2.0.0-alpha.14" + +"@tauri-apps/plugin-autostart@^2.0.0-alpha.1": + version "2.0.0-alpha.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-autostart/-/plugin-autostart-2.0.0-alpha.1.tgz#4617d0a1aeb3b620e156e2ec010865de2bb947ec" + integrity sha512-xs72S8KCYzt9puML4vrmPvg2/wpUuRg4NMEp+12A7XwCP4mQ9js0fFPKSma770TVeJGpzhdJFvDTdWgrVyhYng== + dependencies: + "@tauri-apps/api" "2.0.0-alpha.6" + +"@tauri-apps/plugin-window@^2.0.0-alpha.1": + version "2.0.0-alpha.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-window/-/plugin-window-2.0.0-alpha.1.tgz#28a0217100fc5a34fb2a6d76103ba056b2348286" + integrity sha512-dFOAgal/3Txz3SQ+LNQq0AK1EPC+acdaFlwPVB/6KXUZYmaFleIlzgxDVoJCQ+/xOhxvYrdQaFLefh0I/Kldbg== + dependencies: + "@tauri-apps/api" "2.0.0-alpha.6" "@tootallnate/once@1": version "1.1.2" @@ -14892,10 +14911,10 @@ react-dom@^16.14.0: prop-types "^15.6.2" scheduler "^0.19.1" -react-error-overlay@6.0.9, react-error-overlay@^6.0.11: - version "6.0.9" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" - integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== +react-error-overlay@^6.0.11: + version "6.0.11" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" + integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.6: version "16.13.1" @@ -16846,12 +16865,6 @@ tar@^6.1.2: mkdirp "^1.0.3" yallist "^4.0.0" -"tauri-plugin-autostart-api@https://github.com/tauri-apps/tauri-plugin-autostart#v1": - version "0.0.0" - resolved "https://github.com/tauri-apps/tauri-plugin-autostart#ddb8917170309ce52fb9d433f58570b5caf6b27a" - dependencies: - "@tauri-apps/api" "1.5.0" - temp-dir@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" From 24be241f0a9e81766943b2e9def697b038a39aa7 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Thu, 19 Oct 2023 02:43:07 +0100 Subject: [PATCH 29/37] refactor(tauri): split system_tray to another file --- app/renderer/package.json | 1 + app/tauri/Cargo.lock | 29 ++++++++++ app/tauri/Cargo.toml | 3 + app/tauri/src/commands.rs | 80 ++------------------------ app/tauri/src/global_shortcuts.rs | 0 app/tauri/src/main.rs | 6 +- app/tauri/src/system_tray.rs | 94 +++++++++++++++++++++++++++++++ app/tauri/tauri.conf.json | 4 +- tsconfig.json | 1 + yarn.lock | 7 +++ 10 files changed, 148 insertions(+), 77 deletions(-) create mode 100644 app/tauri/src/global_shortcuts.rs create mode 100644 app/tauri/src/system_tray.rs diff --git a/app/renderer/package.json b/app/renderer/package.json index 540b3559..2ed89b9d 100644 --- a/app/renderer/package.json +++ b/app/renderer/package.json @@ -35,6 +35,7 @@ "@pomatez/shareables": "*", "@tauri-apps/api": "2.0.0-alpha.8", "@tauri-apps/plugin-autostart": "^2.0.0-alpha.1", + "@tauri-apps/plugin-global-shortcut": "^2.0.0-alpha.1", "@tauri-apps/plugin-window": "^2.0.0-alpha.1", "@types/autosize": "^3.0.7", "@types/jest": "^26.0.24", diff --git a/app/tauri/Cargo.lock b/app/tauri/Cargo.lock index d72e4954..69e5f41e 100644 --- a/app/tauri/Cargo.lock +++ b/app/tauri/Cargo.lock @@ -1263,6 +1263,20 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +[[package]] +name = "global-hotkey" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c12993a445d59000c3994fcd3d179e7da026a4234cc46db652987aa2785e4a" +dependencies = [ + "crossbeam-channel", + "keyboard-types", + "once_cell", + "thiserror", + "windows-sys 0.48.0", + "x11-dl", +] + [[package]] name = "gobject-sys" version = "0.16.3" @@ -2318,6 +2332,7 @@ dependencies = [ "tauri", "tauri-build", "tauri-plugin-autostart", + "tauri-plugin-global-shortcut", "tauri-plugin-window", ] @@ -3223,6 +3238,20 @@ dependencies = [ "thiserror", ] +[[package]] +name = "tauri-plugin-global-shortcut" +version = "2.0.0-alpha.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6a55e25d565b5eafaa4357ac49d52dd5826ac78c8eb0dc6a9c2d6ff60ab75ce" +dependencies = [ + "global-hotkey", + "log", + "serde", + "serde_json", + "tauri", + "thiserror", +] + [[package]] name = "tauri-plugin-window" version = "2.0.0-alpha.2" diff --git a/app/tauri/Cargo.toml b/app/tauri/Cargo.toml index 1a5bea2f..12a3328d 100644 --- a/app/tauri/Cargo.toml +++ b/app/tauri/Cargo.toml @@ -24,6 +24,9 @@ tauri-plugin-window = "2.0.0-alpha" tauri-plugin-autostart = "2.0.0-alpha" base64 = { version = "0.21.4", features = [] } +[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies] +tauri-plugin-global-shortcut = "2.0.0-alpha" + [features] # by default Tauri runs in production mode # when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL diff --git a/app/tauri/src/commands.rs b/app/tauri/src/commands.rs index 102e9196..e9ee8714 100644 --- a/app/tauri/src/commands.rs +++ b/app/tauri/src/commands.rs @@ -3,20 +3,13 @@ use std::sync::Mutex; // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command -use tauri::{Builder, Icon, PhysicalSize, Runtime, Wry}; -use tauri::{ - menu::{MenuBuilder, MenuItemBuilder}, - tray::{ClickType, TrayIconBuilder}, -}; - -use tauri::Manager; -use base64; -use base64::Engine; -use base64::engine::general_purpose; +use tauri::{Builder, PhysicalSize, Runtime, Wry}; #[non_exhaustive] struct WindowSize; +use crate::system_tray; + impl WindowSize { // Not sure why, if its due to UI scaling or what though these values seem to size smaller than the same values on electron @@ -159,32 +152,9 @@ fn set_native_titlebar(use_native_titlebar: bool, window: tauri::Win Ok(_) => (), Err(e) => println!("There was a problem setting the window decorations! {:?}", e), } - window.start_dragging(); println!("set_native_titlebar! {}", use_native_titlebar); } -#[tauri::command] -fn tray_icon_update(data_url: String, window: tauri::Window) { - println!("tray_icon_update!"); - let base64_str = data_url.trim_start_matches("data:image/png;base64,"); - - let decoded_vec = match general_purpose::STANDARD.decode(base64_str) { - Ok(vec) => vec, - Err(e) => { - eprintln!("Error decoding Base64 string: {}", e); - return; - } - }; - - let icon: Icon = Icon::Raw(decoded_vec); - let tray = window.app_handle().tray(); - - if let Some(tray) = tray { - if let Err(e) = tray.set_icon(Some(icon)) { - eprintln!("Error setting tray icon: {}", e); - } - } -} /** * We could do this by passing the object into a custom function that adds the commands but I wanted @@ -193,52 +163,14 @@ fn tray_icon_update(data_url: String, window: tauri::Window) { * Switch to a function that takes and returns tauri::Builder or uses a reference if we need to * switch it. */ -pub trait PomatezExtras { +pub trait PomatezCommands { fn register_pomatez_commands(self) -> tauri::Builder; - fn set_pomatez_system_tray(self) -> tauri::Builder; } -impl PomatezExtras for Builder { +impl PomatezCommands for Builder { fn register_pomatez_commands(self) -> tauri::Builder { self.invoke_handler(tauri::generate_handler![set_show, set_always_on_top, set_fullscreen_break, set_compact_mode, set_ui_theme, set_native_titlebar, - tray_icon_update, set_close, set_minimize]) - } - - fn set_pomatez_system_tray(self) -> tauri::Builder { - println!("Setting system tray"); - self.setup(|app| { - // Was defined in tauri.config.json to start in v1 - // That was created with an id of 1 though this gives more control - - let show = MenuItemBuilder::with_id("show", "Show").build(app); - let quit = MenuItemBuilder::with_id("quit", "Quit").build(app); - let menu = MenuBuilder::new(app).items(&[&show, &quit]).build()?; - let tray = TrayIconBuilder::new() - .menu(&menu) - .tooltip("Pomatez") - .on_menu_event(move |app, event| match event.id().as_ref() { - "show" => { - let window = app.get_window("main").unwrap(); - window.show().unwrap(); - window.set_focus().unwrap(); - } - "quit" => { - app.exit(0); - } - _ => {} - }) - .on_tray_event(|tray, event| { - if event.click_type == ClickType::Left { - let app = tray.app_handle(); - let window = app.get_window("main").unwrap(); - window.show().unwrap(); - window.set_focus().unwrap(); - } - }) - .icon(Icon::File("./icons/icon.png".into())) - .build(app)?; - Ok(()) - }) + system_tray::tray_icon_update, set_close, set_minimize]) } } diff --git a/app/tauri/src/global_shortcuts.rs b/app/tauri/src/global_shortcuts.rs new file mode 100644 index 00000000..e69de29b diff --git a/app/tauri/src/main.rs b/app/tauri/src/main.rs index e9e42b9b..812b48bd 100644 --- a/app/tauri/src/main.rs +++ b/app/tauri/src/main.rs @@ -9,7 +9,11 @@ use tauri_plugin_window; #[macro_use] mod commands; -use commands::PomatezExtras; +mod system_tray; +mod global_shortcuts; + +use commands::PomatezCommands; +use system_tray::PomatezTray; fn main() { tauri::Builder::default() diff --git a/app/tauri/src/system_tray.rs b/app/tauri/src/system_tray.rs new file mode 100644 index 00000000..adec9025 --- /dev/null +++ b/app/tauri/src/system_tray.rs @@ -0,0 +1,94 @@ +use std::path::PathBuf; +use tauri::{Builder, Icon, Manager, Runtime, Wry}; +use tauri::{ + menu::{MenuBuilder, MenuItemBuilder}, + tray::{ClickType, TrayIconBuilder}, +}; +use tauri::path::BaseDirectory; + +use base64; +use base64::Engine; +use base64::engine::general_purpose; + +#[tauri::command] +pub fn tray_icon_update(data_url: String, window: tauri::Window) { + println!("tray_icon_update!"); + let base64_str = data_url.trim_start_matches("data:image/png;base64,"); + + let decoded_vec = match general_purpose::STANDARD.decode(base64_str) { + Ok(vec) => vec, + Err(e) => { + eprintln!("Error decoding Base64 string: {}", e); + return; + } + }; + + let icon: Icon = Icon::Raw(decoded_vec); + let tray = window.app_handle().tray(); + + if let Some(tray) = tray { + if let Err(e) = tray.set_icon(Some(icon)) { + eprintln!("Error setting tray icon: {}", e); + } + } +} + + +/** +* We could do this by passing the object into a custom function that adds the commands but I wanted +* to practice more with rust. Plus it makes the setup cleaner. + +* Switch to a function that takes and returns tauri::Builder or uses a reference if we need to +* switch it. + */ +pub trait PomatezTray { + fn set_pomatez_system_tray(self) -> tauri::Builder; +} + +impl PomatezTray for Builder { + + /* + * The icon is updated after rendering on the frontend so that is handled in the commands file. + * However the initial setup and behavior is handled here. + */ + fn set_pomatez_system_tray(self) -> tauri::Builder { + println!("Setting system tray"); + self.setup(|app| { + // Was defined in tauri.config.json to start in v1 + // That was created with an id of 1 though this gives more control + + let show = MenuItemBuilder::with_id("show", "Show").build(app); + let quit = MenuItemBuilder::with_id("quit", "Quit").build(app); + let menu = MenuBuilder::new(app).items(&[&show, &quit]).build()?; + + let icon_path = app.path().resolve::("icons/icon.png".into(), BaseDirectory::Resource) + .expect("failed to resolve icon path, this should not happen as it is an internal file"); + + let _ = TrayIconBuilder::new() + .menu(&menu) + .tooltip("Pomatez") + .on_menu_event(move |app, event| match event.id().as_ref() { + "show" => { + let window = app.get_window("main").unwrap(); + window.show().unwrap(); + window.set_focus().unwrap(); + } + "quit" => { + app.exit(0); + } + _ => {} + }) + .on_tray_event(|tray, event| { + if event.click_type == ClickType::Left { + let app = tray.app_handle(); + let window = app.get_window("main").unwrap(); + window.show().unwrap(); + window.set_focus().unwrap(); + } + }) + .icon(Icon::File(icon_path)) + .build(app)?; + Ok(()) + }) + } +} diff --git a/app/tauri/tauri.conf.json b/app/tauri/tauri.conf.json index b090dca0..9e3fd477 100644 --- a/app/tauri/tauri.conf.json +++ b/app/tauri/tauri.conf.json @@ -37,9 +37,9 @@ "signingIdentity": null }, "publisher": "Roldan Montilla Jr", - "resources": [], + "resources": ["icons/icon.png"], "shortDescription": "", - "targets": "all", + "targets": ["deb", "appimage", "msi", "dmg", "updater"], "windows": { "certificateThumbprint": null, "digestAlgorithm": "sha256", diff --git a/tsconfig.json b/tsconfig.json index 1b84e1e2..01f8b5cc 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,6 +9,7 @@ "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "suppressImplicitAnyIndexErrors": true, + "ignoreDeprecations": "5.0", "module": "esnext", "moduleResolution": "node", "resolveJsonModule": true, diff --git a/yarn.lock b/yarn.lock index ef02c628..2c09d4e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3732,6 +3732,13 @@ dependencies: "@tauri-apps/api" "2.0.0-alpha.6" +"@tauri-apps/plugin-global-shortcut@^2.0.0-alpha.1": + version "2.0.0-alpha.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-global-shortcut/-/plugin-global-shortcut-2.0.0-alpha.1.tgz#d5abec71d7b731b3530712fb21c05bf6d11fd9c4" + integrity sha512-86pqnvoylSZV7R/SjK1WlLhTWydIhRS5qjHl6IqIcY4sYRuBMovMNj8fMLhFt2Ppq4dRiSx5jbrlQDY82HJtaQ== + dependencies: + "@tauri-apps/api" "2.0.0-alpha.6" + "@tauri-apps/plugin-window@^2.0.0-alpha.1": version "2.0.0-alpha.1" resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-window/-/plugin-window-2.0.0-alpha.1.tgz#28a0217100fc5a34fb2a6d76103ba056b2348286" From 391f5b51c397e82db72f7f2f11483f460c0f73cd Mon Sep 17 00:00:00 2001 From: Sekwah Date: Sat, 21 Oct 2023 18:22:27 +0100 Subject: [PATCH 30/37] fix(tauri): fullscreen break being resizeable --- app/tauri/src/commands.rs | 13 +++++++++++++ app/tauri/src/global_shortcuts.rs | 12 ++++++++++++ 2 files changed, 25 insertions(+) diff --git a/app/tauri/src/commands.rs b/app/tauri/src/commands.rs index e9ee8714..2001db85 100644 --- a/app/tauri/src/commands.rs +++ b/app/tauri/src/commands.rs @@ -57,6 +57,15 @@ fn set_always_on_top(always_on_top: bool, window: tauri::Window) fn set_fullscreen_break(should_fullscreen: bool, always_on_top: bool, window: tauri::Window) { println!("set_fullscreen_break! {} {}", should_fullscreen, always_on_top); try_set_always_on_top(always_on_top, &window); + if should_fullscreen { + try_set_native_titlebar(true, &window); + } else { + let decorationsMutex = HAS_DECORATIONS.lock().unwrap(); + let decorations = *decorationsMutex; + drop(decorationsMutex); + try_set_native_titlebar(decorations, &window); + } + try_set_fullscreen(should_fullscreen, &window); } @@ -148,6 +157,10 @@ fn set_native_titlebar(use_native_titlebar: bool, window: tauri::Win *decorations = use_native_titlebar; drop(decorations); } + try_set_native_titlebar(use_native_titlebar, &window); +} + +fn try_set_native_titlebar(use_native_titlebar: bool, window: &tauri::Window) { match window.set_decorations(use_native_titlebar) { Ok(_) => (), Err(e) => println!("There was a problem setting the window decorations! {:?}", e), diff --git a/app/tauri/src/global_shortcuts.rs b/app/tauri/src/global_shortcuts.rs index e69de29b..a86194a8 100644 --- a/app/tauri/src/global_shortcuts.rs +++ b/app/tauri/src/global_shortcuts.rs @@ -0,0 +1,12 @@ +/* +Key combos to block +WIndows at least +const blockKeys = [ + "CommandOrControl+R", + "CommandOrControl+Shift+R", + "CommandOrControl+Alt+Q", + "F11", + ]; + +When in fullscreen CommandOrControl+W +*/ \ No newline at end of file From 053c65115d4dd0dfd5008427d30517f3dcd73cfc Mon Sep 17 00:00:00 2001 From: Sekwah Date: Sat, 21 Oct 2023 22:39:55 +0100 Subject: [PATCH 31/37] chore: remove ignoreDeprecations --- .github/workflows/build-tauri.yml | 2 +- tsconfig.json | 1 - yarn.lock | 8 ++++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-tauri.yml b/.github/workflows/build-tauri.yml index 1ad6b662..9bc723bf 100644 --- a/.github/workflows/build-tauri.yml +++ b/.github/workflows/build-tauri.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Use Node.js 16.x + - name: Use Node.js 18.x uses: actions/setup-node@v2 with: node-version: 16.x diff --git a/tsconfig.json b/tsconfig.json index 01f8b5cc..1b84e1e2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,7 +9,6 @@ "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "suppressImplicitAnyIndexErrors": true, - "ignoreDeprecations": "5.0", "module": "esnext", "moduleResolution": "node", "resolveJsonModule": true, diff --git a/yarn.lock b/yarn.lock index 2c09d4e6..890d72ea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14918,10 +14918,10 @@ react-dom@^16.14.0: prop-types "^15.6.2" scheduler "^0.19.1" -react-error-overlay@^6.0.11: - version "6.0.11" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" - integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== +react-error-overlay@6.0.9, react-error-overlay@^6.0.11: + version "6.0.9" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" + integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.6: version "16.13.1" From 5214659b300da7a2ea62be3d1c3ed48d272e927d Mon Sep 17 00:00:00 2001 From: Sekwah Date: Sat, 21 Oct 2023 22:51:20 +0100 Subject: [PATCH 32/37] chore: update install deps for ubuntu --- .github/workflows/build-tauri.yml | 2 +- app/tauri/src/commands.rs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-tauri.yml b/.github/workflows/build-tauri.yml index 9bc723bf..c5a1c8c3 100644 --- a/.github/workflows/build-tauri.yml +++ b/.github/workflows/build-tauri.yml @@ -31,7 +31,7 @@ jobs: if: matrix.os == 'ubuntu-20.04' run: | sudo apt-get update - sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev librsvg2-dev patchelf + sudo apt-get install -y libwebkit2gtk-4.1 build-essential curl wget file libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev javascriptcoregtk-4.1 - name: Install NPM Packages run: | yarn install --immutable --network-timeout 120000 diff --git a/app/tauri/src/commands.rs b/app/tauri/src/commands.rs index 2001db85..b57b8a14 100644 --- a/app/tauri/src/commands.rs +++ b/app/tauri/src/commands.rs @@ -60,9 +60,9 @@ fn set_fullscreen_break(should_fullscreen: bool, always_on_top: bool if should_fullscreen { try_set_native_titlebar(true, &window); } else { - let decorationsMutex = HAS_DECORATIONS.lock().unwrap(); - let decorations = *decorationsMutex; - drop(decorationsMutex); + let decorations_mutex = HAS_DECORATIONS.lock().unwrap(); + let decorations = *decorations_mutex; + drop(decorations_mutex); try_set_native_titlebar(decorations, &window); } From 05514b136505285fc69db256de7e756961683370 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Sun, 22 Oct 2023 01:15:37 +0100 Subject: [PATCH 33/37] chore: update ubuntu, node and add a devcontainer file to make it easier to debug the current build pipelines --- .devcontainer/devcontainer.json | 1 + .github/workflows/build-tauri.yml | 4 ++-- .github/workflows/build.yml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..ad113f05 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1 @@ +{ "image": "ubuntu:22.04" } diff --git a/.github/workflows/build-tauri.yml b/.github/workflows/build-tauri.yml index c5a1c8c3..9cbe53bd 100644 --- a/.github/workflows/build-tauri.yml +++ b/.github/workflows/build-tauri.yml @@ -11,7 +11,7 @@ jobs: strategy: matrix: include: - - os: ubuntu-20.04 + - os: ubuntu-22.04 name: linux - os: macos-latest name: mac @@ -28,7 +28,7 @@ jobs: - name: install Rust stable uses: dtolnay/rust-toolchain@stable - name: install dependencies (ubuntu only) - if: matrix.os == 'ubuntu-20.04' + if: matrix.os == 'ubuntu-22.04' run: | sudo apt-get update sudo apt-get install -y libwebkit2gtk-4.1 build-essential curl wget file libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev javascriptcoregtk-4.1 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3f4e03cc..ef19d15a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: - name: Setup node uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 18.x cache: "yarn" - name: Cache uses: actions/cache@v3 From d17b63d66abe19ef01a1dc000d1d6bdca7515611 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Mon, 23 Oct 2023 05:41:54 +0100 Subject: [PATCH 34/37] feat(tauri): add global show and hide shortcuts as well as block reload --- .../contexts/connectors/TauriConnector.tsx | 17 ++++- app/tauri/Cargo.lock | 1 + app/tauri/Cargo.toml | 3 + app/tauri/src/commands.rs | 2 +- app/tauri/src/global_shortcuts.rs | 71 +++++++++++++++--- app/tauri/src/main.rs | 23 +++++- app/tauri/src/system_tray.rs | 73 +++++++++---------- 7 files changed, 134 insertions(+), 56 deletions(-) diff --git a/app/renderer/src/contexts/connectors/TauriConnector.tsx b/app/renderer/src/contexts/connectors/TauriConnector.tsx index 6da66dd9..ec2a5e82 100644 --- a/app/renderer/src/contexts/connectors/TauriConnector.tsx +++ b/app/renderer/src/contexts/connectors/TauriConnector.tsx @@ -10,7 +10,6 @@ import { SET_FULLSCREEN_BREAK, SET_MINIMIZE, SET_NATIVE_TITLEBAR, - SET_OPEN_AT_LOGIN, SET_SHOW, SET_UI_THEME, TRAY_ICON_UPDATE, @@ -25,6 +24,22 @@ export const TauriConnectorProvider: React.FC = ({ children }) => { (state: AppStateTypes) => state.settings ); + useEffect(() => { + function handleKeyDown(event: KeyboardEvent) { + if ( + (event.ctrlKey && (event.key === "r" || event.key === "R")) || + event.key === "F5" + ) { + event.preventDefault(); + } + } + + window.addEventListener("keydown", handleKeyDown); + return () => { + window.removeEventListener("keydown", handleKeyDown); + }; + }, []); + /** * Rust uses lowercase snake_case for function names so we need to convert to lower case for the calls. * @param event diff --git a/app/tauri/Cargo.lock b/app/tauri/Cargo.lock index 69e5f41e..c354c274 100644 --- a/app/tauri/Cargo.lock +++ b/app/tauri/Cargo.lock @@ -2327,6 +2327,7 @@ name = "pomatez" version = "1.3.0" dependencies = [ "base64 0.21.4", + "lazy_static", "serde", "serde_json", "tauri", diff --git a/app/tauri/Cargo.toml b/app/tauri/Cargo.toml index 12a3328d..cef9db1d 100644 --- a/app/tauri/Cargo.toml +++ b/app/tauri/Cargo.toml @@ -22,8 +22,11 @@ serde = { version = "1.0", features = ["derive"] } tauri = { version = "2.0.0-alpha.14", features = ["tray-icon", "icon-png"] } tauri-plugin-window = "2.0.0-alpha" tauri-plugin-autostart = "2.0.0-alpha" +lazy_static = "1.4.0" base64 = { version = "0.21.4", features = [] } +# This one is for toying with global hotkeys from the browser mostly +# We can use https://github.com/tauri-apps/global-hotkey directly tbh [target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies] tauri-plugin-global-shortcut = "2.0.0-alpha" diff --git a/app/tauri/src/commands.rs b/app/tauri/src/commands.rs index b57b8a14..6f722210 100644 --- a/app/tauri/src/commands.rs +++ b/app/tauri/src/commands.rs @@ -28,7 +28,7 @@ fn set_minimize(minimize_to_tray: bool, window: tauri::Window) { if minimize_to_tray { window.hide().unwrap(); } else { - window.close().unwrap(); + window.minimize().unwrap(); } } diff --git a/app/tauri/src/global_shortcuts.rs b/app/tauri/src/global_shortcuts.rs index a86194a8..2a87923a 100644 --- a/app/tauri/src/global_shortcuts.rs +++ b/app/tauri/src/global_shortcuts.rs @@ -1,12 +1,59 @@ -/* -Key combos to block -WIndows at least -const blockKeys = [ - "CommandOrControl+R", - "CommandOrControl+Shift+R", - "CommandOrControl+Alt+Q", - "F11", - ]; - -When in fullscreen CommandOrControl+W -*/ \ No newline at end of file +use lazy_static::lazy_static; +use tauri::{Wry, Builder, Manager, AppHandle, App}; +use tauri_plugin_global_shortcut::{GlobalShortcutExt, Modifiers, Shortcut}; +use tauri_plugin_global_shortcut::Code; + +lazy_static! { + static ref SHOW_SHORTCUT: Shortcut = Shortcut::new(Some(Modifiers::SHIFT | Modifiers::ALT), Code::KeyS); + static ref HIDE_SHORTCUT: Shortcut = Shortcut::new(Some(Modifiers::SHIFT | Modifiers::ALT), Code::KeyH); + static ref REFRESH: Shortcut = Shortcut::new(None, Code::F5); +} + +pub trait PomatezGlobalShortcutsSetup { + fn setup_global_shortcuts(&self); +} + +impl PomatezGlobalShortcutsSetup for App { + fn setup_global_shortcuts(&self) { + let window = self.get_window("main").expect("Failed to get window"); + let global_shortcut_plugin = { + tauri_plugin_global_shortcut::Builder::with_handler(move |shortcut| { + println!("Shortcut pressed: {:?}", shortcut); + match shortcut.id() { + key if SHOW_SHORTCUT.id() == key => { + window.show().expect("Failed to show window"); + window.set_focus().expect("Failed to focus window"); + } + key if HIDE_SHORTCUT.id() == key => { + window.hide().expect("Failed to hide window"); + } + _ => println!("Shortcut pressed: {:?}", shortcut), + } + if shortcut.matches(Modifiers::ALT | Modifiers::SHIFT, Code::KeyH) { + window.hide().expect("Failed to hide window"); + } else { + println!("Shortcut pressed: {:?}", shortcut); + } + }).build() + }; + let app_handle = self.handle(); + + app_handle.plugin(global_shortcut_plugin).expect("failed to register global shortcut plugin"); + + println!("Registered global shortcut plugin"); + } +} + +pub trait PomatezGlobalShortcutsRegister { + fn register_global_shortcuts(&self); +} + +impl PomatezGlobalShortcutsRegister for AppHandle { + fn register_global_shortcuts(&self) { + let global_shortcut = self.global_shortcut(); + global_shortcut.register(SHOW_SHORTCUT.clone()).expect("failed to register global shortcut"); + global_shortcut.register(HIDE_SHORTCUT.clone()).expect("failed to register global shortcut"); + + println!("Registered global shortcuts"); + } +} \ No newline at end of file diff --git a/app/tauri/src/main.rs b/app/tauri/src/main.rs index 812b48bd..3150f28b 100644 --- a/app/tauri/src/main.rs +++ b/app/tauri/src/main.rs @@ -3,24 +3,39 @@ all(not(debug_assertions), target_os = "windows"), windows_subsystem = "windows" )] +use tauri::RunEvent; use tauri_plugin_autostart::MacosLauncher; +use tauri_plugin_global_shortcut::GlobalShortcutExt; use tauri_plugin_window; #[macro_use] mod commands; - mod system_tray; mod global_shortcuts; use commands::PomatezCommands; use system_tray::PomatezTray; +use global_shortcuts::{PomatezGlobalShortcutsSetup, PomatezGlobalShortcutsRegister}; fn main() { - tauri::Builder::default() + let app = tauri::Builder::default() .plugin(tauri_plugin_autostart::init(MacosLauncher::LaunchAgent, None)) .plugin(tauri_plugin_window::init()) .register_pomatez_commands() - .set_pomatez_system_tray() - .run(tauri::generate_context!()) + .setup(|app| { + app.setup_global_shortcuts(); + app.set_pomatez_system_tray(); + + Ok(()) + }) + .build(tauri::generate_context!()) .expect("error while running tauri application"); + + app.run(|app_handle, e| match e { + RunEvent::Ready => { + app_handle.register_global_shortcuts(); + println!("Pomatez is ready"); + } + _ => {} + }); } diff --git a/app/tauri/src/system_tray.rs b/app/tauri/src/system_tray.rs index adec9025..50d3b9b6 100644 --- a/app/tauri/src/system_tray.rs +++ b/app/tauri/src/system_tray.rs @@ -1,5 +1,5 @@ use std::path::PathBuf; -use tauri::{Builder, Icon, Manager, Runtime, Wry}; +use tauri::{App, Builder, Icon, Manager, Runtime, Wry}; use tauri::{ menu::{MenuBuilder, MenuItemBuilder}, tray::{ClickType, TrayIconBuilder}, @@ -42,53 +42,50 @@ pub fn tray_icon_update(data_url: String, window: tauri::Window) * switch it. */ pub trait PomatezTray { - fn set_pomatez_system_tray(self) -> tauri::Builder; + fn set_pomatez_system_tray(&self); } -impl PomatezTray for Builder { +impl PomatezTray for App { /* * The icon is updated after rendering on the frontend so that is handled in the commands file. * However the initial setup and behavior is handled here. */ - fn set_pomatez_system_tray(self) -> tauri::Builder { + fn set_pomatez_system_tray(&self) { println!("Setting system tray"); - self.setup(|app| { - // Was defined in tauri.config.json to start in v1 - // That was created with an id of 1 though this gives more control + // Was defined in tauri.config.json to start in v1 + // That was created with an id of 1 though this gives more control - let show = MenuItemBuilder::with_id("show", "Show").build(app); - let quit = MenuItemBuilder::with_id("quit", "Quit").build(app); - let menu = MenuBuilder::new(app).items(&[&show, &quit]).build()?; + let show = MenuItemBuilder::with_id("show", "Show").build(self); + let quit = MenuItemBuilder::with_id("quit", "Quit").build(self); + let menu = MenuBuilder::new(self).items(&[&show, &quit]).build().expect("failed to build menu"); - let icon_path = app.path().resolve::("icons/icon.png".into(), BaseDirectory::Resource) - .expect("failed to resolve icon path, this should not happen as it is an internal file"); + let icon_path = self.path().resolve::("icons/icon.png".into(), BaseDirectory::Resource) + .expect("failed to resolve icon path, this should not happen as it is an internal file"); - let _ = TrayIconBuilder::new() - .menu(&menu) - .tooltip("Pomatez") - .on_menu_event(move |app, event| match event.id().as_ref() { - "show" => { - let window = app.get_window("main").unwrap(); - window.show().unwrap(); - window.set_focus().unwrap(); - } - "quit" => { - app.exit(0); - } - _ => {} - }) - .on_tray_event(|tray, event| { - if event.click_type == ClickType::Left { - let app = tray.app_handle(); - let window = app.get_window("main").unwrap(); - window.show().unwrap(); - window.set_focus().unwrap(); - } - }) - .icon(Icon::File(icon_path)) - .build(app)?; - Ok(()) - }) + let _ = TrayIconBuilder::new() + .menu(&menu) + .tooltip("Pomatez") + .on_menu_event(move |app, event| match event.id().as_ref() { + "show" => { + let window = app.get_window("main").unwrap(); + window.show().unwrap(); + window.set_focus().unwrap(); + } + "quit" => { + app.exit(0); + } + _ => {} + }) + .on_tray_event(|tray, event| { + if event.click_type == ClickType::Left { + let app = tray.app_handle(); + let window = app.get_window("main").unwrap(); + window.show().unwrap(); + window.set_focus().unwrap(); + } + }) + .icon(Icon::File(icon_path)) + .build(self).expect("failed to build tray icon"); } } From dd1bf652eeda0929cb1601c71ad5526f0c46f54d Mon Sep 17 00:00:00 2001 From: Sekwah Date: Wed, 25 Oct 2023 05:46:23 +0100 Subject: [PATCH 35/37] feat(tauri): auto updater --- .github/workflows/build-tauri.yml | 84 +- .github/workflows/build.yml | 18 +- .github/workflows/release-please.yml | 32 +- .github/workflows/test-build-thingy.yml | 30 + .gitignore | 2 + app/renderer/package.json | 8 +- .../contexts/connectors/TauriConnector.tsx | 2 +- .../src/extensions/window.extension.ts | 1 + app/shareables/package.json | 3 +- app/tauri/Cargo.lock | 873 +++++++++++++----- app/tauri/Cargo.toml | 15 +- app/tauri/installer/nsis/header.bmp | Bin 0 -> 25818 bytes app/tauri/installer/nsis/sidebar.bmp | Bin 0 -> 206038 bytes app/tauri/installer/{ => wix}/banner.bmp | Bin app/tauri/installer/{ => wix}/dialog.bmp | Bin app/tauri/release-prep/release-prep.js | 192 ++++ app/tauri/release.conf.json | 18 + app/tauri/src/global_shortcuts.rs | 4 +- app/tauri/src/main.rs | 21 +- app/tauri/src/system_tray.rs | 4 +- app/tauri/src/updater.rs | 84 ++ app/tauri/tauri.conf.json | 17 +- package.json | 6 +- yarn.lock | 175 ++-- 24 files changed, 1230 insertions(+), 359 deletions(-) create mode 100644 .github/workflows/test-build-thingy.yml create mode 100644 app/tauri/installer/nsis/header.bmp create mode 100644 app/tauri/installer/nsis/sidebar.bmp rename app/tauri/installer/{ => wix}/banner.bmp (100%) rename app/tauri/installer/{ => wix}/dialog.bmp (100%) create mode 100644 app/tauri/release-prep/release-prep.js create mode 100644 app/tauri/release.conf.json create mode 100644 app/tauri/src/updater.rs diff --git a/.github/workflows/build-tauri.yml b/.github/workflows/build-tauri.yml index 9cbe53bd..eb15e6c7 100644 --- a/.github/workflows/build-tauri.yml +++ b/.github/workflows/build-tauri.yml @@ -1,7 +1,13 @@ -name: Test Build Tauri +name: Build Tauri on: push: + branches-ignore: + - "master" + paths-ignore: + - "website" + workflow_call: + workflow_dispatch: jobs: build: name: "Test Build" @@ -13,20 +19,38 @@ jobs: include: - os: ubuntu-22.04 name: linux + # https://tauri.app/v1/guides/building/linux#cross-compiling-tauri-applications-for-arm-based-devices + # Cross Compiling is also more of a pain it seems for linux atm, explore later + targets: "x86_64-unknown-linux-gnu" + tauri_target: ["x86_64-unknown-linux-gnu"] - os: macos-latest name: mac + targets: "aarch64-apple-darwin,x86_64-apple-darwin" + tauri_target: ["universal-apple-darwin"] - os: windows-latest name: win + targets: "aarch64-pc-windows-msvc,x86_64-pc-windows-msvc" + # The MSI installer is better integrated with the Add/Remove menu and feels more modern. + # The only real added benefit of NSIS is that the installer can have a custom logo. + # Also, nsis is the only one that currently works on arm64 + # Another note is embedBootstrapper is enabled to improve support on window 7. Though windows 7 doesn't support arm64. + tauri_target: ["'aarch64-pc-windows-msvc --bundles nsis,updater'", "'x86_64-pc-windows-msvc --bundles msi,updater'"] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Use Node.js 18.x - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: - node-version: 16.x + node-version: 18.x cache: "yarn" - name: install Rust stable uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.targets }} + - name: Rust cache + uses: swatinem/rust-cache@v2 + with: + workspaces: './app/tauri -> target' - name: install dependencies (ubuntu only) if: matrix.os == 'ubuntu-22.04' run: | @@ -36,14 +60,50 @@ jobs: run: | yarn install --immutable --network-timeout 120000 - name: Build - run: yarn build:tauri + shell: bash + run: | + for target in ${{ join(matrix.tauri_target, ' ') }}; do + yarn build:tauri --target $target --config ./app/tauri/release.conf.json + done + env: + TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} + TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} # Possibly set up some basic unit testing just to make sure parts render and none of the libraries are straight up breaking - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 + with: + name: tauri-${{ matrix.name }} + path: | + app/tauri/target/*/release/bundle/**/*.AppImage + app/tauri/target/*/release/bundle/**/*.dmg + app/tauri/target/*/release/bundle/**/*.deb + app/tauri/target/*/release/bundle/**/msi/*.msi + app/tauri/target/*/release/bundle/**/nsis/*.exe + app/tauri/target/*/release/bundle/appimage/**/*.tar.gz + app/tauri/target/*/release/bundle/macos/**/*.tar.gz + app/tauri/target/*/release/bundle/**/*.zip + app/tauri/target/*/release/bundle/**/*.sig + generate-updater-file: + needs: build + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Download all artifacts + uses: actions/download-artifact@v3 + with: + path: artifacts + - name: Display structure of downloaded files + shell: bash + run: ls -R + - name: Use Node.js 18.x + uses: actions/setup-node@v3 + with: + node-version: 18.x + cache: "yarn" + - name: Generate updater file + run: node app/tauri/release-prep/release-prep.js + - uses: actions/upload-artifact@v3 with: - name: built-app-${{ matrix.name }} + name: tauri-release path: | - app/tauri/target/release/bundle/deb/*.deb - app/tauri/target/release/bundle/appimage/*.AppImage - app/tauri/target/release/bundle/msi/*.msi - app/tauri/target/release/bundle/dmg/*.dmg - app/tauri/target/release/bundle/macos/*.app + release/* \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ef19d15a..2b9eaf9d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -53,37 +53,37 @@ jobs: with: name: built-app-all-in-one-${{ matrix.name }} path: | - app/main/dist/Pomatez-v+([0-9]).+([0-9]).+([0-9])-win-*.exe + app/electron/dist/Pomatez-v+([0-9]).+([0-9]).+([0-9])-win-*.exe - name: Upload ia32 builds uses: actions/upload-artifact@v3 with: name: built-app-ia32-${{ matrix.name }} path: | - app/main/dist/Pomatez*ia32*.* + app/electron/dist/Pomatez*ia32*.* - name: Upload x64 builds uses: actions/upload-artifact@v3 with: name: built-app-x64-${{ matrix.name }} path: | - app/main/dist/Pomatez*x64*.* - app/main/dist/Pomatez*x86_64*.* - app/main/dist/Pomatez*amd64*.* + app/electron/dist/Pomatez*x64*.* + app/electron/dist/Pomatez*x86_64*.* + app/electron/dist/Pomatez*amd64*.* - name: Upload arm64 builds uses: actions/upload-artifact@v3 with: name: built-app-arm64-${{ matrix.name }} path: | - app/main/dist/Pomatez*arm64*.* - app/main/dist/Pomatez*aarch64*.* + app/electron/dist/Pomatez*arm64*.* + app/electron/dist/Pomatez*aarch64*.* - name: Upload armv7l builds uses: actions/upload-artifact@v3 with: name: built-app-armv7l-${{ matrix.name }} path: | - app/main/dist/Pomatez*armv7l*.* + app/electron/dist/Pomatez*armv7l*.* - name: Upload autoupdaters uses: actions/upload-artifact@v3 with: name: built-app-AutoUpdater-${{ matrix.name }} path: | - app/main/dist/latest* + app/electron/dist/latest* diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 6bb9646b..1c41b655 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -20,15 +20,21 @@ jobs: release_created: ${{ steps.release.outputs.release_created }} sha: ${{ steps.release.outputs.sha }} upload_url: ${{ steps.release.outputs.upload_url }} - build: - name: "Build" + build-node: + name: "Build Node" needs: release-please if: needs.release-please.outputs.release_created uses: ./.github/workflows/build.yml + build-tauri: + name: "Build Tauri" + needs: release-please + if: needs.release-please.outputs.release_created + uses: ./.github/workflows/build-tauri.yml publish: name: Publish needs: - - build + - build-node + - build-tauri - release-please runs-on: ubuntu-latest steps: @@ -42,15 +48,15 @@ jobs: with: tag_name: ${{ needs.release-please.outputs.tag }} files: | - **/latest* - **/*.deb - **/*.rpm - **/*.dmg - **/*.AppImage - **/*.zip - **/*.exe - **/*.snap - **/*.blockmap + built-*/latest* + built-*/*.deb + built-*/*.rpm + built-*/*.dmg + built-*/*.AppImage + built-*/*.zip + built-*/*.exe + built-*/*.snap + built-*/*.blockmap publish-to-homebrew-cask: name: Publish to Homebrew Cask needs: @@ -75,4 +81,4 @@ jobs: installers-regex: 'setup\.exe$' max-versions-to-keep: 5 # keep only latest 5 versions release-tag: ${{ needs.release-please.outputs.tag }} - token: ${{ secrets.GITHUB_TOKEN }} + token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/test-build-thingy.yml b/.github/workflows/test-build-thingy.yml new file mode 100644 index 00000000..6d06e9b3 --- /dev/null +++ b/.github/workflows/test-build-thingy.yml @@ -0,0 +1,30 @@ +name: Release +on: + push: + workflow_call: + workflow_dispatch: + +permissions: + contents: write + pull-requests: write +jobs: + build-node: + name: "Build Node" + uses: ./.github/workflows/build.yml + build-tauri: + name: "Build Tauri" + uses: ./.github/workflows/build-tauri.yml + secrets: inherit + publish: + name: Publish + needs: + - build-node + - build-tauri + runs-on: ubuntu-latest + steps: + - name: Download artifact + uses: actions/download-artifact@v3 + - name: Display structure of downloaded files + shell: bash + run: ls -R + diff --git a/.gitignore b/.gitignore index 78d48e2d..064763b4 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ /dist /build +/artifacts/ .DS_Store .env.local @@ -20,3 +21,4 @@ yarn-error.log* .idea/ *.iml /lerna-debug.log +/release/ diff --git a/app/renderer/package.json b/app/renderer/package.json index 2ed89b9d..b9a161ed 100644 --- a/app/renderer/package.json +++ b/app/renderer/package.json @@ -33,10 +33,10 @@ }, "dependencies": { "@pomatez/shareables": "*", - "@tauri-apps/api": "2.0.0-alpha.8", - "@tauri-apps/plugin-autostart": "^2.0.0-alpha.1", - "@tauri-apps/plugin-global-shortcut": "^2.0.0-alpha.1", - "@tauri-apps/plugin-window": "^2.0.0-alpha.1", + "@tauri-apps/api": "2.0.0-alpha.11", + "@tauri-apps/plugin-autostart": "2.0.0-alpha.2", + "@tauri-apps/plugin-global-shortcut": "2.0.0-alpha.2", + "@tauri-apps/plugin-window": "2.0.0-alpha.1", "@types/autosize": "^3.0.7", "@types/jest": "^26.0.24", "@types/node": "^14.18.63", diff --git a/app/renderer/src/contexts/connectors/TauriConnector.tsx b/app/renderer/src/contexts/connectors/TauriConnector.tsx index ec2a5e82..49a3ce4a 100644 --- a/app/renderer/src/contexts/connectors/TauriConnector.tsx +++ b/app/renderer/src/contexts/connectors/TauriConnector.tsx @@ -17,7 +17,7 @@ import { import { encodeSvg } from "../../utils"; import { TraySVG } from "../../components"; import { enable, disable } from "@tauri-apps/plugin-autostart"; -import { invoke } from "@tauri-apps/api/tauri"; +import { invoke } from "@tauri-apps/api/primitives"; export const TauriConnectorProvider: React.FC = ({ children }) => { const settings: SettingTypes = useSelector( diff --git a/app/renderer/src/extensions/window.extension.ts b/app/renderer/src/extensions/window.extension.ts index 2ea2aaed..6bf260f7 100644 --- a/app/renderer/src/extensions/window.extension.ts +++ b/app/renderer/src/extensions/window.extension.ts @@ -10,6 +10,7 @@ declare global { options?: Electron.OpenExternalOptions ) => Promise; }; + __TAURI__: {}; } } diff --git a/app/shareables/package.json b/app/shareables/package.json index eb76ad79..ad0a9fe1 100644 --- a/app/shareables/package.json +++ b/app/shareables/package.json @@ -11,6 +11,7 @@ "scripts": { "prepare": "yarn build", "start": "rollup -c -w", - "build": "rollup -c" + "build": "rollup -c", + "dev:renderer": "rollup -c" } } diff --git a/app/tauri/Cargo.lock b/app/tauri/Cargo.lock index c354c274..bd58969f 100644 --- a/app/tauri/Cargo.lock +++ b/app/tauri/Cargo.lock @@ -8,6 +8,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aes" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + [[package]] name = "aho-corasick" version = "1.1.1" @@ -177,21 +188,20 @@ dependencies = [ [[package]] name = "atk" -version = "0.16.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39991bc421ddf72f70159011b323ff49b0f783cc676a7287c59453da2e2531cf" +checksum = "b4af014b17dd80e8af9fa689b2d4a211ddba6eb583c1622f35d0cb543f6b17e4" dependencies = [ "atk-sys", - "bitflags", "glib", "libc", ] [[package]] name = "atk-sys" -version = "0.16.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" +checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009" dependencies = [ "glib-sys", "gobject-sys", @@ -234,12 +244,27 @@ version = "0.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +dependencies = [ + "serde", +] + [[package]] name = "block" version = "0.1.6" @@ -318,13 +343,34 @@ dependencies = [ "serde", ] +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "cairo-rs" -version = "0.16.7" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3125b15ec28b84c238f6f476c6034016a5f6cc0221cb514ca46c532139fc97d" +checksum = "1c0466dfa8c0ee78deef390c274ad756801e0a6dbb86c5ef0924a298c5761c4d" dependencies = [ - "bitflags", + "bitflags 2.4.1", "cairo-sys-rs", "glib", "libc", @@ -334,9 +380,9 @@ dependencies = [ [[package]] name = "cairo-sys-rs" -version = "0.16.3" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" dependencies = [ "glib-sys", "libc", @@ -345,12 +391,12 @@ dependencies = [ [[package]] name = "cargo_toml" -version = "0.15.3" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "599aa35200ffff8f04c1925aa1acc92fa2e08874379ef42e210a80e527e60838" +checksum = "e3f9629bc6c4388ea699781dc988c2b99766d7679b151c81990b4fa1208fafd3" dependencies = [ "serde", - "toml 0.7.8", + "toml 0.8.6", ] [[package]] @@ -359,6 +405,7 @@ version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ + "jobserver", "libc", ] @@ -407,13 +454,23 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + [[package]] name = "cocoa" version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" dependencies = [ - "bitflags", + "bitflags 1.3.2", "block", "cocoa-foundation", "core-foundation", @@ -429,7 +486,7 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" dependencies = [ - "bitflags", + "bitflags 1.3.2", "block", "cocoa-foundation", "core-foundation", @@ -445,7 +502,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" dependencies = [ - "bitflags", + "bitflags 1.3.2", "block", "core-foundation", "core-graphics-types", @@ -479,6 +536,12 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + [[package]] name = "convert_case" version = "0.4.0" @@ -507,7 +570,7 @@ version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-graphics-types", "foreign-types 0.3.2", @@ -520,7 +583,7 @@ version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-graphics-types", "foreign-types 0.5.0", @@ -533,7 +596,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "foreign-types 0.3.2", "libc", @@ -615,12 +678,12 @@ dependencies = [ [[package]] name = "ctor" -version = "0.1.26" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" +checksum = "37e366bff8cd32dd8754b0991fb66b279dc48f598c3a18914852a6673deef583" dependencies = [ "quote", - "syn 1.0.107", + "syn 2.0.37", ] [[package]] @@ -696,6 +759,7 @@ checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ "block-buffer", "crypto-common", + "subtle", ] [[package]] @@ -873,14 +937,26 @@ dependencies = [ "rustc_version 0.3.3", ] +[[package]] +name = "filetime" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.3.5", + "windows-sys 0.48.0", +] + [[package]] name = "flate2" -version = "1.0.25" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.7.1", ] [[package]] @@ -1048,11 +1124,10 @@ dependencies = [ [[package]] name = "gdk" -version = "0.16.2" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9cb33da481c6c040404a11f8212d193889e9b435db2c14fd86987f630d3ce1" +checksum = "f5ba081bdef3b75ebcdbfc953699ed2d7417d6bd853347a42a37d76406a33646" dependencies = [ - "bitflags", "cairo-rs", "gdk-pixbuf", "gdk-sys", @@ -1064,22 +1139,22 @@ dependencies = [ [[package]] name = "gdk-pixbuf" -version = "0.16.7" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3578c60dee9d029ad86593ed88cb40f35c1b83360e12498d055022385dd9a05" +checksum = "bbc9c2ed73a81d556b65d08879ba4ee58808a6b1927ce915262185d6d547c6f3" dependencies = [ - "bitflags", "gdk-pixbuf-sys", "gio", "glib", "libc", + "once_cell", ] [[package]] name = "gdk-pixbuf-sys" -version = "0.16.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" dependencies = [ "gio-sys", "glib-sys", @@ -1090,9 +1165,9 @@ dependencies = [ [[package]] name = "gdk-sys" -version = "0.16.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" +checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -1107,9 +1182,9 @@ dependencies = [ [[package]] name = "gdkwayland-sys" -version = "0.16.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4511710212ed3020b61a8622a37aa6f0dd2a84516575da92e9b96928dcbe83ba" +checksum = "a90fbf5c033c65d93792192a49a8efb5bb1e640c419682a58bb96f5ae77f3d4a" dependencies = [ "gdk-sys", "glib-sys", @@ -1121,9 +1196,9 @@ dependencies = [ [[package]] name = "gdkx11-sys" -version = "0.16.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa2bf8b5b8c414bc5d05e48b271896d0fd3ddb57464a3108438082da61de6af" +checksum = "fee8f00f4ee46cad2939b8990f5c70c94ff882c3028f3cc5abf950fa4ab53043" dependencies = [ "gdk-sys", "glib-sys", @@ -1179,11 +1254,10 @@ dependencies = [ [[package]] name = "gio" -version = "0.16.7" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092" +checksum = "57052f84e8e5999b258e8adf8f5f2af0ac69033864936b8b6838321db2f759b1" dependencies = [ - "bitflags", "futures-channel", "futures-core", "futures-io", @@ -1199,9 +1273,9 @@ dependencies = [ [[package]] name = "gio-sys" -version = "0.16.3" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" dependencies = [ "glib-sys", "gobject-sys", @@ -1212,11 +1286,11 @@ dependencies = [ [[package]] name = "glib" -version = "0.16.9" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16aa2475c9debed5a32832cb5ff2af5a3f9e1ab9e69df58eaadc1ab2004d6eba" +checksum = "1c316afb01ce8067c5eaab1fc4f2cd47dc21ce7b6296358605e2ffab23ccbd19" dependencies = [ - "bitflags", + "bitflags 2.4.1", "futures-channel", "futures-core", "futures-executor", @@ -1227,6 +1301,7 @@ dependencies = [ "glib-sys", "gobject-sys", "libc", + "memchr", "once_cell", "smallvec", "thiserror", @@ -1234,24 +1309,23 @@ dependencies = [ [[package]] name = "glib-macros" -version = "0.16.8" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b" +checksum = "f8da903822b136d42360518653fcf154455defc437d3e7a81475bf9a95ff1e47" dependencies = [ - "anyhow", "heck", "proc-macro-crate", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.37", ] [[package]] name = "glib-sys" -version = "0.16.3" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" dependencies = [ "libc", "system-deps", @@ -1270,7 +1344,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08c12993a445d59000c3994fcd3d179e7da026a4234cc46db652987aa2785e4a" dependencies = [ "crossbeam-channel", - "keyboard-types", + "keyboard-types 0.6.2", "once_cell", "thiserror", "windows-sys 0.48.0", @@ -1279,9 +1353,9 @@ dependencies = [ [[package]] name = "gobject-sys" -version = "0.16.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" dependencies = [ "glib-sys", "libc", @@ -1290,12 +1364,11 @@ dependencies = [ [[package]] name = "gtk" -version = "0.16.2" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4d3507d43908c866c805f74c9dd593c0ce7ba5c38e576e41846639cdcd4bee6" +checksum = "93c4f5e0e20b60e10631a5f06da7fe3dda744b05ad0ea71fee2f47adf865890c" dependencies = [ "atk", - "bitflags", "cairo-rs", "field-offset", "futures-channel", @@ -1306,16 +1379,15 @@ dependencies = [ "gtk-sys", "gtk3-macros", "libc", - "once_cell", "pango", "pkg-config", ] [[package]] name = "gtk-sys" -version = "0.16.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" +checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722" dependencies = [ "atk-sys", "cairo-sys-rs", @@ -1331,16 +1403,15 @@ dependencies = [ [[package]] name = "gtk3-macros" -version = "0.16.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "096eb63c6fedf03bafe65e5924595785eaf1bcb7200dac0f2cbe9c9738f05ad8" +checksum = "c6063efb63db582968fb7df72e1ae68aa6360dcfb0a75143f34fc7d616bad75e" dependencies = [ - "anyhow", "proc-macro-crate", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.37", ] [[package]] @@ -1401,6 +1472,15 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + [[package]] name = "html5ever" version = "0.26.0" @@ -1473,6 +1553,19 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + [[package]] name = "iana-time-zone" version = "0.1.57" @@ -1559,20 +1652,20 @@ dependencies = [ [[package]] name = "infer" -version = "0.12.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3" +checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199" dependencies = [ "cfb", ] [[package]] -name = "infer" -version = "0.15.0" +name = "inout" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "cfb", + "generic-array", ] [[package]] @@ -1615,20 +1708,20 @@ checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" [[package]] name = "javascriptcore-rs" -version = "1.0.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cfcc681b896b083864a4a3c3b3ea196f14ff66b8641a68fde209c6d84434056" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" dependencies = [ - "bitflags", + "bitflags 1.3.2", "glib", "javascriptcore-rs-sys", ] [[package]] name = "javascriptcore-rs-sys" -version = "1.0.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0983ba5b3ab9a0c0918de02c42dc71f795d6de08092f88a98ce9fdfdee4ba91" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" dependencies = [ "glib-sys", "gobject-sys", @@ -1658,6 +1751,15 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +[[package]] +name = "jobserver" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.60" @@ -1669,9 +1771,9 @@ dependencies = [ [[package]] name = "json-patch" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f7765dccf8c39c3a470fc694efe322969d791e713ca46bc7b5c506886157572" +checksum = "55ff1e1486799e3f64129f8ccad108b38290df9cd7015cd31bed17239f0789d6" dependencies = [ "serde", "serde_json", @@ -1685,7 +1787,18 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7668b7cff6a51fe61cdde64cd27c8a220786f399501b57ebe36f7d8112fd68" dependencies = [ - "bitflags", + "bitflags 1.3.2", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.4.1", "serde", "unicode-segmentation", ] @@ -1711,9 +1824,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libappindicator" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e1edfdc9b0853358306c6dfb4b77c79c779174256fe93d80c0b5ebca451a2f" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" dependencies = [ "glib", "gtk", @@ -1724,9 +1837,9 @@ dependencies = [ [[package]] name = "libappindicator-sys" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08fcb2bea89cee9613982501ec83eaa2d09256b24540ae463c52a28906163918" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" dependencies = [ "gtk-sys", "libloading", @@ -1869,6 +1982,12 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minisign-verify" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881" + [[package]] name = "miniz_oxide" version = "0.6.2" @@ -1878,6 +1997,15 @@ dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + [[package]] name = "mio" version = "0.8.8" @@ -1892,16 +2020,14 @@ dependencies = [ [[package]] name = "muda" -version = "0.8.7" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe753ec4d3e8137a1d3ecb1aee1192b8f7661fe1247641968f5bf5f2e6ebbe" +checksum = "9767ce3b12d2928f17ff4f91b29e7e872a8594033d82bf00e56017cc23bb8410" dependencies = [ "cocoa 0.25.0", "crossbeam-channel", - "gdk", - "gdk-pixbuf", "gtk", - "keyboard-types", + "keyboard-types 0.7.0", "objc", "once_cell", "png", @@ -1909,13 +2035,31 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + [[package]] name = "ndk" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" dependencies = [ - "bitflags", + "bitflags 1.3.2", "jni-sys", "ndk-sys", "num_enum", @@ -1950,7 +2094,7 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", "memoffset 0.7.1", @@ -2067,6 +2211,50 @@ version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +[[package]] +name = "openssl" +version = "0.10.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" +dependencies = [ + "bitflags 2.4.1", + "cfg-if", + "foreign-types 0.3.2", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.37", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "ordered-stream" version = "0.2.0" @@ -2085,11 +2273,10 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "pango" -version = "0.16.5" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94" +checksum = "06a9e54b831d033206160096b825f2070cf5fda7e35167b1c01e9e774f9202d1" dependencies = [ - "bitflags", "gio", "glib", "libc", @@ -2099,9 +2286,9 @@ dependencies = [ [[package]] name = "pango-sys" -version = "0.16.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" dependencies = [ "glib-sys", "gobject-sys", @@ -2133,11 +2320,34 @@ checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "smallvec", "windows-sys 0.42.0", ] +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest", + "hmac", + "password-hash", + "sha2", +] + [[package]] name = "percent-encoding" version = "2.3.0" @@ -2171,9 +2381,17 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" dependencies = [ - "phf_macros 0.10.0", "phf_shared 0.10.0", - "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros 0.11.2", + "phf_shared 0.11.2", ] [[package]] @@ -2216,6 +2434,16 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand 0.8.5", +] + [[package]] name = "phf_macros" version = "0.8.0" @@ -2232,16 +2460,15 @@ dependencies = [ [[package]] name = "phf_macros" -version = "0.10.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", + "phf_generator 0.11.2", + "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.37", ] [[package]] @@ -2262,6 +2489,15 @@ dependencies = [ "siphasher", ] +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project-lite" version = "0.2.9" @@ -2300,10 +2536,10 @@ version = "0.17.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" dependencies = [ - "bitflags", + "bitflags 1.3.2", "crc32fast", "flate2", - "miniz_oxide", + "miniz_oxide 0.6.2", ] [[package]] @@ -2313,7 +2549,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ "autocfg", - "bitflags", + "bitflags 1.3.2", "cfg-if", "concurrent-queue", "libc", @@ -2328,13 +2564,16 @@ version = "1.3.0" dependencies = [ "base64 0.21.4", "lazy_static", + "reqwest", "serde", "serde_json", "tauri", "tauri-build", "tauri-plugin-autostart", "tauri-plugin-global-shortcut", + "tauri-plugin-updater", "tauri-plugin-window", + "url", ] [[package]] @@ -2504,7 +2743,16 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", ] [[package]] @@ -2514,7 +2762,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ "getrandom 0.2.8", - "redox_syscall", + "redox_syscall 0.2.16", "thiserror", ] @@ -2573,9 +2821,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.20" +version = "0.11.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" dependencies = [ "base64 0.21.4", "bytes", @@ -2586,17 +2834,21 @@ dependencies = [ "http", "http-body", "hyper", + "hyper-tls", "ipnet", "js-sys", "log", "mime", + "native-tls", "once_cell", "percent-encoding", "pin-project-lite", "serde", "serde_json", "serde_urlencoded", + "system-configuration", "tokio", + "tokio-native-tls", "tokio-util", "tower-service", "url", @@ -2631,7 +2883,7 @@ version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62b24138615de35e32031d041a09032ef3487a616d901ca4db224e7d557efae2" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", @@ -2666,6 +2918,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys 0.48.0", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -2678,13 +2939,36 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "selectors" version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cssparser", "derive_more", "fxhash", @@ -2712,6 +2996,9 @@ name = "semver" version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" +dependencies = [ + "serde", +] [[package]] name = "semver-parser" @@ -2766,9 +3053,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80" dependencies = [ "serde", ] @@ -2929,24 +3216,22 @@ dependencies = [ [[package]] name = "soup3" -version = "0.3.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82bc46048125fefd69d30b32b9d263d6556c9ffe82a7a7df181a86d912da5616" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" dependencies = [ - "bitflags", "futures-channel", "gio", "glib", "libc", - "once_cell", "soup3-sys", ] [[package]] name = "soup3-sys" -version = "0.3.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "014bbeb1c4cdb30739dc181e8d98b7908f124d9555843afa89b5570aaf4ec62b" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" dependencies = [ "gio-sys", "glib-sys", @@ -3008,6 +3293,12 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + [[package]] name = "swift-rs" version = "1.0.6" @@ -3041,6 +3332,27 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "system-deps" version = "6.0.3" @@ -3056,11 +3368,11 @@ dependencies = [ [[package]] name = "tao" -version = "0.22.2" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f76221bce9db3af6b2b9cca4e92d8ea46c4cc88d785bc4b1a5cbcaab06f0b56" +checksum = "f130523fee9820ad78141d443e6cef75043acade79107bc483872bc183928c0f" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cairo-rs", "cc", "cocoa 0.24.1", @@ -3097,7 +3409,7 @@ dependencies = [ "unicode-segmentation", "url", "uuid", - "windows 0.48.0", + "windows 0.51.1", "windows-implement", "x11-dl", "zbus", @@ -3114,11 +3426,22 @@ dependencies = [ "syn 1.0.107", ] +[[package]] +name = "tar" +version = "0.4.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" +dependencies = [ + "filetime", + "libc", + "xattr", +] + [[package]] name = "tauri" -version = "2.0.0-alpha.14" +version = "2.0.0-alpha.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46acc0b6d20fe3a7c27e6036d9ef52d2c28afd1b6178ffc2dd4881f9994fecd7" +checksum = "892f45e7f10c9481488633f506496eeb3c69034c17fc71d5562d1e87b5442f78" dependencies = [ "anyhow", "bytes", @@ -3126,12 +3449,12 @@ dependencies = [ "dirs-next", "embed_plist", "futures-util", - "glib", + "getrandom 0.2.8", "glob", "gtk", "heck", "http", - "infer 0.15.0", + "infer", "jni", "libc", "log", @@ -3141,7 +3464,6 @@ dependencies = [ "once_cell", "percent-encoding", "png", - "rand 0.8.5", "raw-window-handle", "reqwest", "serde", @@ -3159,20 +3481,21 @@ dependencies = [ "tokio", "tray-icon", "url", - "uuid", "webkit2gtk", "webview2-com", - "windows 0.48.0", + "window-vibrancy", + "windows 0.51.1", ] [[package]] name = "tauri-build" -version = "2.0.0-alpha.8" +version = "2.0.0-alpha.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc47d3c84f4aeac397cd956267f3b8060c5a2dba78288a5ccf9a8b7a8c1e7025" +checksum = "9d5f06f1cbb5507f4de803f8e1fab01c71cb9515297a90d3adba4fa6c06a194c" dependencies = [ "anyhow", "cargo_toml", + "dirs-next", "heck", "json-patch", "plist", @@ -3187,9 +3510,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.0.0-alpha.7" +version = "2.0.0-alpha.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f98a67c7ef3cb3c25de91fe1fa16cc3681997f6ec99da0a7496d6feae2ea91e" +checksum = "28094b389b0981aba46eeba7dcda6216c23fdf7288b2e0414e69fbc55aa55676" dependencies = [ "base64 0.21.4", "brotli", @@ -3213,9 +3536,9 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.0.0-alpha.7" +version = "2.0.0-alpha.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b01cb5f945c71e040c5d191c32598565ae26cc266a9d5d4f7dd2dc324c5cfdd0" +checksum = "c1df582259285a81324d4d38846433bfd3c0440c7a268f730acb7c29350f25cf" dependencies = [ "heck", "proc-macro2", @@ -3227,9 +3550,9 @@ dependencies = [ [[package]] name = "tauri-plugin-autostart" -version = "2.0.0-alpha.2" +version = "2.0.0-alpha.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f67ab81fb8a86b98627843c00b6d2f3951d18827a02272feb5830b8ce96d9c59" +checksum = "48f4ecdf2f0476e79d597cf20e4194a58adef9aa126ab4956b8d4c0a7ea5acd8" dependencies = [ "auto-launch", "log", @@ -3241,9 +3564,9 @@ dependencies = [ [[package]] name = "tauri-plugin-global-shortcut" -version = "2.0.0-alpha.2" +version = "2.0.0-alpha.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a55e25d565b5eafaa4357ac49d52dd5826ac78c8eb0dc6a9c2d6ff60ab75ce" +checksum = "e538923ec48c26d2f5891d3e5db1e57a314a388321e2277d10b29a8c5fe76c24" dependencies = [ "global-hotkey", "log", @@ -3253,6 +3576,33 @@ dependencies = [ "thiserror", ] +[[package]] +name = "tauri-plugin-updater" +version = "2.0.0-alpha.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6960df5f0427429b387cf9a8c75898a1841c5f746d8c0563fcea11283111696e" +dependencies = [ + "base64 0.21.4", + "dirs-next", + "flate2", + "futures-util", + "http", + "minisign-verify", + "percent-encoding", + "reqwest", + "semver 1.0.16", + "serde", + "serde_json", + "tar", + "tauri", + "tempfile", + "thiserror", + "time", + "tokio", + "url", + "zip", +] + [[package]] name = "tauri-plugin-window" version = "2.0.0-alpha.2" @@ -3266,51 +3616,47 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "1.0.0-alpha.1" +version = "1.0.0-alpha.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525c4dea52547a13e58816c655bd0928f6c30026515e7b2a77166bcd984da6d0" +checksum = "f46889d91efc090ac4031c7c423c30c5280d6984cb071b729b748d643aa3df40" dependencies = [ "gtk", "http", "jni", - "rand 0.8.5", "raw-window-handle", "serde", "serde_json", "tauri-utils", "thiserror", "url", - "uuid", - "windows 0.48.0", + "windows 0.51.1", ] [[package]] name = "tauri-runtime-wry" -version = "1.0.0-alpha.2" +version = "1.0.0-alpha.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fce46e920b62699045e02db3006017d24324119189dfab2b12261aeebf98f4be" +checksum = "b083797e147019c318db883a51868014751b578ba0d1ef3aadd34199a3bbcf61" dependencies = [ "cocoa 0.24.1", "gtk", "http", "jni", "percent-encoding", - "rand 0.8.5", "raw-window-handle", "tauri-runtime", "tauri-utils", - "uuid", "webkit2gtk", "webview2-com", - "windows 0.48.0", + "windows 0.51.1", "wry", ] [[package]] name = "tauri-utils" -version = "2.0.0-alpha.7" +version = "2.0.0-alpha.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06bcd7c6f67fd6371dcc22da7d7f26ec12c4eae26ad7bc54943bb9f35b5db302" +checksum = "68e138783ca404416a4afe34f22f804d533c28fb73f87870f365c6ecdcee6c23" dependencies = [ "brotli", "ctor", @@ -3318,11 +3664,12 @@ dependencies = [ "glob", "heck", "html5ever", - "infer 0.12.0", + "infer", "json-patch", "kuchikiki", + "log", "memchr", - "phf 0.10.1", + "phf 0.11.2", "proc-macro2", "quote", "semver 1.0.16", @@ -3332,7 +3679,7 @@ dependencies = [ "thiserror", "url", "walkdir", - "windows 0.48.0", + "windows 0.51.1", ] [[package]] @@ -3354,7 +3701,7 @@ dependencies = [ "cfg-if", "fastrand 1.8.0", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "remove_dir_all", "winapi", ] @@ -3464,6 +3811,16 @@ dependencies = [ "windows-sys 0.42.0", ] +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + [[package]] name = "tokio-util" version = "0.7.8" @@ -3496,14 +3853,26 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ff9e3abce27ee2c9a37f9ad37238c1bdd4e789c84ba37df76aa4d528f5072cc" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.20.7", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ "serde", ] @@ -3521,6 +3890,19 @@ dependencies = [ "winnow", ] +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap 2.0.2", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + [[package]] name = "tower-service" version = "0.3.2" @@ -3591,9 +3973,9 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.8.3" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b164327e17101c78ba3dfdf879b977027ef1bd7855668ac30063de21fc02447" +checksum = "1a7dce8a4b6d7a566ca78fa43f37efc7a3ec427480828d35fe3474c4f0c75396" dependencies = [ "cocoa 0.25.0", "core-graphics 0.23.1", @@ -3705,6 +4087,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version-compare" version = "0.1.1" @@ -3866,11 +4254,11 @@ dependencies = [ [[package]] name = "webkit2gtk" -version = "1.1.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8db2963d7f1bd4ac2a208ab925881b4779dd20fee853b09a0bbf69289827c2" +checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cairo-rs", "gdk", "gdk-sys", @@ -3890,11 +4278,11 @@ dependencies = [ [[package]] name = "webkit2gtk-sys" -version = "1.1.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "864ebc9a39649baf49e46c713cd8b741cca14dd59d24cd77bc611ba9419fa18d" +checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cairo-sys-rs", "gdk-sys", "gio-sys", @@ -3910,13 +4298,14 @@ dependencies = [ [[package]] name = "webview2-com" -version = "0.25.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e563ffe8e84d42e43ffacbace8780c0244fc8910346f334613559d92e203ad" +checksum = "cd15556ff1d1d6bc850dbb362762bae86069773dd30177c90d3bfa917080dc73" dependencies = [ "webview2-com-macros", "webview2-com-sys", - "windows 0.48.0", + "windows 0.51.1", + "windows-core", "windows-implement", "windows-interface", ] @@ -3934,17 +4323,13 @@ dependencies = [ [[package]] name = "webview2-com-sys" -version = "0.25.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d39576804304cf9ead192467ef47f7859a1a12fec3bd459d5ba34b8cd65ed5" +checksum = "3775bb005c3170497ec411b36005708b57ad486bfa3d23864c92f5973858ce8d" dependencies = [ - "regex", - "serde", - "serde_json", "thiserror", - "windows 0.48.0", - "windows-bindgen", - "windows-metadata", + "windows 0.51.1", + "windows-core", ] [[package]] @@ -3978,6 +4363,18 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "window-vibrancy" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5931735e675b972fada30c7a402915d4d827aa5ef6c929c133d640c4b785e963" +dependencies = [ + "cocoa 0.25.0", + "objc", + "raw-window-handle", + "windows-sys 0.48.0", +] + [[package]] name = "windows" version = "0.39.0" @@ -3997,49 +4394,52 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +dependencies = [ + "windows-core", "windows-implement", "windows-interface", "windows-targets 0.48.5", ] [[package]] -name = "windows-bindgen" -version = "0.48.0" +name = "windows-core" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fe21a77bc54b7312dbd66f041605e098990c98be48cd52967b85b5e60e75ae6" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" dependencies = [ - "windows-metadata", - "windows-tokens", + "windows-targets 0.48.5", ] [[package]] name = "windows-implement" -version = "0.48.0" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e2ee588991b9e7e6c8338edf3333fbe4da35dc72092643958ebb43f0ab2c49c" +checksum = "fb2b158efec5af20d8846836622f50a87e6556b9153a42772fa047f773c0e555" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.37", ] [[package]] name = "windows-interface" -version = "0.48.0" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6fb8df20c9bcaa8ad6ab513f7b40104840c8867d5751126e4df3b08388d0cc7" +checksum = "0546e63e1ce64c04403d2311fa0e3ab5ae3a367bd524b4a38d8d8d18c70cfa76" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.37", ] -[[package]] -name = "windows-metadata" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "422ee0e5f0e2cc372bb6addbfff9a8add712155cd743df9c15f6ab000f31432d" - [[package]] name = "windows-sys" version = "0.42.0" @@ -4103,12 +4503,6 @@ dependencies = [ "windows_x86_64_msvc 0.48.5", ] -[[package]] -name = "windows-tokens" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b34c9a3b28cb41db7385546f7f9a8179348dffc89923dde66857b1ba5312f6b4" - [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -4263,19 +4657,16 @@ dependencies = [ [[package]] name = "wry" -version = "0.33.0" +version = "0.34.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf906b43b8042615c85a978dceb4d4b72214d27b850b54abc3edeb7c5a67abab" +checksum = "3f1e29660f22d8eec141f41f59b7fef231e4113c370c89b90ae3a0db8dec1927" dependencies = [ "base64 0.21.4", "block", - "cocoa 0.24.1", - "core-graphics 0.22.3", + "cocoa 0.25.0", + "core-graphics 0.23.1", "crossbeam-channel", "dunce", - "gdk", - "gio", - "glib", "gtk", "html5ever", "http", @@ -4296,7 +4687,7 @@ dependencies = [ "webkit2gtk", "webkit2gtk-sys", "webview2-com", - "windows 0.48.0", + "windows 0.51.1", "windows-implement", ] @@ -4321,6 +4712,15 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "xattr" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea263437ca03c1522846a4ddafbca2542d0ad5ed9b784909d4b27b76f62bc34a" +dependencies = [ + "libc", +] + [[package]] name = "xdg-home" version = "1.0.0" @@ -4403,6 +4803,55 @@ dependencies = [ "zvariant", ] +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "aes", + "byteorder", + "bzip2", + "constant_time_eq", + "crc32fast", + "crossbeam-utils", + "flate2", + "hmac", + "pbkdf2", + "sha1", + "time", + "zstd", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.9+zstd.1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" +dependencies = [ + "cc", + "pkg-config", +] + [[package]] name = "zvariant" version = "3.15.0" diff --git a/app/tauri/Cargo.toml b/app/tauri/Cargo.toml index cef9db1d..a02cd88e 100644 --- a/app/tauri/Cargo.toml +++ b/app/tauri/Cargo.toml @@ -7,28 +7,31 @@ version = "1.3.0" description = "Attractive pomodoro timer for Windows, Mac, and Linux." authors = ["Roldan Montilla Jr"] license = "MIT" -repository = "https://github.com/roldanjr/pomatez" +repository = "https://github.com/zidoro/pomatez" edition = "2021" rust-version = "1.57" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [build-dependencies] -tauri-build = { version = "2.0.0-alpha.8", features = [] } +tauri-build = { version = "2.0.0-alpha.10", features = [] } [dependencies] serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } -tauri = { version = "2.0.0-alpha.14", features = ["tray-icon", "icon-png"] } -tauri-plugin-window = "2.0.0-alpha" -tauri-plugin-autostart = "2.0.0-alpha" +url = "2.4.1" +tauri = { version = "2.0.0-alpha.17", features = ["tray-icon", "icon-png"] } +reqwest = { version = "0.11.22", features = ["json"] } +tauri-plugin-window = "2.0.0-alpha.2" +tauri-plugin-autostart = "2.0.0-alpha.3" lazy_static = "1.4.0" base64 = { version = "0.21.4", features = [] } # This one is for toying with global hotkeys from the browser mostly # We can use https://github.com/tauri-apps/global-hotkey directly tbh [target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies] -tauri-plugin-global-shortcut = "2.0.0-alpha" +tauri-plugin-global-shortcut = "2.0.0-alpha.3" +tauri-plugin-updater = "2.0.0-alpha.3" [features] # by default Tauri runs in production mode diff --git a/app/tauri/installer/nsis/header.bmp b/app/tauri/installer/nsis/header.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1614b8482805b2b89ce94ce9397096e97f63bf6a GIT binary patch literal 25818 zcmeI4F=!M)6o%LC$}P7@p=gnShyf7~Y!a}DV3B}D0u~Z2Bv^=8NJt|gg#-%;R~(We z7z-g5!dV2)@=^q15r|+Q78X~exWZzJfa|}v$>iPM&NzFwdp9F***hlt_I5Y#oA+kk zo7tJX_v4Y*-frT16rTz{WqdAp0lq!&J>-|K#h>;8e1*I@t^sCPB)~tNTS2$7pW%rJ zf4B1AaoPW6vzFm;Q|xYuPYYswOjLbQ^>W<VR$Ni7j}GOGW@ycs6E=mQ0#1W(`!|{qt`j_%{Lw{+jXxX{9bnv zqcsf0w_1l%E8gBxX?fZozv5pS$$1|e@h3<9wORk*RjK2q)xbq-w1i>vNK^x`F}91a*bLE^mkb*(O&uxP z%p$@LR3iB>4mF8GXLxwdu>Qh`;ntJWpzdI$lyCG%!^QCUXy{JT@BxO;upz5{-JnA= zc9D8KZ*e-$PAoGttTl<#4zn>F2Sbu3TfNT=L)Yw(876E1e=y zlJ*?7L$*V01u+q_9hzuKdyeCFh$Ls@#rcj1v-Y%v;iS9Qd+D!od#J4|N@0I?C}Yb+ z0r3ZTW+llCm6)`GVi?9qqp{?v3b}6U`&6ly*l!GMfKC@$bL_mt}@p zR7zn_43Rsd{S|6*-DQ2hhngZYRASN!dSVF0&)hJ;Sn*(-Xd5XgO_>>LQ7MJJG6ah9 zXxpih&L=fO80vDynTyO&iAgIUbM?{6X^ccA!fQ5&{V<>pXlMx$c_83GE*!HMRX4ndw2;u5^4>k@*A#o87yqOqb>P(N+%_d5x8 z4GiH}-j8Ui06VwC9BlLt`+%gxK<3`A_B~DNB0H!)g(Q%$=j=;gKJ{i z!!W|wiq@k%>)#Bv;76+`ItUPIvx*^}2Tm0Wx5?E`2E%jXt~hMq=8kT*F^tuSz#k+( z%oS{kK@^(q*Bx5MB(;{=$xuEj)}zI;qF9m=n$B_m-iRVV_g4^(^<+6i36l$I4KPEs QZd{QtLsv+tpVRaH0_{R2uK)l5 literal 0 HcmV?d00001 diff --git a/app/tauri/installer/nsis/sidebar.bmp b/app/tauri/installer/nsis/sidebar.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c4ea52ae33f6656695550011f5dd6dd3071b1fbc GIT binary patch literal 206038 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 2) { + const changes = match[2] + .trim() + .split("\n") + .map((line) => line.replace(linkRegex, "").trim()) // Remove links and trim each line + .join("\n"); + return `Version: ${match[1]}\nChanges:\n${changes}`; + } + + return "No changes found or changelog is not in the expected format."; +} + +// https://tauri.app/v1/guides/distribution/updater/ +const data = { + version, + notes: extractLatestChanges( + fs.readFileSync( + path.join(__dirname, "..", "..", "..", "CHANGELOG.md"), + { encoding: "utf8" } + ) + ), + pub_date: new Date().toISOString(), + platforms: {}, +}; + +function getSignatureContent(signaturePath) { + return fs.readFileSync(signaturePath, { encoding: "utf8" }); +} + +/** + * This is needed solely so that tar.gz files are not renamed to .gz + * @param fileName + * @returns {*|string} + */ +function getFileExtension(fileName) { + const match = fileName.match(/\.[0-9a-z]+(\.gz)?$/i); + return match ? match[0] : ""; +} + +/** + * only needs the updater file, not the release file + * @param platform + * @param artifactSubPath + * @param fileGlob + * @param nameOverwrite - if you want to overwrite the name of the file in the release folder + */ +function addPlatformUpdater( + platform, + artifactSubPath, + fileGlob, + nameOverwrite +) { + const fullPath = path.join(artifactsPath, artifactSubPath); + const files = fs.readdirSync(fullPath); + const file = files.find((file) => file.match(fileGlob)); + + if (file) { + const signaturePath = path.join(fullPath, `${file}.sig`); + const signature = getSignatureContent(signaturePath); + + // Extract the file extension + const extension = getFileExtension(file); + + // copy the file into the release folder and rename it so that its clear it's an update file rather than for install + const originalFilePath = path.join(fullPath, file); + const releaseFileName = `${ + nameOverwrite ? nameOverwrite : platform + }-update${extension}`; + const releaseFilePath = path.join(releasePath, releaseFileName); + fs.copyFileSync(originalFilePath, releaseFilePath); + + const url = `${github_url}${releaseFileName}`; + + data.platforms[platform] = { + signature: signature.trim(), + url: url, + }; + + console.log(`File copied to ${releaseFilePath}`); + } +} + +/** + * Recursively searches for files with the given glob pattern and copies them to the release folder. + * @param {string} searchPath - The starting directory to begin the search. + * @param {string} fileExtension - The file extension to search for. + */ +function addReleaseFiles(searchPath, ...fileExtension) { + fs.readdirSync(searchPath, { withFileTypes: true }).forEach( + (entry) => { + const entryPath = path.join(searchPath, entry.name); + if (entry.isDirectory()) { + // Recurse if entry is a directory + addReleaseFiles(entryPath, ...fileExtension); + } else if ( + entry.isFile() && + fileExtension.find((ext) => ext === path.extname(entry.name)) + ) { + // Copy file if it matches the extension + const ext = path.extname(entry.name); + const baseName = path.basename(entry.name, ext); + + // TODO remove once we are set on replacing electron for some of the base files and/or are sure most of the bugs are gone + const releaseFilePath = path.join( + releasePath, + `${baseName}-tauri-beta${ext}` + ); + fs.copyFileSync(entryPath, releaseFilePath); + console.log(`Release file copied to ${releaseFilePath}`); + } + } + ); +} + +addPlatformUpdater( + "darwin-x86_64", + "tauri-mac/universal-apple-darwin/release/bundle/macos", + /\.tar\.gz$/, + "darwin-universal" +); +addPlatformUpdater( + "darwin-aarch64", + "tauri-mac/universal-apple-darwin/release/bundle/macos", + /\.tar\.gz$/, + "darwin-universal" +); +// Need to look into linus for arm, I don't believe it's supported for tauri at least. +addPlatformUpdater( + "linux-x86_64", + "tauri-linux/x86_64-unknown-linux-gnu/release/bundle/appimage", + /\.AppImage.tar.gz$/ +); +addPlatformUpdater( + "windows-x86_64", + "tauri-win/x86_64-pc-windows-msvc/release/bundle/msi", + /\.zip$/ +); +addPlatformUpdater( + "windows-aarch64", + "tauri-win/aarch64-pc-windows-msvc/release/bundle/nsis", + /\.zip$/ +); + +addReleaseFiles( + artifactsPath, + ".AppImage", + ".exe", + ".dmg", + ".msi", + ".deb" +); + +fs.writeFile( + path.join(releasePath, "tauri-updater.json"), + JSON.stringify(data, null, 2), + (err) => { + if (err) throw err; + console.log("Data written to file"); + } +); + +// The release action will upload the contends of the release folder and any files from artifacts that match the expected extensions. diff --git a/app/tauri/release.conf.json b/app/tauri/release.conf.json new file mode 100644 index 00000000..4453c119 --- /dev/null +++ b/app/tauri/release.conf.json @@ -0,0 +1,18 @@ +{ + "plugins": { + "updater": { + "dialog": true, + "endpoints": [ + "https://api.github.com/repos/sekwah41/pomatez/this/is/not/a/valid/url/and/will/be/set/in/main/rs" + ] + } + }, + "tauri": { + "bundle": { + "updater": { + "active": true, + "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDVDNUI3N0FBQTI3NkEwOTQKUldTVW9IYWlxbmRiWElmTjM2blhVVzJ4RW9iaXhZa0xHY0lKNWMxQ2FnUks2bXBCSG5UcXZiQzkK" + } + } + } +} diff --git a/app/tauri/src/global_shortcuts.rs b/app/tauri/src/global_shortcuts.rs index 2a87923a..5c89a24b 100644 --- a/app/tauri/src/global_shortcuts.rs +++ b/app/tauri/src/global_shortcuts.rs @@ -1,5 +1,5 @@ use lazy_static::lazy_static; -use tauri::{Wry, Builder, Manager, AppHandle, App}; +use tauri::{Manager, AppHandle, App}; use tauri_plugin_global_shortcut::{GlobalShortcutExt, Modifiers, Shortcut}; use tauri_plugin_global_shortcut::Code; @@ -17,7 +17,7 @@ impl PomatezGlobalShortcutsSetup for App { fn setup_global_shortcuts(&self) { let window = self.get_window("main").expect("Failed to get window"); let global_shortcut_plugin = { - tauri_plugin_global_shortcut::Builder::with_handler(move |shortcut| { + tauri_plugin_global_shortcut::Builder::with_handler(move |_app_handle, shortcut| { println!("Shortcut pressed: {:?}", shortcut); match shortcut.id() { key if SHOW_SHORTCUT.id() == key => { diff --git a/app/tauri/src/main.rs b/app/tauri/src/main.rs index 3150f28b..eca83c34 100644 --- a/app/tauri/src/main.rs +++ b/app/tauri/src/main.rs @@ -3,28 +3,36 @@ all(not(debug_assertions), target_os = "windows"), windows_subsystem = "windows" )] -use tauri::RunEvent; +#[cfg(debug_assertions)] +use tauri::{Manager}; +use tauri::{RunEvent}; use tauri_plugin_autostart::MacosLauncher; -use tauri_plugin_global_shortcut::GlobalShortcutExt; use tauri_plugin_window; #[macro_use] mod commands; mod system_tray; mod global_shortcuts; +mod updater; use commands::PomatezCommands; use system_tray::PomatezTray; use global_shortcuts::{PomatezGlobalShortcutsSetup, PomatezGlobalShortcutsRegister}; +use crate::updater::PomatezUpdater; fn main() { let app = tauri::Builder::default() .plugin(tauri_plugin_autostart::init(MacosLauncher::LaunchAgent, None)) .plugin(tauri_plugin_window::init()) + .plugin(tauri_plugin_updater::Builder::new().build()) .register_pomatez_commands() .setup(|app| { - app.setup_global_shortcuts(); - app.set_pomatez_system_tray(); + #[cfg(desktop)] + { + app.setup_global_shortcuts(); + app.set_pomatez_system_tray(); + app.check_for_update(); + } Ok(()) }) @@ -33,7 +41,12 @@ fn main() { app.run(|app_handle, e| match e { RunEvent::Ready => { + #[cfg(desktop)] app_handle.register_global_shortcuts(); + + #[cfg(debug_assertions)] + app_handle.get_window("main").unwrap().open_devtools(); + println!("Pomatez is ready"); } _ => {} diff --git a/app/tauri/src/system_tray.rs b/app/tauri/src/system_tray.rs index 50d3b9b6..026c13fa 100644 --- a/app/tauri/src/system_tray.rs +++ b/app/tauri/src/system_tray.rs @@ -1,5 +1,5 @@ use std::path::PathBuf; -use tauri::{App, Builder, Icon, Manager, Runtime, Wry}; +use tauri::{App, Icon, Manager, Runtime}; use tauri::{ menu::{MenuBuilder, MenuItemBuilder}, tray::{ClickType, TrayIconBuilder}, @@ -77,7 +77,7 @@ impl PomatezTray for App { } _ => {} }) - .on_tray_event(|tray, event| { + .on_tray_icon_event(|tray, event| { if event.click_type == ClickType::Left { let app = tray.app_handle(); let window = app.get_window("main").unwrap(); diff --git a/app/tauri/src/updater.rs b/app/tauri/src/updater.rs new file mode 100644 index 00000000..c1c3e39d --- /dev/null +++ b/app/tauri/src/updater.rs @@ -0,0 +1,84 @@ +use serde::Deserialize; +use tauri::{App}; +use tauri_plugin_updater::UpdaterExt; +use url::Url; + +pub trait PomatezUpdater { + fn check_for_update(&self); +} + +#[derive(Deserialize, Debug)] +struct LatestRelease { + // While we could get the latest version or other info, we just want to find the tauri-release.json asset. + assets: Vec, +} + +#[derive(Deserialize, Debug)] +struct Asset { + name: String, + browser_download_url: String, +} + +impl PomatezUpdater for App { + fn check_for_update(&self) { + let handle = self.handle().clone(); + tauri::async_runtime::spawn(async move { + // Todo maybe check that its a supported platform first e.g. windows, macos, linux (AppImage) + + // If its not a supported platform maybe open the release page. + + println!("Checking for updates"); + // Custom configure the updater. + // If we use this endpoint even if the url changes e.g. org name change or project name change the updates should still follow. + let github_releases_endpoint = "https://api.github.com/repos/sekwah41/pomatez/releases/latest"; + let github_releases_endpoint = match Url::parse(github_releases_endpoint) { + Ok(url) => url, + Err(e) => { + println!("Failed to parse url: {:?}. Failed to check for updates", e); + return; + } + }; + let client = reqwest::Client::new(); + let req = client.get(github_releases_endpoint.clone()) + .header("Content-Type", "application/json") + // If this is not set you will get a 403 forbidden error. + .header("User-Agent", "pomatez"); + let response = req.send().await.expect("Failed to send request"); + if response.status() != reqwest::StatusCode::OK { + println!("Non OK status code: {:?}. Failed to check for updates", response.status()); + return; + } + let latest_release = response.json::().await.expect("Failed to parse latest release response"); + + // Find an asset named "tauri-release.json". + let tauri_release_asset = latest_release.assets.iter().find(|asset| asset.name == "tauri-release.json"); + + // If we found the asset, set it as the updater endpoint. + let tauri_release_asset = match tauri_release_asset { + Some(tauri_release_asset) => tauri_release_asset, + None => { + println!("Failed to find tauri-release.json asset. Failed to check for updates\n\nFound Assets are:"); + // Print a list of the assets found + for asset in latest_release.assets { + println!(" {:?}", asset.name); + } + return; + } + }; + + let tauri_release_endpoint = match Url::parse(&tauri_release_asset.browser_download_url) { + Ok(url) => url, + Err(e) => { + println!("Failed to parse url: {:?}. Failed to check for updates", e); + return; + } + }; + let updater_builder = handle.updater_builder().endpoints(vec!(tauri_release_endpoint)); + let updater = updater_builder.build() + .expect("could not build updater"); + println!("Checking for updates"); + let response = updater.check().await; + println!("Update check response: {:?}", response); + }); + } +} \ No newline at end of file diff --git a/app/tauri/tauri.conf.json b/app/tauri/tauri.conf.json index 9e3fd477..3170d6bf 100644 --- a/app/tauri/tauri.conf.json +++ b/app/tauri/tauri.conf.json @@ -10,7 +10,6 @@ "productName": "Pomatez", "version": "1.3.0" }, - "plugins": {}, "tauri": { "bundle": { "active": true, @@ -39,14 +38,24 @@ "publisher": "Roldan Montilla Jr", "resources": ["icons/icon.png"], "shortDescription": "", - "targets": ["deb", "appimage", "msi", "dmg", "updater"], + "targets": ["deb", "appimage", "msi", "nsis", "dmg", "updater"], "windows": { "certificateThumbprint": null, "digestAlgorithm": "sha256", "timestampUrl": "", + "webviewInstallMode": { + "type": "embedBootstrapper" + }, "wix": { - "bannerPath": "./installer/banner.bmp", - "dialogImagePath": "./installer/dialog.bmp", + "bannerPath": "./installer/wix/banner.bmp", + "dialogImagePath": "./installer/wix/dialog.bmp", + "license": "../../LICENSE" + }, + "nsis": { + "headerImage": "./installer/nsis/header.bmp", + "sidebarImage": "./installer/nsis/sidebar.bmp", + "installerIcon": "./icons/icon.ico", + "installMode": "both", "license": "../../LICENSE" } } diff --git a/package.json b/package.json index f3ead324..8782c9a4 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "build:linux": "yarn build && lerna run build:linux --stream", "build:snap": "yarn build && lerna run build:snap --stream", "build:tauri": "tauri build", + "build:updaterfile": "node app/tauri/release-prep/release-prep.js", "release:mw": "yarn build && lerna run release:mw --stream", "release": "yarn build && lerna run release --stream", "clean": "lerna exec -- rimraf build/ dist/", @@ -46,7 +47,7 @@ ] }, "devDependencies": { - "@tauri-apps/cli": "^2.0.0-alpha.14", + "@tauri-apps/cli": "^2.0.0-alpha.17", "commitizen": "^4.1.2", "copyfiles": "2.4.1", "cross-env": "^7.0.3", @@ -64,8 +65,5 @@ "resolutions": { "//": "Check https://github.com/facebook/create-react-app/issues/11773 to see if it has been fixed yet", "react-error-overlay": "6.0.9" - }, - "dependencies": { - "@tauri-apps/api": "^2.0.0-alpha.8" } } diff --git a/yarn.lock b/yarn.lock index 890d72ea..fb6aac1f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3649,97 +3649,102 @@ dependencies: defer-to-connect "^1.0.1" +"@tauri-apps/api@2.0.0-alpha.11": + version "2.0.0-alpha.11" + resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-alpha.11.tgz#091afafc1d49a7009aa8ea18864e4f4e38133905" + integrity sha512-aw7jic+MQAe/LH4fYhbd3bwx3YjXhDIwqKJIn5QO4yKmGdVURIhZSFcyeKkSe4P6Itdto0Pcz99vLfkgBwdQKw== + "@tauri-apps/api@2.0.0-alpha.6": version "2.0.0-alpha.6" resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-alpha.6.tgz#16b94359e5c8266ed2b774b4f2e1339c594c4cb4" integrity sha512-ZMOc3eu9amwvkC6M69h3hWt4/EsFaAXmtkiw4xd2LN59/lTb4ZQiVfq2QKlRcu1rj3n/Tcr7U30ZopvHwXBGIg== -"@tauri-apps/api@2.0.0-alpha.8", "@tauri-apps/api@^2.0.0-alpha.8": - version "2.0.0-alpha.8" - resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-alpha.8.tgz#8caecf6e514ab2090f207e466aef9fec6fa0ed0b" - integrity sha512-3hZ+7EzUA11KN+O/Y4KgmjR+ldhXLdNllkw//hv/AaNsktEopCRBuKfVRLzVK3yov+Z+GzgxqFlwgJ1v6g1iKw== - -"@tauri-apps/cli-darwin-arm64@2.0.0-alpha.14": - version "2.0.0-alpha.14" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-alpha.14.tgz#1f27250f5659d0b058be36837c7e95afc721dc2f" - integrity sha512-3K416rvSUt8el/fdPnSnHJOI2j5Os9Kyy17XZp+z3PKRRuo/iJPp9L3w0zFGYsh7C+ylzV4OBUSVTi+e+gO5qA== - -"@tauri-apps/cli-darwin-x64@2.0.0-alpha.14": - version "2.0.0-alpha.14" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-alpha.14.tgz#446f87b8629756cd68985ba368e0df0da1dfd7a3" - integrity sha512-aLEUGG8Z0UpTENe4/UG6DU8bnB2e1uxyxYvcmFKrHv+EAtR9nLH14alBxPl2K54YXy3JLR4bKROW15a/sFrX9g== - -"@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-alpha.14": - version "2.0.0-alpha.14" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-alpha.14.tgz#3212d346a519f8ba0ab9370f5fbf449275c18368" - integrity sha512-Lu7unNvurBccxfHIaUQ0gPgUioTkQBMtWGrqO/auZ/JbjPR1W2eBlRwVNXf+nBWX9HwomPR3YD5yZuZmzxRV2g== - -"@tauri-apps/cli-linux-arm64-gnu@2.0.0-alpha.14": - version "2.0.0-alpha.14" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-alpha.14.tgz#577e9d66b23250f14792c5e25a732aad02290319" - integrity sha512-g8HkwKvAsWLLMJzPup7B1BCilYmXKwXdee7sf8QFbaIUSccR8i5pXLK5N/quKw5lmldYgFveEyuW9Qs8RgTYnQ== - -"@tauri-apps/cli-linux-arm64-musl@2.0.0-alpha.14": - version "2.0.0-alpha.14" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-alpha.14.tgz#72c24b8de5ab37ea6c0060be8965d48856c018de" - integrity sha512-ag4UuX6zg7vmBFWmg9ChyiJI7GTMkc8tjr/qobd3Lg9ddmjnVWwLUHt6v1kYhXiU7iLPD5DYDIjU8x/POc3hSA== - -"@tauri-apps/cli-linux-x64-gnu@2.0.0-alpha.14": - version "2.0.0-alpha.14" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-alpha.14.tgz#d9abbd46b689751162ff8f2aca3c213bf24d3028" - integrity sha512-+CviROc4fzrGqqyHQXh3uc2dGr/oYr19I8r2k+LJ2CDfmtj7CbNd/oC5oehHbHdw1oGFKuDPudrTGvzdRNygYA== - -"@tauri-apps/cli-linux-x64-musl@2.0.0-alpha.14": - version "2.0.0-alpha.14" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-alpha.14.tgz#6dfc09a7c335d019db08f28637b51bb3f67f7cfb" - integrity sha512-aCP51HOAQXgVhyPHXKy627bYVRkNnpCvSU3L03pYV8YDoGo+veeuek5UiW7PlNdwx52B/yC3Jz7Dr3gEbFimfQ== - -"@tauri-apps/cli-win32-arm64-msvc@2.0.0-alpha.14": - version "2.0.0-alpha.14" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-alpha.14.tgz#9154b1340bb04967347e96fdba618697b427b537" - integrity sha512-b6Ei5ERUF0KS1bttM7i6U62GmjIvlgK03XZqvL/KLNvUfqRMu8F7JA1ejSExgTxhEhKSWA768HiTXpXk2GjFFw== - -"@tauri-apps/cli-win32-ia32-msvc@2.0.0-alpha.14": - version "2.0.0-alpha.14" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-alpha.14.tgz#e80318d4a495575e80fb77fc62babd9867e15523" - integrity sha512-TDkvu5pd37bKxZ6N+BqngCNGcefY7aHxyJ3BdBGxF+wRMjEMh70mgEXk8i0uM/aUi/Kl1GQoO6xJfUDlIMPXOA== - -"@tauri-apps/cli-win32-x64-msvc@2.0.0-alpha.14": - version "2.0.0-alpha.14" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-alpha.14.tgz#eef8d38a0cc39c9b8c23bd9e8c16c290fb441f2a" - integrity sha512-9yfoEe2RSykKr5hCifVAL5o0gHXgRCS+Wo+RJjQ9L2+QHY7XPLZYAhj/h8jdcAdRveyIQwat3k7wl+SW87v1eg== - -"@tauri-apps/cli@^2.0.0-alpha.14": - version "2.0.0-alpha.14" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-2.0.0-alpha.14.tgz#f4b0b83fccdc3f70b75d3779e3fd6b93b971af60" - integrity sha512-4/IQwN5S94D6LTXQrDWbSea0pGb9TTC4BwxHUFmhep4NjFxms161v1zadAUIsq/N2x6WwCBGrsdq9SIkgKv49Q== +"@tauri-apps/api@2.0.0-alpha.9": + version "2.0.0-alpha.9" + resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-alpha.9.tgz#5684ea6f94f6ca52351202212e4925e583f70efc" + integrity sha512-Q5BiIQa2ToICdaJSYZdmtwbKSfdk+uQbQ7xMnbWI5C5C3frEVFlT92kVXgZFKIwrTLZBWHfiowkPR6rbFqAHIg== + +"@tauri-apps/cli-darwin-arm64@2.0.0-alpha.17": + version "2.0.0-alpha.17" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-alpha.17.tgz#e893b708e41e7a60266135e7edf04373a30e9bbb" + integrity sha512-WDqekRiVwMu/hKsf/xBHcfi/YZ7X9o6Piy4Qolt+YYyfi4wh5ZYZnom+7kIZBlSCc32gtXGViBXEivhcKzFQ3w== + +"@tauri-apps/cli-darwin-x64@2.0.0-alpha.17": + version "2.0.0-alpha.17" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-alpha.17.tgz#3f4abeed3f7412f5e14df364274b43aa91341c3f" + integrity sha512-WcQ+iSIaxr80gpa+ji+4e7dD0w/s3VCo29DU3wT/uQBKrCfkJUwmUAqEwyrR7INWcOurLF0IizR71In3NrYJiw== + +"@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-alpha.17": + version "2.0.0-alpha.17" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-alpha.17.tgz#52622438fdb5a5a73c13716025ad3203b890a27c" + integrity sha512-xgVc3Pv0Wf7aWqi0eH1iEemi9uQJJfMCVqBjPrK65Bm1LsBmMw99QS5YH8XPCMfB01Jfdzf3Ty9ZCW8/vjqz3w== + +"@tauri-apps/cli-linux-arm64-gnu@2.0.0-alpha.17": + version "2.0.0-alpha.17" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-alpha.17.tgz#693a4d5bd50e5f5c6af0f297398e57953c8d3565" + integrity sha512-QEx92085i+I4lOdboJ0PK+DSrlHq613HTqiSO4YteD5uCXsq2R9uAcFXM08quQYpRl4b9GeG99vig5GDOZMOkw== + +"@tauri-apps/cli-linux-arm64-musl@2.0.0-alpha.17": + version "2.0.0-alpha.17" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-alpha.17.tgz#77b0492d3fa64c4c8d27e741a26f15ae34a5077a" + integrity sha512-Iq0YHtg1yOvx3xxne6aHRS46SG6o6aQPACORGcJneGL6UjOQ7M34zKI9fX2tOWB5YEcVZBOvtNEZQOUeG2bw7g== + +"@tauri-apps/cli-linux-x64-gnu@2.0.0-alpha.17": + version "2.0.0-alpha.17" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-alpha.17.tgz#2e280fac702fb77145c0c66f1af59f13b455b53c" + integrity sha512-CAdd2EhGsFWu3nr0o650dfTLOJhICRoqETKmAgSEpQNtpXuJwrqxA3XrIa1sUkgWZacf3dgQwyNNlvB8oYOHKg== + +"@tauri-apps/cli-linux-x64-musl@2.0.0-alpha.17": + version "2.0.0-alpha.17" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-alpha.17.tgz#6d18765b451487038308f0a7c94bf7aac81ca458" + integrity sha512-xMhqAvcD0+b7creRhf7XnMTeoMAmmp1FvtNfosWCdWl7o9YHkqyNlkSp9rn96lhP2DG/Ew2CHxKOZaPql9gnlw== + +"@tauri-apps/cli-win32-arm64-msvc@2.0.0-alpha.17": + version "2.0.0-alpha.17" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-alpha.17.tgz#e1af9e0298f63e810a93b5dd36748770cf68959e" + integrity sha512-j8Q6JkDGW1N8brMjg74/AkVwyg14VVfQUFoai9Ocbf8q9gGNE5IRr7KvbWjqDntUihbc7MURwcXjcsJ4duYe/A== + +"@tauri-apps/cli-win32-ia32-msvc@2.0.0-alpha.17": + version "2.0.0-alpha.17" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-alpha.17.tgz#7b638be46ce7f48ee797c36baccea6651bd5c713" + integrity sha512-YIdSHH2Y9Rcg8Z5WoRUTlEi1DZj/Okrz4q0b+z8xwJQFSGsxUhpc3U81iBW1yw/7AtXiLtzr8AiBrLAw4ZYGHA== + +"@tauri-apps/cli-win32-x64-msvc@2.0.0-alpha.17": + version "2.0.0-alpha.17" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-alpha.17.tgz#b3b33f8c2cb640f9794aa66a340bf4af4e047cf6" + integrity sha512-+1stlGdRdiuyU+q1AlqieZhD2WpdLuP8EZxv2KbbjifLDt6fg1FUrcocmpIa8qsrXue7vg2sTrWNuy4aq/v4bw== + +"@tauri-apps/cli@^2.0.0-alpha.17": + version "2.0.0-alpha.17" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-2.0.0-alpha.17.tgz#666c71ce677c309b7980af6bb3c2ffb042d71410" + integrity sha512-fXz1KQzolqHY40bmNa/mzrdid4zlIaI/catXN8iqSO/1aNXNpLhg+6PWrwW5foiD7kJ6lgLlCtICW/1jRE5BZg== optionalDependencies: - "@tauri-apps/cli-darwin-arm64" "2.0.0-alpha.14" - "@tauri-apps/cli-darwin-x64" "2.0.0-alpha.14" - "@tauri-apps/cli-linux-arm-gnueabihf" "2.0.0-alpha.14" - "@tauri-apps/cli-linux-arm64-gnu" "2.0.0-alpha.14" - "@tauri-apps/cli-linux-arm64-musl" "2.0.0-alpha.14" - "@tauri-apps/cli-linux-x64-gnu" "2.0.0-alpha.14" - "@tauri-apps/cli-linux-x64-musl" "2.0.0-alpha.14" - "@tauri-apps/cli-win32-arm64-msvc" "2.0.0-alpha.14" - "@tauri-apps/cli-win32-ia32-msvc" "2.0.0-alpha.14" - "@tauri-apps/cli-win32-x64-msvc" "2.0.0-alpha.14" - -"@tauri-apps/plugin-autostart@^2.0.0-alpha.1": - version "2.0.0-alpha.1" - resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-autostart/-/plugin-autostart-2.0.0-alpha.1.tgz#4617d0a1aeb3b620e156e2ec010865de2bb947ec" - integrity sha512-xs72S8KCYzt9puML4vrmPvg2/wpUuRg4NMEp+12A7XwCP4mQ9js0fFPKSma770TVeJGpzhdJFvDTdWgrVyhYng== - dependencies: - "@tauri-apps/api" "2.0.0-alpha.6" - -"@tauri-apps/plugin-global-shortcut@^2.0.0-alpha.1": - version "2.0.0-alpha.1" - resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-global-shortcut/-/plugin-global-shortcut-2.0.0-alpha.1.tgz#d5abec71d7b731b3530712fb21c05bf6d11fd9c4" - integrity sha512-86pqnvoylSZV7R/SjK1WlLhTWydIhRS5qjHl6IqIcY4sYRuBMovMNj8fMLhFt2Ppq4dRiSx5jbrlQDY82HJtaQ== - dependencies: - "@tauri-apps/api" "2.0.0-alpha.6" - -"@tauri-apps/plugin-window@^2.0.0-alpha.1": + "@tauri-apps/cli-darwin-arm64" "2.0.0-alpha.17" + "@tauri-apps/cli-darwin-x64" "2.0.0-alpha.17" + "@tauri-apps/cli-linux-arm-gnueabihf" "2.0.0-alpha.17" + "@tauri-apps/cli-linux-arm64-gnu" "2.0.0-alpha.17" + "@tauri-apps/cli-linux-arm64-musl" "2.0.0-alpha.17" + "@tauri-apps/cli-linux-x64-gnu" "2.0.0-alpha.17" + "@tauri-apps/cli-linux-x64-musl" "2.0.0-alpha.17" + "@tauri-apps/cli-win32-arm64-msvc" "2.0.0-alpha.17" + "@tauri-apps/cli-win32-ia32-msvc" "2.0.0-alpha.17" + "@tauri-apps/cli-win32-x64-msvc" "2.0.0-alpha.17" + +"@tauri-apps/plugin-autostart@2.0.0-alpha.2": + version "2.0.0-alpha.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-autostart/-/plugin-autostart-2.0.0-alpha.2.tgz#adbf3b564d75b996f12cadce98a729d5d83d418b" + integrity sha512-BDdnmiQwOtQkFpubGL+QaZbYo71cQRCcbC5vBmlxrNXn/J4WfyJ7yoU8cvaMemWTbeVsUOcFP0lKsYffXi+t3g== + dependencies: + "@tauri-apps/api" "2.0.0-alpha.9" + +"@tauri-apps/plugin-global-shortcut@2.0.0-alpha.2": + version "2.0.0-alpha.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-global-shortcut/-/plugin-global-shortcut-2.0.0-alpha.2.tgz#7af492a6c5f31e04d3a3083ec63d97a6cf5e1238" + integrity sha512-V9JzFNufJBP6CRz/DRl0dIY/IJsSK05tRyDDVag9GJzexmQZp3ESXrPS22V4/s1jNIoKFlYTlUgvXryPHm+LIw== + dependencies: + "@tauri-apps/api" "2.0.0-alpha.9" + +"@tauri-apps/plugin-window@2.0.0-alpha.1": version "2.0.0-alpha.1" resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-window/-/plugin-window-2.0.0-alpha.1.tgz#28a0217100fc5a34fb2a6d76103ba056b2348286" integrity sha512-dFOAgal/3Txz3SQ+LNQq0AK1EPC+acdaFlwPVB/6KXUZYmaFleIlzgxDVoJCQ+/xOhxvYrdQaFLefh0I/Kldbg== From 4bbf3a7eabaa729bcf58d47da86a29be707738c9 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Wed, 8 Nov 2023 03:02:23 +0000 Subject: [PATCH 36/37] feat(tauri): updater window --- .github/workflows/build-tauri.yml | 30 ++- .github/workflows/release-please.yml | 54 ++--- .github/workflows/test-build-thingy.yml | 30 --- CHANGELOG.md | 7 +- app/renderer/src/App.tsx | 12 +- app/renderer/src/components/NavNotify.tsx | 18 ++ app/renderer/src/components/Navigation.tsx | 39 ++-- app/renderer/src/components/Titlebar.tsx | 5 +- app/renderer/src/components/Updater.tsx | 116 +++++++++++ app/renderer/src/components/index.ts | 2 + app/renderer/src/config.ts | 12 +- .../src/contexts/ConnnectorContext.tsx | 19 +- app/renderer/src/contexts/InvokeConnector.tsx | 6 + .../contexts/connectors/ElectronConnector.tsx | 9 + .../contexts/connectors/TauriConnector.tsx | 43 +++- app/renderer/src/routes/Settings/index.tsx | 12 +- app/renderer/src/store/settings/actions.ts | 10 + app/renderer/src/store/settings/reducer.ts | 7 + app/renderer/src/store/settings/types.ts | 5 + app/renderer/src/store/store.ts | 2 + app/renderer/src/store/update/actions.ts | 24 +++ app/renderer/src/store/update/index.ts | 3 + app/renderer/src/store/update/reducer.ts | 38 ++++ app/renderer/src/store/update/types.ts | 13 ++ .../src/styles/components/navigation.ts | 20 +- .../src/styles/routes/tasks/details.ts | 2 + app/shareables/src/index.ts | 6 +- app/tauri/.gitignore | 1 - app/tauri/Cargo.lock | 78 ++++++- app/tauri/Cargo.toml | 3 +- app/tauri/README.MD | 2 +- app/tauri/release-prep/release-prep.js | 2 +- app/tauri/release.conf.json | 4 +- app/tauri/src/commands.rs | 5 +- app/tauri/src/global_shortcuts.rs | 51 ++++- app/tauri/src/main.rs | 3 +- app/tauri/src/updater.rs | 197 ++++++++++++------ package.json | 4 +- 38 files changed, 719 insertions(+), 175 deletions(-) delete mode 100644 .github/workflows/test-build-thingy.yml create mode 100644 app/renderer/src/components/NavNotify.tsx create mode 100644 app/renderer/src/components/Updater.tsx create mode 100644 app/renderer/src/contexts/InvokeConnector.tsx create mode 100644 app/renderer/src/store/update/actions.ts create mode 100644 app/renderer/src/store/update/index.ts create mode 100644 app/renderer/src/store/update/reducer.ts create mode 100644 app/renderer/src/store/update/types.ts diff --git a/.github/workflows/build-tauri.yml b/.github/workflows/build-tauri.yml index eb15e6c7..f9beabff 100644 --- a/.github/workflows/build-tauri.yml +++ b/.github/workflows/build-tauri.yml @@ -34,7 +34,11 @@ jobs: # The only real added benefit of NSIS is that the installer can have a custom logo. # Also, nsis is the only one that currently works on arm64 # Another note is embedBootstrapper is enabled to improve support on window 7. Though windows 7 doesn't support arm64. - tauri_target: ["'aarch64-pc-windows-msvc --bundles nsis,updater'", "'x86_64-pc-windows-msvc --bundles msi,updater'"] + tauri_target: + [ + "'aarch64-pc-windows-msvc --bundles nsis,updater'", + "'x86_64-pc-windows-msvc --bundles msi,updater'", + ] steps: - uses: actions/checkout@v4 @@ -50,7 +54,7 @@ jobs: - name: Rust cache uses: swatinem/rust-cache@v2 with: - workspaces: './app/tauri -> target' + workspaces: "./app/tauri -> target" - name: install dependencies (ubuntu only) if: matrix.os == 'ubuntu-22.04' run: | @@ -88,13 +92,23 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 - - name: Download all artifacts + # Download-artifact cannot do a wildcard and if all are downloaded it can download the results from the electron stage + # We could filter that but this is faster to avoid unneeded downloads. + - name: Download Win uses: actions/download-artifact@v3 with: - path: artifacts - - name: Display structure of downloaded files - shell: bash - run: ls -R + name: tauri-win + path: artifacts/tauri-win + - name: Download Mac + uses: actions/download-artifact@v3 + with: + name: tauri-mac + path: artifacts/tauri-mac + - name: Download Linux + uses: actions/download-artifact@v3 + with: + name: tauri-linux + path: artifacts/tauri-linux - name: Use Node.js 18.x uses: actions/setup-node@v3 with: @@ -106,4 +120,4 @@ jobs: with: name: tauri-release path: | - release/* \ No newline at end of file + release/* diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 1c41b655..a2c8497a 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -30,6 +30,7 @@ jobs: needs: release-please if: needs.release-please.outputs.release_created uses: ./.github/workflows/build-tauri.yml + secrets: inherit publish: name: Publish needs: @@ -57,28 +58,31 @@ jobs: built-*/*.exe built-*/*.snap built-*/*.blockmap - publish-to-homebrew-cask: - name: Publish to Homebrew Cask - needs: - - publish - - release-please - runs-on: macos-latest - steps: - - uses: Homebrew/actions/bump-packages@master - with: - casks: pomatez - token: ${{ secrets.GITHUB_TOKEN }} - publish-to-winget: - name: Publish to WinGet - needs: - - publish - - release-please - runs-on: windows-latest - steps: - - uses: vedantmgoyal2009/winget-releaser@v2 - with: - identifier: Zidoro.Pomatez - installers-regex: 'setup\.exe$' - max-versions-to-keep: 5 # keep only latest 5 versions - release-tag: ${{ needs.release-please.outputs.tag }} - token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + tauri-release/* + +# Commented out just for test releases +# publish-to-homebrew-cask: +# name: Publish to Homebrew Cask +# needs: +# - publish +# - release-please +# runs-on: macos-latest +# steps: +# - uses: Homebrew/actions/bump-packages@master +# with: +# casks: pomatez +# token: ${{ secrets.GITHUB_TOKEN }} +# publish-to-winget: +# name: Publish to WinGet +# needs: +# - publish +# - release-please +# runs-on: windows-latest +# steps: +# - uses: vedantmgoyal2009/winget-releaser@v2 +# with: +# identifier: Zidoro.Pomatez +# installers-regex: 'setup\.exe$' +# max-versions-to-keep: 5 # keep only latest 5 versions +# release-tag: ${{ needs.release-please.outputs.tag }} +# token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/test-build-thingy.yml b/.github/workflows/test-build-thingy.yml deleted file mode 100644 index 6d06e9b3..00000000 --- a/.github/workflows/test-build-thingy.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Release -on: - push: - workflow_call: - workflow_dispatch: - -permissions: - contents: write - pull-requests: write -jobs: - build-node: - name: "Build Node" - uses: ./.github/workflows/build.yml - build-tauri: - name: "Build Tauri" - uses: ./.github/workflows/build-tauri.yml - secrets: inherit - publish: - name: Publish - needs: - - build-node - - build-tauri - runs-on: ubuntu-latest - steps: - - name: Download artifact - uses: actions/download-artifact@v3 - - name: Display structure of downloaded files - shell: bash - run: ls -R - diff --git a/CHANGELOG.md b/CHANGELOG.md index 37c9c7ef..8563ce0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,12 +2,11 @@ ## [1.3.1](https://github.com/zidoro/pomatez/compare/v1.3.0...v1.3.1) (2023-10-19) - ### Bug Fixes 🐛 -* javascript error on launch ([#414](https://github.com/zidoro/pomatez/issues/414)) ([c6c18fb](https://github.com/zidoro/pomatez/commit/c6c18fb47b424be62a9b91ed64c7c95e8eaa41a3)) -* **lang:** Switch "released notes" with "release notes" ([#439](https://github.com/zidoro/pomatez/issues/439)) ([d9a3afa](https://github.com/zidoro/pomatez/commit/d9a3afa11f828084483c1d1e3693ff9b0dc1c8e1)) -* toast notification ([#382](https://github.com/zidoro/pomatez/issues/382)) ([25403d7](https://github.com/zidoro/pomatez/commit/25403d742d83d0d3654418a43bc5efe8316dc019)) +- javascript error on launch ([#414](https://github.com/zidoro/pomatez/issues/414)) ([c6c18fb](https://github.com/zidoro/pomatez/commit/c6c18fb47b424be62a9b91ed64c7c95e8eaa41a3)) +- **lang:** Switch "released notes" with "release notes" ([#439](https://github.com/zidoro/pomatez/issues/439)) ([d9a3afa](https://github.com/zidoro/pomatez/commit/d9a3afa11f828084483c1d1e3693ff9b0dc1c8e1)) +- toast notification ([#382](https://github.com/zidoro/pomatez/issues/382)) ([25403d7](https://github.com/zidoro/pomatez/commit/25403d742d83d0d3654418a43bc5efe8316dc019)) ## [1.3.0](https://github.com/zidoro/pomatez/compare/v1.2.3...v1.3.0) (2023-09-26) diff --git a/app/renderer/src/App.tsx b/app/renderer/src/App.tsx index 33191497..c3608513 100644 --- a/app/renderer/src/App.tsx +++ b/app/renderer/src/App.tsx @@ -35,6 +35,16 @@ export default function App() { document.removeEventListener("contextmenu", contextEvent); }, []); + useEffect(() => { + const middleMouseEvent = (event: MouseEvent) => { + if (event.button === 1) event.preventDefault(); + }; + window.addEventListener("auxclick", middleMouseEvent); + + return () => + window.removeEventListener("auxclick", middleMouseEvent); + }, []); + return ( @@ -54,7 +64,7 @@ export default function App() { /> ) ) - : routes.map( + : routes().map( ({ exact, path, component }, index) => ( = ({ timerType }) => { (state: AppStateTypes) => state.settings ); + const state = useSelector((state: AppStateTypes) => state); + return ( - {routes.map(({ name, icon, exact, path }, index) => ( - - - - {name} - - - ))} + {routes(state).map( + ({ name, icon, exact, path, notify }, index) => { + return ( + + + + + {notify && } + + {name} + + + ); + } + )} ); diff --git a/app/renderer/src/components/Titlebar.tsx b/app/renderer/src/components/Titlebar.tsx index e9603a66..ef4024a3 100644 --- a/app/renderer/src/components/Titlebar.tsx +++ b/app/renderer/src/components/Titlebar.tsx @@ -27,9 +27,8 @@ type Props = { }; const Titlebar: React.FC = ({ darkMode, timerType }) => { - const { onMinimizeCallback, onExitCallback } = useContext( - ConnnectorContext - ); + const { onMinimizeCallback, onExitCallback } = + useContext(ConnnectorContext); const getAppIcon = useCallback(() => { switch (timerType) { diff --git a/app/renderer/src/components/Updater.tsx b/app/renderer/src/components/Updater.tsx new file mode 100644 index 00000000..8a162db6 --- /dev/null +++ b/app/renderer/src/components/Updater.tsx @@ -0,0 +1,116 @@ +import React from "react"; +import Header from "./Header"; +import styled from "styled-components/macro"; +import ReactMarkdown from "react-markdown"; +import { useDispatch, useSelector } from "react-redux"; +import { AppStateTypes, setIgnoreUpdate, SettingTypes } from "../store"; +import { + setUpdateBody, + setUpdateVersion, + UpdateTypes, +} from "../store/update"; +import { + StyledButtonNormal, + StyledButtonPrimary, + StyledDescriptionPreviewer, + StyledTaskForm, +} from "../styles"; +import { getInvokeConnector } from "../contexts"; +import { INSTALL_UPDATE } from "@pomatez/shareables"; +import { useNotification } from "../hooks"; +import notificationIcon from "../assets/logos/notification-dark.png"; + +const UpdateWrapper = styled.div` + display: flex; + flex-direction: column; + flex: 1; + width: 100%; + padding-left: 2rem; + padding-right: 1.4rem; +`; + +// Extend StyledDescriptionPreviewer to make it taller +const UpdateDescriptionPreviewer = styled(StyledDescriptionPreviewer)` + flex: 1 1 0; // Flex properties to allow growth and shrinkage + overflow-y: auto; // Enable vertical scrolling + height: 100%; // Set a fixed height + display: flex; + flex-direction: column; + min-height: 0; + max-height: none; +`; + +const ActionButtons = styled.div` + padding: 1rem 0; +`; +const IgnoreVersion = styled.div` + width: 100%; + text-align: center; + margin-top: 10px; + cursor: pointer; +`; + +const Updater: React.FC = () => { + const settings: SettingTypes = useSelector( + (state: AppStateTypes) => state.settings + ); + const update: UpdateTypes = useSelector( + (state: AppStateTypes) => state.update + ); + + const dispatch = useDispatch(); + + return ( + +

+ + + + + + + { + const invokeConnector = getInvokeConnector(); + new window.Notification( + "Downloading & Installing Update", + { + body: `This may take a moment to start depending on your internet speed.`, + } + ); + invokeConnector?.send(INSTALL_UPDATE); + dispatch(setUpdateVersion("")); + dispatch(setUpdateBody("")); + }} + > + Install Now + + { + dispatch(setUpdateVersion("")); + dispatch(setUpdateBody("")); + }} + > + Remind Me Later + + + { + dispatch(setIgnoreUpdate(update.updateVersion)); + dispatch(setUpdateBody("")); + }} + > + Ignore This Version + + + + ); +}; + +export default React.memo(Updater); diff --git a/app/renderer/src/components/index.ts b/app/renderer/src/components/index.ts index 13a90070..fc701198 100644 --- a/app/renderer/src/components/index.ts +++ b/app/renderer/src/components/index.ts @@ -23,6 +23,8 @@ export { default as Radio } from "./Radio"; export { default as Collapse } from "./Collapse"; export { default as Alert } from "./Alert"; +export { default as Updater } from "./Updater"; +export { default as NavNotify } from "./NavNotify"; export * from "./Popper"; export * from "./Preloader"; diff --git a/app/renderer/src/config.ts b/app/renderer/src/config.ts index a8b43bdb..19958fe2 100644 --- a/app/renderer/src/config.ts +++ b/app/renderer/src/config.ts @@ -1,6 +1,8 @@ import { SVGTypes } from "components"; import { TaskList, Config, Timer, Settings } from "routes"; import { ConfigSliderProps } from "routes"; +import { AppStateTypes, SettingTypes } from "./store"; +import { DefaultRootState } from "react-redux"; export const APP_NAME = "Pomatez"; @@ -10,15 +12,19 @@ type NavItemTypes = { exact: boolean; path: string; component: React.FC; + notify: boolean; }; -export const routes: NavItemTypes[] = [ +export const routes: (state?: AppStateTypes) => NavItemTypes[] = ( + state +) => [ { icon: "task", name: "Task List", exact: false, path: "/task-list", component: TaskList, + notify: false, }, { icon: "config", @@ -26,6 +32,7 @@ export const routes: NavItemTypes[] = [ exact: true, path: "/config", component: Config, + notify: false, }, { icon: "timer", @@ -33,6 +40,7 @@ export const routes: NavItemTypes[] = [ exact: true, path: "/", component: Timer, + notify: false, }, { icon: "settings", @@ -40,6 +48,7 @@ export const routes: NavItemTypes[] = [ exact: true, path: "/settings", component: Settings, + notify: !!state?.update?.updateBody, }, ]; @@ -50,6 +59,7 @@ export const compactRoutes: NavItemTypes[] = [ exact: false, path: "/", component: Timer, + notify: false, }, ]; diff --git a/app/renderer/src/contexts/ConnnectorContext.tsx b/app/renderer/src/contexts/ConnnectorContext.tsx index 40130d47..a270218e 100644 --- a/app/renderer/src/contexts/ConnnectorContext.tsx +++ b/app/renderer/src/contexts/ConnnectorContext.tsx @@ -1,7 +1,13 @@ import React from "react"; import isElectron from "is-electron"; -import { ElectronConnectorProvider } from "./connectors/ElectronConnector"; -import { TauriConnectorProvider } from "./connectors/TauriConnector"; +import { + ElectronConnectorProvider, + ElectronInvokeConnector, +} from "./connectors/ElectronConnector"; +import { + TauriConnectorProvider, + TauriInvokeConnector, +} from "./connectors/TauriConnector"; export type ConnectorProps = { onMinimizeCallback?: () => void; @@ -13,6 +19,15 @@ export const ConnnectorContext = React.createContext( {} ); +export function getInvokeConnector() { + if (isElectron()) { + return ElectronInvokeConnector; + } else if (window.__TAURI__) { + return TauriInvokeConnector; + } + return undefined; +} + export const ConnectorProvider: React.FC = ({ children }) => { let Connector: React.FC = () => <>{children}; if (isElectron()) { diff --git a/app/renderer/src/contexts/InvokeConnector.tsx b/app/renderer/src/contexts/InvokeConnector.tsx new file mode 100644 index 00000000..6974ac0d --- /dev/null +++ b/app/renderer/src/contexts/InvokeConnector.tsx @@ -0,0 +1,6 @@ +/** + * Explicitly for calling invokes from the trigger rather than a setting change. + */ +export type InvokeConnector = { + send: (event: string, ...payload: any) => void; +}; diff --git a/app/renderer/src/contexts/connectors/ElectronConnector.tsx b/app/renderer/src/contexts/connectors/ElectronConnector.tsx index ae4a191c..ffbd956c 100644 --- a/app/renderer/src/contexts/connectors/ElectronConnector.tsx +++ b/app/renderer/src/contexts/connectors/ElectronConnector.tsx @@ -17,6 +17,15 @@ import { } from "@pomatez/shareables"; import { encodeSvg } from "../../utils"; import { TraySVG } from "../../components"; +import { InvokeConnector } from "../InvokeConnector"; + +export const ElectronInvokeConnector: InvokeConnector = { + send: (event: string, ...payload: any) => { + const { electron } = window; + + electron.send(event, ...payload); + }, +}; export const ElectronConnectorProvider: React.FC = ({ children }) => { const { electron } = window; diff --git a/app/renderer/src/contexts/connectors/TauriConnector.tsx b/app/renderer/src/contexts/connectors/TauriConnector.tsx index 49a3ce4a..530d7ff3 100644 --- a/app/renderer/src/contexts/connectors/TauriConnector.tsx +++ b/app/renderer/src/contexts/connectors/TauriConnector.tsx @@ -1,9 +1,10 @@ import React, { useCallback, useContext, useEffect } from "react"; import { ConnnectorContext } from "../ConnnectorContext"; -import { useSelector } from "react-redux"; +import { useDispatch, useSelector } from "react-redux"; import { AppStateTypes, SettingTypes } from "../../store"; import { CounterContext } from "../CounterContext"; import { + CHECK_FOR_UPDATES, SET_ALWAYS_ON_TOP, SET_CLOSE, SET_COMPACT_MODE, @@ -13,13 +14,26 @@ import { SET_SHOW, SET_UI_THEME, TRAY_ICON_UPDATE, + UPDATE_AVAILABLE, } from "@pomatez/shareables"; import { encodeSvg } from "../../utils"; import { TraySVG } from "../../components"; import { enable, disable } from "@tauri-apps/plugin-autostart"; import { invoke } from "@tauri-apps/api/primitives"; +import { listen } from "@tauri-apps/api/event"; +import { setUpdateBody, setUpdateVersion } from "../../store/update"; + +export const TauriInvokeConnector = { + send: (event: string, ...payload: any) => { + invoke(event.toLowerCase(), ...payload).catch((err) => + console.error(err) + ); + }, +}; export const TauriConnectorProvider: React.FC = ({ children }) => { + const dispatch = useDispatch(); + const settings: SettingTypes = useSelector( (state: AppStateTypes) => state.settings ); @@ -41,7 +55,7 @@ export const TauriConnectorProvider: React.FC = ({ children }) => { }, []); /** - * Rust uses lowercase snake_case for function names so we need to convert to lower case for the calls. + * Rust uses lowercase snake_case for function names, so we need to convert to lower case for the calls. * @param event * @param payload */ @@ -144,6 +158,31 @@ export const TauriConnectorProvider: React.FC = ({ children }) => { } }, [send, timer.playing, timerType, dashOffset]); + // Workaround to make sure it only calls once on mount + const checkUpdate = useCallback(() => { + send(CHECK_FOR_UPDATES, { + ignoreVersion: settings.ignoreUpdate || "", + }); + }, [send, settings.ignoreUpdate]); + + useEffect(() => { + checkUpdate(); + }, [checkUpdate]); + + useEffect(() => { + const unlisten = listen<{ body: string; version: string }>( + UPDATE_AVAILABLE, + (updateInfo) => { + console.log("Update Info", updateInfo.payload); + dispatch(setUpdateVersion(updateInfo?.payload?.version)); + dispatch(setUpdateBody(updateInfo?.payload?.body)); + } + ); + return () => { + unlisten.then((f) => f()); + }; + }, [dispatch]); + return ( state.update + ); + const [alert, setAlert] = useState(alertState); - return ( + return update.updateBody ? ( + + ) : ( {alert === null && ( diff --git a/app/renderer/src/store/settings/actions.ts b/app/renderer/src/store/settings/actions.ts index 3e5fcb71..5d0097c3 100644 --- a/app/renderer/src/store/settings/actions.ts +++ b/app/renderer/src/store/settings/actions.ts @@ -1,6 +1,7 @@ import { SettingTypes, SettingActionTypes, + IGNORE_UPDATE, ALWAYS_ON_TOP, RESTORE_DEFAULT_SETTINGS, ENABLE_DARK_THEME, @@ -18,6 +19,15 @@ import { OPEN_AT_LOGIN, } from "./types"; +export const setIgnoreUpdate = ( + ignoreUpdate: SettingTypes["ignoreUpdate"] +): SettingActionTypes => { + return { + type: IGNORE_UPDATE, + payload: ignoreUpdate, + }; +}; + export const setAlwaysOnTop = ( alwaysOnTop: SettingTypes["alwaysOnTop"] ): SettingActionTypes => { diff --git a/app/renderer/src/store/settings/reducer.ts b/app/renderer/src/store/settings/reducer.ts index 1580ba33..8b7d99a3 100644 --- a/app/renderer/src/store/settings/reducer.ts +++ b/app/renderer/src/store/settings/reducer.ts @@ -17,11 +17,13 @@ import { ENABLE_VOICE_ASSISTANCE, ENABLE_COMPACT_MODE, OPEN_AT_LOGIN, + IGNORE_UPDATE, } from "./types"; const defaultSettings: SettingTypes = { alwaysOnTop: false, compactMode: false, + ignoreUpdate: "", enableFullscreenBreak: false, enableStrictMode: false, enableDarkTheme: isPreferredDark(), @@ -47,6 +49,11 @@ export const settingReducer = ( action: SettingActionTypes ) => { switch (action.type) { + case IGNORE_UPDATE: + return { + ...state, + ignoreUpdate: action.payload, + }; case ALWAYS_ON_TOP: return { ...state, diff --git a/app/renderer/src/store/settings/types.ts b/app/renderer/src/store/settings/types.ts index 37b137e8..225c88ba 100644 --- a/app/renderer/src/store/settings/types.ts +++ b/app/renderer/src/store/settings/types.ts @@ -1,6 +1,7 @@ const settings = "[settings]"; export type SettingTypes = { + ignoreUpdate: string; alwaysOnTop: boolean; compactMode: boolean; enableFullscreenBreak: boolean; @@ -17,6 +18,10 @@ export type SettingTypes = { openAtLogin: boolean; }; +/** + * the reason this is stored inside the settings and not the update is because we want to actually store this and remember it + */ +export const IGNORE_UPDATE = `${settings} IGNORE_UPDATE`; export const ALWAYS_ON_TOP = `${settings} ALWAYS_ON_TOP`; export const ENABLE_DARK_THEME = `${settings} ENABLE_DARK_THEME`; diff --git a/app/renderer/src/store/store.ts b/app/renderer/src/store/store.ts index ad8c1f28..422ec887 100644 --- a/app/renderer/src/store/store.ts +++ b/app/renderer/src/store/store.ts @@ -7,12 +7,14 @@ import { configReducer } from "./config"; import { settingReducer } from "./settings"; import { timerReducer } from "./timer"; import { undoableTasksReducer } from "./tasks"; +import { updateReducer } from "./update"; const rootReducer = combineReducers({ config: configReducer, settings: settingReducer, timer: timerReducer, tasks: undoableTasksReducer, + update: updateReducer, }); export type AppStateTypes = ReturnType; diff --git a/app/renderer/src/store/update/actions.ts b/app/renderer/src/store/update/actions.ts new file mode 100644 index 00000000..0eaeb36c --- /dev/null +++ b/app/renderer/src/store/update/actions.ts @@ -0,0 +1,24 @@ +import { + UpdateTypes, + UpdateActionTypes, + UPDATE_BODY, + UPDATE_VERSION, +} from "./types"; + +export const setUpdateBody = ( + updateBody: UpdateTypes["updateBody"] +): UpdateActionTypes => { + return { + type: UPDATE_BODY, + payload: updateBody, + }; +}; + +export const setUpdateVersion = ( + updateVersion: UpdateTypes["updateVersion"] +): UpdateActionTypes => { + return { + type: UPDATE_VERSION, + payload: updateVersion, + }; +}; diff --git a/app/renderer/src/store/update/index.ts b/app/renderer/src/store/update/index.ts new file mode 100644 index 00000000..6d30c416 --- /dev/null +++ b/app/renderer/src/store/update/index.ts @@ -0,0 +1,3 @@ +export * from "./actions"; +export * from "./reducer"; +export * from "./types"; diff --git a/app/renderer/src/store/update/reducer.ts b/app/renderer/src/store/update/reducer.ts new file mode 100644 index 00000000..b762586e --- /dev/null +++ b/app/renderer/src/store/update/reducer.ts @@ -0,0 +1,38 @@ +import { getFromStorage, isPreferredDark, detectOS } from "utils"; +import { + UpdateTypes, + UpdateActionTypes, + UPDATE_BODY, + UPDATE_VERSION, +} from "./types"; + +const defaultSettings: UpdateTypes = { + updateBody: undefined, + updateVersion: "", +}; + +const settings = + (getFromStorage("state") && getFromStorage("state").settings) || + defaultSettings; + +const initialState: UpdateTypes = settings; + +export const updateReducer = ( + state = initialState, + action: UpdateActionTypes +) => { + switch (action.type) { + case UPDATE_BODY: + return { + ...state, + updateBody: action.payload, + }; + case UPDATE_VERSION: + return { + ...state, + updateVersion: action.payload, + }; + default: + return state; + } +}; diff --git a/app/renderer/src/store/update/types.ts b/app/renderer/src/store/update/types.ts new file mode 100644 index 00000000..214c0232 --- /dev/null +++ b/app/renderer/src/store/update/types.ts @@ -0,0 +1,13 @@ +const update = "[update]"; + +export type UpdateTypes = { + updateVersion: string; + updateBody: string | undefined; +}; +export const UPDATE_BODY = `${update} UPDATE_BODY`; +export const UPDATE_VERSION = `${update} UPDATE_VERSION`; + +export type UpdateActionTypes = { + type: string; + payload: any; +}; diff --git a/app/renderer/src/styles/components/navigation.ts b/app/renderer/src/styles/components/navigation.ts index aa734b29..242b11dd 100644 --- a/app/renderer/src/styles/components/navigation.ts +++ b/app/renderer/src/styles/components/navigation.ts @@ -40,17 +40,33 @@ export const StyledNavList = styled.ul` export const StyledNavListItem = styled.li` width: 100%; height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; `; type NavLinkProps = { type?: string }; +export const StyledNavIconWrapper = styled.div` + position: relative; + box-sizing: content-box; + width: fit-content; + left: 50%; + transform: translateX(-50%); + height: 14px; + margin-bottom: 0.4rem; +`; + export const StyledNavLink = styled(NavLink)` width: 100%; height: 100%; - display: grid; + display: flex; + flex-direction: column; + justify-content: center; justify-items: center; - row-gap: 0.4rem; + text-align: center; position: relative; cursor: pointer; diff --git a/app/renderer/src/styles/routes/tasks/details.ts b/app/renderer/src/styles/routes/tasks/details.ts index 8886e7d8..e324deaf 100644 --- a/app/renderer/src/styles/routes/tasks/details.ts +++ b/app/renderer/src/styles/routes/tasks/details.ts @@ -162,6 +162,8 @@ export const StyledDescriptionPreviewer = styled.div<{ p { color: ${(p) => !p.hasValue && "var(--color-disabled-text)"}; + // fixes an issue where the bullet points show not on the same line + display: inline-block; } h1 { diff --git a/app/shareables/src/index.ts b/app/shareables/src/index.ts index fba0c3c2..d5db765b 100644 --- a/app/shareables/src/index.ts +++ b/app/shareables/src/index.ts @@ -1,3 +1,4 @@ +export const CHECK_FOR_UPDATES = "CHECK_FOR_UPDATES"; export const SET_ALWAYS_ON_TOP = "SET_ALWAYS_ON_TOP"; export const SET_FULLSCREEN_BREAK = "SET_FULLSCREEN_BREAK"; export const SET_COMPACT_MODE = "SET_COMPACT_MODE"; @@ -8,6 +9,8 @@ export const SET_UI_THEME = "SET_UI_THEME"; export const SET_MINIMIZE = "SET_MINIMIZE"; export const SET_CLOSE = "SET_CLOSE"; export const SET_SHOW = "SET_SHOW"; +export const UPDATE_AVAILABLE = "UPDATE_AVAILABLE"; +export const INSTALL_UPDATE = "INSTALL_UPDATE"; export const TO_MAIN: string[] = [ SET_ALWAYS_ON_TOP, @@ -20,9 +23,10 @@ export const TO_MAIN: string[] = [ SET_MINIMIZE, SET_CLOSE, SET_SHOW, + INSTALL_UPDATE, ]; -export const FROM_MAIN: string[] = []; +export const FROM_MAIN: string[] = [UPDATE_AVAILABLE]; export const RELEASE_NOTES_LINK = "https://github.com/zidoro/pomatez/releases/latest"; diff --git a/app/tauri/.gitignore b/app/tauri/.gitignore index f4dfb82b..aba21e24 100644 --- a/app/tauri/.gitignore +++ b/app/tauri/.gitignore @@ -1,4 +1,3 @@ # Generated by Cargo # will have compiled files and executables /target/ - diff --git a/app/tauri/Cargo.lock b/app/tauri/Cargo.lock index bd58969f..233bf1b3 100644 --- a/app/tauri/Cargo.lock +++ b/app/tauri/Cargo.lock @@ -1914,6 +1914,19 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" +[[package]] +name = "mac-notification-sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51fca4d74ff9dbaac16a01b924bc3693fa2bba0862c2c633abc73f9a8ea21f64" +dependencies = [ + "cc", + "dirs-next", + "objc-foundation", + "objc_id", + "time", +] + [[package]] name = "malloc_buf" version = "0.0.6" @@ -2106,6 +2119,19 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" +[[package]] +name = "notify-rust" +version = "4.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7b75c8958cb2eab3451538b32db8a7b74006abc33eb2e6a9a56d21e4775c2b" +dependencies = [ + "log", + "mac-notification-sys", + "serde", + "tauri-winrt-notification", + "zbus", +] + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -2187,6 +2213,17 @@ dependencies = [ "objc_exception", ] +[[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_exception" version = "0.1.2" @@ -2560,7 +2597,7 @@ dependencies = [ [[package]] name = "pomatez" -version = "1.3.0" +version = "1.4.3" dependencies = [ "base64 0.21.4", "lazy_static", @@ -2571,6 +2608,7 @@ dependencies = [ "tauri-build", "tauri-plugin-autostart", "tauri-plugin-global-shortcut", + "tauri-plugin-notification", "tauri-plugin-updater", "tauri-plugin-window", "url", @@ -2638,6 +2676,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "quick-xml" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +dependencies = [ + "memchr", +] + [[package]] name = "quote" version = "1.0.33" @@ -3576,6 +3623,25 @@ dependencies = [ "thiserror", ] +[[package]] +name = "tauri-plugin-notification" +version = "2.0.0-alpha.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b7d3138700a1073dce4fbc2eab0399315acd1c0c9fefd5007991344c210517" +dependencies = [ + "log", + "notify-rust", + "rand 0.8.5", + "serde", + "serde_json", + "serde_repr", + "tauri", + "tauri-build", + "thiserror", + "time", + "url", +] + [[package]] name = "tauri-plugin-updater" version = "2.0.0-alpha.3" @@ -3692,6 +3758,16 @@ dependencies = [ "toml 0.7.8", ] +[[package]] +name = "tauri-winrt-notification" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "006851c9ccefa3c38a7646b8cec804bb429def3da10497bfa977179869c3e8e2" +dependencies = [ + "quick-xml", + "windows 0.51.1", +] + [[package]] name = "tempfile" version = "3.3.0" diff --git a/app/tauri/Cargo.toml b/app/tauri/Cargo.toml index a02cd88e..45771b0e 100644 --- a/app/tauri/Cargo.toml +++ b/app/tauri/Cargo.toml @@ -3,7 +3,7 @@ name = "pomatez" # In the current version of release please, unless the toml file is in the root of the project it cannot be updated. # https://github.com/googleapis/release-please/issues/1724 # util/cargo-version-updater.js will run to keep this value up to date before rust builds. -version = "1.3.0" +version = "1.4.3" description = "Attractive pomodoro timer for Windows, Mac, and Linux." authors = ["Roldan Montilla Jr"] license = "MIT" @@ -26,6 +26,7 @@ tauri-plugin-window = "2.0.0-alpha.2" tauri-plugin-autostart = "2.0.0-alpha.3" lazy_static = "1.4.0" base64 = { version = "0.21.4", features = [] } +tauri-plugin-notification = "2.0.0-alpha.5" # This one is for toying with global hotkeys from the browser mostly # We can use https://github.com/tauri-apps/global-hotkey directly tbh diff --git a/app/tauri/README.MD b/app/tauri/README.MD index 550332b3..be70156f 100644 --- a/app/tauri/README.MD +++ b/app/tauri/README.MD @@ -5,4 +5,4 @@ The plan is to try to make it as modular and modifiable as possible. If you have any suggestions for best practices feel free to make some comments ore start a discussion. Though keep in mind some parts may be coded in specific ways just to experiment with features of rust. -The aim is to do it in a way that it can be replaced with simpler/better solutions. \ No newline at end of file +The aim is to do it in a way that it can be replaced with simpler/better solutions. diff --git a/app/tauri/release-prep/release-prep.js b/app/tauri/release-prep/release-prep.js index 2145b540..1f2d17a5 100644 --- a/app/tauri/release-prep/release-prep.js +++ b/app/tauri/release-prep/release-prep.js @@ -3,7 +3,7 @@ const release_please_manifest = require("../../../.release-please-manifest.json" const path = require("path"); const version = `v${release_please_manifest["."]}`; -const github_url = `https://github.com/sekwah41/pomatez/releases/download/${version}/`; +const github_url = `https://github.com/zidoro/pomatez/releases/download/${version}/`; const artifactsPath = path.join( __dirname, "..", diff --git a/app/tauri/release.conf.json b/app/tauri/release.conf.json index 4453c119..3b486f21 100644 --- a/app/tauri/release.conf.json +++ b/app/tauri/release.conf.json @@ -1,9 +1,9 @@ { "plugins": { "updater": { - "dialog": true, + "dialog": false, "endpoints": [ - "https://api.github.com/repos/sekwah41/pomatez/this/is/not/a/valid/url/and/will/be/set/in/main/rs" + "https://api.github.com/repos/zidoro/pomatez/this/is/not/a/valid/url/and/will/be/set/in/rust" ] } }, diff --git a/app/tauri/src/commands.rs b/app/tauri/src/commands.rs index 6f722210..4344448e 100644 --- a/app/tauri/src/commands.rs +++ b/app/tauri/src/commands.rs @@ -9,6 +9,7 @@ use tauri::{Builder, PhysicalSize, Runtime, Wry}; struct WindowSize; use crate::system_tray; +use crate::updater; impl WindowSize { @@ -184,6 +185,8 @@ impl PomatezCommands for Builder { fn register_pomatez_commands(self) -> tauri::Builder { self.invoke_handler(tauri::generate_handler![set_show, set_always_on_top, set_fullscreen_break, set_compact_mode, set_ui_theme, set_native_titlebar, - system_tray::tray_icon_update, set_close, set_minimize]) + system_tray::tray_icon_update, set_close, set_minimize, updater::check_for_updates, + updater::install_update + ]) } } diff --git a/app/tauri/src/global_shortcuts.rs b/app/tauri/src/global_shortcuts.rs index 5c89a24b..e4c0ac69 100644 --- a/app/tauri/src/global_shortcuts.rs +++ b/app/tauri/src/global_shortcuts.rs @@ -21,16 +21,36 @@ impl PomatezGlobalShortcutsSetup for App { println!("Shortcut pressed: {:?}", shortcut); match shortcut.id() { key if SHOW_SHORTCUT.id() == key => { - window.show().expect("Failed to show window"); - window.set_focus().expect("Failed to focus window"); + match window.show() { + Ok(_) => {} + Err(e) => { + println!("Failed to show window: {:?}", e); + } + } + match window.set_focus() { + Ok(_) => {} + Err(e) => { + println!("Failed to focus window: {:?}", e); + } + } } key if HIDE_SHORTCUT.id() == key => { - window.hide().expect("Failed to hide window"); + match window.hide() { + Ok(_) => {} + Err(e) => { + println!("Failed to hide window: {:?}", e); + } + } } _ => println!("Shortcut pressed: {:?}", shortcut), } if shortcut.matches(Modifiers::ALT | Modifiers::SHIFT, Code::KeyH) { - window.hide().expect("Failed to hide window"); + match window.hide() { + Ok(_) => {} + Err(e) => { + println!("Failed to hide window: {:?}", e); + } + } } else { println!("Shortcut pressed: {:?}", shortcut); } @@ -38,7 +58,12 @@ impl PomatezGlobalShortcutsSetup for App { }; let app_handle = self.handle(); - app_handle.plugin(global_shortcut_plugin).expect("failed to register global shortcut plugin"); + match app_handle.plugin(global_shortcut_plugin) { + Ok(_) => {} + Err(e) => { + println!("Failed to register global shortcut plugin: {:?}", e); + } + } println!("Registered global shortcut plugin"); } @@ -51,9 +76,19 @@ pub trait PomatezGlobalShortcutsRegister { impl PomatezGlobalShortcutsRegister for AppHandle { fn register_global_shortcuts(&self) { let global_shortcut = self.global_shortcut(); - global_shortcut.register(SHOW_SHORTCUT.clone()).expect("failed to register global shortcut"); - global_shortcut.register(HIDE_SHORTCUT.clone()).expect("failed to register global shortcut"); + match global_shortcut.register(SHOW_SHORTCUT.clone()) { + Ok(_) => {} + Err(e) => { + println!("Failed to register global shortcut: {:?}", e); + } + }; + match global_shortcut.register(HIDE_SHORTCUT.clone()) { + Ok(_) => {} + Err(e) => { + println!("Failed to register global shortcut: {:?}", e); + } + }; println!("Registered global shortcuts"); } -} \ No newline at end of file +} diff --git a/app/tauri/src/main.rs b/app/tauri/src/main.rs index eca83c34..23648d59 100644 --- a/app/tauri/src/main.rs +++ b/app/tauri/src/main.rs @@ -18,12 +18,12 @@ mod updater; use commands::PomatezCommands; use system_tray::PomatezTray; use global_shortcuts::{PomatezGlobalShortcutsSetup, PomatezGlobalShortcutsRegister}; -use crate::updater::PomatezUpdater; fn main() { let app = tauri::Builder::default() .plugin(tauri_plugin_autostart::init(MacosLauncher::LaunchAgent, None)) .plugin(tauri_plugin_window::init()) + .plugin(tauri_plugin_notification::init()) .plugin(tauri_plugin_updater::Builder::new().build()) .register_pomatez_commands() .setup(|app| { @@ -31,7 +31,6 @@ fn main() { { app.setup_global_shortcuts(); app.set_pomatez_system_tray(); - app.check_for_update(); } Ok(()) diff --git a/app/tauri/src/updater.rs b/app/tauri/src/updater.rs index c1c3e39d..cfc55c16 100644 --- a/app/tauri/src/updater.rs +++ b/app/tauri/src/updater.rs @@ -1,11 +1,10 @@ -use serde::Deserialize; -use tauri::{App}; -use tauri_plugin_updater::UpdaterExt; +use std::sync::Mutex; +use serde::{Serialize, Deserialize}; +use tauri::{Manager, Runtime}; +use tauri_plugin_updater::{Update, UpdaterExt}; use url::Url; -pub trait PomatezUpdater { - fn check_for_update(&self); -} +static UPDATE_INFO: Mutex> = Mutex::new(None); #[derive(Deserialize, Debug)] struct LatestRelease { @@ -19,66 +18,142 @@ struct Asset { browser_download_url: String, } -impl PomatezUpdater for App { - fn check_for_update(&self) { - let handle = self.handle().clone(); - tauri::async_runtime::spawn(async move { - // Todo maybe check that its a supported platform first e.g. windows, macos, linux (AppImage) - - // If its not a supported platform maybe open the release page. - - println!("Checking for updates"); - // Custom configure the updater. - // If we use this endpoint even if the url changes e.g. org name change or project name change the updates should still follow. - let github_releases_endpoint = "https://api.github.com/repos/sekwah41/pomatez/releases/latest"; - let github_releases_endpoint = match Url::parse(github_releases_endpoint) { - Ok(url) => url, - Err(e) => { - println!("Failed to parse url: {:?}. Failed to check for updates", e); - return; +#[derive(Serialize, Debug, Clone)] +struct UpdateAvailable { + version: String, + body: Option +} + +#[tauri::command] +pub fn check_for_updates(ignore_version: String, window: tauri::Window) { + + let handle = window.app_handle().clone(); + + println!("Current version: {}", handle.package_info().version); + + tauri::async_runtime::spawn(async move { + println!("Searching for update file on github."); + // Custom configure the updater. + // If we use this endpoint even if the url changes e.g. org name change or project name change the updates should still follow. + let github_releases_endpoint = "https://api.github.com/repos/zidoro/pomatez/releases/latest"; + let github_releases_endpoint = match Url::parse(github_releases_endpoint) { + Ok(url) => url, + Err(e) => { + println!("Failed to parse url: {:?}. Failed to check for updates", e); + return; + } + }; + let client = reqwest::Client::new(); + let req = client.get(github_releases_endpoint.clone()) + .header("Content-Type", "application/json") + // If this is not set you will get a 403 forbidden error. + .header("User-Agent", "pomatez"); + let response = match req.send().await { + Ok(response) => response, + Err(e) => { + println!("Failed to send request: {:?}. Failed to check for updates", e); + return; + } + }; + + if response.status() != reqwest::StatusCode::OK { + println!("Non OK status code: {:?}. Failed to check for updates", response.status()); + return; + } + let latest_release = match response.json::().await { + Ok(latest_release) => latest_release, + Err(e) => { + println!("Failed to parse response: {:?}. Failed to check for updates", e); + return; + } + }; + + // Find an asset named "tauri-release.json". + let tauri_release_asset = latest_release.assets.iter().find(|asset| asset.name == "tauri-updater.json"); + + // If we found the asset, set it as the updater endpoint. + let tauri_release_asset = match tauri_release_asset { + Some(tauri_release_asset) => tauri_release_asset, + None => { + println!("Failed to find tauri-release.json asset. Failed to check for updates\n\nFound Assets are:"); + // Print a list of the assets found + for asset in latest_release.assets { + println!(" {:?}", asset.name); } - }; - let client = reqwest::Client::new(); - let req = client.get(github_releases_endpoint.clone()) - .header("Content-Type", "application/json") - // If this is not set you will get a 403 forbidden error. - .header("User-Agent", "pomatez"); - let response = req.send().await.expect("Failed to send request"); - if response.status() != reqwest::StatusCode::OK { - println!("Non OK status code: {:?}. Failed to check for updates", response.status()); return; } - let latest_release = response.json::().await.expect("Failed to parse latest release response"); - - // Find an asset named "tauri-release.json". - let tauri_release_asset = latest_release.assets.iter().find(|asset| asset.name == "tauri-release.json"); - - // If we found the asset, set it as the updater endpoint. - let tauri_release_asset = match tauri_release_asset { - Some(tauri_release_asset) => tauri_release_asset, - None => { - println!("Failed to find tauri-release.json asset. Failed to check for updates\n\nFound Assets are:"); - // Print a list of the assets found - for asset in latest_release.assets { - println!(" {:?}", asset.name); - } + }; + + let tauri_release_endpoint = match Url::parse(&tauri_release_asset.browser_download_url) { + Ok(url) => url, + Err(e) => { + println!("Failed to parse url: {:?}. Failed to check for updates", e); + return; + } + }; + let updater_builder = match handle.updater_builder() + .endpoints(vec!(tauri_release_endpoint)) + .header("User-Agent", "pomatez") { + Ok(updater_builder) => updater_builder, + Err(e) => { + println!("Failed to build updater builder: {:?}. Failed to check for updates", e); + return; + } + }; + + let updater = match updater_builder.build() { + Ok(updater) => updater, + Err(e) => { + println!("Failed to build updater: {:?}. Failed to check for updates", e); + return; + } + }; + + println!("Checking for updates"); + + let response = updater.check().await; + + println!("Update check response: {:?}", response); + + match response { + Ok(Some(update)) => { + if ignore_version == update.version { + println!("Ignoring update as user has asked to ignore this version."); return; } - }; + UPDATE_INFO.lock().unwrap().replace(update.clone()); - let tauri_release_endpoint = match Url::parse(&tauri_release_asset.browser_download_url) { - Ok(url) => url, - Err(e) => { - println!("Failed to parse url: {:?}. Failed to check for updates", e); - return; + match window.emit("UPDATE_AVAILABLE", Some(UpdateAvailable { + version: update.version, + body: update.body + })) { + Ok(_) => {}, + Err(e) => { + println!("Failed to emit update available event: {:?}", e); + } } - }; - let updater_builder = handle.updater_builder().endpoints(vec!(tauri_release_endpoint)); - let updater = updater_builder.build() - .expect("could not build updater"); - println!("Checking for updates"); - let response = updater.check().await; - println!("Update check response: {:?}", response); - }); + } + _ => {} + } + }); +} + +#[tauri::command] +pub async fn install_update(_window: tauri::Window) { + println!("Downloading and installing update!"); + + let update = match UPDATE_INFO.lock().unwrap().clone() { + Some(update) => update, + None => { + println!("No update found to install"); + return; + } + }; + + let install_response = update.download_and_install(|_,_| {}, || {}).await; + if let Err(e) = install_response { + println!("Failed to install update: {:?}", e); + } else { + println!("Update installed"); } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 8782c9a4..82c711b8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "root", "private": true, - "version": "1.3.1", + "version": "1.5.0", "workspaces": [ "app/*" ], @@ -28,7 +28,7 @@ "gen:tts": "lerna run gen:tts --stream", "format": "prettier --write .", "tauri": "tauri", - "tauri:dev": "tauri dev", + "tauri:dev": "tauri dev --config ./app/tauri/release.conf.json", "tauri:updateversion": "node ./app/tauri/util/cargo-version-updater.js" }, "config": { From 12d0ad965eb04554d93d881d2b7a2382c0677c76 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Sun, 12 Nov 2023 14:33:10 +0000 Subject: [PATCH 37/37] chore: add identifiers for the platforms to the builds --- app/tauri/release-prep/release-prep.js | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/app/tauri/release-prep/release-prep.js b/app/tauri/release-prep/release-prep.js index 1f2d17a5..9b2f24dc 100644 --- a/app/tauri/release-prep/release-prep.js +++ b/app/tauri/release-prep/release-prep.js @@ -115,7 +115,7 @@ function addPlatformUpdater( * @param {string} searchPath - The starting directory to begin the search. * @param {string} fileExtension - The file extension to search for. */ -function addReleaseFiles(searchPath, ...fileExtension) { +function addReleaseFiles(searchPath, platform, ...fileExtension) { fs.readdirSync(searchPath, { withFileTypes: true }).forEach( (entry) => { const entryPath = path.join(searchPath, entry.name); @@ -133,7 +133,7 @@ function addReleaseFiles(searchPath, ...fileExtension) { // TODO remove once we are set on replacing electron for some of the base files and/or are sure most of the bugs are gone const releaseFilePath = path.join( releasePath, - `${baseName}-tauri-beta${ext}` + `${baseName}-${platform}-tauri-beta${ext}` ); fs.copyFileSync(entryPath, releaseFilePath); console.log(`Release file copied to ${releaseFilePath}`); @@ -171,14 +171,11 @@ addPlatformUpdater( /\.zip$/ ); -addReleaseFiles( - artifactsPath, - ".AppImage", - ".exe", - ".dmg", - ".msi", - ".deb" -); +addReleaseFiles(artifactsPath, "mac", ".dmg"); + +addReleaseFiles(artifactsPath, "win", ".exe", ".msi"); + +addReleaseFiles(artifactsPath, "linux", ".AppImage", ".deb"); fs.writeFile( path.join(releasePath, "tauri-updater.json"),