diff --git a/package-lock.json b/package-lock.json index 4a9d919..2a49882 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,26 +10,26 @@ "hasInstallScript": true, "dependencies": { "@mdi/font": "^7.4.47", - "@yume-chan/adb": "^0.0.24", + "@xterm/addon-fit": "^0.10.0", + "@xterm/xterm": "^5.5.0", + "@yume-chan/adb": "^2.3.1", "@yume-chan/adb-backend-webusb": "^0.0.19", - "@yume-chan/adb-scrcpy": "^0.0.24", - "@yume-chan/android-bin": "^0.0.24", - "@yume-chan/aoa": "^0.0.24", - "@yume-chan/event": "^0.0.24", - "@yume-chan/fetch-scrcpy-server": "^0.0.24", - "@yume-chan/pcm-player": "^0.0.24", - "@yume-chan/scrcpy": "^0.0.24", - "@yume-chan/scrcpy-decoder-tinyh264": "^0.0.24", - "@yume-chan/scrcpy-decoder-webcodecs": "^0.0.24", - "@yume-chan/stream-extra": "^0.0.24", - "@yume-chan/struct": "^0.0.24", + "@yume-chan/adb-scrcpy": "^2.3.0", + "@yume-chan/android-bin": "^2.1.0", + "@yume-chan/aoa": "^1.0.0", + "@yume-chan/event": "^2.0.0", + "@yume-chan/fetch-scrcpy-server": "^1.0.0", + "@yume-chan/pcm-player": "^1.0.0", + "@yume-chan/scrcpy": "^2.3.0", + "@yume-chan/scrcpy-decoder-tinyh264": "^2.1.0", + "@yume-chan/scrcpy-decoder-webcodecs": "^2.1.0", + "@yume-chan/stream-extra": "^2.1.0", + "@yume-chan/struct": "^2.0.1", "file-saver": "^2.0.5", "markdown-it": "^14.1.0", "vue": "^3.3.4", "vuetify": "^3.3.5", - "webm-muxer": "^5.0.3", - "xterm": "^5.3.0", - "xterm-addon-fit": "^0.8.0" + "webm-muxer": "^5.0.3" }, "devDependencies": { "@mdi/font": "^7.1.96", @@ -40,6 +40,7 @@ "@types/three": "^0.149.0", "@vitejs/plugin-vue": "^5.0.4", "@vitejs/plugin-vue-jsx": "^3.0.0", + "@vue/compiler-sfc": "^3.5.24", "@vue/eslint-config-prettier": "^9.0.0", "@vue/eslint-config-typescript": "^12.0.0", "@vue/tsconfig": "^0.5.1", @@ -298,18 +299,18 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -340,12 +341,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", - "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.3" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -441,13 +442,13 @@ } }, "node_modules/@babel/types": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", - "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1022,9 +1023,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { @@ -2146,22 +2147,66 @@ } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", - "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "version": "3.5.24", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.24.tgz", + "integrity": "sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.13", - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13", + "@babel/parser": "^7.28.5", + "@vue/compiler-core": "3.5.24", + "@vue/compiler-dom": "3.5.24", + "@vue/compiler-ssr": "3.5.24", + "@vue/shared": "3.5.24", "estree-walker": "^2.0.2", - "magic-string": "^0.30.11", - "postcss": "^8.4.48", - "source-map-js": "^1.2.0" + "magic-string": "^0.30.21", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-core": { + "version": "3.5.24", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.24.tgz", + "integrity": "sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/shared": "3.5.24", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" } }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-dom": { + "version": "3.5.24", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.24.tgz", + "integrity": "sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.24", + "@vue/shared": "3.5.24" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-ssr": { + "version": "3.5.24", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.24.tgz", + "integrity": "sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.24", + "@vue/shared": "3.5.24" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/shared": { + "version": "3.5.24", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.24.tgz", + "integrity": "sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==", + "dev": true, + "license": "MIT" + }, "node_modules/@vue/compiler-ssr": { "version": "3.5.13", "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", @@ -2428,17 +2473,32 @@ "node": "^14.14.0 || >=16.0.0" } }, + "node_modules/@xterm/addon-fit": { + "version": "0.10.0", + "resolved": "https://registry.npmmirror.com/@xterm/addon-fit/-/addon-fit-0.10.0.tgz", + "integrity": "sha512-UFYkDm4HUahf2lnEyHvio51TNGiLK66mqP2JoATy7hRZeXaGMRDr00JiSF7m63vR5WKATF605yEggJKsw0JpMQ==", + "license": "MIT", + "peerDependencies": { + "@xterm/xterm": "^5.0.0" + } + }, + "node_modules/@xterm/xterm": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/@xterm/xterm/-/xterm-5.5.0.tgz", + "integrity": "sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==", + "license": "MIT" + }, "node_modules/@yume-chan/adb": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/@yume-chan/adb/-/adb-0.0.24.tgz", - "integrity": "sha512-Q9zg2gcht4YSKi1fXZFksWL3iyUPe4TQnuBcDNpZanIxaX/yKOoni3i6cWKsKHJm6xvmL+r96nzAO6C/a83CKg==", + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/@yume-chan/adb/-/adb-2.3.1.tgz", + "integrity": "sha512-CRpJrnQ1Rg6kiAqAkgeussIomikJpywemvnt7SZcjxtvZTBKS/UPefFRtqfNX37EoM0sOglMI5KL6ozuHfiqQQ==", "license": "MIT", "dependencies": { - "@yume-chan/async": "^2.2.0", - "@yume-chan/event": "^0.0.24", - "@yume-chan/no-data-view": "^0.0.24", - "@yume-chan/stream-extra": "^0.0.24", - "@yume-chan/struct": "^0.0.24" + "@yume-chan/async": "^4.1.3", + "@yume-chan/event": "^2.0.0", + "@yume-chan/no-data-view": "^2.0.0", + "@yume-chan/stream-extra": "^2.1.0", + "@yume-chan/struct": "^2.0.1" } }, "node_modules/@yume-chan/adb-backend-webusb": { @@ -2519,6 +2579,58 @@ "@yume-chan/adb": "^0.0.24" } }, + "node_modules/@yume-chan/adb-credential-web/node_modules/@yume-chan/adb": { + "version": "0.0.24", + "resolved": "https://registry.npmmirror.com/@yume-chan/adb/-/adb-0.0.24.tgz", + "integrity": "sha512-Q9zg2gcht4YSKi1fXZFksWL3iyUPe4TQnuBcDNpZanIxaX/yKOoni3i6cWKsKHJm6xvmL+r96nzAO6C/a83CKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@yume-chan/async": "^2.2.0", + "@yume-chan/event": "^0.0.24", + "@yume-chan/no-data-view": "^0.0.24", + "@yume-chan/stream-extra": "^0.0.24", + "@yume-chan/struct": "^0.0.24" + } + }, + "node_modules/@yume-chan/adb-credential-web/node_modules/@yume-chan/event": { + "version": "0.0.24", + "resolved": "https://registry.npmmirror.com/@yume-chan/event/-/event-0.0.24.tgz", + "integrity": "sha512-GSiAR+H/hZRTbLxtzew6oQfwkJGIgGjqloqH0YPlDvzhNU4/9EIj+9CMGil6zdwBJkBM7mOUuEjB1ZIdHGBLqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@yume-chan/async": "^2.2.0" + } + }, + "node_modules/@yume-chan/adb-credential-web/node_modules/@yume-chan/no-data-view": { + "version": "0.0.24", + "resolved": "https://registry.npmmirror.com/@yume-chan/no-data-view/-/no-data-view-0.0.24.tgz", + "integrity": "sha512-I9R1HPcq3/wFHX2PsABz9ajpfujpmkpUPNh+kQSbAZ3bWhsE9OxQ3mC2YWT7tQenxdEdoFKurPRMqjt/RF8/DA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@yume-chan/adb-credential-web/node_modules/@yume-chan/stream-extra": { + "version": "0.0.24", + "resolved": "https://registry.npmmirror.com/@yume-chan/stream-extra/-/stream-extra-0.0.24.tgz", + "integrity": "sha512-MBXpNfKAK16jAkA7ZmVP6+SeAcUfuVv4ayrZq5rYFbyrA/s9v8aTgYbHAjzD8xEDcd2st7s9MgrFhMWPbbyJQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@yume-chan/async": "^2.2.0", + "@yume-chan/struct": "^0.0.24" + } + }, + "node_modules/@yume-chan/adb-credential-web/node_modules/@yume-chan/struct": { + "version": "0.0.24", + "resolved": "https://registry.npmmirror.com/@yume-chan/struct/-/struct-0.0.24.tgz", + "integrity": "sha512-FobkiWVpTbRcheCuD08/qqBf2wU18o1+OpuZguHrvFyjvHC8GPmG4oKkn/UD5Nrh8/7DDNHROmtbhs/dW8IJDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@yume-chan/no-data-view": "^0.0.24" + } + }, "node_modules/@yume-chan/adb-daemon-webusb": { "version": "0.0.24", "resolved": "https://registry.npmjs.org/@yume-chan/adb-daemon-webusb/-/adb-daemon-webusb-0.0.24.tgz", @@ -2532,35 +2644,99 @@ "@yume-chan/struct": "^0.0.24" } }, - "node_modules/@yume-chan/adb-scrcpy": { + "node_modules/@yume-chan/adb-daemon-webusb/node_modules/@yume-chan/adb": { "version": "0.0.24", - "resolved": "https://registry.npmjs.org/@yume-chan/adb-scrcpy/-/adb-scrcpy-0.0.24.tgz", - "integrity": "sha512-LXVzZAzLu2ShiKQeq41xhvn1GTGpe0D6CDITCuFL3Q0e07EWp3H6bqjtixEs4ie5OQ2K7IqBoK1nsFYaFd4xrQ==", + "resolved": "https://registry.npmmirror.com/@yume-chan/adb/-/adb-0.0.24.tgz", + "integrity": "sha512-Q9zg2gcht4YSKi1fXZFksWL3iyUPe4TQnuBcDNpZanIxaX/yKOoni3i6cWKsKHJm6xvmL+r96nzAO6C/a83CKg==", + "dev": true, "license": "MIT", "dependencies": { - "@yume-chan/adb": "^0.0.24", "@yume-chan/async": "^2.2.0", "@yume-chan/event": "^0.0.24", - "@yume-chan/scrcpy": "^0.0.24", + "@yume-chan/no-data-view": "^0.0.24", "@yume-chan/stream-extra": "^0.0.24", "@yume-chan/struct": "^0.0.24" } }, - "node_modules/@yume-chan/android-bin": { + "node_modules/@yume-chan/adb-daemon-webusb/node_modules/@yume-chan/event": { "version": "0.0.24", - "resolved": "https://registry.npmjs.org/@yume-chan/android-bin/-/android-bin-0.0.24.tgz", - "integrity": "sha512-X/0fqFHUDA046uikckQ/OxKYJb612Gbfy7i+wUo5EYkVh/UQL8x62QaPQ0h+DlSTeUS3721yv1zXaRXU0G0hGA==", + "resolved": "https://registry.npmmirror.com/@yume-chan/event/-/event-0.0.24.tgz", + "integrity": "sha512-GSiAR+H/hZRTbLxtzew6oQfwkJGIgGjqloqH0YPlDvzhNU4/9EIj+9CMGil6zdwBJkBM7mOUuEjB1ZIdHGBLqQ==", + "dev": true, "license": "MIT", "dependencies": { - "@yume-chan/adb": "^0.0.24", - "@yume-chan/stream-extra": "^0.0.24", + "@yume-chan/async": "^2.2.0" + } + }, + "node_modules/@yume-chan/adb-daemon-webusb/node_modules/@yume-chan/no-data-view": { + "version": "0.0.24", + "resolved": "https://registry.npmmirror.com/@yume-chan/no-data-view/-/no-data-view-0.0.24.tgz", + "integrity": "sha512-I9R1HPcq3/wFHX2PsABz9ajpfujpmkpUPNh+kQSbAZ3bWhsE9OxQ3mC2YWT7tQenxdEdoFKurPRMqjt/RF8/DA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@yume-chan/adb-daemon-webusb/node_modules/@yume-chan/stream-extra": { + "version": "0.0.24", + "resolved": "https://registry.npmmirror.com/@yume-chan/stream-extra/-/stream-extra-0.0.24.tgz", + "integrity": "sha512-MBXpNfKAK16jAkA7ZmVP6+SeAcUfuVv4ayrZq5rYFbyrA/s9v8aTgYbHAjzD8xEDcd2st7s9MgrFhMWPbbyJQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@yume-chan/async": "^2.2.0", "@yume-chan/struct": "^0.0.24" } }, - "node_modules/@yume-chan/aoa": { + "node_modules/@yume-chan/adb-daemon-webusb/node_modules/@yume-chan/struct": { "version": "0.0.24", - "resolved": "https://registry.npmjs.org/@yume-chan/aoa/-/aoa-0.0.24.tgz", - "integrity": "sha512-Qzp9MmuhvdwJ+ADRZZ3t906R9YpN2KL6rp21EAjvdghx26J1ynoDGUY5zn0Fejffo2lVrEA/MGEHfIve/Hz7RQ==", + "resolved": "https://registry.npmmirror.com/@yume-chan/struct/-/struct-0.0.24.tgz", + "integrity": "sha512-FobkiWVpTbRcheCuD08/qqBf2wU18o1+OpuZguHrvFyjvHC8GPmG4oKkn/UD5Nrh8/7DDNHROmtbhs/dW8IJDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@yume-chan/no-data-view": "^0.0.24" + } + }, + "node_modules/@yume-chan/adb-scrcpy": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@yume-chan/adb-scrcpy/-/adb-scrcpy-2.3.0.tgz", + "integrity": "sha512-Zjfw3LGxzimkoPymGP0Bs3xFUGAW2GCOUvrNpTCxswky3iUK4nLc9ZVJxm6AkLV58DAXP8KkQrCgJ4V78lXN5Q==", + "license": "MIT", + "dependencies": { + "@yume-chan/adb": "^2.1.0", + "@yume-chan/async": "^4.1.3", + "@yume-chan/event": "^2.0.0", + "@yume-chan/scrcpy": "^2.3.0", + "@yume-chan/stream-extra": "^2.1.0", + "@yume-chan/struct": "^2.0.1" + } + }, + "node_modules/@yume-chan/adb-scrcpy/node_modules/@yume-chan/async": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/@yume-chan/async/-/async-4.1.3.tgz", + "integrity": "sha512-0vzhNJMkWUPyjKzUK4rqHEeCU6YQtF78RsB1kFRB6Y2BLupmEQNxcSb0mjKabPL9jZpCCiLa5KL8oTOJClUVaw==", + "license": "MIT" + }, + "node_modules/@yume-chan/adb/node_modules/@yume-chan/async": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/@yume-chan/async/-/async-4.1.3.tgz", + "integrity": "sha512-0vzhNJMkWUPyjKzUK4rqHEeCU6YQtF78RsB1kFRB6Y2BLupmEQNxcSb0mjKabPL9jZpCCiLa5KL8oTOJClUVaw==", + "license": "MIT" + }, + "node_modules/@yume-chan/android-bin": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/@yume-chan/android-bin/-/android-bin-2.1.0.tgz", + "integrity": "sha512-is97IQwmSTmGCLe8GKO3rRDib2is6Xumo9KzeArgHwizIF0XnpCUm/xIVJLnpifR9PlMyLldDUttTZMTnaNivg==", + "license": "MIT", + "dependencies": { + "@yume-chan/adb": "^2.1.0", + "@yume-chan/stream-extra": "^2.1.0", + "@yume-chan/struct": "^2.0.1" + } + }, + "node_modules/@yume-chan/aoa": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@yume-chan/aoa/-/aoa-1.0.0.tgz", + "integrity": "sha512-sWZJi//kjCypP46WdSJkK3c1Sevgi7GfPz10gZkGMNNVzBKE8yLGcmUpDb1ILku6iD5PNu+imbcdqn3iCemBTA==", "license": "MIT", "dependencies": { "@types/w3c-web-usb": "^1.0.10" @@ -2585,18 +2761,24 @@ } }, "node_modules/@yume-chan/event": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/@yume-chan/event/-/event-0.0.24.tgz", - "integrity": "sha512-GSiAR+H/hZRTbLxtzew6oQfwkJGIgGjqloqH0YPlDvzhNU4/9EIj+9CMGil6zdwBJkBM7mOUuEjB1ZIdHGBLqQ==", + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@yume-chan/event/-/event-2.0.0.tgz", + "integrity": "sha512-z56MDOcX1QlgLUCuA6th3r10negVb7A3gzY//TwSC9ZOvzuRlrAqXcxZf1T3hHfNMk/NFO9RIgQgegXYSfaqLw==", "license": "MIT", "dependencies": { - "@yume-chan/async": "^2.2.0" + "@yume-chan/async": "^4.0.2" } }, + "node_modules/@yume-chan/event/node_modules/@yume-chan/async": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/@yume-chan/async/-/async-4.1.3.tgz", + "integrity": "sha512-0vzhNJMkWUPyjKzUK4rqHEeCU6YQtF78RsB1kFRB6Y2BLupmEQNxcSb0mjKabPL9jZpCCiLa5KL8oTOJClUVaw==", + "license": "MIT" + }, "node_modules/@yume-chan/fetch-scrcpy-server": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/@yume-chan/fetch-scrcpy-server/-/fetch-scrcpy-server-0.0.24.tgz", - "integrity": "sha512-atwqE/Abq/CYyynxeAkpkSIVBsHwsMjKKAbbBL7yZZ0u6doLpWxeV8mpmc1lgNI9usf4lE7lqdhlYhMVUZp8kA==", + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@yume-chan/fetch-scrcpy-server/-/fetch-scrcpy-server-1.0.0.tgz", + "integrity": "sha512-k+Cc4eeiOw4AFhHpHgmTdEXTudqRLMangGioxNvX6lwd9yrvYh4jtulu3YCUu84MS0YDNuFneno/DrLj06pp1A==", "license": "MIT", "dependencies": { "gh-release-fetch": "^4.0.3" @@ -2606,76 +2788,108 @@ } }, "node_modules/@yume-chan/no-data-view": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/@yume-chan/no-data-view/-/no-data-view-0.0.24.tgz", - "integrity": "sha512-I9R1HPcq3/wFHX2PsABz9ajpfujpmkpUPNh+kQSbAZ3bWhsE9OxQ3mC2YWT7tQenxdEdoFKurPRMqjt/RF8/DA==", + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@yume-chan/no-data-view/-/no-data-view-2.0.0.tgz", + "integrity": "sha512-0GRJrrt6wtZlbiE92jocHOnaAvjQ+Y7xwwhwOPqLkwf90Kj1JIHJ5Zh4wJVQSQIkzfRSOpM+jeEQdC2K15snlA==", "license": "MIT" }, "node_modules/@yume-chan/pcm-player": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/@yume-chan/pcm-player/-/pcm-player-0.0.24.tgz", - "integrity": "sha512-yYUZILSILY4M1wb/2i3ukuYmJEDF3em/F2nNxzsSdyyZRZy0qH1xnlkcHLudWmAXTuVTmNGjwVRG+X6RQrIzDA==", + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@yume-chan/pcm-player/-/pcm-player-1.0.0.tgz", + "integrity": "sha512-J+OvXT+btycGkdGFUigmx2yPDk170MB6rnInnKSyzAcFOHq4tDG0LcBR55xTNIwkiq2VG1Ie1wrQGpbKnqiULA==", "license": "MIT" }, "node_modules/@yume-chan/scrcpy": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/@yume-chan/scrcpy/-/scrcpy-0.0.24.tgz", - "integrity": "sha512-9xWUW3k7L4LlwdoC1I5+ObFyb17B+7Y3U8D+rCQOEeYddUvrbJ9oJ6HVKmY3E+ANxCnjOBvEs+TcF5OkCPyL6w==", + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@yume-chan/scrcpy/-/scrcpy-2.3.0.tgz", + "integrity": "sha512-rpsNvy7H8mf6gVsWYRSkIXmk0wVsP3XOdw3kASokwZkSWtygB2Z1wjoPaEAvaayVCjsz+y/YfG35TOcykEihGw==", "license": "MIT", "dependencies": { - "@yume-chan/async": "^2.2.0", - "@yume-chan/no-data-view": "^0.0.24", - "@yume-chan/stream-extra": "^0.0.24", - "@yume-chan/struct": "^0.0.24" + "@yume-chan/async": "^4.1.3", + "@yume-chan/no-data-view": "^2.0.0", + "@yume-chan/stream-extra": "^2.1.0", + "@yume-chan/struct": "^2.0.1" } }, "node_modules/@yume-chan/scrcpy-decoder-tinyh264": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/@yume-chan/scrcpy-decoder-tinyh264/-/scrcpy-decoder-tinyh264-0.0.24.tgz", - "integrity": "sha512-5nPT3n8SI30W4Kcizws1OFqOmxWCRkAtEdtxRh9rqGpXZoBW6z0GVTgT7YjcPYPCf3SOgkeyvwO9byJer4/a/A==", + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/@yume-chan/scrcpy-decoder-tinyh264/-/scrcpy-decoder-tinyh264-2.1.0.tgz", + "integrity": "sha512-Ou2ejwUZEUlwyorqzjzN6Y3YqMZvAmUi2jK9QsPBbQIVDYu/kbql5l5aXJzatgURTmxbf5HvGnOuEDFzJMqGsQ==", "license": "MIT", "dependencies": { - "@yume-chan/async": "^2.2.0", - "@yume-chan/event": "^0.0.24", - "@yume-chan/scrcpy": "^0.0.24", - "@yume-chan/stream-extra": "^0.0.24", + "@yume-chan/async": "^4.1.3", + "@yume-chan/event": "^2.0.0", + "@yume-chan/scrcpy": "^2.1.0", + "@yume-chan/stream-extra": "^2.1.0", "tinyh264": "^0.0.7", - "yuv-buffer": "^1.0.0", - "yuv-canvas": "^1.2.11" + "yuv-buffer": "^1.0.1", + "yuv-canvas": "^1.3.0" } }, + "node_modules/@yume-chan/scrcpy-decoder-tinyh264/node_modules/@yume-chan/async": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/@yume-chan/async/-/async-4.1.3.tgz", + "integrity": "sha512-0vzhNJMkWUPyjKzUK4rqHEeCU6YQtF78RsB1kFRB6Y2BLupmEQNxcSb0mjKabPL9jZpCCiLa5KL8oTOJClUVaw==", + "license": "MIT" + }, "node_modules/@yume-chan/scrcpy-decoder-webcodecs": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/@yume-chan/scrcpy-decoder-webcodecs/-/scrcpy-decoder-webcodecs-0.0.24.tgz", - "integrity": "sha512-y3nf7opPN5H/uIQVrdfYdQ4W5HFaTHP1KFXmvRYx6L8DVs6UE3z+j22DvU9zHs2m6sP1yQC+Q4V25/AbXIosRg==", + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/@yume-chan/scrcpy-decoder-webcodecs/-/scrcpy-decoder-webcodecs-2.1.0.tgz", + "integrity": "sha512-He35Tqlg95BQ3Mfzz7Z8BaMKEOtKwTmm5DH0lVlJcLmeZmMkiy9GvSVMTqV7EwY8240JN2j4xlh5H5DJ5ZDIkw==", "license": "MIT", "dependencies": { - "@yume-chan/event": "^0.0.24", - "@yume-chan/no-data-view": "^0.0.24", - "@yume-chan/scrcpy": "^0.0.24", - "@yume-chan/scrcpy-decoder-tinyh264": "^0.0.24", - "@yume-chan/stream-extra": "^0.0.24" + "@yume-chan/async": "^4.1.3", + "@yume-chan/event": "^2.0.0", + "@yume-chan/no-data-view": "^2.0.0", + "@yume-chan/scrcpy": "^2.1.0", + "@yume-chan/scrcpy-decoder-tinyh264": "^2.1.0", + "@yume-chan/stream-extra": "^2.1.0" } }, + "node_modules/@yume-chan/scrcpy-decoder-webcodecs/node_modules/@yume-chan/async": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/@yume-chan/async/-/async-4.1.3.tgz", + "integrity": "sha512-0vzhNJMkWUPyjKzUK4rqHEeCU6YQtF78RsB1kFRB6Y2BLupmEQNxcSb0mjKabPL9jZpCCiLa5KL8oTOJClUVaw==", + "license": "MIT" + }, + "node_modules/@yume-chan/scrcpy/node_modules/@yume-chan/async": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/@yume-chan/async/-/async-4.1.3.tgz", + "integrity": "sha512-0vzhNJMkWUPyjKzUK4rqHEeCU6YQtF78RsB1kFRB6Y2BLupmEQNxcSb0mjKabPL9jZpCCiLa5KL8oTOJClUVaw==", + "license": "MIT" + }, "node_modules/@yume-chan/stream-extra": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/@yume-chan/stream-extra/-/stream-extra-0.0.24.tgz", - "integrity": "sha512-MBXpNfKAK16jAkA7ZmVP6+SeAcUfuVv4ayrZq5rYFbyrA/s9v8aTgYbHAjzD8xEDcd2st7s9MgrFhMWPbbyJQA==", + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/@yume-chan/stream-extra/-/stream-extra-2.1.0.tgz", + "integrity": "sha512-Sq1mDCLTIOu+TbI3VmFhcKL5hi+qZkDA3S+JezZb/AJm4ESC3hB7+LgQIQs3QEK/ZeRwMg37w4IOYHSh30R7BQ==", "license": "MIT", "dependencies": { - "@yume-chan/async": "^2.2.0", - "@yume-chan/struct": "^0.0.24" + "@yume-chan/async": "^4.1.3", + "@yume-chan/struct": "^2.0.1" } }, + "node_modules/@yume-chan/stream-extra/node_modules/@yume-chan/async": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/@yume-chan/async/-/async-4.1.3.tgz", + "integrity": "sha512-0vzhNJMkWUPyjKzUK4rqHEeCU6YQtF78RsB1kFRB6Y2BLupmEQNxcSb0mjKabPL9jZpCCiLa5KL8oTOJClUVaw==", + "license": "MIT" + }, "node_modules/@yume-chan/struct": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/@yume-chan/struct/-/struct-0.0.24.tgz", - "integrity": "sha512-FobkiWVpTbRcheCuD08/qqBf2wU18o1+OpuZguHrvFyjvHC8GPmG4oKkn/UD5Nrh8/7DDNHROmtbhs/dW8IJDQ==", + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/@yume-chan/struct/-/struct-2.0.1.tgz", + "integrity": "sha512-Trqm2ovy5X+ydqv5jiDBH3UMA2jKNGG6alABCDTUsIsMjSsrTFE86cghI7fceVKIh4FkIUBd4DqOsxn2S1c4Jw==", "license": "MIT", "dependencies": { - "@yume-chan/no-data-view": "^0.0.24" + "@yume-chan/async": "^4.0.2", + "@yume-chan/no-data-view": "^2.0.0" } }, + "node_modules/@yume-chan/struct/node_modules/@yume-chan/async": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/@yume-chan/async/-/async-4.1.3.tgz", + "integrity": "sha512-0vzhNJMkWUPyjKzUK4rqHEeCU6YQtF78RsB1kFRB6Y2BLupmEQNxcSb0mjKabPL9jZpCCiLa5KL8oTOJClUVaw==", + "license": "MIT" + }, "node_modules/acorn": { "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", @@ -5386,12 +5600,12 @@ } }, "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "version": "0.30.21", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/make-dir": { @@ -5551,9 +5765,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", @@ -6193,9 +6407,9 @@ } }, "node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "version": "8.5.6", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "funding": [ { "type": "opencollective", @@ -6212,7 +6426,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -7696,6 +7910,23 @@ "typescript": ">=5.0.0" } }, + "node_modules/vue/node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, "node_modules/vuetify": { "version": "3.7.6", "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.7.6.tgz", @@ -7876,23 +8107,6 @@ "node": ">=12" } }, - "node_modules/xterm": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/xterm/-/xterm-5.3.0.tgz", - "integrity": "sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==", - "deprecated": "This package is now deprecated. Move to @xterm/xterm instead.", - "license": "MIT" - }, - "node_modules/xterm-addon-fit": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/xterm-addon-fit/-/xterm-addon-fit-0.8.0.tgz", - "integrity": "sha512-yj3Np7XlvxxhYF/EJ7p3KHaMt6OdwQ+HDu573Vx1lRXsVxOcnVJs51RgjZOouIZOczTsskaS+CpXspK81/DLqw==", - "deprecated": "This package is now deprecated. Move to @xterm/addon-fit instead.", - "license": "MIT", - "peerDependencies": { - "xterm": "^5.0.0" - } - }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", diff --git a/package.json b/package.json index 4c42a87..20b42b6 100644 --- a/package.json +++ b/package.json @@ -9,30 +9,30 @@ "build-only": "vite build", "type-check": "vue-tsc --noEmit", "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", - "postinstall": "fetch-scrcpy-server 2.6.1" + "postinstall": "fetch-scrcpy-server 3.3.3" }, "dependencies": { "@mdi/font": "^7.4.47", - "@yume-chan/adb": "^0.0.24", + "@xterm/addon-fit": "^0.10.0", + "@xterm/xterm": "^5.5.0", + "@yume-chan/adb": "^2.3.1", "@yume-chan/adb-backend-webusb": "^0.0.19", - "@yume-chan/adb-scrcpy": "^0.0.24", - "@yume-chan/android-bin": "^0.0.24", - "@yume-chan/aoa": "^0.0.24", - "@yume-chan/event": "^0.0.24", - "@yume-chan/fetch-scrcpy-server": "^0.0.24", - "@yume-chan/pcm-player": "^0.0.24", - "@yume-chan/scrcpy": "^0.0.24", - "@yume-chan/scrcpy-decoder-tinyh264": "^0.0.24", - "@yume-chan/scrcpy-decoder-webcodecs": "^0.0.24", - "@yume-chan/stream-extra": "^0.0.24", - "@yume-chan/struct": "^0.0.24", + "@yume-chan/adb-scrcpy": "^2.3.0", + "@yume-chan/android-bin": "^2.1.0", + "@yume-chan/aoa": "^1.0.0", + "@yume-chan/event": "^2.0.0", + "@yume-chan/fetch-scrcpy-server": "^1.0.0", + "@yume-chan/pcm-player": "^1.0.0", + "@yume-chan/scrcpy": "^2.3.0", + "@yume-chan/scrcpy-decoder-tinyh264": "^2.1.0", + "@yume-chan/scrcpy-decoder-webcodecs": "^2.1.0", + "@yume-chan/stream-extra": "^2.1.0", + "@yume-chan/struct": "^2.0.1", "file-saver": "^2.0.5", "markdown-it": "^14.1.0", "vue": "^3.3.4", "vuetify": "^3.3.5", - "webm-muxer": "^5.0.3", - "xterm": "^5.3.0", - "xterm-addon-fit": "^0.8.0" + "webm-muxer": "^5.0.3" }, "devDependencies": { "@mdi/font": "^7.1.96", @@ -43,6 +43,7 @@ "@types/three": "^0.149.0", "@vitejs/plugin-vue": "^5.0.4", "@vitejs/plugin-vue-jsx": "^3.0.0", + "@vue/compiler-sfc": "^3.5.24", "@vue/eslint-config-prettier": "^9.0.0", "@vue/eslint-config-typescript": "^12.0.0", "@vue/tsconfig": "^0.5.1", diff --git a/public/scrcpy-server-v2.6.1 b/public/scrcpy-server-v2.6.1 deleted file mode 100644 index b3c63d4..0000000 Binary files a/public/scrcpy-server-v2.6.1 and /dev/null differ diff --git a/public/scrcpy-server-v3.3.3 b/public/scrcpy-server-v3.3.3 new file mode 100644 index 0000000..b36f14d Binary files /dev/null and b/public/scrcpy-server-v3.3.3 differ diff --git a/src/components/Device/AppManager.vue b/src/components/Device/AppManager.vue index e35ed55..aecf2a2 100644 --- a/src/components/Device/AppManager.vue +++ b/src/components/Device/AppManager.vue @@ -161,9 +161,9 @@ 确认卸载 - 确定要卸载 {{ selectedApp?.appName }} 吗? + 确定要卸载 {{ selectedApp?.[0]?.appName }} 吗?
- 包名: {{ selectedApp?.packageName }} + 包名: {{ selectedApp?.[0]?.packageName }}
@@ -179,7 +179,7 @@ color="error" variant="tonal" @click="confirmUninstall" - :loading="selectedApp?.uninstalling" + :loading="selectedApp?.[0]?.uninstalling" > 卸载 @@ -226,7 +226,7 @@ const refreshAppList = async () => { const appList: ExtendedPackageInfo[] = []; // 使用 spawnAndWaitLegacy 方法执行命令 - const output = await client.device.subprocess.spawnAndWaitLegacy([ + const output = await client.device.subprocess.noneProtocol!.spawnWaitText([ 'pm', 'list', 'packages', @@ -275,7 +275,7 @@ const confirmUninstall = async () => { try { selectedApp.value[0].uninstalling = true; - const output = await client.device.subprocess.spawnAndWaitLegacy([ + const output = await client.device.subprocess.noneProtocol!.spawnWaitText([ 'pm', 'uninstall', selectedApp.value[0].packageName @@ -316,7 +316,7 @@ const launchApp = async (app: ExtendedPackageInfo) => { if (!client.device) return; try { - await client.device.subprocess.spawnAndWaitLegacy([ + await client.device.subprocess.noneProtocol!.spawnWait([ 'monkey', '-p', app.packageName, @@ -353,7 +353,7 @@ const exportApk = async (app: ExtendedPackageInfo) => { const tempDir = '/data/local/tmp'; const tempFile = `${tempDir}/${app.packageName}.apk`; - await client.device.subprocess.spawnAndWaitLegacy([ + await client.device.subprocess.noneProtocol!.spawnWait([ 'cp', sourceDir, tempFile @@ -378,7 +378,7 @@ const exportApk = async (app: ExtendedPackageInfo) => { exportProgress.value = (receivedLength / totalSize) * 100; } - const blob = new Blob(chunks, { type: 'application/vnd.android.package-archive' }); + const blob = new Blob(chunks as BlobPart[], { type: 'application/vnd.android.package-archive' }); saveAs(blob, `${app.packageName}.apk`); errorType.value = 'success'; @@ -386,7 +386,7 @@ const exportApk = async (app: ExtendedPackageInfo) => { errorMessage.value = 'APK导出成功'; } finally { await sync.dispose(); - await client.device.subprocess.spawnAndWaitLegacy([ + await client.device.subprocess.noneProtocol!.spawnWait([ 'rm', tempFile ]); diff --git a/src/components/Device/BatteryInfo.vue b/src/components/Device/BatteryInfo.vue index ffcee85..f9be4e7 100644 --- a/src/components/Device/BatteryInfo.vue +++ b/src/components/Device/BatteryInfo.vue @@ -2,17 +2,33 @@
电池
-
+
{{ batteryPercentage }}%
-
- {{ formattedVoltage }}V {{ temperature }}°C +
+
+ 剩余电量 + {{ batteryChargeCounter }}mAh +
+
+ 当前电流 + {{ formattedBatteryCurrent }}mA +
+
+ 电池电压 + {{ formattedVoltage }}V +
+
+ 电池温度 + {{ temperature }}°C +
+
+ 电池健康 + {{ batteryHealth }}% +
@@ -36,6 +52,18 @@ const props = defineProps({ type: Number, required: true, }, + batteryHealth: { + type: Number, + required: true, + }, + batteryChargeCounter: { + type: Number, + required: true, + }, + batteryCurrent: { + type: Number, + required: true, + }, }); const batteryLevelStyle = computed(() => { @@ -47,6 +75,10 @@ const batteryLevelStyle = computed(() => { const formattedVoltage = computed(() => { return isNaN(props.voltage) ? '0.000' : props.voltage.toFixed(3); }); + +const formattedBatteryCurrent = computed(() => { + return props.batteryCurrent > 0 ? `+${props.batteryCurrent}` : props.batteryCurrent; +}); diff --git a/src/components/Device/DeviceBasicInfo.vue b/src/components/Device/DeviceBasicInfo.vue index 9acdc37..da090ad 100644 --- a/src/components/Device/DeviceBasicInfo.vue +++ b/src/components/Device/DeviceBasicInfo.vue @@ -6,8 +6,8 @@
品牌
{{ deviceInfo.brand }}
-
连接状态
-
{{ deviceInfo.type }}
+
root 状态
+
{{ deviceInfo.rootState }}
型号
@@ -43,16 +43,24 @@
显示密度
{{ deviceInfo.screenDensity }}
闪存类型
-
{{ storageType }}
+
{{ deviceInfo.storageType }}
+
+
+
IP 地址
+
{{ deviceInfo.ipAddress || '-' }}
主板 ID
{{ deviceInfo.board || '-' }}
-
平台
+
硬件平台
{{ deviceInfo.hardware }}
+
+
序列号
+
{{ deviceInfo.serialNumber }}
+
编译版本
{{ deviceInfo.fingerPrint }}
@@ -78,32 +86,42 @@ const props = defineProps({ // 计算属性:Bootloader 状态 const bootloaderStatus = computed(() => { - // 这里可以添加实际的 bootloader 状态检测逻辑 - return 'locked'; + if (['green'].includes(props.deviceInfo.bootloader)) { + return 'locked'; + } + return 'unlocked'; }); // 计算属性:A/B 分区状态 const abPartitionStatus = computed(() => { - // 这里可以添加实际的 A/B 分区检测逻辑 - return 'A-Only设备'; + switch (props.deviceInfo.abPartition) { + case '_a': + return 'Slot A'; + case '_b': + return 'Slot B'; + default: + return 'Unknown'; + } }); + +const formatSeconds = (seconds) => { + const parts = []; + const d = Math.floor(seconds / 86400); + const h = Math.floor(seconds % 86400 / 3600); + const m = Math.floor(seconds % 3600 / 60); + const s = Math.floor(seconds % 60); + + if (d) parts.push(d + '天'); + if (h) parts.push(h + '小时'); + if (m) parts.push(m + '分'); + if (s || !parts.length) parts.push(s + '秒'); + + return parts.join(''); +}; // 计算属性:开机时间 const uptime = computed(() => { - // 这里可以添加实际的开机时间计算逻辑 - return '0天6时44分44秒'; -}); - -// 计算属性:存储类型 -const storageType = computed(() => { - // 这里可以添加实际的存储类型检测逻辑 - return 'UFS'; -}); - -// 计算属性:内核版本 -const kernelVersion = computed(() => { - // 这里可以添加实际的内核版本获取逻辑 - return '49.537-UOTAN-PE14-STABLE+'; + return formatSeconds(props.deviceInfo.uptime); }); diff --git a/src/components/Device/DeviceInfo.vue b/src/components/Device/DeviceInfo.vue index 8b4b0e9..13e69d2 100644 --- a/src/components/Device/DeviceInfo.vue +++ b/src/components/Device/DeviceInfo.vue @@ -45,15 +45,20 @@ const deviceInfo = ref({ batteryPercentage: 0, voltage: 0, temperature: 0, + batteryHealth: 0, + batteryChargeCounter: 0, + batteryCurrent: 0, + oemLockedState: '', bootloader: '', abPartition: '', uptime: '', storageType: '', kernelVersion: '', + rootState: 'none', }); async function executeShellCommand(device: Adb, command: string): Promise { - const subprocess = await device.subprocess.shell(command); + const subprocess = await device.subprocess.shellProtocol!.spawn(command); const reader = subprocess.stdout.getReader(); let result = ''; let done = false; @@ -70,7 +75,7 @@ async function executeShellCommand(device: Adb, command: string): Promise /dev/null 2>&1 && echo rooted || echo none' + ), }; } @@ -322,6 +338,9 @@ onMounted(async () => { :batteryPercentage="deviceInfo.batteryPercentage" :voltage="deviceInfo.voltage" :temperature="deviceInfo.temperature" + :batteryHealth="deviceInfo.batteryHealth" + :batteryChargeCounter="deviceInfo.batteryChargeCounter" + :batteryCurrent="deviceInfo.batteryCurrent" />
diff --git a/src/components/Device/DeviceShell.vue b/src/components/Device/DeviceShell.vue index 475fcb4..af2f6e7 100644 --- a/src/components/Device/DeviceShell.vue +++ b/src/components/Device/DeviceShell.vue @@ -2,9 +2,9 @@ import { ref, onMounted } from 'vue'; import { encodeUtf8 } from '@yume-chan/adb'; import client from '../Scrcpy/adb-client'; -import { Terminal } from 'xterm'; -import { FitAddon } from 'xterm-addon-fit'; -import 'xterm/css/xterm.css'; +import { Terminal } from '@xterm/xterm'; +import { FitAddon } from '@xterm/addon-fit'; +import '@xterm/xterm/css/xterm.css'; const term = ref(null); @@ -61,13 +61,13 @@ async function startTerminal() { return; } - const process = await client.device?.subprocess.shell(); + const process = await client.device?.subprocess.shellProtocol!.pty(); if (!process) { console.error('获取 subprocess 失败'); return; } - process.stdout + process.output .pipeTo( new WritableStream({ write(chunk) { @@ -79,7 +79,7 @@ async function startTerminal() { console.error('输出流错误:', error); }); - const writer = process.stdin.getWriter(); + const writer = process.input.getWriter(); terminal.onData((data) => { const buffer = encodeUtf8(data); writer.write(buffer).catch((error) => { diff --git a/src/components/Device/NavigationBar.vue b/src/components/Device/NavigationBar.vue index 37202e8..a60a974 100644 --- a/src/components/Device/NavigationBar.vue +++ b/src/components/Device/NavigationBar.vue @@ -1,9 +1,10 @@ -