diff --git a/package-lock.json b/package-lock.json index 1e9f401..9b86afd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,10 @@ "@radix-ui/react-slot": "^1.1.1", "@radix-ui/react-toast": "^1.2.5", "@radix-ui/react-tooltip": "^1.1.7", - "@tauri-apps/api": "^1", + "@tauri-apps/api": "^2.0.0", + "@tauri-apps/plugin-fs": "^2.2.0", + "@tauri-apps/plugin-os": "^2.2.0", + "@tauri-apps/plugin-shell": "^2.2.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "dotenv": "^16.4.5", @@ -28,7 +31,7 @@ "zod": "^3.24.1" }, "devDependencies": { - "@tauri-apps/cli": "^1", + "@tauri-apps/cli": "^2.2.7", "@types/node": "^22.2.0", "@types/react": "^18.2.15", "@types/react-dom": "^18.2.7", @@ -1655,29 +1658,21 @@ ] }, "node_modules/@tauri-apps/api": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-1.6.0.tgz", - "integrity": "sha512-rqI++FWClU5I2UBp4HXFvl+sBWkdigBkxnpJDQUWttNyG7IZP4FwQGhTNL5EOw0vI8i6eSAJ5frLqO7n7jbJdg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.0.0.tgz", + "integrity": "sha512-moKgCp2EX7X5GiOx/G/bmoEpkFQVVmyS98UaJU4xUVzan+E1BdwlAKcbip+cGldshYOqL4JSwAEN1OkRXeug0Q==", "license": "Apache-2.0 OR MIT", - "engines": { - "node": ">= 14.6.0", - "npm": ">= 6.6.0", - "yarn": ">= 1.19.1" - }, "funding": { "type": "opencollective", "url": "https://opencollective.com/tauri" } }, "node_modules/@tauri-apps/cli": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-1.6.3.tgz", - "integrity": "sha512-q46umd6QLRKDd4Gg6WyZBGa2fWvk0pbeUA5vFomm4uOs1/17LIciHv2iQ4UD+2Yv5H7AO8YiE1t50V0POiEGEw==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.2.7.tgz", + "integrity": "sha512-ZnsS2B4BplwXP37celanNANiIy8TCYhvg5RT09n72uR/o+navFZtGpFSqljV8fy1Y4ixIPds8FrGSXJCN2BerA==", "dev": true, "license": "Apache-2.0 OR MIT", - "dependencies": { - "semver": ">=7.5.2" - }, "bin": { "tauri": "tauri.js" }, @@ -1689,27 +1684,27 @@ "url": "https://opencollective.com/tauri" }, "optionalDependencies": { - "@tauri-apps/cli-darwin-arm64": "1.6.3", - "@tauri-apps/cli-darwin-x64": "1.6.3", - "@tauri-apps/cli-linux-arm-gnueabihf": "1.6.3", - "@tauri-apps/cli-linux-arm64-gnu": "1.6.3", - "@tauri-apps/cli-linux-arm64-musl": "1.6.3", - "@tauri-apps/cli-linux-x64-gnu": "1.6.3", - "@tauri-apps/cli-linux-x64-musl": "1.6.3", - "@tauri-apps/cli-win32-arm64-msvc": "1.6.3", - "@tauri-apps/cli-win32-ia32-msvc": "1.6.3", - "@tauri-apps/cli-win32-x64-msvc": "1.6.3" + "@tauri-apps/cli-darwin-arm64": "2.2.7", + "@tauri-apps/cli-darwin-x64": "2.2.7", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.2.7", + "@tauri-apps/cli-linux-arm64-gnu": "2.2.7", + "@tauri-apps/cli-linux-arm64-musl": "2.2.7", + "@tauri-apps/cli-linux-x64-gnu": "2.2.7", + "@tauri-apps/cli-linux-x64-musl": "2.2.7", + "@tauri-apps/cli-win32-arm64-msvc": "2.2.7", + "@tauri-apps/cli-win32-ia32-msvc": "2.2.7", + "@tauri-apps/cli-win32-x64-msvc": "2.2.7" } }, "node_modules/@tauri-apps/cli-darwin-arm64": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-1.6.3.tgz", - "integrity": "sha512-fQN6IYSL8bG4NvkdKE4sAGF4dF/QqqQq4hOAU+t8ksOzHJr0hUlJYfncFeJYutr/MMkdF7hYKadSb0j5EE9r0A==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.2.7.tgz", + "integrity": "sha512-54kcpxZ3X1Rq+pPTzk3iIcjEVY4yv493uRx/80rLoAA95vAC0c//31Whz75UVddDjJfZvXlXZ3uSZ+bnCOnt0A==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0 OR MIT", "optional": true, "os": [ "darwin" @@ -1719,14 +1714,14 @@ } }, "node_modules/@tauri-apps/cli-darwin-x64": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-1.6.3.tgz", - "integrity": "sha512-1yTXZzLajKAYINJOJhZfmMhCzweHSgKQ3bEgJSn6t+1vFkOgY8Yx4oFgWcybrrWI5J1ZLZAl47+LPOY81dLcyA==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.2.7.tgz", + "integrity": "sha512-Vgu2XtBWemLnarB+6LqQeLanDlRj7CeFN//H8bVVdjbNzxcSxsvbLYMBP8+3boa7eBnjDrqMImRySSgL6IrwTw==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0 OR MIT", "optional": true, "os": [ "darwin" @@ -1736,14 +1731,14 @@ } }, "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-1.6.3.tgz", - "integrity": "sha512-CjTEr9r9xgjcvos09AQw8QMRPuH152B1jvlZt4PfAsyJNPFigzuwed5/SF7XAd8bFikA7zArP4UT12RdBxrx7w==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.2.7.tgz", + "integrity": "sha512-+Clha2iQAiK9zoY/KKW0KLHkR0k36O78YLx5Sl98tWkwI3OBZFg5H5WT1plH/4sbZIS2aLFN6dw58/JlY9Bu/g==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0 OR MIT", "optional": true, "os": [ "linux" @@ -1753,14 +1748,14 @@ } }, "node_modules/@tauri-apps/cli-linux-arm64-gnu": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-1.6.3.tgz", - "integrity": "sha512-G9EUUS4M8M/Jz1UKZqvJmQQCKOzgTb8/0jZKvfBuGfh5AjFBu8LHvlFpwkKVm1l4951Xg4ulUp6P9Q7WRJ9XSA==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.2.7.tgz", + "integrity": "sha512-Z/Lp4SQe6BUEOays9BQAEum2pvZF4w9igyXijP+WbkOejZx4cDvarFJ5qXrqSLmBh7vxrdZcLwoLk9U//+yQrg==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0 OR MIT", "optional": true, "os": [ "linux" @@ -1770,14 +1765,14 @@ } }, "node_modules/@tauri-apps/cli-linux-arm64-musl": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.6.3.tgz", - "integrity": "sha512-MuBTHJyNpZRbPVG8IZBN8+Zs7aKqwD22tkWVBcL1yOGL4zNNTJlkfL+zs5qxRnHlUsn6YAlbW/5HKocfpxVwBw==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.2.7.tgz", + "integrity": "sha512-+8HZ+txff/Y3YjAh80XcLXcX8kpGXVdr1P8AfjLHxHdS6QD4Md+acSxGTTNbplmHuBaSHJvuTvZf9tU1eDCTDg==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0 OR MIT", "optional": true, "os": [ "linux" @@ -1787,14 +1782,14 @@ } }, "node_modules/@tauri-apps/cli-linux-x64-gnu": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-1.6.3.tgz", - "integrity": "sha512-Uvi7M+NK3tAjCZEY1WGel+dFlzJmqcvu3KND+nqa22762NFmOuBIZ4KJR/IQHfpEYqKFNUhJfCGnpUDfiC3Oxg==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.2.7.tgz", + "integrity": "sha512-ahlSnuCnUntblp9dG7/w5ZWZOdzRFi3zl0oScgt7GF4KNAOEa7duADsxPA4/FT2hLRa0SvpqtD4IYFvCxoVv3Q==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0 OR MIT", "optional": true, "os": [ "linux" @@ -1804,14 +1799,14 @@ } }, "node_modules/@tauri-apps/cli-linux-x64-musl": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-1.6.3.tgz", - "integrity": "sha512-rc6B342C0ra8VezB/OJom9j/N+9oW4VRA4qMxS2f4bHY2B/z3J9NPOe6GOILeg4v/CV62ojkLsC3/K/CeF3fqQ==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.2.7.tgz", + "integrity": "sha512-+qKAWnJRSX+pjjRbKAQgTdFY8ecdcu8UdJ69i7wn3ZcRn2nMMzOO2LOMOTQV42B7/Q64D1pIpmZj9yblTMvadA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0 OR MIT", "optional": true, "os": [ "linux" @@ -1821,14 +1816,14 @@ } }, "node_modules/@tauri-apps/cli-win32-arm64-msvc": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-1.6.3.tgz", - "integrity": "sha512-cSH2qOBYuYC4UVIFtrc1YsGfc5tfYrotoHrpTvRjUGu0VywvmyNk82+ZsHEnWZ2UHmu3l3lXIGRqSWveLln0xg==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.2.7.tgz", + "integrity": "sha512-aa86nRnrwT04u9D9fhf5JVssuAZlUCCc8AjqQjqODQjMd4BMA2+d4K9qBMpEG/1kVh95vZaNsLogjEaqSTTw4A==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0 OR MIT", "optional": true, "os": [ "win32" @@ -1838,14 +1833,14 @@ } }, "node_modules/@tauri-apps/cli-win32-ia32-msvc": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-1.6.3.tgz", - "integrity": "sha512-T8V6SJQqE4PSWmYBl0ChQVmS6AR2hXFHURH2DwAhgSGSQ6uBXgwlYFcfIeQpBQA727K2Eq8X2hGfvmoySyHMRw==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.2.7.tgz", + "integrity": "sha512-EiJ5/25tLSQOSGvv+t6o3ZBfOTKB5S3vb+hHQuKbfmKdRF0XQu2YPdIi1CQw1DU97ZAE0Dq4frvnyYEKWgMzVQ==", "cpu": [ "ia32" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0 OR MIT", "optional": true, "os": [ "win32" @@ -1855,14 +1850,14 @@ } }, "node_modules/@tauri-apps/cli-win32-x64-msvc": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.6.3.tgz", - "integrity": "sha512-HUkWZ+lYHI/Gjkh2QjHD/OBDpqLVmvjZGpLK9losur1Eg974Jip6k+vsoTUxQBCBDfj30eDBct9E1FvXOspWeg==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.2.7.tgz", + "integrity": "sha512-ZB8Kw90j8Ld+9tCWyD2fWCYfIrzbQohJ4DJSidNwbnehlZzP7wAz6Z3xjsvUdKtQ3ibtfoeTqVInzCCEpI+pWg==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0 OR MIT", "optional": true, "os": [ "win32" @@ -1871,6 +1866,33 @@ "node": ">= 10" } }, + "node_modules/@tauri-apps/plugin-fs": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-fs/-/plugin-fs-2.2.0.tgz", + "integrity": "sha512-+08mApuONKI8/sCNEZ6AR8vf5vI9DXD4YfrQ9NQmhRxYKMLVhRW164vdW5BSLmMpuevftpQ2FVoL9EFkfG9Z+g==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0" + } + }, + "node_modules/@tauri-apps/plugin-os": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-os/-/plugin-os-2.2.0.tgz", + "integrity": "sha512-HszbCdbisMlu5QhCNAN8YIWyz2v33abAWha6+uvV2CKX8P5VSct/y+kEe22JeyqrxCnWlQ3DRx7s49Byg7/0EA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0" + } + }, + "node_modules/@tauri-apps/plugin-shell": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-shell/-/plugin-shell-2.2.0.tgz", + "integrity": "sha512-iC3Ic1hLmasoboG7BO+7p+AriSoqAwKrIk+Hpk+S/bjTQdXqbl2GbdclghI4gM32X0bls7xHzIFqhRdrlvJeaA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -3343,19 +3365,6 @@ "loose-envify": "^1.1.0" } }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/set-cookie-parser": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", diff --git a/package.json b/package.json index b932da9..7f186d0 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,10 @@ "@radix-ui/react-slot": "^1.1.1", "@radix-ui/react-toast": "^1.2.5", "@radix-ui/react-tooltip": "^1.1.7", - "@tauri-apps/api": "^1", + "@tauri-apps/api": "^2.0.0", + "@tauri-apps/plugin-fs": "^2.2.0", + "@tauri-apps/plugin-os": "^2.2.0", + "@tauri-apps/plugin-shell": "^2.2.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "dotenv": "^16.4.5", @@ -30,7 +33,7 @@ "zod": "^3.24.1" }, "devDependencies": { - "@tauri-apps/cli": "^1", + "@tauri-apps/cli": "^2.2.7", "@types/node": "^22.2.0", "@types/react": "^18.2.15", "@types/react-dom": "^18.2.7", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 69190e1..dd59ca2 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -64,26 +64,25 @@ checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "atk" -version = "0.15.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd" +checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" dependencies = [ "atk-sys", - "bitflags 1.3.2", "glib", "libc", ] [[package]] name = "atk-sys" -version = "0.15.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6" +checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.2.2", + "system-deps", ] [[package]] @@ -135,12 +134,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - [[package]] name = "base64" version = "0.21.7" @@ -164,6 +157,9 @@ name = "bitflags" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +dependencies = [ + "serde", +] [[package]] name = "block" @@ -202,10 +198,19 @@ dependencies = [ ] [[package]] -name = "brotli" -version = "3.5.0" +name = "block2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2", +] + +[[package]] +name = "brotli" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -214,24 +219,14 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.5.1" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", ] -[[package]] -name = "bstr" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "bumpalo" version = "3.16.0" @@ -271,39 +266,75 @@ name = "bytes" version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +dependencies = [ + "serde", +] [[package]] name = "cairo-rs" -version = "0.15.12" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "cairo-sys-rs", "glib", "libc", - "thiserror", + "once_cell", + "thiserror 1.0.63", ] [[package]] name = "cairo-sys-rs" -version = "0.15.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" dependencies = [ "glib-sys", "libc", - "system-deps 6.2.2", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8769706aad5d996120af43197bf46ef6ad0fda35216b4505f926a365a232d924" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.23", + "serde", + "serde_json", + "thiserror 2.0.11", ] [[package]] name = "cargo_toml" -version = "0.15.3" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "599aa35200ffff8f04c1925aa1acc92fa2e08874379ef42e210a80e527e60838" +checksum = "5fbd1fe9db3ebf71b89060adaf7b0504c2d6a425cf061313099547e382c2e472" dependencies = [ "serde", - "toml 0.7.8", + "toml 0.8.19", ] [[package]] @@ -329,15 +360,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 1.13.2", -] - [[package]] name = "cfg-expr" version = "0.15.8" @@ -360,6 +382,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" version = "0.4.38" @@ -384,40 +412,34 @@ dependencies = [ [[package]] name = "cocoa" -version = "0.24.1" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" +checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "block", "cocoa-foundation", - "core-foundation", + "core-foundation 0.10.0", "core-graphics", - "foreign-types", + "foreign-types 0.5.0", "libc", "objc", ] [[package]] name = "cocoa-foundation" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +checksum = "e14045fb83be07b5acf1c0884b2180461635b433455fa35d1cd6f17f1450679d" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "block", - "core-foundation", + "core-foundation 0.10.0", "core-graphics-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.7" @@ -434,6 +456,16 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "time 0.3.36", + "version_check 0.9.5", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -444,6 +476,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -452,25 +494,25 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core-graphics" -version = "0.22.3" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags 1.3.2", - "core-foundation", + "bitflags 2.6.0", + "core-foundation 0.10.0", "core-graphics-types", - "foreign-types", + "foreign-types 0.5.0", "libc", ] [[package]] name = "core-graphics-types" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 1.3.2", - "core-foundation", + "bitflags 2.6.0", + "core-foundation 0.10.0", "libc", ] @@ -501,25 +543,6 @@ dependencies = [ "crossbeam-utils 0.8.20", ] -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils 0.8.20", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils 0.8.20", -] - [[package]] name = "crossbeam-utils" version = "0.7.2" @@ -571,7 +594,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.74", + "syn 2.0.98", ] [[package]] @@ -581,7 +604,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.74", + "syn 2.0.98", ] [[package]] @@ -605,7 +628,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.74", + "syn 2.0.98", ] [[package]] @@ -616,7 +639,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.74", + "syn 2.0.98", ] [[package]] @@ -645,7 +668,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.0", - "syn 2.0.74", + "syn 2.0.98", ] [[package]] @@ -673,17 +696,25 @@ version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" dependencies = [ - "dirs-sys", + "dirs-sys 0.4.1", ] [[package]] -name = "dirs-next" -version = "2.0.0" +name = "dirs" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ - "cfg-if 1.0.0", - "dirs-sys-next", + "dirs-sys 0.4.1", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys 0.5.0", ] [[package]] @@ -694,19 +725,20 @@ checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ "libc", "option-ext", - "redox_users", + "redox_users 0.4.5", "windows-sys 0.48.0", ] [[package]] -name = "dirs-sys-next" -version = "0.1.2" +name = "dirs-sys" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", - "redox_users", - "winapi 0.3.9", + "option-ext", + "redox_users 0.5.0", + "windows-sys 0.59.0", ] [[package]] @@ -715,6 +747,38 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +[[package]] +name = "dlopen2" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi 0.3.9", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "dpi" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" +dependencies = [ + "serde", +] + [[package]] name = "dtoa" version = "1.0.9" @@ -736,6 +800,12 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +[[package]] +name = "dyn-clone" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "feeef44e73baff3a26d371801df019877a9866a8c493d315ab00177843314f35" + [[package]] name = "embed-resource" version = "2.4.3" @@ -758,9 +828,9 @@ checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if 1.0.0", ] @@ -771,6 +841,16 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "erased-serde" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" +dependencies = [ + "serde", + "typeid", +] + [[package]] name = "errno" version = "0.3.9" @@ -812,18 +892,6 @@ dependencies = [ "rustc_version 0.4.0", ] -[[package]] -name = "filetime" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf401df4a4e3872c4fe8151134cf483738e74b67fc934d6532c882b3d24a4550" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "libredox", - "windows-sys 0.59.0", -] - [[package]] name = "fix-path-env" version = "0.0.0" @@ -831,7 +899,7 @@ source = "git+https://github.com/tauri-apps/fix-path-env-rs#0e479e2804edc1a7e5f1 dependencies = [ "home", "strip-ansi-escapes", - "thiserror", + "thiserror 1.0.63", ] [[package]] @@ -856,7 +924,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.98", ] [[package]] @@ -865,6 +954,12 @@ 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.2.1" @@ -952,7 +1047,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.98", ] [[package]] @@ -974,9 +1069,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-core", + "futures-io", "futures-macro", "futures-sink", "futures-task", + "memchr", "pin-project-lite", "pin-utils", "slab", @@ -993,11 +1090,10 @@ dependencies = [ [[package]] name = "gdk" -version = "0.15.4" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8" +checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" dependencies = [ - "bitflags 1.3.2", "cairo-rs", "gdk-pixbuf", "gdk-sys", @@ -1009,35 +1105,35 @@ dependencies = [ [[package]] name = "gdk-pixbuf" -version = "0.15.11" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" dependencies = [ - "bitflags 1.3.2", "gdk-pixbuf-sys", "gio", "glib", "libc", + "once_cell", ] [[package]] name = "gdk-pixbuf-sys" -version = "0.15.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" dependencies = [ "gio-sys", "glib-sys", "gobject-sys", "libc", - "system-deps 6.2.2", + "system-deps", ] [[package]] name = "gdk-sys" -version = "0.15.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" +checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -1047,47 +1143,48 @@ dependencies = [ "libc", "pango-sys", "pkg-config", - "system-deps 6.2.2", + "system-deps", ] [[package]] name = "gdkwayland-sys" -version = "0.15.3" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca49a59ad8cfdf36ef7330fe7bdfbe1d34323220cc16a0de2679ee773aee2c2" +checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" dependencies = [ "gdk-sys", "glib-sys", "gobject-sys", "libc", "pkg-config", - "system-deps 6.2.2", + "system-deps", ] [[package]] -name = "gdkx11-sys" -version = "0.15.1" +name = "gdkx11" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178" +checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" dependencies = [ - "gdk-sys", - "glib-sys", + "gdk", + "gdkx11-sys", + "gio", + "glib", "libc", - "system-deps 6.2.2", "x11", ] [[package]] -name = "generator" -version = "0.7.5" +name = "gdkx11-sys" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" +checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" dependencies = [ - "cc", + "gdk-sys", + "glib-sys", "libc", - "log 0.4.22", - "rustversion", - "windows 0.48.0", + "system-deps", + "x11", ] [[package]] @@ -1109,6 +1206,16 @@ dependencies = [ "version_check 0.9.5", ] +[[package]] +name = "gethostname" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc3655aa6818d65bc620d6911f05aa7b6aeb596291e1e9f79e52df85583d1e30" +dependencies = [ + "rustix", + "windows-targets 0.52.6", +] + [[package]] name = "getrandom" version = "0.1.16" @@ -1127,8 +1234,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if 1.0.0", + "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -1139,77 +1248,81 @@ checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "gio" -version = "0.15.12" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" dependencies = [ - "bitflags 1.3.2", "futures-channel", "futures-core", "futures-io", + "futures-util", "gio-sys", "glib", "libc", "once_cell", - "thiserror", + "pin-project-lite", + "smallvec 1.13.2", + "thiserror 1.0.63", ] [[package]] name = "gio-sys" -version = "0.15.10" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.2.2", + "system-deps", "winapi 0.3.9", ] [[package]] name = "glib" -version = "0.15.12" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "futures-channel", "futures-core", "futures-executor", "futures-task", + "futures-util", + "gio-sys", "glib-macros", "glib-sys", "gobject-sys", "libc", + "memchr", "once_cell", "smallvec 1.13.2", - "thiserror", + "thiserror 1.0.63", ] [[package]] name = "glib-macros" -version = "0.15.13" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" dependencies = [ - "anyhow", "heck 0.4.1", - "proc-macro-crate", + "proc-macro-crate 2.0.0", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.98", ] [[package]] name = "glib-sys" -version = "0.15.10" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" dependencies = [ "libc", - "system-deps 6.2.2", + "system-deps", ] [[package]] @@ -1218,38 +1331,24 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" -[[package]] -name = "globset" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" -dependencies = [ - "aho-corasick", - "bstr", - "log 0.4.22", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", -] - [[package]] name = "gobject-sys" -version = "0.15.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" dependencies = [ "glib-sys", "libc", - "system-deps 6.2.2", + "system-deps", ] [[package]] name = "gtk" -version = "0.15.5" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0" +checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" dependencies = [ "atk", - "bitflags 1.3.2", "cairo-rs", "field-offset", "futures-channel", @@ -1260,16 +1359,15 @@ dependencies = [ "gtk-sys", "gtk3-macros", "libc", - "once_cell", "pango", "pkg-config", ] [[package]] name = "gtk-sys" -version = "0.15.3" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84" +checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" dependencies = [ "atk-sys", "cairo-sys-rs", @@ -1280,21 +1378,20 @@ dependencies = [ "gobject-sys", "libc", "pango-sys", - "system-deps 6.2.2", + "system-deps", ] [[package]] name = "gtk3-macros" -version = "0.15.6" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684c0456c086e8e7e9af73ec5b84e35938df394712054550e81558d21c44ab0d" +checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" dependencies = [ - "anyhow", - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.98", ] [[package]] @@ -1309,15 +1406,6 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -[[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.1" @@ -1365,17 +1453,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes 1.7.1", - "fnv", - "itoa 1.0.11", -] - [[package]] name = "http" version = "1.1.0" @@ -1388,10 +1465,27 @@ dependencies = [ ] [[package]] -name = "http-range" -version = "0.1.5" +name = "http-body" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes 1.7.1", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes 1.7.1", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] [[package]] name = "httparse" @@ -1409,7 +1503,7 @@ dependencies = [ "httparse", "language-tags", "log 0.3.9", - "mime", + "mime 0.2.6", "num_cpus", "time 0.1.45", "traitobject", @@ -1418,6 +1512,62 @@ dependencies = [ "url 1.7.2", ] +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes 1.7.1", + "futures-channel", + "futures-util", + "http", + "http-body", + "httparse", + "itoa 1.0.11", + "pin-project-lite", + "smallvec 1.13.2", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +dependencies = [ + "futures-util", + "http", + "hyper 1.6.0", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes 1.7.1", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper 1.6.0", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + [[package]] name = "iana-time-zone" version = "0.1.60" @@ -1429,7 +1579,7 @@ dependencies = [ "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows-core", + "windows-core 0.52.0", ] [[package]] @@ -1478,34 +1628,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "ignore" -version = "0.4.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" -dependencies = [ - "crossbeam-deque", - "globset", - "log 0.4.22", - "memchr", - "regex-automata 0.4.7", - "same-file", - "walkdir", - "winapi-util", -] - -[[package]] -name = "image" -version = "0.24.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-traits", -] - [[package]] name = "indexmap" version = "1.9.3" @@ -1530,22 +1652,13 @@ dependencies = [ [[package]] name = "infer" -version = "0.13.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f551f8c3a39f68f986517db0d1759de85881894fdc7db798bd2a9df9cb04b7fc" +checksum = "bc150e5ce2330295b8616ce0e3f53250e53af31759a9dbedad1621ba29151847" dependencies = [ "cfb", ] -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if 1.0.0", -] - [[package]] name = "iovec" version = "0.1.4" @@ -1555,6 +1668,31 @@ dependencies = [ "libc", ] +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + [[package]] name = "itoa" version = "0.4.8" @@ -1569,9 +1707,9 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "javascriptcore-rs" -version = "0.16.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" dependencies = [ "bitflags 1.3.2", "glib", @@ -1580,28 +1718,30 @@ dependencies = [ [[package]] name = "javascriptcore-rs-sys" -version = "0.4.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" 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 1.0.0", "combine", "jni-sys", "log 0.4.22", - "thiserror", + "thiserror 1.0.63", "walkdir", + "windows-sys 0.45.0", ] [[package]] @@ -1621,13 +1761,24 @@ dependencies = [ [[package]] name = "json-patch" -version = "1.4.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec9ad60d674508f3ca8f380a928cfe7b096bc729c4e2dbfe3852bc45da3ab30b" +checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" +dependencies = [ + "jsonptr", + "serde", + "serde_json", + "thiserror 1.0.63", +] + +[[package]] +name = "jsonptr" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70" dependencies = [ "serde", "serde_json", - "thiserror", ] [[package]] @@ -1640,6 +1791,17 @@ dependencies = [ "winapi-build", ] +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.6.0", + "serde", + "unicode-segmentation", +] + [[package]] name = "kuchikiki" version = "0.8.2" @@ -1667,9 +1829,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libappindicator" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2d3cb96d092b4824cb306c9e544c856a4cb6210c1081945187f7f1924b47e8" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" dependencies = [ "glib", "gtk", @@ -1680,9 +1842,9 @@ dependencies = [ [[package]] name = "libappindicator-sys" -version = "0.7.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1b3b6681973cea8cc3bce7391e6d7d5502720b80a581c9a95c9cbaf592826aa" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" dependencies = [ "gtk-sys", "libloading", @@ -1691,9 +1853,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.155" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libloading" @@ -1713,7 +1875,6 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.6.0", "libc", - "redox_syscall 0.5.3", ] [[package]] @@ -1756,21 +1917,6 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" -[[package]] -name = "loom" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if 1.0.0", - "generator", - "scoped-tls", - "serde", - "serde_json", - "tracing", - "tracing-subscriber", -] - [[package]] name = "mac" version = "0.1.1" @@ -1800,15 +1946,6 @@ dependencies = [ "tendril", ] -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - [[package]] name = "matches" version = "0.1.10" @@ -1845,6 +1982,12 @@ dependencies = [ "log 0.3.9", ] +[[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.7.4" @@ -1898,6 +2041,26 @@ dependencies = [ "ws2_32-sys", ] +[[package]] +name = "muda" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdae9c00e61cc0579bcac625e8ad22104c60548a025bfc972dc83868a28e1484" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "once_cell", + "png", + "serde", + "thiserror 1.0.63", + "windows-sys 0.59.0", +] + [[package]] name = "native-tls" version = "0.2.12" @@ -1917,15 +2080,17 @@ dependencies = [ [[package]] name = "ndk" -version = "0.6.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "jni-sys", + "log 0.4.22", "ndk-sys", "num_enum", - "thiserror", + "raw-window-handle", + "thiserror 1.0.63", ] [[package]] @@ -1936,9 +2101,9 @@ checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] name = "ndk-sys" -version = "0.3.0" +version = "0.6.0+11769913" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" dependencies = [ "jni-sys", ] @@ -1966,16 +2131,6 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi 0.3.9", -] - [[package]] name = "num-conv" version = "0.1.0" @@ -2003,23 +2158,23 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.5.11" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.5.11" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 2.0.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.98", ] [[package]] @@ -2029,25 +2184,224 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ "malloc_buf", - "objc_exception", ] [[package]] -name = "objc_exception" -version = "0.1.2" +name = "objc-sys" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" dependencies = [ "cc", ] [[package]] -name = "objc_id" -version = "0.1.1" +name = "objc2" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" dependencies = [ - "objc", + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.6.0", + "block2", + "libc", + "objc2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-core-location", + "objc2-foundation", +] + +[[package]] +name = "objc2-contacts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-image" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc2-core-location" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" +dependencies = [ + "block2", + "objc2", + "objc2-contacts", + "objc2-foundation", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" +dependencies = [ + "bitflags 2.6.0", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "objc2-link-presentation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" +dependencies = [ + "block2", + "objc2", + "objc2-app-kit", + "objc2-foundation", +] + +[[package]] +name = "objc2-metal" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc2-symbols" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-image", + "objc2-core-location", + "objc2-foundation", + "objc2-link-presentation", + "objc2-quartz-core", + "objc2-symbols", + "objc2-uniform-type-identifiers", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-uniform-type-identifiers" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-core-location", + "objc2-foundation", +] + +[[package]] +name = "objc2-web-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68bc69301064cebefc6c4c90ce9cba69225239e4b8ff99d445a2b5563797da65" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-app-kit", + "objc2-foundation", ] [[package]] @@ -2073,12 +2427,14 @@ checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] name = "open" -version = "3.2.0" +version = "5.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8" +checksum = "e2483562e62ea94312f3576a7aca397306df7990b8d89033e18766744377ef95" dependencies = [ + "dunce", + "is-wsl", + "libc", "pathdiff", - "windows-sys 0.42.0", ] [[package]] @@ -2089,7 +2445,7 @@ checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ "bitflags 2.6.0", "cfg-if 1.0.0", - "foreign-types", + "foreign-types 0.3.2", "libc", "once_cell", "openssl-macros", @@ -2104,7 +2460,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.98", ] [[package]] @@ -2133,9 +2489,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "os_info" -version = "3.8.2" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae99c7fa6dd38c7cafe1ec085e804f8f555a2f8659b0dbe03f1f9963a9b51092" +checksum = "2a604e53c24761286860eba4e2c8b23a0161526476b1de520139d69cdb85a6b5" dependencies = [ "log 0.4.22", "serde", @@ -2152,19 +2508,13 @@ dependencies = [ "windows-sys 0.59.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" +version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" dependencies = [ - "bitflags 1.3.2", + "gio", "glib", "libc", "once_cell", @@ -2173,14 +2523,14 @@ dependencies = [ [[package]] name = "pango-sys" -version = "0.15.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.2.2", + "system-deps", ] [[package]] @@ -2234,9 +2584,9 @@ dependencies = [ [[package]] name = "pathdiff" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] name = "percent-encoding" @@ -2354,7 +2704,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.98", ] [[package]] @@ -2459,6 +2809,15 @@ dependencies = [ "toml_edit 0.19.15", ] +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit 0.20.7", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -2491,9 +2850,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] @@ -2509,6 +2868,9 @@ dependencies = [ "serde_json", "tauri", "tauri-build", + "tauri-plugin-fs", + "tauri-plugin-os", + "tauri-plugin-shell", "tokio", "tokio-tungstenite", ] @@ -2532,6 +2894,58 @@ dependencies = [ "memchr", ] +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes 1.7.1", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror 2.0.11", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes 1.7.1", + "getrandom 0.2.15", + "rand 0.8.5", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.11", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "quote" version = "1.0.36" @@ -2730,9 +3144,9 @@ dependencies = [ [[package]] name = "raw-window-handle" -version = "0.5.2" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "rdrand" @@ -2766,7 +3180,18 @@ checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" dependencies = [ "getrandom 0.2.15", "libredox", - "thiserror", + "thiserror 1.0.63", +] + +[[package]] +name = "redox_users" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror 2.0.11", ] [[package]] @@ -2777,17 +3202,8 @@ checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", + "regex-automata", + "regex-syntax", ] [[package]] @@ -2798,27 +3214,87 @@ checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.4", + "regex-syntax", ] -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - [[package]] name = "regex-syntax" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +[[package]] +name = "reqwest" +version = "0.12.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +dependencies = [ + "base64 0.22.1", + "bytes 1.7.1", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper 1.6.0", + "hyper-rustls", + "hyper-util", + "ipnet", + "js-sys", + "log 0.4.22", + "mime 0.3.17", + "once_cell", + "percent-encoding 2.3.1", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tokio-util", + "tower", + "tower-service", + "url 2.5.2", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots", + "windows-registry", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if 1.0.0", + "getrandom 0.2.15", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "rustc-demangle" version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + [[package]] name = "rustc_version" version = "0.2.3" @@ -2851,10 +3327,47 @@ dependencies = [ ] [[package]] -name = "rustversion" -version = "1.0.17" +name = "rustls" +version = "0.23.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +dependencies = [ + "web-time", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] [[package]] name = "ryu" @@ -2887,10 +3400,31 @@ dependencies = [ ] [[package]] -name = "scoped-tls" -version = "1.0.1" +name = "schemars" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url 2.5.2", + "uuid", +] + +[[package]] +name = "schemars_derive" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.98", +] [[package]] name = "scopeguard" @@ -2905,7 +3439,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.6.0", - "core-foundation", + "core-foundation 0.9.4", "core-foundation-sys", "libc", "security-framework-sys", @@ -2974,6 +3508,17 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-untagged" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2676ba99bd82f75cae5cbd2c8eda6fa0b8760f18978ea840e980dd5567b5c5b6" +dependencies = [ + "erased-serde", + "serde", + "typeid", +] + [[package]] name = "serde_derive" version = "1.0.207" @@ -2982,7 +3527,18 @@ checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.98", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] @@ -2991,7 +3547,6 @@ version = "1.0.124" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66ad62847a56b3dba58cc891acd13884b9c61138d330c0d7b6181713d4fce38d" dependencies = [ - "indexmap 2.4.0", "itoa 1.0.11", "memchr", "ryu", @@ -3006,7 +3561,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.98", ] [[package]] @@ -3018,6 +3573,18 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa 1.0.11", + "ryu", + "serde", +] + [[package]] name = "serde_with" version = "3.9.0" @@ -3045,7 +3612,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.98", ] [[package]] @@ -3114,15 +3681,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - [[package]] name = "shared_child" version = "1.0.1" @@ -3189,48 +3747,65 @@ dependencies = [ ] [[package]] -name = "soup2" -version = "0.2.1" +name = "softbuffer" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0" +checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" dependencies = [ - "bitflags 1.3.2", - "gio", - "glib", - "libc", - "once_cell", - "soup2-sys", + "bytemuck", + "cfg_aliases", + "core-graphics", + "foreign-types 0.5.0", + "js-sys", + "log 0.4.22", + "objc2", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall 0.5.3", + "wasm-bindgen", + "web-sys", + "windows-sys 0.59.0", ] [[package]] -name = "soup2-sys" -version = "0.2.0" +name = "soup3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" dependencies = [ - "bitflags 1.3.2", "gio-sys", "glib-sys", "gobject-sys", "libc", - "system-deps 5.0.0", + "system-deps", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[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.7" @@ -3272,6 +3847,23 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "swift-rs" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] + [[package]] name = "syn" version = "1.0.109" @@ -3285,9 +3877,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.74" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -3295,29 +3887,21 @@ dependencies = [ ] [[package]] -name = "sys-locale" -version = "0.2.4" +name = "sync_wrapper" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a11bd9c338fdba09f7881ab41551932ad42e405f61d01e8406baea71c07aee" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ - "js-sys", - "libc", - "wasm-bindgen", - "web-sys", - "windows-sys 0.45.0", + "futures-core", ] [[package]] -name = "system-deps" -version = "5.0.0" +name = "sys-locale" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e" +checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" dependencies = [ - "cfg-expr 0.9.1", - "heck 0.3.3", - "pkg-config", - "toml 0.5.11", - "version-compare 0.0.11", + "libc", ] [[package]] @@ -3326,42 +3910,32 @@ version = "6.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ - "cfg-expr 0.15.8", + "cfg-expr", "heck 0.5.0", "pkg-config", "toml 0.8.19", - "version-compare 0.2.0", + "version-compare", ] [[package]] name = "tao" -version = "0.16.9" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "575c856fc21e551074869dcfaad8f706412bd5b803dfa0fbf6881c4ff4bfafab" +checksum = "3731d04d4ac210cd5f344087733943b9bfb1a32654387dad4d1c70de21aee2c9" dependencies = [ - "bitflags 1.3.2", - "cairo-rs", - "cc", + "bitflags 2.6.0", "cocoa", - "core-foundation", + "core-foundation 0.10.0", "core-graphics", "crossbeam-channel", - "dirs-next", "dispatch", - "gdk", - "gdk-pixbuf", - "gdk-sys", + "dlopen2", + "dpi", "gdkwayland-sys", "gdkx11-sys", - "gio", - "glib", - "glib-sys", "gtk", - "image", - "instant", "jni", "lazy_static", - "libappindicator", "libc", "log 0.4.22", "ndk", @@ -3370,15 +3944,14 @@ dependencies = [ "objc", "once_cell", "parking_lot 0.12.3", - "png", "raw-window-handle", "scopeguard", - "serde", "tao-macros", "unicode-segmentation", - "uuid", - "windows 0.39.0", - "windows-implement", + "url 2.5.2", + "windows", + "windows-core 0.58.0", + "windows-version", "x11-dl", ] @@ -3393,17 +3966,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "tar" -version = "0.4.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" -dependencies = [ - "filetime", - "libc", - "xattr", -] - [[package]] name = "target-lexicon" version = "0.12.16" @@ -3412,83 +3974,83 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "1.7.1" +version = "2.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "336bc661a3f3250853fa83c6e5245449ed1c26dce5dcb28bdee7efedf6278806" +checksum = "58a998b6be84104ca05c7e9a21f2180ddec020c8b84ea59a8fc8530a2a19588d" dependencies = [ "anyhow", - "cocoa", - "dirs-next", + "bytes 1.7.1", + "dirs 6.0.0", "dunce", "embed_plist", - "encoding_rs", - "flate2", "futures-util", "getrandom 0.2.15", - "glib", "glob", "gtk", "heck 0.5.0", - "http 0.2.12", - "ignore", - "objc", - "once_cell", - "open", - "os_info", - "os_pipe", + "http", + "jni", + "libc", + "log 0.4.22", + "mime 0.3.17", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", "percent-encoding 2.3.1", - "rand 0.8.5", + "plist", "raw-window-handle", - "regex", - "semver 1.0.23", + "reqwest", "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", + "thiserror 2.0.11", "tokio", + "tray-icon", "url 2.5.2", - "uuid", + "urlpattern", "webkit2gtk", "webview2-com", - "windows 0.39.0", + "window-vibrancy", + "windows", ] [[package]] name = "tauri-build" -version = "1.5.3" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c6ec7a5c3296330c7818478948b422967ce4649094696c985f61d50076d29c" +checksum = "8e950124f6779c6cf98e3260c7a6c8488a74aa6350dd54c6950fdaa349bca2df" dependencies = [ "anyhow", "cargo_toml", - "dirs-next", + "dirs 5.0.1", + "glob", "heck 0.5.0", "json-patch", + "schemars", "semver 1.0.23", "serde", "serde_json", "tauri-utils", "tauri-winres", + "toml 0.8.19", "walkdir", ] [[package]] name = "tauri-codegen" -version = "1.4.4" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1aed706708ff1200ec12de9cfbf2582b5d8ec05f6a7293911091effbd22036b" +checksum = "f77894f9ddb5cb6c04fcfe8c8869ebe0aded4dabf19917118d48be4a95599ab5" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "brotli", "ico", "json-patch", @@ -3496,85 +4058,170 @@ dependencies = [ "png", "proc-macro2", "quote", - "regex", "semver 1.0.23", "serde", "serde_json", "sha2", + "syn 2.0.98", "tauri-utils", - "thiserror", + "thiserror 2.0.11", "time 0.3.36", + "url 2.5.2", "uuid", "walkdir", ] [[package]] name = "tauri-macros" -version = "1.4.5" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b88f831d2973ae4f81a706a0004e67dac87f2e4439973bbe98efbd73825d8ede" +checksum = "3240a5caed760a532e8f687be6f05b2c7d11a1d791fb53ccc08cfeb3e5308736" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.98", "tauri-codegen", "tauri-utils", ] [[package]] -name = "tauri-runtime" -version = "0.14.4" +name = "tauri-plugin" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3068ed62b63dedc705558f4248c7ecbd5561f0f8050949859ea0db2326f26012" +checksum = "5841b9a0200e954ef7457f8d327091424328891e267a97b641dc246cc54d0dec" dependencies = [ + "anyhow", + "glob", + "plist", + "schemars", + "serde", + "serde_json", + "tauri-utils", + "toml 0.8.19", + "walkdir", +] + +[[package]] +name = "tauri-plugin-fs" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a1edf18000f02903a7c2e5997fb89aca455ecbc0acc15c6535afbb883be223" +dependencies = [ + "anyhow", + "dunce", + "glob", + "percent-encoding 2.3.1", + "schemars", + "serde", + "serde_json", + "serde_repr", + "tauri", + "tauri-plugin", + "tauri-utils", + "thiserror 2.0.11", + "toml 0.8.19", + "url 2.5.2", + "uuid", +] + +[[package]] +name = "tauri-plugin-os" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dda2d571a9baf0664c1f2088db227e3072f9028602fafa885deade7547c3b738" +dependencies = [ + "gethostname", + "log 0.4.22", + "os_info", + "serde", + "serde_json", + "serialize-to-javascript", + "sys-locale", + "tauri", + "tauri-plugin", + "thiserror 2.0.11", +] + +[[package]] +name = "tauri-plugin-shell" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2c50a63e60fb8925956cc5b7569f4b750ac197a4d39f13b8dd46ea8e2bad79" +dependencies = [ + "encoding_rs", + "log 0.4.22", + "open", + "os_pipe", + "regex", + "schemars", + "serde", + "serde_json", + "shared_child", + "tauri", + "tauri-plugin", + "thiserror 2.0.11", + "tokio", +] + +[[package]] +name = "tauri-runtime" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2274ef891ccc0a8d318deffa9d70053f947664d12d58b9c0d1ae5e89237e01f7" +dependencies = [ + "dpi", "gtk", - "http 0.2.12", - "http-range", - "rand 0.8.5", + "http", + "jni", "raw-window-handle", "serde", "serde_json", "tauri-utils", - "thiserror", + "thiserror 2.0.11", "url 2.5.2", - "uuid", - "webview2-com", - "windows 0.39.0", + "windows", ] [[package]] name = "tauri-runtime-wry" -version = "0.14.9" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c3db170233096aa30330feadcd895bf9317be97e624458560a20e814db7955" +checksum = "3707b40711d3b9f6519150869e358ffbde7c57567fb9b5a8b51150606939b2a0" dependencies = [ - "cocoa", "gtk", + "http", + "jni", + "log 0.4.22", + "objc2", + "objc2-app-kit", + "objc2-foundation", "percent-encoding 2.3.1", - "rand 0.8.5", "raw-window-handle", + "softbuffer", + "tao", "tauri-runtime", "tauri-utils", - "uuid", + "url 2.5.2", "webkit2gtk", "webview2-com", - "windows 0.39.0", + "windows", "wry", ] [[package]] name = "tauri-utils" -version = "1.6.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2826db448309d382dac14d520f0c0a40839b87b57b977e59cf5f296b3ace6a93" +checksum = "96fb10e7cc97456b2d5b9c03e335b5de5da982039a303a20d10006885e4523a0" dependencies = [ "brotli", + "cargo_metadata", "ctor", "dunce", "glob", - "heck 0.5.0", "html5ever", + "http", "infer", "json-patch", "kuchikiki", @@ -3583,14 +4230,20 @@ dependencies = [ "phf 0.11.2", "proc-macro2", "quote", + "regex", + "schemars", "semver 1.0.23", "serde", + "serde-untagged", "serde_json", "serde_with", - "thiserror", + "swift-rs", + "thiserror 2.0.11", + "toml 0.8.19", "url 2.5.2", + "urlpattern", + "uuid", "walkdir", - "windows-version", ] [[package]] @@ -3639,7 +4292,16 @@ version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.63", +] + +[[package]] +name = "thiserror" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +dependencies = [ + "thiserror-impl 2.0.11", ] [[package]] @@ -3650,17 +4312,18 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.98", ] [[package]] -name = "thread_local" -version = "1.1.8" +name = "thiserror-impl" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ - "cfg-if 1.0.0", - "once_cell", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] @@ -3778,7 +4441,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.98", ] [[package]] @@ -3800,6 +4463,16 @@ dependencies = [ "tokio-sync", ] +[[package]] +name = "tokio-rustls" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +dependencies = [ + "rustls", + "tokio", +] + [[package]] name = "tokio-sync" version = "0.1.8" @@ -3848,12 +4521,16 @@ dependencies = [ ] [[package]] -name = "toml" -version = "0.5.11" +name = "tokio-util" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ - "serde", + "bytes 1.7.1", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", ] [[package]] @@ -3902,6 +4579,17 @@ dependencies = [ "winnow 0.5.40", ] +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap 2.4.0", + "toml_datetime", + "winnow 0.5.40", +] + [[package]] name = "toml_edit" version = "0.22.20" @@ -3915,6 +4603,33 @@ dependencies = [ "winnow 0.6.18", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + [[package]] name = "tracing" version = "0.1.40" @@ -3922,21 +4637,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ "pin-project-lite", - "tracing-attributes", "tracing-core", ] -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.74", -] - [[package]] name = "tracing-core" version = "0.1.32" @@ -3944,36 +4647,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log 0.4.22", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec 1.13.2", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", ] [[package]] @@ -3982,6 +4655,33 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" +[[package]] +name = "tray-icon" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d48a05076dd272615d03033bf04f480199f7d1b66a8ac64d75c625fc4a70c06b" +dependencies = [ + "core-graphics", + "crossbeam-channel", + "dirs 5.0.1", + "libappindicator", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "once_cell", + "png", + "serde", + "thiserror 1.0.63", + "windows-sys 0.59.0", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "tungstenite" version = "0.23.0" @@ -3991,12 +4691,12 @@ dependencies = [ "byteorder", "bytes 1.7.1", "data-encoding", - "http 1.1.0", + "http", "httparse", "log 0.4.22", "rand 0.8.5", "sha1", - "thiserror", + "thiserror 1.0.63", "utf-8", ] @@ -4006,12 +4706,59 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" +[[package]] +name = "typeid" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" + [[package]] name = "typenum" version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + [[package]] name = "unicase" version = "1.4.2" @@ -4048,6 +4795,12 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "1.7.2" @@ -4071,6 +4824,18 @@ dependencies = [ "serde", ] +[[package]] +name = "urlpattern" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" +dependencies = [ + "regex", + "serde", + "unic-ucd-ident", + "url 2.5.2", +] + [[package]] name = "utf-8" version = "0.7.6" @@ -4090,26 +4855,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" dependencies = [ "getrandom 0.2.15", + "serde", ] -[[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.2.0" @@ -4178,6 +4932,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" @@ -4218,10 +4981,22 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.98", "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.93" @@ -4240,7 +5015,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4251,6 +5026,19 @@ version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +[[package]] +name = "wasm-streams" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e072d4e72f700fb3443d8fe94a39315df013eef1104903cdb0a2abd322bbecd" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "web-sys" version = "0.3.70" @@ -4262,10 +5050,20 @@ dependencies = [ ] [[package]] -name = "webkit2gtk" -version = "0.18.2" +name = "web-time" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a" dependencies = [ "bitflags 1.3.2", "cairo-rs", @@ -4281,20 +5079,18 @@ dependencies = [ "javascriptcore-rs", "libc", "once_cell", - "soup2", + "soup3", "webkit2gtk-sys", ] [[package]] name = "webkit2gtk-sys" -version = "0.18.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3" +checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" dependencies = [ - "atk-sys", "bitflags 1.3.2", "cairo-sys-rs", - "gdk-pixbuf-sys", "gdk-sys", "gio-sys", "glib-sys", @@ -4302,10 +5098,18 @@ dependencies = [ "gtk-sys", "javascriptcore-rs-sys", "libc", - "pango-sys", "pkg-config", - "soup2-sys", - "system-deps 6.2.2", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webpki-roots" +version = "0.26.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" +dependencies = [ + "rustls-pki-types", ] [[package]] @@ -4316,7 +5120,7 @@ checksum = "319bacd7682c7dfe1444e7cb1aed23bf5b1d837d722925f531e1665bd21a4603" dependencies = [ "bytes 0.4.12", "futures", - "hyper", + "hyper 0.10.16", "native-tls", "rand 0.6.5", "tokio-codec", @@ -4351,40 +5155,38 @@ dependencies = [ [[package]] name = "webview2-com" -version = "0.19.1" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178" +checksum = "823e7ebcfaea51e78f72c87fc3b65a1e602c321f407a0b36dbb327d7bb7cd921" dependencies = [ "webview2-com-macros", "webview2-com-sys", - "windows 0.39.0", + "windows", + "windows-core 0.58.0", "windows-implement", + "windows-interface", ] [[package]] name = "webview2-com-macros" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" +checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.98", ] [[package]] name = "webview2-com-sys" -version = "0.19.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7" +checksum = "7a82bce72db6e5ee83c68b5de1e2cd6ea195b9fbff91cb37df5884cbe3222df4" dependencies = [ - "regex", - "serde", - "serde_json", - "thiserror", - "windows 0.39.0", - "windows-bindgen", - "windows-metadata", + "thiserror 1.0.63", + "windows", + "windows-core 0.58.0", ] [[package]] @@ -4431,36 +5233,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.39.0" +name = "window-vibrancy" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" +checksum = "3ea403deff7b51fff19e261330f71608ff2cdef5721d72b64180bb95be7c4150" 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", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "raw-window-handle", + "windows-sys 0.59.0", + "windows-version", ] [[package]] name = "windows" -version = "0.48.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ - "windows-targets 0.48.5", -] - -[[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", + "windows-core 0.58.0", + "windows-targets 0.52.6", ] [[package]] @@ -4473,34 +5266,68 @@ dependencies = [ ] [[package]] -name = "windows-implement" -version = "0.39.0" +name = "windows-core" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" dependencies = [ - "syn 1.0.109", - "windows-tokens", + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", ] [[package]] -name = "windows-metadata" -version = "0.39.0" +name = "windows-implement" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] [[package]] -name = "windows-sys" -version = "0.42.0" +name = "windows-interface" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" 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", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", ] [[package]] @@ -4585,12 +5412,6 @@ dependencies = [ "windows_x86_64_msvc 0.52.6", ] -[[package]] -name = "windows-tokens" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" - [[package]] name = "windows-version" version = "0.1.1" @@ -4618,12 +5439,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[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.2" @@ -4642,12 +5457,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[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.2" @@ -4672,12 +5481,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[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.2" @@ -4696,12 +5499,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[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.2" @@ -4738,12 +5535,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[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.2" @@ -4792,40 +5583,45 @@ dependencies = [ [[package]] name = "wry" -version = "0.24.10" +version = "0.48.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00711278ed357350d44c749c286786ecac644e044e4da410d466212152383b45" +checksum = "a2e33c08b174442ff80d5c791020696f9f8b4e4a87b8cfc7494aad6167ec44e1" dependencies = [ - "base64 0.13.1", - "block", - "cocoa", - "core-graphics", + "base64 0.22.1", + "block2", + "cookie", "crossbeam-channel", + "dpi", "dunce", - "gdk", - "gio", - "glib", + "gdkx11", "gtk", "html5ever", - "http 0.2.12", + "http", + "javascriptcore-rs", + "jni", "kuchikiki", "libc", - "log 0.4.22", - "objc", - "objc_id", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", "once_cell", - "serde", - "serde_json", + "percent-encoding 2.3.1", + "raw-window-handle", "sha2", - "soup2", - "tao", - "thiserror", + "soup3", + "tao-macros", + "thiserror 2.0.11", "url 2.5.2", "webkit2gtk", "webkit2gtk-sys", "webview2-com", - "windows 0.39.0", - "windows-implement", + "windows", + "windows-core 0.58.0", + "windows-version", + "x11-dl", ] [[package]] @@ -4859,17 +5655,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "xattr" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" -dependencies = [ - "libc", - "linux-raw-sys", - "rustix", -] - [[package]] name = "zerocopy" version = "0.7.35" @@ -4888,5 +5673,11 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.98", ] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 0d18bb0..28d1178 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -4,14 +4,15 @@ version = "0.6.0" description = "PytubePP Helper" authors = ["neosubhamoy"] edition = "2021" +license = "MIT" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [build-dependencies] -tauri-build = { version = "1", features = [] } +tauri-build = { version = "2", features = [] } [dependencies] -tauri = { version = "1", features = [ "os-all", "process-relaunch", "window-start-dragging", "window-close", "window-unmaximize", "process-exit", "window-show", "window-unminimize", "window-hide", "window-minimize", "window-maximize", "system-tray", "shell-all"] } +tauri = { version = "2", features = ["tray-icon"] } directories = "5.0" serde = { version = "1", features = ["derive"] } serde_json = "1" @@ -19,11 +20,18 @@ tokio = { version = "1.39.2", features = ["full"] } tokio-tungstenite = "*" futures-util = "0.3.30" fix-path-env = { git = "https://github.com/tauri-apps/fix-path-env-rs" } +tauri-plugin-shell = "2" +tauri-plugin-fs = "2" +tauri-plugin-os = "2" [features] # This feature is used for production builds or when a dev server is not specified, DO NOT REMOVE!! custom-protocol = ["tauri/custom-protocol"] +[lib] +name = "pytubepp_helper_lib" +crate-type = ["staticlib", "cdylib", "rlib"] + [workspace] members = [ ".", diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json new file mode 100644 index 0000000..44ae7a2 --- /dev/null +++ b/src-tauri/capabilities/default.json @@ -0,0 +1,18 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "main-capability", + "description": "default permissions", + "local": true, + "windows": [ + "main" + ], + "permissions": [ + "core:default", + "shell:default", + "os:default", + "fs:default", + "core:window:allow-hide", + "fs:allow-app-write", + "fs:allow-app-write-recursive" + ] +} \ No newline at end of file diff --git a/src-tauri/capabilities/shell.json b/src-tauri/capabilities/shell.json new file mode 100644 index 0000000..11895c1 --- /dev/null +++ b/src-tauri/capabilities/shell.json @@ -0,0 +1,98 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "shell-scope", + "description": "allowed shell scopes", + "windows": ["main"], + "permissions": [ + { + "identifier": "shell:allow-execute", + "allow": [ + { + "name": "detect-windows", + "cmd": "systeminfo", + "args": [] + }, + { + "name": "detect-macos", + "cmd": "sw_vers", + "args": [] + }, + { + "name": "detect-distro", + "cmd": "grep", + "args": ["^ID=", "/etc/os-release"] + }, + { + "name": "detect-pkgmngr", + "cmd": "sh", + "args": ["-c", "command -v apt || command -v dnf || command -v pacman"] + }, + { + "name": "is-apt-installed", + "cmd": "apt", + "args": ["--version"] + }, + { + "name": "is-dnf-installed", + "cmd": "dnf", + "args": ["--version"] + }, + { + "name": "is-python3-installed", + "cmd": "python3", + "args": ["--version"] + }, + { + "name": "is-pip3-installed", + "cmd": "pip3", + "args": ["--version"] + }, + { + "name": "is-winget-installed", + "cmd": "winget", + "args": ["--version"] + }, + { + "name": "is-homebrew-installed", + "cmd": "brew", + "args": ["--version"] + }, + { + "name": "is-python-installed", + "cmd": "python", + "args": ["--version"] + }, + { + "name": "is-pip-installed", + "cmd": "pip", + "args": ["--version"] + }, + { + "name": "is-ffmpeg-installed", + "cmd": "ffmpeg", + "args": ["-version"] + }, + { + "name": "is-nodejs-installed", + "cmd": "node", + "args": ["--version"] + }, + { + "name": "is-pytubepp-installed", + "cmd": "pytubepp", + "args": ["--version"] + }, + { + "name": "fetch-video-info", + "cmd": "pytubepp", + "args": [{ "validator": "\\S+" }, "--raw-info"] + } + ] + } + ], + "platforms": [ + "windows", + "macOS", + "linux" + ] +} \ No newline at end of file diff --git a/src-tauri/msghost/src/config.rs b/src-tauri/msghost/src/config.rs index 33f31a5..88e4334 100644 --- a/src-tauri/msghost/src/config.rs +++ b/src-tauri/msghost/src/config.rs @@ -1,6 +1,6 @@ +use directories::ProjectDirs; use serde::{Deserialize, Serialize}; use std::fs; -use directories::ProjectDirs; use std::path::PathBuf; #[derive(Debug, Serialize, Deserialize, Clone)] @@ -10,9 +10,7 @@ pub struct Config { impl Default for Config { fn default() -> Self { - Self { - port: 3030, - } + Self { port: 3030 } } } @@ -34,4 +32,4 @@ pub fn load_config() -> Config { } } Config::default() -} \ No newline at end of file +} diff --git a/src-tauri/msghost/src/main.rs b/src-tauri/msghost/src/main.rs index c8fbdcc..6c91c14 100644 --- a/src-tauri/msghost/src/main.rs +++ b/src-tauri/msghost/src/main.rs @@ -1,18 +1,21 @@ mod config; use config::load_config; +use serde_json::Value; use std::io::{self, Read, Write}; -use websocket::client::ClientBuilder; -use websocket::OwnedMessage; use std::thread::sleep; use std::time::Duration; -use serde_json::Value; +use websocket::client::ClientBuilder; +use websocket::OwnedMessage; fn get_websocket_url() -> String { let config = load_config(); format!("ws://localhost:{}", config.port) } -fn connect_with_retry(url: &str, max_attempts: u32) -> Result, Box> { +fn connect_with_retry( + url: &str, + max_attempts: u32, +) -> Result, Box> { let mut attempts = 0; loop { match ClientBuilder::new(url).unwrap().connect_insecure() { @@ -26,7 +29,10 @@ fn connect_with_retry(url: &str, max_attempts: u32) -> Result Result<(), Box> fn main() -> Result<(), Box> { eprintln!("Waiting for message from extension..."); - + let input = match read_stdin_message() { Ok(msg) => { eprintln!("Received message: {}", msg); msg - }, + } Err(e) => { eprintln!("Error reading message: {:?}", e); return Err(e); @@ -70,10 +76,13 @@ fn main() -> Result<(), Box> { }; // Send immediate response to the extension - write_stdout_message(&serde_json::json!({ - "status": "received", - "message": "Message received by native host" - }).to_string())?; + write_stdout_message( + &serde_json::json!({ + "status": "received", + "message": "Message received by native host" + }) + .to_string(), + )?; let parsed: Value = serde_json::from_str(&input)?; @@ -84,10 +93,13 @@ fn main() -> Result<(), Box> { Ok(client) => client, Err(e) => { eprintln!("Failed to connect after multiple attempts: {:?}", e); - write_stdout_message(&serde_json::json!({ - "status": "error", - "message": "Failed to connect to Tauri app" - }).to_string())?; + write_stdout_message( + &serde_json::json!({ + "status": "error", + "message": "Failed to connect to Tauri app" + }) + .to_string(), + )?; return Err(e); } }; @@ -97,14 +109,17 @@ fn main() -> Result<(), Box> { // Receive response from Tauri app let message = client.recv_message()?; - + // Send Tauri app's response back to browser extension if let OwnedMessage::Text(text) = message { - write_stdout_message(&serde_json::json!({ - "status": "success", - "response": text - }).to_string())?; + write_stdout_message( + &serde_json::json!({ + "status": "success", + "response": text + }) + .to_string(), + )?; } Ok(()) -} \ No newline at end of file +} diff --git a/src-tauri/src/config.rs b/src-tauri/src/config.rs index 72dff5a..d813a19 100644 --- a/src-tauri/src/config.rs +++ b/src-tauri/src/config.rs @@ -1,6 +1,6 @@ +use directories::ProjectDirs; use serde::{Deserialize, Serialize}; use std::fs; -use directories::ProjectDirs; use std::path::PathBuf; #[derive(Debug, Serialize, Deserialize, Clone)] @@ -10,9 +10,7 @@ pub struct Config { impl Default for Config { fn default() -> Self { - Self { - port: 3030, - } + Self { port: 3030 } } } @@ -37,18 +35,17 @@ pub fn load_config() -> Config { } pub fn save_config(config: &Config) -> Result<(), String> { - let config_dir = get_config_dir() - .ok_or_else(|| "Could not determine config directory".to_string())?; - + let config_dir = + get_config_dir().ok_or_else(|| "Could not determine config directory".to_string())?; + fs::create_dir_all(&config_dir) .map_err(|e| format!("Failed to create config directory: {}", e))?; - + let config_path = config_dir.join("config.json"); let content = serde_json::to_string_pretty(config) .map_err(|e| format!("Failed to serialize config: {}", e))?; - - fs::write(config_path, content) - .map_err(|e| format!("Failed to write config file: {}", e))?; - + + fs::write(config_path, content).map_err(|e| format!("Failed to write config file: {}", e))?; + Ok(()) -} \ No newline at end of file +} diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs new file mode 100644 index 0000000..03921a4 --- /dev/null +++ b/src-tauri/src/lib.rs @@ -0,0 +1,495 @@ +// Prevents additional console window on Windows in release, DO NOT REMOVE!! +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +mod config; +use config::{get_config_path, load_config, save_config, Config}; +use futures_util::{SinkExt, StreamExt}; +use serde_json::Value; +use std::{env, process::Command, sync::Arc, time::Duration}; +use tauri::{ + menu::{Menu, MenuItem}, + tray::{TrayIconBuilder, TrayIconEvent, MouseButton, MouseButtonState}, + Manager, Emitter +}; +use tokio::{ + net::{TcpListener, TcpStream}, + sync::{oneshot, Mutex}, + time::sleep, +}; +use tokio_tungstenite::{accept_async, connect_async}; + +struct ResponseChannel { + sender: Option>, +} + +struct WebSocketState { + sender: Option< + futures_util::stream::SplitSink< + tokio_tungstenite::WebSocketStream, + tokio_tungstenite::tungstenite::Message, + >, + >, + response_channel: ResponseChannel, + server_abort: Option>, + config: Config, +} + +async fn is_another_instance_running(port: u16) -> bool { + match connect_async(format!("ws://127.0.0.1:{}", port)).await { + Ok(_) => true, + Err(_) => false, + } +} + +async fn try_bind_ws_port(port: u16) -> Option { + match TcpListener::bind(format!("127.0.0.1:{}", port)).await { + Ok(listener) => Some(listener), + Err(_) => None, + } +} + +async fn start_websocket_server(app_handle: tauri::AppHandle, port: u16) -> Result<(), String> { + let addr = format!("127.0.0.1:{}", port); + + // First ensure any existing server is stopped + { + let state = app_handle.state::>>(); + let mut state = state.lock().await; + if let Some(old_abort) = state.server_abort.take() { + let _ = old_abort.send(()); + // Give it a moment to shut down + sleep(Duration::from_millis(200)).await; + } + } + + // Now try to bind to the port + let listener = TcpListener::bind(&addr) + .await + .map_err(|e| format!("Failed to bind to port {}: {}", port, e))?; + + let (abort_sender, mut abort_receiver) = tokio::sync::oneshot::channel(); + + // Store the new abort sender + { + let state = app_handle.state::>>(); + let mut state = state.lock().await; + state.server_abort = Some(abort_sender); + } + + // Spawn the server task + tokio::spawn(async move { + println!("Starting WebSocket server on port {}", port); + loop { + tokio::select! { + accept_result = listener.accept() => { + match accept_result { + Ok((stream, _)) => { + let app_handle = app_handle.clone(); + tokio::spawn(handle_connection(stream, app_handle)); + } + Err(e) => { + println!("Error accepting connection: {}", e); + break; + } + } + } + _ = &mut abort_receiver => { + println!("WebSocket server shutting down on port {}...", port); + break; + } + } + } + }); + + // Wait a moment to ensure the server has started + sleep(Duration::from_millis(100)).await; + Ok(()) +} + +#[tauri::command] +async fn get_config(state: tauri::State<'_, Arc>>) -> Result { + let state = state.lock().await; + Ok(state.config.clone()) +} + +#[tauri::command] +fn get_config_file_path() -> Result { + match get_config_path() { + Some(path) => Ok(path.to_string_lossy().into_owned()), + None => Err("Could not determine config path".to_string()), + } +} + +#[tauri::command] +async fn update_config( + new_config: Config, + state: tauri::State<'_, Arc>>, + app_handle: tauri::AppHandle, +) -> Result { + // Save the new config first + save_config(&new_config)?; + + // Update the state with new config + { + let mut state = state.lock().await; + state.config = new_config.clone(); + } + + // Start the new server (this will also handle stopping the old one) + start_websocket_server(app_handle, new_config.port).await?; + + Ok(new_config) +} + +#[tauri::command] +async fn reset_config( + state: tauri::State<'_, Arc>>, + app_handle: tauri::AppHandle, +) -> Result { + let config = Config::default(); + save_config(&config)?; + + { + let mut state = state.lock().await; + state.config = config.clone(); + } + + start_websocket_server(app_handle, config.port).await?; + + Ok(config) +} + +#[tauri::command] +async fn send_to_extension( + message: String, + state: tauri::State<'_, Arc>>, +) -> Result<(), String> { + let mut state = state.lock().await; + if let Some(sender) = &mut state.sender { + sender + .send(tokio_tungstenite::tungstenite::Message::Text(message)) + .await + .map_err(|e| format!("Failed to send message: {}", e))?; + Ok(()) + } else { + Err("No active WebSocket connection".to_string()) + } +} + +#[tauri::command] +async fn receive_frontend_response( + response: String, + state: tauri::State<'_, Arc>>, +) -> Result<(), String> { + let mut state = state.lock().await; + if let Some(sender) = state.response_channel.sender.take() { + sender + .send(response) + .map_err(|e| format!("Failed to send response: {:?}", e))?; + } + Ok(()) +} + +#[tauri::command] +fn fetch_video_info(url: String) { + #[cfg(target_os = "windows")] + { + let command = format!("pytubepp \"{}\" -i", &url); + Command::new("cmd") + .args(["/k", command.as_str()]) + .spawn() + .unwrap(); + } + + #[cfg(target_os = "linux")] + { + let command = format!("pytubepp \"{}\" -i", &url); + Command::new("gnome-terminal") + .args(["--", "bash", "-c", command.as_str()]) + .spawn() + .unwrap(); + } + + #[cfg(target_os = "macos")] + { + let command = format!("pytubepp \"{}\" -i", &url); + let escaped_command = command.replace("\"", "\\\""); + + let applescript = format!( + "tell application \"Terminal\"\n\ + do script \"{}\"\n\ + activate\n\ + end tell", + escaped_command + ); + + Command::new("osascript") + .arg("-e") + .arg(applescript) + .spawn() + .unwrap(); + } +} + +#[tauri::command] +fn install_program(icommand: String) { + #[cfg(target_os = "windows")] + { + let command = format!("{}", &icommand); + Command::new("cmd") + .args(["/k", command.as_str()]) + .spawn() + .unwrap(); + } + + #[cfg(target_os = "linux")] + { + let command = format!("{}", &icommand); + Command::new("gnome-terminal") + .args(["--", "bash", "-c", command.as_str()]) + .spawn() + .unwrap(); + } + + #[cfg(target_os = "macos")] + { + let command = format!("{}", &icommand); + let escaped_command = command.replace("\"", "\\\""); + + let applescript = format!( + "tell application \"Terminal\"\n\ + do script \"{}\"\n\ + activate\n\ + end tell", + escaped_command + ); + + Command::new("osascript") + .arg("-e") + .arg(applescript) + .spawn() + .unwrap(); + } +} + +#[tauri::command] +fn download_stream(url: String, stream: String, caption: Option) { + let caption = caption.unwrap_or("none".to_string()); + #[cfg(target_os = "windows")] + { + let command = format!("pytubepp \"{}\" -s {} -c {}", &url, &stream, &caption); + Command::new("cmd") + .args(["/k", command.as_str()]) + .spawn() + .unwrap(); + } + + #[cfg(target_os = "linux")] + { + let command = format!("pytubepp \"{}\" -s {} -c {}", &url, &stream, &caption); + Command::new("gnome-terminal") + .args(["--", "bash", "-c", command.as_str()]) + .spawn() + .unwrap(); + } + + #[cfg(target_os = "macos")] + { + let command = format!("pytubepp \"{}\" -s {} -c {}", &url, &stream, &caption); + let escaped_command = command.replace("\"", "\\\""); + + let applescript = format!( + "tell application \"Terminal\"\n\ + do script \"{}\"\n\ + activate\n\ + end tell", + escaped_command + ); + + Command::new("osascript") + .arg("-e") + .arg(applescript) + .spawn() + .unwrap(); + } +} + +#[cfg_attr(mobile, tauri::mobile_entry_point)] +pub async fn run() { + let _ = fix_path_env::fix(); + + let config = load_config(); + let port = config.port; + + let websocket_state = Arc::new(Mutex::new(WebSocketState { + sender: None, + response_channel: ResponseChannel { sender: None }, + server_abort: None, + config, + })); + + // Check if another instance is running + if is_another_instance_running(port).await { + println!("Another instance is already running. Exiting..."); + std::process::exit(0); + } + + // Try to bind to the WebSocket port with a few retries + let mut port_available = false; + for _ in 0..3 { + if let Some(_) = try_bind_ws_port(port).await { + port_available = true; + break; + } + sleep(Duration::from_millis(100)).await; + } + + // If we couldn't bind to the port after retries, assume another instance is running + if !port_available { + println!("Could not bind to WebSocket port. Another instance might be running. Exiting..."); + std::process::exit(0); + } + + let args: Vec = env::args().collect(); + let start_hidden = args.contains(&"--hidden".to_string()); + + tauri::Builder::default() + .plugin(tauri_plugin_os::init()) + .plugin(tauri_plugin_fs::init()) + .plugin(tauri_plugin_shell::init()) + .manage(websocket_state.clone()) + .setup(move |app| { + // Create menu items + let quit = MenuItem::with_id(app, "quit", "Quit", true, None::<&str>) + .map_err(|e| format!("Failed to create quit menu item: {}", e))?; + let show = MenuItem::with_id(app, "show", "Show", true, None::<&str>) + .map_err(|e| format!("Failed to create show menu item: {}", e))?; + + // Create the menu + let menu = Menu::with_items(app, &[&show, &quit]) + .map_err(|e| format!("Failed to create menu: {}", e))?; + + // Create and store the tray icon + let tray = TrayIconBuilder::with_id("main") + .icon(app.default_window_icon().unwrap().clone()) + .menu(&menu) + .tooltip("PytubePP Helper") + .on_menu_event(|app, event| match event.id.as_ref() { + "show" => { + if let Some(window) = app.get_webview_window("main") { + let _ = window.show(); + let _ = window.set_focus(); + } + } + "quit" => { + app.exit(0); + } + _ => {} + }) + .on_tray_icon_event(|tray, event| { + if let TrayIconEvent::Click { + button: MouseButton::Left, + button_state: MouseButtonState::Up, + .. + } = event { + let app = tray.app_handle(); + if let Some(window) = app.get_webview_window("main") { + let _ = window.show(); + let _ = window.set_focus(); + } + } + }) + .build(app) + .map_err(|e| format!("Failed to create tray: {}", e))?; + + // Store the tray handle in the app state + app.manage(tray); + + let window = app.get_webview_window("main").unwrap(); + if start_hidden { + window.hide().unwrap(); + } + + // Start the initial WebSocket server + let app_handle = app.handle().clone(); + tokio::spawn(async move { + if let Err(e) = start_websocket_server(app_handle, port).await { + println!("Failed to start initial WebSocket server: {}", e); + } + }); + + Ok(()) + }) + .invoke_handler(tauri::generate_handler![ + send_to_extension, + fetch_video_info, + install_program, + download_stream, + receive_frontend_response, + get_config, + update_config, + reset_config, + get_config_file_path + ]) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} + +async fn handle_connection(stream: TcpStream, app_handle: tauri::AppHandle) { + let ws_stream = accept_async(stream).await.unwrap(); + let (ws_sender, mut ws_receiver) = ws_stream.split(); + + // Store the sender in the shared state + { + let state = app_handle.state::>>(); + let mut state = state.lock().await; + state.sender = Some(ws_sender); + } + + println!("New WebSocket connection established"); + + while let Some(msg) = ws_receiver.next().await { + if let Ok(msg) = msg { + if let Ok(text) = msg.to_text() { + println!("Received message: {}", text); + + // Parse the JSON message + if let Ok(json_value) = serde_json::from_str::(text) { + // Create a new channel for this request + let (response_sender, response_receiver) = oneshot::channel(); + { + let state = app_handle.state::>>(); + let mut state = state.lock().await; + state.response_channel.sender = Some(response_sender); + } + + // Emit an event to the frontend + app_handle + .emit_to("main", "websocket-message", json_value) + .unwrap(); + + // Wait for the response from the frontend + let response = response_receiver + .await + .unwrap_or_else(|e| format!("Error receiving response: {:?}", e)); + + // Send the response back through WebSocket + let state = app_handle.state::>>(); + let mut state = state.lock().await; + if let Some(sender) = &mut state.sender { + let _ = sender + .send(tokio_tungstenite::tungstenite::Message::Text(response)) + .await; + } + } + } + } + } + + println!("WebSocket connection closed"); + + // Remove the sender from the shared state when the connection closes + let state = app_handle.state::>>(); + let mut state = state.lock().await; + state.sender = None; +} diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index f0a7ce5..30ba56f 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -1,454 +1,6 @@ -// Prevents additional console window on Windows in release, DO NOT REMOVE!! #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] -mod config; -use config::{Config, load_config, save_config, get_config_path}; -use std::{process::Command, sync::Arc, env, time::Duration}; -use serde_json::Value; -use tauri::{CustomMenuItem, Manager, SystemTray, SystemTrayEvent, SystemTrayMenu}; -use tokio::{net::{TcpListener, TcpStream}, sync::{Mutex, oneshot}, time::sleep}; -use tokio_tungstenite::{accept_async, connect_async}; -use futures_util::{SinkExt, StreamExt}; - -struct ResponseChannel { - sender: Option>, -} - -struct WebSocketState { - sender: Option, tokio_tungstenite::tungstenite::Message>>, - response_channel: ResponseChannel, - server_abort: Option>, - config: Config, -} - -async fn is_another_instance_running(port: u16) -> bool { - match connect_async(format!("ws://127.0.0.1:{}", port)).await { - Ok(_) => true, - Err(_) => false - } -} - -async fn try_bind_ws_port(port: u16) -> Option { - match TcpListener::bind(format!("127.0.0.1:{}", port)).await { - Ok(listener) => Some(listener), - Err(_) => None - } -} - -async fn start_websocket_server(app_handle: tauri::AppHandle, port: u16) -> Result<(), String> { - let addr = format!("127.0.0.1:{}", port); - - // First ensure any existing server is stopped - { - let state = app_handle.state::>>(); - let mut state = state.lock().await; - if let Some(old_abort) = state.server_abort.take() { - let _ = old_abort.send(()); - // Give it a moment to shut down - sleep(Duration::from_millis(200)).await; - } - } - - // Now try to bind to the port - let listener = TcpListener::bind(&addr).await - .map_err(|e| format!("Failed to bind to port {}: {}", port, e))?; - - let (abort_sender, mut abort_receiver) = tokio::sync::oneshot::channel(); - - // Store the new abort sender - { - let state = app_handle.state::>>(); - let mut state = state.lock().await; - state.server_abort = Some(abort_sender); - } - - // Spawn the server task - tokio::spawn(async move { - println!("Starting WebSocket server on port {}", port); - loop { - tokio::select! { - accept_result = listener.accept() => { - match accept_result { - Ok((stream, _)) => { - let app_handle = app_handle.clone(); - tokio::spawn(handle_connection(stream, app_handle)); - } - Err(e) => { - println!("Error accepting connection: {}", e); - break; - } - } - } - _ = &mut abort_receiver => { - println!("WebSocket server shutting down on port {}...", port); - break; - } - } - } - }); - - // Wait a moment to ensure the server has started - sleep(Duration::from_millis(100)).await; - Ok(()) -} - -#[tauri::command] -async fn get_config(state: tauri::State<'_, Arc>>) -> Result { - let state = state.lock().await; - Ok(state.config.clone()) -} - -#[tauri::command] -fn get_config_file_path() -> Result { - match get_config_path() { - Some(path) => Ok(path.to_string_lossy().into_owned()), - None => Err("Could not determine config path".to_string()), - } -} - -#[tauri::command] -async fn update_config( - new_config: Config, - state: tauri::State<'_, Arc>>, - app_handle: tauri::AppHandle, -) -> Result { - // Save the new config first - save_config(&new_config)?; - - // Update the state with new config - { - let mut state = state.lock().await; - state.config = new_config.clone(); - } - - // Start the new server (this will also handle stopping the old one) - start_websocket_server(app_handle, new_config.port).await?; - - Ok(new_config) -} - -#[tauri::command] -async fn reset_config( - state: tauri::State<'_, Arc>>, - app_handle: tauri::AppHandle, -) -> Result { - let config = Config::default(); - save_config(&config)?; - - { - let mut state = state.lock().await; - state.config = config.clone(); - } - - start_websocket_server(app_handle, config.port).await?; - - Ok(config) -} - -#[tauri::command] -async fn send_to_extension( - message: String, - state: tauri::State<'_, Arc>>, -) -> Result<(), String> { - let mut state = state.lock().await; - if let Some(sender) = &mut state.sender { - sender.send(tokio_tungstenite::tungstenite::Message::Text(message)).await - .map_err(|e| format!("Failed to send message: {}", e))?; - Ok(()) - } else { - Err("No active WebSocket connection".to_string()) - } -} - -#[tauri::command] -async fn receive_frontend_response( - response: String, - state: tauri::State<'_, Arc>>, -) -> Result<(), String> { - let mut state = state.lock().await; - if let Some(sender) = state.response_channel.sender.take() { - sender.send(response).map_err(|e| format!("Failed to send response: {:?}", e))?; - } - Ok(()) -} - -#[tauri::command] -fn fetch_video_info(url: String) { - #[cfg(target_os = "windows")] - { - let command = format!("pytubepp \"{}\" -i", &url); - Command::new("cmd") - .args(["/k", command.as_str()]) - .spawn() - .unwrap(); - } - - #[cfg(target_os = "linux")] - { - let command = format!("pytubepp \"{}\" -i", &url); - Command::new("gnome-terminal") - .args(["--", "bash", "-c", command.as_str()]) - .spawn() - .unwrap(); - } - - #[cfg(target_os = "macos")] - { - let command = format!("pytubepp \"{}\" -i", &url); - let escaped_command = command.replace("\"", "\\\""); - - let applescript = format!( - "tell application \"Terminal\"\n\ - do script \"{}\"\n\ - activate\n\ - end tell", - escaped_command - ); - - Command::new("osascript") - .arg("-e") - .arg(applescript) - .spawn() - .unwrap(); - } -} - -#[tauri::command] -fn install_program(icommand: String) { - #[cfg(target_os = "windows")] - { - let command = format!("{}", &icommand); - Command::new("cmd") - .args(["/k", command.as_str()]) - .spawn() - .unwrap(); - } - - #[cfg(target_os = "linux")] - { - let command = format!("{}", &icommand); - Command::new("gnome-terminal") - .args(["--", "bash", "-c", command.as_str()]) - .spawn() - .unwrap(); - } - - #[cfg(target_os = "macos")] - { - let command = format!("{}", &icommand); - let escaped_command = command.replace("\"", "\\\""); - - let applescript = format!( - "tell application \"Terminal\"\n\ - do script \"{}\"\n\ - activate\n\ - end tell", - escaped_command - ); - - Command::new("osascript") - .arg("-e") - .arg(applescript) - .spawn() - .unwrap(); - } -} - -#[tauri::command] -fn download_stream(url: String, stream: String, caption: Option) { - let caption = caption.unwrap_or("none".to_string()); - #[cfg(target_os = "windows")] - { - let command = format!("pytubepp \"{}\" -s {} -c {}", &url, &stream, &caption); - Command::new("cmd") - .args(["/k", command.as_str()]) - .spawn() - .unwrap(); - } - - #[cfg(target_os = "linux")] - { - let command = format!("pytubepp \"{}\" -s {} -c {}", &url, &stream, &caption); - Command::new("gnome-terminal") - .args(["--", "bash", "-c", command.as_str()]) - .spawn() - .unwrap(); - } - - #[cfg(target_os = "macos")] - { - let command = format!("pytubepp \"{}\" -s {} -c {}", &url, &stream, &caption); - let escaped_command = command.replace("\"", "\\\""); - - let applescript = format!( - "tell application \"Terminal\"\n\ - do script \"{}\"\n\ - activate\n\ - end tell", - escaped_command - ); - - Command::new("osascript") - .arg("-e") - .arg(applescript) - .spawn() - .unwrap(); - } -} - #[tokio::main] async fn main() { - let _ = fix_path_env::fix(); - - let config = load_config(); - let port = config.port; - - let websocket_state = Arc::new(Mutex::new(WebSocketState { - sender: None, - response_channel: ResponseChannel { sender: None }, - server_abort: None, - config, - })); - - // Check if another instance is running - if is_another_instance_running(port).await { - println!("Another instance is already running. Exiting..."); - std::process::exit(0); - } - - // Try to bind to the WebSocket port with a few retries - let mut port_available = false; - for _ in 0..3 { - if let Some(_) = try_bind_ws_port(port).await { - port_available = true; - break; - } - sleep(Duration::from_millis(100)).await; - } - - // If we couldn't bind to the port after retries, assume another instance is running - if !port_available { - println!("Could not bind to WebSocket port. Another instance might be running. Exiting..."); - std::process::exit(0); - } - - let args: Vec = env::args().collect(); - let start_hidden = args.contains(&"--hidden".to_string()); - - let tray_menu = SystemTrayMenu::new() - .add_item(CustomMenuItem::new("show".to_string(), "Show")) - .add_item(CustomMenuItem::new("quit".to_string(), "Quit")); - - let system_tray = SystemTray::new().with_menu(tray_menu).with_tooltip("PytubePP Helper"); - - tauri::Builder::default() - .system_tray(system_tray) - .on_system_tray_event(|app, event| match event { - SystemTrayEvent::LeftClick { - position: _, - size: _, - .. - } => { - let window = app.get_window("main").unwrap(); - window.show().unwrap(); - window.set_focus().unwrap(); - } - 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); - } - _ => {} - }, - _ => {} - }) - .manage(websocket_state.clone()) - .setup(move |app| { - let window = app.get_window("main").unwrap(); - - if start_hidden { - window.hide().unwrap(); - } - - // Start the initial WebSocket server - let app_handle = app.handle(); - tokio::spawn(async move { - if let Err(e) = start_websocket_server(app_handle, port).await { - println!("Failed to start initial WebSocket server: {}", e); - } - }); - - Ok(()) - }) - .invoke_handler(tauri::generate_handler![ - send_to_extension, - fetch_video_info, - install_program, - download_stream, - receive_frontend_response, - get_config, - update_config, - reset_config, - get_config_file_path - ]) - .run(tauri::generate_context!()) - .expect("error while running tauri application"); -} - -async fn handle_connection(stream: TcpStream, app_handle: tauri::AppHandle) { - let ws_stream = accept_async(stream).await.unwrap(); - let (ws_sender, mut ws_receiver) = ws_stream.split(); - - // Store the sender in the shared state - { - let state = app_handle.state::>>(); - let mut state = state.lock().await; - state.sender = Some(ws_sender); - } - - println!("New WebSocket connection established"); - - while let Some(msg) = ws_receiver.next().await { - if let Ok(msg) = msg { - if let Ok(text) = msg.to_text() { - println!("Received message: {}", text); - - // Parse the JSON message - if let Ok(json_value) = serde_json::from_str::(text) { - // Create a new channel for this request - let (response_sender, response_receiver) = oneshot::channel(); - { - let state = app_handle.state::>>(); - let mut state = state.lock().await; - state.response_channel.sender = Some(response_sender); - } - - // Emit an event to the frontend - app_handle.emit_all("websocket-message", json_value).unwrap(); - - // Wait for the response from the frontend - let response = response_receiver.await - .unwrap_or_else(|e| format!("Error receiving response: {:?}", e)); - - // Send the response back through WebSocket - let state = app_handle.state::>>(); - let mut state = state.lock().await; - if let Some(sender) = &mut state.sender { - let _ = sender.send(tokio_tungstenite::tungstenite::Message::Text(response)).await; - } - } - } - } - } - - println!("WebSocket connection closed"); - - // Remove the sender from the shared state when the connection closes - let state = app_handle.state::>>(); - let mut state = state.lock().await; - state.sender = None; + pytubepp_helper_lib::run().await; } \ No newline at end of file diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index da66d19..e73bd8c 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,39 +1,38 @@ { + "$schema": "https://schema.tauri.app/config/2", "build": { "beforeDevCommand": "npm run dev", "beforeBuildCommand": "npm run build", - "devPath": "http://localhost:1422", - "distDir": "../dist" + "frontendDist": "../dist", + "devUrl": "http://localhost:1422" }, - "package": { - "productName": "pytubepp-helper", - "version": "0.6.0" + "bundle": { + "active": true, + "targets": "all", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ] }, - "tauri": { - "allowlist": { - "all": false + "productName": "pytubepp-helper", + "mainBinaryName": "pytubepp-helper", + "version": "0.6.0", + "identifier": "com.neosubhamoy.pytubepp.helper", + "plugins": {}, + "app": { + "security": { + "csp": null }, "windows": [ { "title": "PytubePP Helper", - "width": 500, - "height": 320 + "width": 510, + "height": 345, + "useHttpsScheme": true } - ], - "security": { - "csp": null - }, - "bundle": { - "active": true, - "targets": "all", - "identifier": "com.neosubhamoy.pytubepp.helper", - "icon": [ - "icons/32x32.png", - "icons/128x128.png", - "icons/128x128@2x.png", - "icons/icon.icns", - "icons/icon.ico" - ] - } + ] } -} +} \ No newline at end of file diff --git a/src-tauri/tauri.linux.conf.json b/src-tauri/tauri.linux.conf.json index 4a07cc8..922d2e1 100644 --- a/src-tauri/tauri.linux.conf.json +++ b/src-tauri/tauri.linux.conf.json @@ -2,141 +2,40 @@ "build": { "beforeDevCommand": "npm run dev && cargo build --manifest-path=./src-tauri/msghost/Cargo.toml", "beforeBuildCommand": "npm run build && cargo build --release --manifest-path=./src-tauri/msghost/Cargo.toml", - "devPath": "http://localhost:1422", - "distDir": "../dist" + "devUrl": "http://localhost:1422", + "frontendDist": "../dist" }, - "tauri": { - "allowlist": { - "all": false, - "os": { - "all": true - }, - "shell": { - "all": true, - "execute": true, - "sidecar": true, - "open": true, - "scope": [ - { - "name": "detect-windows", - "cmd": "systeminfo", - "args": [] - }, - { - "name": "detect-macos", - "cmd": "sw_vers", - "args": [] - }, - { - "name": "detect-distro", - "cmd": "grep", - "args": ["^ID=", "/etc/os-release"] - }, - { - "name": "detect-pkgmngr", - "cmd": "sh", - "args": ["-c", "command -v apt || command -v dnf || command -v pacman"] - }, - { - "name": "is-apt-installed", - "cmd": "apt", - "args": ["--version"] - }, - { - "name": "is-dnf-installed", - "cmd": "dnf", - "args": ["--version"] - }, - { - "name": "is-python3-installed", - "cmd": "python3", - "args": ["--version"] - }, - { - "name": "is-pip3-installed", - "cmd": "pip3", - "args": ["--version"] - }, - { - "name": "is-winget-installed", - "cmd": "winget", - "args": ["--version"] - }, - { - "name": "is-homebrew-installed", - "cmd": "brew", - "args": ["--version"] - }, - { - "name": "is-python-installed", - "cmd": "python", - "args": ["--version"] - }, - { - "name": "is-pip-installed", - "cmd": "pip", - "args": ["--version"] - }, - { - "name": "is-ffmpeg-installed", - "cmd": "ffmpeg", - "args": ["-version"] - }, - { - "name": "is-nodejs-installed", - "cmd": "node", - "args": ["--version"] - }, - { - "name": "is-pytubepp-installed", - "cmd": "pytubepp", - "args": ["--version"] - }, - { - "name": "fetch-video-info", - "cmd": "pytubepp", - "args": [{ "validator": "\\S+" }, "--raw-info"] - } - ] - }, - "window": { - "all": false, - "close": true, - "hide": true, - "show": true, - "maximize": true, - "minimize": true, - "unmaximize": true, - "unminimize": true, - "startDragging": true - }, - "process": { - "all": false, - "exit": true, - "relaunch": true - } - }, + "identifier": "com.neosubhamoy.pytubepp.helper", + "plugins": {}, + "app": { "windows": [ { "title": "PytubePP Helper", "width": 510, - "height": 345 + "height": 345, + "useHttpsScheme": true } ], "security": { - "csp": null - }, - "bundle": { - "active": true, - "targets": ["deb", "rpm"], - "identifier": "com.neosubhamoy.pytubepp.helper", - "icon": [ - "icons/32x32.png", - "icons/128x128.png", - "icons/128x128@2x.png", - "icons/icon.icns", - "icons/icon.ico" - ], + "csp": null, + "capabilities": [ + "main-capability", + "shell-scope" + ] + } + }, + "bundle": { + "active": true, + "targets": ["deb", "rpm"], + "licenseFile": "../LICENSE", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "linux": { "deb": { "depends": ["python3-pip", "ffmpeg", "gnome-terminal"], "files": { @@ -150,7 +49,6 @@ "rpm": { "epoch": 0, "release": "1", - "license": "MIT", "depends": ["python3-pip", "ffmpeg", "gnome-terminal"], "files": { "/etc/opt/chrome/native-messaging-hosts/com.neosubhamoy.pytubepp.helper.json": "./msghost-manifest/linux/chrome/com.neosubhamoy.pytubepp.helper.json", @@ -160,10 +58,6 @@ "/etc/xdg/autostart/pytubepp-helper-autostart.desktop": "./autostart/pytubepp-helper-autostart.desktop" } } - }, - "systemTray": { - "iconPath": "icons/32x32.png", - "iconAsTemplate": true } } -} +} \ No newline at end of file diff --git a/src-tauri/tauri.macos.conf.json b/src-tauri/tauri.macos.conf.json index 416abaa..1d6d41a 100644 --- a/src-tauri/tauri.macos.conf.json +++ b/src-tauri/tauri.macos.conf.json @@ -2,175 +2,71 @@ "build": { "beforeDevCommand": "[[ -n \"$TARGET_ARCH\" ]] && ARCH=\"$TARGET_ARCH\" || ARCH=\"$(uname -m | sed 's/^arm64$/aarch64/')-apple-darwin\" && cargo build --target=$ARCH --manifest-path=./src-tauri/msghost/Cargo.toml && npm run dev", "beforeBuildCommand": "[[ -n \"$TARGET_ARCH\" ]] && ARCH=\"$TARGET_ARCH\" || ARCH=\"$(uname -m | sed 's/^arm64$/aarch64/')-apple-darwin\" && cargo build --release --target=$ARCH --manifest-path=./src-tauri/msghost/Cargo.toml && node copyFiles.${ARCH}.js && npm run build", - "devPath": "http://localhost:1422", - "distDir": "../dist" + "devUrl": "http://localhost:1422", + "frontendDist": "../dist" }, - "tauri": { - "allowlist": { - "all": false, - "os": { - "all": true - }, - "shell": { - "all": true, - "execute": true, - "sidecar": true, - "open": true, - "scope": [ - { - "name": "detect-windows", - "cmd": "systeminfo", - "args": [] - }, - { - "name": "detect-macos", - "cmd": "sw_vers", - "args": [] - }, - { - "name": "detect-distro", - "cmd": "grep", - "args": ["^ID=", "/etc/os-release"] - }, - { - "name": "detect-pkgmngr", - "cmd": "sh", - "args": ["-c", "command -v apt || command -v dnf || command -v pacman"] - }, - { - "name": "is-apt-installed", - "cmd": "apt", - "args": ["--version"] - }, - { - "name": "is-dnf-installed", - "cmd": "dnf", - "args": ["--version"] - }, - { - "name": "is-python3-installed", - "cmd": "python3", - "args": ["--version"] - }, - { - "name": "is-pip3-installed", - "cmd": "pip3", - "args": ["--version"] - }, - { - "name": "is-winget-installed", - "cmd": "winget", - "args": ["--version"] - }, - { - "name": "is-homebrew-installed", - "cmd": "brew", - "args": ["--version"] - }, - { - "name": "is-python-installed", - "cmd": "python", - "args": ["--version"] - }, - { - "name": "is-pip-installed", - "cmd": "pip", - "args": ["--version"] - }, - { - "name": "is-ffmpeg-installed", - "cmd": "ffmpeg", - "args": ["-version"] - }, - { - "name": "is-nodejs-installed", - "cmd": "node", - "args": ["--version"] - }, - { - "name": "is-pytubepp-installed", - "cmd": "pytubepp", - "args": ["--version"] - }, - { - "name": "fetch-video-info", - "cmd": "pytubepp", - "args": [{ "validator": "\\S+" }, "--raw-info"] - } - ] - }, - "fs": { - "all": true, - "copyFile": true, - "exists": true, - "createDir": true, - "scope": [ - "$HOME/Library/LaunchAgents/", - "$HOME/Library/Application Support/Google/Chrome/NativeMessagingHosts/", - "$HOME/Library/Application Support/Chromium/NativeMessagingHosts/", - "$HOME/Library/Application Support/Mozilla/NativeMessagingHosts/", - "$RESOURCE/pytubepp-helper-msghost.json", - "$RESOURCE/pytubepp-helper-msghost-moz.json", - "$RESOURCE/pytubepp-helper-msghost", - "$RESOURCE/pytubepp-helper-autostart.plist" - ] - }, - "path": { - "all": true - }, - "window": { - "all": false, - "close": true, - "hide": true, - "show": true, - "maximize": true, - "minimize": true, - "unmaximize": true, - "unminimize": true, - "startDragging": true - }, - "process": { - "all": false, - "exit": true, - "relaunch": true - } - }, + "identifier": "com.neosubhamoy.pytubepp.helper", + "plugins": {}, + "app": { "windows": [ { "title": "PytubePP Helper", "width": 515, - "height": 365 + "height": 365, + "useHttpsScheme": true } ], "security": { - "csp": null - }, - "bundle": { - "active": true, - "targets": ["app", "dmg"], - "identifier": "com.neosubhamoy.pytubepp.helper", - "icon": [ - "icons/32x32.png", - "icons/128x128.png", - "icons/128x128@2x.png", - "icons/icon.icns", - "icons/icon.ico" - ], - "macOS": { - "minimumSystemVersion": "10.13", - "license": "../LICENSE", - "providerShortName": "neosubhamoy" - }, - "resources": [ - "pytubepp-helper-msghost.json", - "pytubepp-helper-msghost-moz.json", - "pytubepp-helper-msghost", - "pytubepp-helper-autostart.plist" + "csp": null, + "capabilities": [ + "main-capability", + "shell-scope", + { + "identifier": "fs-scope", + "description": "allowed file system scopes", + "permissions": [ + { + "identifier": "fs:scope", + "allow": [ + { "path": "$HOME/Library/LaunchAgents/" }, + { "path": "$HOME/Library/Application Support/Google/Chrome/NativeMessagingHosts/" }, + { "path": "$HOME/Library/Application Support/Chromium/NativeMessagingHosts/" }, + { "path": "$HOME/Library/Application Support/Mozilla/NativeMessagingHosts/" }, + { "path": "$HOME/Library/LaunchAgents/*" }, + { "path": "$HOME/Library/Application Support/Google/Chrome/NativeMessagingHosts/*" }, + { "path": "$HOME/Library/Application Support/Chromium/NativeMessagingHosts/*" }, + { "path": "$HOME/Library/Application Support/Mozilla/NativeMessagingHosts/*" }, + { "path": "$RESOURCE/pytubepp-helper-msghost.json" }, + { "path": "$RESOURCE/pytubepp-helper-msghost-moz.json" }, + { "path": "$RESOURCE/pytubepp-helper-msghost" }, + { "path": "$RESOURCE/pytubepp-helper-autostart.plist" } + ] + } + ] + } ] - }, - "systemTray": { - "iconPath": "icons/32x32.png", - "iconAsTemplate": true } + }, + "bundle": { + "active": true, + "targets": ["app", "dmg"], + "licenseFile": "../LICENSE", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "macOS": { + "minimumSystemVersion": "10.13", + "providerShortName": "neosubhamoy" + }, + "resources": [ + "pytubepp-helper-msghost.json", + "pytubepp-helper-msghost-moz.json", + "pytubepp-helper-msghost", + "pytubepp-helper-autostart.plist" + ] } } \ No newline at end of file diff --git a/src-tauri/tauri.windows.conf.json b/src-tauri/tauri.windows.conf.json index d13401b..ec71f2b 100644 --- a/src-tauri/tauri.windows.conf.json +++ b/src-tauri/tauri.windows.conf.json @@ -2,167 +2,66 @@ "build": { "beforeDevCommand": "cargo build --manifest-path=./src-tauri/msghost/Cargo.toml && npm run dev", "beforeBuildCommand": "cargo build --release --manifest-path=./src-tauri/msghost/Cargo.toml && node copyFiles.js && npm run build", - "devPath": "http://localhost:1422", - "distDir": "../dist" + "devUrl": "http://localhost:1422", + "frontendDist": "../dist" }, - "tauri": { - "allowlist": { - "all": false, - "os": { - "all": true - }, - "shell": { - "all": true, - "execute": true, - "sidecar": true, - "open": true, - "scope": [ - { - "name": "detect-windows", - "cmd": "systeminfo", - "args": [] - }, - { - "name": "detect-macos", - "cmd": "sw_vers", - "args": [] - }, - { - "name": "detect-distro", - "cmd": "grep", - "args": ["^ID=", "/etc/os-release"] - }, - { - "name": "detect-pkgmngr", - "cmd": "sh", - "args": ["-c", "command -v apt || command -v dnf || command -v pacman"] - }, - { - "name": "is-apt-installed", - "cmd": "apt", - "args": ["--version"] - }, - { - "name": "is-dnf-installed", - "cmd": "dnf", - "args": ["--version"] - }, - { - "name": "is-python3-installed", - "cmd": "python3", - "args": ["--version"] - }, - { - "name": "is-pip3-installed", - "cmd": "pip3", - "args": ["--version"] - }, - { - "name": "is-winget-installed", - "cmd": "winget", - "args": ["--version"] - }, - { - "name": "is-homebrew-installed", - "cmd": "brew", - "args": ["--version"] - }, - { - "name": "is-python-installed", - "cmd": "python", - "args": ["--version"] - }, - { - "name": "is-pip-installed", - "cmd": "pip", - "args": ["--version"] - }, - { - "name": "is-ffmpeg-installed", - "cmd": "ffmpeg", - "args": ["-version"] - }, - { - "name": "is-nodejs-installed", - "cmd": "node", - "args": ["--version"] - }, - { - "name": "is-pytubepp-installed", - "cmd": "pytubepp", - "args": ["--version"] - }, - { - "name": "fetch-video-info", - "cmd": "pytubepp", - "args": [{ "validator": "\\S+" }, "--raw-info"] - } - ] - }, - "fs": { - "scope": [ - "$RESOURCE/pytubepp-helper-msghost.json", - "$RESOURCE/pytubepp-helper-msghost-moz.json", - "$RESOURCE/pytubepp-helper-msghost.exe" - ] - }, - "window": { - "all": false, - "close": true, - "hide": true, - "show": true, - "maximize": true, - "minimize": true, - "unmaximize": true, - "unminimize": true, - "startDragging": true - }, - "process": { - "all": false, - "exit": true, - "relaunch": true - } - }, + "identifier": "com.neosubhamoy.pytubepp.helper", + "plugins": {}, + "app": { "windows": [ { "title": "PytubePP Helper", "width": 510, - "height": 345 + "height": 345, + "useHttpsScheme": true } ], "security": { - "csp": null - }, - "bundle": { - "active": true, - "targets": ["msi", "nsis"], - "identifier": "com.neosubhamoy.pytubepp.helper", - "icon": [ - "icons/32x32.png", - "icons/128x128.png", - "icons/128x128@2x.png", - "icons/icon.icns", - "icons/icon.ico" - ], - "windows": { - "wix": { - "fragmentPaths": ["installer/windows/wix-fragment-registry.wxs"], - "componentRefs": ["PytubeppHelperFragmentRegistryEntries"], - "license": "../LICENSE" - }, - "nsis": { - "template": "installer/windows/nsis-template.nsi" + "csp": null, + "capabilities": [ + "main-capability", + "shell-scope", + { + "identifier": "fs-scope", + "description": "allowed file system scopes", + "permissions": [ + { + "identifier": "fs:scope", + "allow": [ + { "path": "$RESOURCE/pytubepp-helper-msghost.json" }, + { "path": "$RESOURCE/pytubepp-helper-msghost-moz.json" }, + { "path": "$RESOURCE/pytubepp-helper-msghost.exe" } + ] + } + ] } - }, - "resources": [ - "pytubepp-helper-msghost.json", - "pytubepp-helper-msghost-moz.json", - "pytubepp-helper-msghost.exe" ] - }, - "systemTray": { - "iconPath": "icons/icon.ico", - "iconAsTemplate": true } + }, + "bundle": { + "active": true, + "targets": ["msi", "nsis"], + "licenseFile": "../LICENSE", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "windows": { + "wix": { + "fragmentPaths": ["installer/windows/wix-fragment-registry.wxs"], + "componentRefs": ["PytubeppHelperFragmentRegistryEntries"] + }, + "nsis": { + "template": "installer/windows/nsis-template.nsi" + } + }, + "resources": [ + "pytubepp-helper-msghost.json", + "pytubepp-helper-msghost-moz.json", + "pytubepp-helper-msghost.exe" + ] } } \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index 2b67309..2f5b6ff 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,8 +1,8 @@ import React from "react" import { useEffect } from "react"; -import { invoke } from "@tauri-apps/api/tauri"; +import { invoke } from "@tauri-apps/api/core"; import { listen } from "@tauri-apps/api/event"; -import { appWindow } from '@tauri-apps/api/window'; +import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow"; import { ThemeProvider } from "@/components/theme-provider"; import { WebSocketMessage } from "@/types"; import { sendStreamInfo } from "@/lib/utils"; @@ -10,6 +10,8 @@ import { Toaster } from "@/components/ui/toaster"; import { TooltipProvider } from "@/components/ui/tooltip"; function App({ children }: { children: React.ReactNode }) { + const appWindow = getCurrentWebviewWindow() + useEffect(() => { const handleCloseRequested = (event: any) => { event.preventDefault(); diff --git a/src/lib/platform-utils.ts b/src/lib/platform-utils.ts index 02ce4c9..55aa6af 100644 --- a/src/lib/platform-utils.ts +++ b/src/lib/platform-utils.ts @@ -1,4 +1,4 @@ -import { platform } from "@tauri-apps/api/os"; +import { platform } from "@tauri-apps/plugin-os"; import { detectDistro, detectMacOs, detectPackageManager, detectWindows, extractDistroId, extractPkgMngrName, extractVersion } from "@/lib/utils"; import { PlatformInfo } from "@/types"; @@ -16,7 +16,7 @@ export async function getPlatformInfo(): Promise { const currentPlatform = await platform(); switch (currentPlatform) { - case 'win32': { + case 'windows': { const windowsResult = await detectWindows(); if (windowsResult) { return { @@ -27,8 +27,7 @@ export async function getPlatformInfo(): Promise { } break; } - - case 'darwin': { + case 'macos': { const macResult = await detectMacOs(); if (macResult) { return { diff --git a/src/lib/utils.ts b/src/lib/utils.ts index d9a2340..87f48f6 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,9 +1,9 @@ import { type ClassValue, clsx } from "clsx" import { twMerge } from "tailwind-merge" -import { Command } from '@tauri-apps/api/shell'; -import { invoke } from "@tauri-apps/api"; -import { fs } from '@tauri-apps/api'; -import { join, resourceDir, homeDir } from '@tauri-apps/api/path'; +import { Command } from "@tauri-apps/plugin-shell"; +import { invoke } from "@tauri-apps/api/core"; +import { join, resourceDir, homeDir } from "@tauri-apps/api/path"; +import * as fs from "@tauri-apps/plugin-fs" export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)) @@ -11,7 +11,7 @@ export function cn(...inputs: ClassValue[]) { export async function isInstalled(program: string, arg: string): Promise<{ installed: boolean, output: string | null }> { try{ - const output = await new Command('is-' + program + '-installed', [arg]).execute(); + const output = await Command.create('is-' + program + '-installed', [arg]).execute(); if (output.code === 0) { return { installed: true, output: output.stdout }; } else { @@ -25,7 +25,7 @@ export async function isInstalled(program: string, arg: string): Promise<{ insta export async function detectWindows(): Promise { try{ - const output = await new Command('detect-windows', []).execute(); + const output = await Command.create('detect-windows', []).execute(); if (output.code === 0) { return output.stdout; } else { @@ -39,7 +39,7 @@ export async function detectWindows(): Promise { export async function detectMacOs(): Promise { try{ - const output = await new Command('detect-macos', []).execute(); + const output = await Command.create('detect-macos', []).execute(); if (output.code === 0) { return output.stdout; } else { @@ -53,7 +53,7 @@ export async function detectMacOs(): Promise { export async function detectDistro(): Promise { try{ - const output = await new Command('detect-distro', ['^ID=', '/etc/os-release']).execute(); + const output = await Command.create('detect-distro', ['^ID=', '/etc/os-release']).execute(); if (output.code === 0) { return output.stdout; } else { @@ -67,7 +67,7 @@ export async function detectDistro(): Promise { export async function detectPackageManager(): Promise { try{ - const output = await new Command('detect-pkgmngr', ['-c', 'command -v apt || command -v dnf || command -v pacman']).execute(); + const output = await Command.create('detect-pkgmngr', ['-c', 'command -v apt || command -v dnf || command -v pacman']).execute(); if (output.code === 0) { return output.stdout; } else { @@ -118,7 +118,7 @@ export function extractVersion(output: string): string | null { export async function sendStreamInfo(url: string) { const fetchData = async () => { try { - const output = await new Command('fetch-video-info', [url, '--raw-info']).execute(); + const output = await Command.create('fetch-video-info', [url, '--raw-info']).execute(); if (output.code === 0) { console.log(output.stdout); const sendStreamData = async () => { @@ -174,7 +174,7 @@ export async function registerMacFiles() { await fs.copyFile(sourcePath, destinationPath); console.log(`File ${file.source} copied successfully to ${destinationPath}`); } else { - await fs.createDir(destinationDir, { recursive: true }) + await fs.mkdir(destinationDir, { recursive: true }) console.log(`Created dir ${destinationDir}`); await fs.copyFile(sourcePath, destinationPath); console.log(`File ${file.source} copied successfully to ${destinationPath}`); diff --git a/src/pages/home.tsx b/src/pages/home.tsx index a2f6851..f0c3ae9 100644 --- a/src/pages/home.tsx +++ b/src/pages/home.tsx @@ -1,7 +1,7 @@ import clsx from "clsx"; import { useState, useEffect } from "react"; import { Link } from "react-router-dom"; -import { invoke } from "@tauri-apps/api/tauri"; +import { invoke } from "@tauri-apps/api/core"; import { Button } from "@/components/ui/button"; import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert" import { InstalledPrograms } from "@/types"; diff --git a/src/pages/settings.tsx b/src/pages/settings.tsx index ea82f2e..6b701a2 100644 --- a/src/pages/settings.tsx +++ b/src/pages/settings.tsx @@ -2,7 +2,7 @@ import clsx from "clsx"; import { z } from "zod"; import { useState, useEffect, useRef } from "react"; import { Link } from "react-router-dom"; -import { invoke } from "@tauri-apps/api/tauri"; +import { invoke } from "@tauri-apps/api/core"; import { getVersion } from "@tauri-apps/api/app"; import { Button } from "@/components/ui/button"; import { ArrowLeft, Github, Globe, History, Save } from "lucide-react";