diff --git a/build/icons/256x256.png b/build/icons/256x256.png index 2e54efa..65efaa3 100644 Binary files a/build/icons/256x256.png and b/build/icons/256x256.png differ diff --git a/build/icons/icon.icns b/build/icons/icon.icns index 3634089..84b688d 100644 Binary files a/build/icons/icon.icns and b/build/icons/icon.icns differ diff --git a/build/icons/icon.ico b/build/icons/icon.ico index 3634089..b7d05bd 100644 Binary files a/build/icons/icon.ico and b/build/icons/icon.ico differ diff --git a/package-lock.json b/package-lock.json index e6c9b4c..7fce531 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "rubick2", - "version": "0.0.2-beta.1", + "version": "0.0.3-beta.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1226,6 +1226,13 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true, + "optional": true + }, "asar": { "version": "3.0.3", "resolved": "http://npmreg.qa.91jkys.com/asar/-/asar-3.0.3.tgz", @@ -2776,6 +2783,16 @@ "dev": true, "optional": true }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npm.taobao.org/boom/download/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "optional": true, + "requires": { + "hoek": "2.x.x" + } + }, "boxen": { "version": "5.0.1", "resolved": "http://npmreg.qa.91jkys.com/boxen/-/boxen-5.0.1.tgz", @@ -3969,6 +3986,13 @@ "mimic-response": "^1.0.0" } }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npm.taobao.org/co/download/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "optional": true + }, "coa": { "version": "1.0.4", "resolved": "http://npmreg.qa.91jkys.com/coa/-/coa-1.0.4.tgz", @@ -4306,15 +4330,6 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, - "copy-anything": { - "version": "2.0.3", - "resolved": "http://npmreg.qa.91jkys.com/copy-anything/-/copy-anything-2.0.3.tgz", - "integrity": "sha1-hCQHugJGaw34RIGbvjuuu+XUXYc=", - "dev": true, - "requires": { - "is-what": "^3.12.0" - } - }, "copy-concurrently": { "version": "1.0.5", "resolved": "http://npmreg.qa.91jkys.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz", @@ -4485,6 +4500,16 @@ "resolved": "http://npmreg.qa.91jkys.com/crypt/-/crypt-0.0.2.tgz", "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/cryptiles/download/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.x.x" + } + }, "crypto-browserify": { "version": "3.12.0", "resolved": "http://npmreg.qa.91jkys.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -5699,6 +5724,14 @@ "requires": { "electron-is-dev": "^0.3.0", "electron-localshortcut": "^3.0.0" + }, + "dependencies": { + "electron-is-dev": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/electron-is-dev/download/electron-is-dev-0.3.0.tgz", + "integrity": "sha1-FOb9pcaOnk7L7/nM8DfL18BcWv4=", + "dev": true + } } }, "electron-devtools-installer": { @@ -5737,10 +5770,9 @@ "dev": true }, "electron-is-dev": { - "version": "0.3.0", - "resolved": "http://npmreg.qa.91jkys.com/electron-is-dev/-/electron-is-dev-0.3.0.tgz", - "integrity": "sha1-FOb9pcaOnk7L7/nM8DfL18BcWv4=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/electron-is-dev/download/electron-is-dev-2.0.0.tgz", + "integrity": "sha1-gzSHoGm42tIUJcZ6GYR9kGSrGb0=" }, "electron-localshortcut": { "version": "3.2.1", @@ -7549,6 +7581,19 @@ "minimalistic-assert": "^1.0.1" } }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npm.taobao.org/hawk/download/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } + }, "he": { "version": "1.2.0", "resolved": "http://npmreg.qa.91jkys.com/he/-/he-1.2.0.tgz", @@ -7582,6 +7627,13 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npm.taobao.org/hoek/download/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true, + "optional": true + }, "home-or-tmp": { "version": "2.0.0", "resolved": "http://npmreg.qa.91jkys.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -7953,7 +8005,7 @@ }, "image-size": { "version": "0.5.5", - "resolved": "http://npmreg.qa.91jkys.com/image-size/-/image-size-0.5.5.tgz", + "resolved": "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz", "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", "dev": true, "optional": true @@ -8488,12 +8540,6 @@ "resolved": "https://registry.nlark.com/is-utf8/download/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, - "is-what": { - "version": "3.14.1", - "resolved": "http://npmreg.qa.91jkys.com/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha1-4SIvRt3ahd6tD9HJ3xMXYOd3VcE=", - "dev": true - }, "is-windows": { "version": "1.0.2", "resolved": "http://npmreg.qa.91jkys.com/is-windows/-/is-windows-1.0.2.tgz", @@ -8634,6 +8680,16 @@ "resolved": "http://npmreg.qa.91jkys.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz", "integrity": "sha1-I/9IG4tO680soSO0+gQJ5mRpotk=" }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/json-stable-stringify/download/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "optional": true, + "requires": { + "jsonify": "~0.0.0" + } + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "http://npmreg.qa.91jkys.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -8668,6 +8724,13 @@ "graceful-fs": "^4.1.6" } }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.nlark.com/jsonify/download/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true, + "optional": true + }, "jsprim": { "version": "1.4.1", "resolved": "http://npmreg.qa.91jkys.com/jsprim/-/jsprim-1.4.1.tgz", @@ -8741,45 +8804,168 @@ "dev": true }, "less": { - "version": "4.1.1", - "resolved": "http://npmreg.qa.91jkys.com/less/-/less-4.1.1.tgz", - "integrity": "sha1-Fb8lOpk5eR3GkIiMP/Qk8+bH7bo=", + "version": "2.7.3", + "resolved": "https://registry.npm.taobao.org/less/download/less-2.7.3.tgz?cache=0&sync_timestamp=1612065678706&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fless%2Fdownload%2Fless-2.7.3.tgz", + "integrity": "sha1-zBJg9RyQCp7A2R+2mYE54CUHtjs=", "dev": true, "requires": { - "copy-anything": "^2.0.1", "errno": "^0.1.1", "graceful-fs": "^4.1.2", "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^2.5.2", - "parse-node-version": "^1.0.1", - "source-map": "~0.6.0", - "tslib": "^1.10.0" + "mime": "^1.2.11", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "2.81.0", + "source-map": "^0.5.3" }, "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "http://npmreg.qa.91jkys.com/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=", + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.nlark.com/ajv/download/ajv-4.11.8.tgz?cache=0&sync_timestamp=1626380134544&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fajv%2Fdownload%2Fajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "dev": true, "optional": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, - "pify": { - "version": "4.0.1", - "resolved": "http://npmreg.qa.91jkys.com/pify/-/pify-4.0.1.tgz", - "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/assert-plus/download/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", "dev": true, "optional": true }, - "semver": { - "version": "5.7.1", - "resolved": "http://npmreg.qa.91jkys.com/semver/-/semver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.1.4.tgz?cache=0&sync_timestamp=1613410812604&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fform-data%2Fdownload%2Fform-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/har-schema/download/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "optional": true, + "requires": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.1.1.tgz?cache=0&sync_timestamp=1600868483243&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true, + "optional": true + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true, + "optional": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.nlark.com/qs/download/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true, + "optional": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npm.taobao.org/request/download/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.3.4.tgz", + "integrity": "sha1-7GDO44rGdQY//JelwYlwV47oNlU=", + "dev": true, + "optional": true, + "requires": { + "punycode": "^1.4.1" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.nlark.com/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1622213136953&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz", + "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=", "dev": true, "optional": true } @@ -10975,12 +11161,6 @@ "error-ex": "^1.2.0" } }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "http://npmreg.qa.91jkys.com/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs=", - "dev": true - }, "parse-passwd": { "version": "1.0.0", "resolved": "http://npmreg.qa.91jkys.com/parse-passwd/-/parse-passwd-1.0.0.tgz", @@ -11878,6 +12058,16 @@ } } }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.nlark.com/promise/download/promise-7.3.1.tgz", + "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", + "dev": true, + "optional": true, + "requires": { + "asap": "~2.0.3" + } + }, "promise-inflight": { "version": "1.0.1", "resolved": "http://npmreg.qa.91jkys.com/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -13414,6 +13604,16 @@ "kind-of": "^3.2.0" } }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npm.taobao.org/sntp/download/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "optional": true, + "requires": { + "hoek": "2.x.x" + } + }, "sockjs": { "version": "0.3.21", "resolved": "http://npmreg.qa.91jkys.com/sockjs/-/sockjs-0.3.21.tgz", @@ -13865,6 +14065,13 @@ "safe-buffer": "~5.1.0" } }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npm.taobao.org/stringstream/download/stringstream-0.0.6.tgz", + "integrity": "sha1-eIAiWw1K0Q4wkn0Weh1vL9OzOnI=", + "dev": true, + "optional": true + }, "strip-ansi": { "version": "4.0.0", "resolved": "http://npmreg.qa.91jkys.com/strip-ansi/-/strip-ansi-4.0.0.tgz", diff --git a/package.json b/package.json index 0ffdcf7..ed43ce0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rubick2", - "version": "0.0.3-beta.1", + "version": "0.0.3-beta.2", "author": "muwoo <2424880409@qq.com>", "description": "An electron-vue project", "license": null, @@ -63,6 +63,7 @@ "bplist-parser": "^0.3.0", "download": "^8.0.0", "download-git-repo": "^3.0.2", + "electron-is-dev": "^2.0.0", "electron-store": "^8.0.0", "iohook": "^0.9.3", "is-chinese": "^1.4.2", @@ -112,7 +113,7 @@ "file-loader": "^1.1.11", "html-webpack-plugin": "^3.2.0", "iconv-lite": "^0.6.3", - "less": "^4.1.1", + "less": "^2.7.3", "less-loader": "^5.0.0", "listr": "^0.14.3", "mini-css-extract-plugin": "0.4.0", diff --git a/src/main/browsers/main.js b/src/main/browsers/main.js index 71d928d..752cf38 100644 --- a/src/main/browsers/main.js +++ b/src/main/browsers/main.js @@ -18,6 +18,7 @@ module.exports = () => { frame: false, title: '拉比克', show: false, + skipTaskbar: true, webPreferences: { webSecurity: false, enableRemoteModule: true, diff --git a/src/main/common/common.js b/src/main/common/common.js index db1c747..9a96fd2 100644 --- a/src/main/common/common.js +++ b/src/main/common/common.js @@ -9,13 +9,6 @@ export default function init(mainWindow) { listener.registerShortCut(mainWindow); listener.init(mainWindow); - // 设置开机启动 - const config = global.opConfig.get(); - app.setLoginItemSettings({ - openAtLogin: config.perf.common.start, - openAsHidden: true, - }); - mainWindow.once("ready-to-show", () => { // 非隐藏式启动需要显示主窗口 if (!app.getLoginItemSettings().wasOpenedAsHidden) { diff --git a/src/main/common/listener.js b/src/main/common/listener.js index 5c5be23..e0a5e43 100644 --- a/src/main/common/listener.js +++ b/src/main/common/listener.js @@ -1,9 +1,9 @@ -import {BrowserWindow, clipboard, globalShortcut, ipcMain, Notification, screen} from "electron"; +import {app, BrowserWindow, clipboard, globalShortcut, ipcMain, Notification, screen} from "electron"; import {exec, spawn} from "child_process"; import robot from "robotjs"; import Api from "./api"; import ioHook from 'iohook'; -import {throttle} from './utils'; +import {throttle, commonConst} from './utils'; const browsers = require("../browsers")(); const {picker, separator, superPanel} = browsers; @@ -20,8 +20,7 @@ class Listener { clipboard.clear(); // 复制选中文案 - const platform = process.platform; - if (platform === 'darwin') { + if (commonConst.macOS()) { robot.keyTap('c', 'command'); } else { robot.keyTap('c', 'control'); @@ -52,9 +51,11 @@ class Listener { const currentDisplay = screen.getDisplayNearestPoint({ x, y }); const wx = parseInt(currentDisplay.workArea.x + currentDisplay.workArea.width / 2 - 400); const wy = parseInt(currentDisplay.workArea.y + currentDisplay.workArea.height / 2 - 200); - mainWindow.setVisibleOnAllWorkspaces(true); + + mainWindow.setAlwaysOnTop(true) + mainWindow.setVisibleOnAllWorkspaces(true, {visibleOnFullScreen: true}); mainWindow.focus(); - mainWindow.setVisibleOnAllWorkspaces(false); + mainWindow.setVisibleOnAllWorkspaces(false, {visibleOnFullScreen: true}); mainWindow.setPosition(wx, wy); mainWindow.show(); }); @@ -92,6 +93,7 @@ class Listener { picker.getWindow().webContents.send("updatePicker", colors); }, 100); + this.setAutoLogin(); this.colorPicker(); this.initPlugin(); this.lockScreen(); @@ -224,10 +226,21 @@ class Listener { reRegisterShortCut(mainWindow) { ipcMain.on('re-register', (event, arg) => { + this.setAutoLogin(); this.registerShortCut(mainWindow); }); } + setAutoLogin() { + // 设置开机启动 + const config = global.opConfig.get(); + app.setLoginItemSettings({ + openAtLogin: config.perf.common.start, + openAsHidden: true, + }); + } + + changeSize(mainWindow) { // 修改窗口尺寸 ipcMain.on('changeWindowSize-rubick', (event, arg) => { diff --git a/src/main/common/utils.js b/src/main/common/utils.js index 6528a41..ce85484 100644 --- a/src/main/common/utils.js +++ b/src/main/common/utils.js @@ -53,3 +53,22 @@ export function throttle (func, wait, options) { }; } +export const commonConst = { + linux: function () { + return process.platform === 'linux' + }, + macOS () { + return process.platform === 'darwin'; + }, + windows () { + return process.platform === 'win32' + }, + production: function () { + return process.env.NODE_ENV !== 'development'; + }, + dev: function () { + return process.env.NODE_ENV === 'development'; + }, +} + + diff --git a/src/main/index.js b/src/main/index.js index 93ee629..fec30f9 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -1,38 +1,105 @@ -import { app } from 'electron' +import { app, globalShortcut } from 'electron' import '../renderer/store' import init from './common/common'; import {autoUpdate} from './common/autoUpdate'; import createTray from './tray'; +import {commonConst} from './common/utils'; + const {main} = require("./browsers")(); -/** - * Set `__static` path to static files in production - * https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-static-assets.html - */ -if (process.env.NODE_ENV !== 'development') { + +if (commonConst.production()) { global.__static = require('path').join(__dirname, '/static').replace(/\\/g, '\\\\') } // to fix https://github.com/electron/electron/issues/18397 app.allowRendererProcessReuse = false; -app.dock.hide(); -function createWindow() { - main.init(); - init(main.getWindow()); +class initApp { + launchApp() { + const gotTheLock = app.requestSingleInstanceLock() + if (!gotTheLock) { + app.quit() + } else { + this.beforeReady() + this.onReady() + this.onRunning() + this.onQuit() + } + } + + createWindow() { + main.init(); + init(main.getWindow()); + } + + beforeReady() { + // 系统托盘 + if (commonConst.macOS()) { + if (commonConst.production() && !app.isInApplicationsFolder()) { + app.moveToApplicationsFolder(); + } else { + app.dock.hide(); + } + }else { + app.disableHardwareAcceleration(); + } + } + + onReady() { + const readyFunction = () => { + this.createWindow(); + createTray(main.getWindow()); + autoUpdate(); + } + if (!app.isReady()) { + app.on('ready', readyFunction) + } else { + readyFunction() + } + } + + onRunning() { + app.on('second-instance', (event, commandLine, workingDirectory) => { + // 当运行第二个实例时,将会聚焦到myWindow这个窗口 + const win = main.getWindow(); + if (win) { + if (win.isMinimized()) { + win.restore(); + } + win.focus(); + } + }); + app.on('activate', () => { + if (!main.getWindow()) { + this.createWindow(); + } + }); + } + + onQuit () { + app.on('window-all-closed', () => { + if (process.platform !== 'darwin') { + app.quit() + } + }) + + app.on('will-quit', () => { + globalShortcut.unregisterAll() + }) + // Exit cleanly on request from parent process in development mode. + if (commonConst.dev()) { + if (process.platform === 'win32') { + process.on('message', data => { + if (data === 'graceful-exit') { + app.quit() + } + }) + } else { + process.on('SIGTERM', () => { + app.quit() + }) + } + } + } } -app.on('ready', () => { - createWindow() - createTray(main.getWindow()); - autoUpdate(); -}) - -app.on('window-all-closed', () => { - if (process.platform !== 'darwin') { - app.quit() - } -}) - -app.on('activate', () => { - createWindow() -}); - +(new initApp()).launchApp(); diff --git a/src/main/tray.js b/src/main/tray.js index 04f2517..c2e27a0 100644 --- a/src/main/tray.js +++ b/src/main/tray.js @@ -1,10 +1,20 @@ -import { dialog, Menu, Tray, app, shell, ipcMain } from 'electron'; +import { dialog, Menu, Tray, app, shell } from 'electron'; import path from 'path'; import pkg from '../../package.json'; +import os from 'os'; +import {commonConst} from './common/utils'; function createTray(window) { return new Promise((resolve, reject) => { - const appIcon = new Tray(path.join(__static, './rocket.png')); + let icon; + if (commonConst.macOS()) { + icon = './icon@3x.png' + }else if (commonConst.windows()) { + icon = parseInt(os.release()) < 10 ? './icon@2x.png' : './icon.ico'; + }else { + icon = 'icon@2x.png' + } + const appIcon = new Tray(path.join(__static, icon)); const contextMenu = Menu.buildFromTemplate([ { label: "帮助文档", click: () => { diff --git a/src/renderer/App.vue b/src/renderer/App.vue index 3d2b4b7..cc8efae 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -44,7 +44,7 @@ :src="selected.icon" /> @@ -358,13 +358,13 @@ export default { .rubick-logo { width: 40px; height: 40px; - background: #314659; + background: #574778; display: flex; align-items: center; justify-content: center; border-radius: 100%; img { - width: 28px; + width: 32px; } } .tag-container { diff --git a/src/renderer/assets/ant-reset.less b/src/renderer/assets/ant-reset.less new file mode 100644 index 0000000..6ce9f7d --- /dev/null +++ b/src/renderer/assets/ant-reset.less @@ -0,0 +1,10 @@ +@import '~ant-design-vue/dist/antd.less'; // 引入官方提供的 less 样式入口文件 + +@primary-color: #ff4ea4; // 全局主色 +@link-color: #ff4ea4; // 链接色 +@error-color: #ff4ea4; // 错误色 +.ant-tag-green { + color: #ff4ea4; + background: rgba(255, 159, 180, 0.3); + border-color: #ff9fb4; +} diff --git a/src/renderer/assets/imgs/logo.png b/src/renderer/assets/imgs/logo.png new file mode 100644 index 0000000..65efaa3 Binary files /dev/null and b/src/renderer/assets/imgs/logo.png differ diff --git a/src/renderer/main.js b/src/renderer/main.js index 15c1555..dfbd76e 100644 --- a/src/renderer/main.js +++ b/src/renderer/main.js @@ -7,7 +7,7 @@ import router from './router' import store from './store' import Antd from 'ant-design-vue'; -import 'ant-design-vue/dist/antd.css'; +import './assets/ant-reset.less'; const opConfig = remote.getGlobal('opConfig'); diff --git a/src/renderer/pages/search/subpages/market.vue b/src/renderer/pages/search/subpages/market.vue index 60ab879..7557702 100644 --- a/src/renderer/pages/search/subpages/market.vue +++ b/src/renderer/pages/search/subpages/market.vue @@ -13,7 +13,7 @@
- +
@@ -73,6 +73,7 @@ import api from '../../../assets/api'; import {mapActions, mapState} from 'vuex'; import marked from "marked"; +import {shell} from "electron"; const rendererMD = new marked.Renderer(); export default { @@ -114,6 +115,11 @@ export default { this.currentSelect = item; this.currentSelect.index = index; }, + jumpTo(link) { + if (link) { + shell.openExternal(link) + } + }, ...mapActions('main', ['downloadPlugin']) }, computed: { diff --git a/static/icon.ico b/static/icon.ico new file mode 100644 index 0000000..75e9e61 Binary files /dev/null and b/static/icon.ico differ diff --git a/static/icon@2x.png b/static/icon@2x.png new file mode 100644 index 0000000..c792ff8 Binary files /dev/null and b/static/icon@2x.png differ diff --git a/static/icon@3x.png b/static/icon@3x.png new file mode 100644 index 0000000..acdbc8c Binary files /dev/null and b/static/icon@3x.png differ diff --git a/static/rocket.png b/static/rocket.png index ae864a6..a3d30d9 100644 Binary files a/static/rocket.png and b/static/rocket.png differ