From 90aeaefae795ad71f8398cbffd885241e8db51d6 Mon Sep 17 00:00:00 2001 From: imspace Date: Tue, 7 Mar 2023 04:27:48 +0800 Subject: [PATCH] feat: better window size --- gui/package.json | 3 +- gui/pnpm-lock.yaml | 319 ++++++++++++++++++++++++++++++-- gui/src-tauri/Cargo.lock | 7 + gui/src-tauri/Cargo.toml | 1 + gui/src-tauri/src/main.rs | 20 +- gui/src-tauri/tauri.conf.json | 2 + gui/src/App.tsx | 13 +- gui/src/hooks/useShowWindow.ts | 20 ++ gui/src/pages/RedirectLogin.tsx | 25 +++ gui/src/pages/Settings.tsx | 1 + 10 files changed, 379 insertions(+), 32 deletions(-) create mode 100644 gui/src/hooks/useShowWindow.ts create mode 100644 gui/src/pages/RedirectLogin.tsx diff --git a/gui/package.json b/gui/package.json index 4086458..56f5706 100644 --- a/gui/package.json +++ b/gui/package.json @@ -20,7 +20,8 @@ "react-dom": "^18.2.0", "react-i18next": "^12.2.0", "react-icons": "^4.8.0", - "react-router-dom": "^6.8.2" + "react-router-dom": "^6.8.2", + "react-use": "^17.4.0" }, "devDependencies": { "@tauri-apps/cli": "^1.2.3", diff --git a/gui/pnpm-lock.yaml b/gui/pnpm-lock.yaml index ced6f7e..e275001 100644 --- a/gui/pnpm-lock.yaml +++ b/gui/pnpm-lock.yaml @@ -22,6 +22,7 @@ specifiers: react-i18next: ^12.2.0 react-icons: ^4.8.0 react-router-dom: ^6.8.2 + react-use: ^17.4.0 tailwindcss: ^3.2.7 typescript: ^4.9.5 vite: ^4.1.4 @@ -39,6 +40,7 @@ dependencies: react-i18next: 12.2.0_3yopsigl4h4eb2nqrqfsy65uwi react-icons: 4.8.0_react@18.2.0 react-router-dom: 6.8.2_biqbaboplfbrettd7655fr4n2y + react-use: registry.npmmirror.com/react-use/17.4.0_biqbaboplfbrettd7655fr4n2y devDependencies: '@tauri-apps/cli': 1.2.3 @@ -1379,7 +1381,8 @@ packages: resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.13.11 + regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.11 + dev: false /@babel/template/7.20.7: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} @@ -1804,7 +1807,7 @@ packages: /ajv/6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: - fast-deep-equal: 3.1.3 + fast-deep-equal: registry.npmmirror.com/fast-deep-equal/3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 @@ -1934,7 +1937,7 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.21.0 cosmiconfig: 7.1.0 resolve: 1.22.1 dev: true @@ -1996,7 +1999,7 @@ packages: '@babel/preset-env': 7.20.2_@babel+core@7.21.0 '@babel/preset-react': 7.18.6_@babel+core@7.21.0 '@babel/preset-typescript': 7.21.0_@babel+core@7.21.0 - '@babel/runtime': 7.21.0 + '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.21.0 babel-plugin-macros: 3.1.0 babel-plugin-transform-react-remove-prop-types: 0.4.24 transitivePeerDependencies: @@ -2574,7 +2577,7 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.21.0 aria-query: 5.1.3 array-includes: 3.1.6 array.prototype.flatmap: 1.3.1 @@ -3729,13 +3732,10 @@ packages: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} dev: true - /regenerator-runtime/0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - /regenerator-transform/0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.21.0 dev: true /regexp.prototype.flags/1.4.3: @@ -4030,17 +4030,13 @@ packages: strip-bom: 3.0.0 dev: true - /tslib/1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true - /tsutils/3.21.0_typescript@4.9.5: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: - tslib: 1.14.1 + tslib: registry.npmmirror.com/tslib/1.14.1 typescript: 4.9.5 dev: true @@ -4253,6 +4249,14 @@ packages: engines: {node: '>=10'} dev: true + registry.npmmirror.com/@babel/runtime/7.21.0: + resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/runtime/-/runtime-7.21.0.tgz} + name: '@babel/runtime' + version: 7.21.0 + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.11 + registry.npmmirror.com/@esbuild/android-arm/0.16.17: resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz} name: '@esbuild/android-arm' @@ -4598,12 +4602,87 @@ packages: dev: true optional: true + registry.npmmirror.com/@types/js-cookie/2.2.7: + resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/js-cookie/-/js-cookie-2.2.7.tgz} + name: '@types/js-cookie' + version: 2.2.7 + dev: false + + registry.npmmirror.com/@xobotyi/scrollbar-width/1.9.5: + resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz} + name: '@xobotyi/scrollbar-width' + version: 1.9.5 + dev: false + registry.npmmirror.com/classnames/2.3.2: resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/classnames/-/classnames-2.3.2.tgz} name: classnames version: 2.3.2 dev: false + registry.npmmirror.com/copy-to-clipboard/3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz} + name: copy-to-clipboard + version: 3.3.3 + dependencies: + toggle-selection: registry.npmmirror.com/toggle-selection/1.0.6 + dev: false + + registry.npmmirror.com/css-in-js-utils/3.1.0: + resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz} + name: css-in-js-utils + version: 3.1.0 + dependencies: + hyphenate-style-name: registry.npmmirror.com/hyphenate-style-name/1.0.4 + dev: false + + registry.npmmirror.com/css-tree/1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz} + name: css-tree + version: 1.1.3 + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: registry.npmmirror.com/mdn-data/2.0.14 + source-map: registry.npmmirror.com/source-map/0.6.1 + dev: false + + registry.npmmirror.com/csstype/3.1.1: + resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csstype/-/csstype-3.1.1.tgz} + name: csstype + version: 3.1.1 + dev: false + + registry.npmmirror.com/error-stack-parser/2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz} + name: error-stack-parser + version: 2.1.4 + dependencies: + stackframe: registry.npmmirror.com/stackframe/1.3.4 + dev: false + + registry.npmmirror.com/fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz} + name: fast-deep-equal + version: 3.1.3 + + registry.npmmirror.com/fast-loops/1.1.3: + resolution: {integrity: sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-loops/-/fast-loops-1.1.3.tgz} + name: fast-loops + version: 1.1.3 + dev: false + + registry.npmmirror.com/fast-shallow-equal/1.0.0: + resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz} + name: fast-shallow-equal + version: 1.0.0 + dev: false + + registry.npmmirror.com/fastest-stable-stringify/2.0.2: + resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz} + name: fastest-stable-stringify + version: 2.0.2 + dev: false + registry.npmmirror.com/fsevents/2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz} name: fsevents @@ -4613,6 +4692,54 @@ packages: requiresBuild: true optional: true + registry.npmmirror.com/hyphenate-style-name/1.0.4: + resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz} + name: hyphenate-style-name + version: 1.0.4 + dev: false + + registry.npmmirror.com/inline-style-prefixer/6.0.4: + resolution: {integrity: sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inline-style-prefixer/-/inline-style-prefixer-6.0.4.tgz} + name: inline-style-prefixer + version: 6.0.4 + dependencies: + css-in-js-utils: registry.npmmirror.com/css-in-js-utils/3.1.0 + fast-loops: registry.npmmirror.com/fast-loops/1.1.3 + dev: false + + registry.npmmirror.com/js-cookie/2.2.1: + resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-cookie/-/js-cookie-2.2.1.tgz} + name: js-cookie + version: 2.2.1 + dev: false + + registry.npmmirror.com/mdn-data/2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz} + name: mdn-data + version: 2.0.14 + dev: false + + registry.npmmirror.com/nano-css/5.3.5_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-vSB9X12bbNu4ALBu7nigJgRViZ6ja3OU7CeuiV1zMIbXOdmkLahgtPmh3GBOlDxbKY0CitqlPdOReGlBLSp+yg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nano-css/-/nano-css-5.3.5.tgz} + id: registry.npmmirror.com/nano-css/5.3.5 + name: nano-css + version: 5.3.5 + peerDependencies: + react: '*' + react-dom: '*' + dependencies: + css-tree: registry.npmmirror.com/css-tree/1.1.3 + csstype: registry.npmmirror.com/csstype/3.1.1 + fastest-stable-stringify: registry.npmmirror.com/fastest-stable-stringify/2.0.2 + inline-style-prefixer: registry.npmmirror.com/inline-style-prefixer/6.0.4 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + rtl-css-js: registry.npmmirror.com/rtl-css-js/1.16.1 + sourcemap-codec: registry.npmmirror.com/sourcemap-codec/1.4.8 + stacktrace-js: registry.npmmirror.com/stacktrace-js/2.0.2 + stylis: registry.npmmirror.com/stylis/4.1.3 + dev: false + registry.npmmirror.com/nanoid/3.3.4: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz} name: nanoid @@ -4635,8 +4762,172 @@ packages: picocolors: registry.npmmirror.com/picocolors/1.0.0 source-map-js: registry.npmmirror.com/source-map-js/1.0.2 + registry.npmmirror.com/react-universal-interface/0.6.2_react@18.2.0+tslib@2.5.0: + resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/react-universal-interface/-/react-universal-interface-0.6.2.tgz} + id: registry.npmmirror.com/react-universal-interface/0.6.2 + name: react-universal-interface + version: 0.6.2 + peerDependencies: + react: '*' + tslib: '*' + dependencies: + react: 18.2.0 + tslib: registry.npmmirror.com/tslib/2.5.0 + dev: false + + registry.npmmirror.com/react-use/17.4.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-TgbNTCA33Wl7xzIJegn1HndB4qTS9u03QUwyNycUnXaweZkE4Kq2SB+Yoxx8qbshkZGYBDvUXbXWRUmQDcZZ/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/react-use/-/react-use-17.4.0.tgz} + id: registry.npmmirror.com/react-use/17.4.0 + name: react-use + version: 17.4.0 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@types/js-cookie': registry.npmmirror.com/@types/js-cookie/2.2.7 + '@xobotyi/scrollbar-width': registry.npmmirror.com/@xobotyi/scrollbar-width/1.9.5 + copy-to-clipboard: registry.npmmirror.com/copy-to-clipboard/3.3.3 + fast-deep-equal: registry.npmmirror.com/fast-deep-equal/3.1.3 + fast-shallow-equal: registry.npmmirror.com/fast-shallow-equal/1.0.0 + js-cookie: registry.npmmirror.com/js-cookie/2.2.1 + nano-css: registry.npmmirror.com/nano-css/5.3.5_biqbaboplfbrettd7655fr4n2y + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + react-universal-interface: registry.npmmirror.com/react-universal-interface/0.6.2_react@18.2.0+tslib@2.5.0 + resize-observer-polyfill: registry.npmmirror.com/resize-observer-polyfill/1.5.1 + screenfull: registry.npmmirror.com/screenfull/5.2.0 + set-harmonic-interval: registry.npmmirror.com/set-harmonic-interval/1.0.1 + throttle-debounce: registry.npmmirror.com/throttle-debounce/3.0.1 + ts-easing: registry.npmmirror.com/ts-easing/0.2.0 + tslib: registry.npmmirror.com/tslib/2.5.0 + dev: false + + registry.npmmirror.com/regenerator-runtime/0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz} + name: regenerator-runtime + version: 0.13.11 + + registry.npmmirror.com/resize-observer-polyfill/1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz} + name: resize-observer-polyfill + version: 1.5.1 + dev: false + + registry.npmmirror.com/rtl-css-js/1.16.1: + resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rtl-css-js/-/rtl-css-js-1.16.1.tgz} + name: rtl-css-js + version: 1.16.1 + dependencies: + '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.21.0 + dev: false + + registry.npmmirror.com/screenfull/5.2.0: + resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/screenfull/-/screenfull-5.2.0.tgz} + name: screenfull + version: 5.2.0 + engines: {node: '>=0.10.0'} + dev: false + + registry.npmmirror.com/set-harmonic-interval/1.0.1: + resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz} + name: set-harmonic-interval + version: 1.0.1 + engines: {node: '>=6.9'} + dev: false + registry.npmmirror.com/source-map-js/1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz} name: source-map-js version: 1.0.2 engines: {node: '>=0.10.0'} + + registry.npmmirror.com/source-map/0.5.6: + resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.5.6.tgz} + name: source-map + version: 0.5.6 + engines: {node: '>=0.10.0'} + dev: false + + registry.npmmirror.com/source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz} + name: source-map + version: 0.6.1 + engines: {node: '>=0.10.0'} + dev: false + + registry.npmmirror.com/sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz} + name: sourcemap-codec + version: 1.4.8 + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: false + + registry.npmmirror.com/stack-generator/2.0.10: + resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stack-generator/-/stack-generator-2.0.10.tgz} + name: stack-generator + version: 2.0.10 + dependencies: + stackframe: registry.npmmirror.com/stackframe/1.3.4 + dev: false + + registry.npmmirror.com/stackframe/1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz} + name: stackframe + version: 1.3.4 + dev: false + + registry.npmmirror.com/stacktrace-gps/3.1.2: + resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz} + name: stacktrace-gps + version: 3.1.2 + dependencies: + source-map: registry.npmmirror.com/source-map/0.5.6 + stackframe: registry.npmmirror.com/stackframe/1.3.4 + dev: false + + registry.npmmirror.com/stacktrace-js/2.0.2: + resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz} + name: stacktrace-js + version: 2.0.2 + dependencies: + error-stack-parser: registry.npmmirror.com/error-stack-parser/2.1.4 + stack-generator: registry.npmmirror.com/stack-generator/2.0.10 + stacktrace-gps: registry.npmmirror.com/stacktrace-gps/3.1.2 + dev: false + + registry.npmmirror.com/stylis/4.1.3: + resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stylis/-/stylis-4.1.3.tgz} + name: stylis + version: 4.1.3 + dev: false + + registry.npmmirror.com/throttle-debounce/3.0.1: + resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz} + name: throttle-debounce + version: 3.0.1 + engines: {node: '>=10'} + dev: false + + registry.npmmirror.com/toggle-selection/1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/toggle-selection/-/toggle-selection-1.0.6.tgz} + name: toggle-selection + version: 1.0.6 + dev: false + + registry.npmmirror.com/ts-easing/0.2.0: + resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ts-easing/-/ts-easing-0.2.0.tgz} + name: ts-easing + version: 0.2.0 + dev: false + + registry.npmmirror.com/tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz} + name: tslib + version: 1.14.1 + dev: true + + registry.npmmirror.com/tslib/2.5.0: + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.5.0.tgz} + name: tslib + version: 2.5.0 + dev: false diff --git a/gui/src-tauri/Cargo.lock b/gui/src-tauri/Cargo.lock index aee54d7..e2a7557 100644 --- a/gui/src-tauri/Cargo.lock +++ b/gui/src-tauri/Cargo.lock @@ -2006,6 +2006,7 @@ dependencies = [ "tauri", "tauri-build", "tokio", + "urlencoding", ] [[package]] @@ -2835,6 +2836,12 @@ dependencies = [ "serde", ] +[[package]] +name = "urlencoding" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9" + [[package]] name = "utf-8" version = "0.7.6" diff --git a/gui/src-tauri/Cargo.toml b/gui/src-tauri/Cargo.toml index 2941aa6..d4dfdb2 100644 --- a/gui/src-tauri/Cargo.toml +++ b/gui/src-tauri/Cargo.toml @@ -17,6 +17,7 @@ tauri = { version = "1.2", features = ["fs-all", "path-all", "shell-execute", "s serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" tokio = { version = "1.0", features = ["time"] } +urlencoding = "2.1.2" [features] # this feature is used for production builds or when `devPath` points to the filesystem diff --git a/gui/src-tauri/src/main.rs b/gui/src-tauri/src/main.rs index 0376617..d08cb05 100644 --- a/gui/src-tauri/src/main.rs +++ b/gui/src-tauri/src/main.rs @@ -38,11 +38,18 @@ detectAndInject(); // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command #[tauri::command] async fn open_login_window(app: tauri::AppHandle, url: String) -> Option { - let window = WindowBuilder::new(&app, "login", tauri::WindowUrl::App("/".into())) - .title("Login") - .initialization_script(INIT_SCRIPT) - .build() - .ok()?; + let encoded = urlencoding::encode(&url); + let window = WindowBuilder::new( + &app, + "login", + tauri::WindowUrl::App(format!("/redirect?url={encoded}").into()), + ) + .title("Login") + .center() + .inner_size(1040.0, 960.0) + .initialization_script(INIT_SCRIPT) + .build() + .ok()?; let result: Arc>> = Arc::new(Mutex::new(None)); let r2 = result.clone(); let r3 = result.clone(); @@ -59,9 +66,6 @@ async fn open_login_window(app: tauri::AppHandle, url: String) -> Option } } }); - window - .eval(&format!("window.location.href = '{}'", url)) - .ok()?; loop { sleep(Duration::from_millis(100)).await; diff --git a/gui/src-tauri/tauri.conf.json b/gui/src-tauri/tauri.conf.json index d1a4f6c..58bb55a 100644 --- a/gui/src-tauri/tauri.conf.json +++ b/gui/src-tauri/tauri.conf.json @@ -77,6 +77,8 @@ "title": "s3si.ts", "width": 400, "height": 300, + "minWidth": 320, + "minHeight": 300, "visible": false } ] diff --git a/gui/src/App.tsx b/gui/src/App.tsx index 93133c3..7efa47e 100644 --- a/gui/src/App.tsx +++ b/gui/src/App.tsx @@ -1,26 +1,21 @@ import 'i18n/config'; -import { useEffect } from "react"; -import { getCurrent } from "@tauri-apps/api/window"; import { Routes, Route } from "react-router-dom"; import { Layout } from "components/Layout"; import { Home } from "pages/Home"; import { Settings } from "pages/Settings"; import { Guide } from 'pages/Guide'; +import { RedirectLogin } from 'pages/RedirectLogin'; +import { useShowWindow } from 'hooks/useShowWindow'; function App() { - useEffect(() => { - try { - getCurrent().show().catch(e => console.error(e)) - } catch (e) { - console.error(e) - } - }, []) + useShowWindow(); return ( }> } /> } /> } /> + } /> ); diff --git a/gui/src/hooks/useShowWindow.ts b/gui/src/hooks/useShowWindow.ts new file mode 100644 index 0000000..8036329 --- /dev/null +++ b/gui/src/hooks/useShowWindow.ts @@ -0,0 +1,20 @@ +import { useCallback, useEffect } from "react"; +import { getCurrent } from "@tauri-apps/api/window"; + +export const useShowWindow = () => { + const show = useCallback(() => { + if (window.location.pathname === '/hide') { + return; + } + try { + getCurrent().show().catch(e => console.error(e)) + } catch (e) { + console.error(e) + } + }, []) + useEffect(() => { + show(); + }, [show]) + + return show; +} diff --git a/gui/src/pages/RedirectLogin.tsx b/gui/src/pages/RedirectLogin.tsx new file mode 100644 index 0000000..62ff328 --- /dev/null +++ b/gui/src/pages/RedirectLogin.tsx @@ -0,0 +1,25 @@ +import { Loading } from 'components/Loading'; +import React, { useEffect } from 'react' +import { useTranslation } from 'react-i18next'; +import { useLocation } from 'react-use'; + +export const RedirectLogin: React.FC = () => { + const { t } = useTranslation(); + const state = useLocation(); + + useEffect(() => { + const search = state.search ?? ''; + + const index = search.indexOf('url='); + if (index === -1) { + return; + } + const url = decodeURIComponent(search.substring(index + 4)); + + window.location.href = url; + }, [state]) + + return
+ {t('正在跳转到登录页面...')} +
+} diff --git a/gui/src/pages/Settings.tsx b/gui/src/pages/Settings.tsx index f678525..9dc0be4 100644 --- a/gui/src/pages/Settings.tsx +++ b/gui/src/pages/Settings.tsx @@ -71,6 +71,7 @@ const Form: React.FC<{ loading: loginState.loading, })} onClick={onLogin} + disabled={loginState.loading} >{t('网页登录')}