From ad3eaedd7117cf6b67b7eaac59d3e9479955cc8a Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Mon, 19 Dec 2022 20:29:26 +0800 Subject: [PATCH 1/8] =?UTF-8?q?:bug:=20v2.5.5-dev1=20siyuan-v202212191041-?= =?UTF-8?q?win=E5=90=AF=E5=8A=A8=E6=8A=A5=E9=94=99=20Fix=20https://github.?= =?UTF-8?q?com/siyuan-note/siyuan/issues/6893?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/electron/main.js | 1 - 1 file changed, 1 deletion(-) diff --git a/app/electron/main.js b/app/electron/main.js index d72e837ca..9083cf761 100644 --- a/app/electron/main.js +++ b/app/electron/main.js @@ -861,7 +861,6 @@ app.on('before-quit', (event) => { }) const {powerMonitor} = require('electron') -const {build} = require("electron-builder"); powerMonitor.on('suspend', () => { writeLog('system suspend') From fbfbe1b0ce948c4c77e8402d965c09994cbf6fe1 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 20 Dec 2022 09:46:59 +0800 Subject: [PATCH 2/8] :art: Clean code --- app/electron/main.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/electron/main.js b/app/electron/main.js index 9083cf761..23a691a32 100644 --- a/app/electron/main.js +++ b/app/electron/main.js @@ -567,9 +567,7 @@ const initKernel = (initData) => { }, }) - const kernelName = 'win32' === process.platform - ? 'SiYuan-Kernel.exe' - : 'SiYuan-Kernel' + const kernelName = 'win32' === process.platform ? 'SiYuan-Kernel.exe' : 'SiYuan-Kernel' const kernelPath = path.join(appDir, 'kernel', kernelName) if (!fs.existsSync(kernelPath)) { showErrorWindow('⚠️ 内核文件丢失 Kernel is missing', @@ -663,7 +661,7 @@ const initKernel = (initData) => { } finally { count++ if (64 < count) { - writeLog('get kernel port failed [pid=' + kernelProcessPid + '], try to use 6806') + writeLog('get kernel port failed [pid=' + kernelProcessPid + ']') return } } From 1715b150a2353a1b5ca7128efe411bf6aa78730f Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 20 Dec 2022 19:40:01 +0800 Subject: [PATCH 3/8] =?UTF-8?q?:art:=20=E6=94=B9=E8=BF=9B=E6=A1=8C?= =?UTF-8?q?=E9=9D=A2=E7=AB=AF=E6=8B=89=E8=B5=B7=E5=86=85=E6=A0=B8=20https:?= =?UTF-8?q?//github.com/siyuan-note/siyuan/issues/6894?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/electron/main.js | 91 +++++++++++++++++++++--------------------- app/pnpm-lock.yaml | 4 +- kernel/util/working.go | 12 ++++-- 3 files changed, 57 insertions(+), 50 deletions(-) diff --git a/app/electron/main.js b/app/electron/main.js index 23a691a32..7d1e179f2 100644 --- a/app/electron/main.js +++ b/app/electron/main.js @@ -34,7 +34,6 @@ const isDevEnv = process.env.NODE_ENV === 'development' const appVer = app.getVersion() const confDir = path.join(app.getPath('home'), '.config', 'siyuan') const windowStatePath = path.join(confDir, 'windowState.json') -const portJSONPath = path.join(confDir, 'port.json') let tray // 托盘必须使用全局变量,以防止被垃圾回收 https://www.electronjs.org/docs/faq#my-apps-windowtray-disappeared-after-a-few-minutes let mainWindow // 从托盘处激活报错 https://github.com/siyuan-note/siyuan/issues/769 let firstOpenWindow, bootWindow @@ -42,7 +41,6 @@ let closeButtonBehavior = 0 let siyuanOpenURL let firstOpen = false let resetWindowStateOnRestart = false -let kernelPort = "6806" const localhost = "127.0.0.1" require('@electron/remote/main').initialize() @@ -51,10 +49,6 @@ if (!app.requestSingleInstanceLock()) { return } -const getServer = () => { - return "http://" + localhost + ":" + kernelPort -} - const showErrorWindow = (title, content) => { let errorHTMLPath = path.join(appDir, 'app', 'electron', 'error.html') if (isDevEnv) { @@ -554,6 +548,46 @@ const boot = () => { } } +let kernelPort = 6806 +let tryGetPortCount = 0 +const net = require("net"); +const getAvailablePort = (port = kernelPort) => { + // https://gist.github.com/mikeal/1840641 + + const server = net.createServer() + return new Promise((resolve, reject) => server + .on('error', error => { + writeLog(error) + if (2048 < ++tryGetPortCount) { + writeLog('failed to get available port [tryCount=' + tryGetPortCount + ', port=' + port + ']') + reject(error) + return + } + server.listen(++port) + }) + .on('listening', () => { + writeLog('found an available port [' + port + ']') + server.close(() => resolve(port)) + }) + .listen(port, '127.0.0.1')) +} + +const getKernelPort = async () => { + if (isDevEnv) { + writeLog("got kernel port [" + kernelPort + "]") + return kernelPort + } + + // 改进桌面端拉起内核 https://github.com/siyuan-note/siyuan/issues/6894 + kernelPort = await getAvailablePort() + writeLog("got kernel available port [" + kernelPort + "]") + return kernelPort +} + +const getServer = () => { + return "http://" + localhost + ":" + kernelPort +} + const initKernel = (initData) => { return new Promise(async (resolve) => { bootWindow = new BrowserWindow({ @@ -577,7 +611,8 @@ const initKernel = (initData) => { return } - const cmds = ['--wd', appDir] + const availablePort = await getKernelPort() + const cmds = ['--port', availablePort, '--wd', appDir] if (isDevEnv) { cmds.push('--mode', 'dev') } @@ -639,44 +674,6 @@ const initKernel = (initData) => { }) } - const getKernelPort = async () => { - if (isDevEnv) { - return kernelPort - } - - await sleep(200) - let gotPort = false - let count = 0 - while (!gotPort) { - try { - const portJSON = JSON.parse(fs.readFileSync(portJSONPath, 'utf8')) - const ret = portJSON[kernelProcessPid] - if (ret) { - gotPort = true - return ret - } - await sleep(100) - } catch (e) { - await sleep(100) - } finally { - count++ - if (64 < count) { - writeLog('get kernel port failed [pid=' + kernelProcessPid + ']') - return - } - } - } - } - - kernelPort = await getKernelPort() - if (!kernelPort) { - showErrorWindow('⚠️ 获取内核服务端口失败 Failed to get kernel serve port', - '
获取内核服务端口失败,请确保程序拥有网络权限并不受防火墙和杀毒软件阻止。
Failed to get kernel serve port, please make sure the program has network permissions and is not blocked by firewalls and antivirus software.
') - bootWindow.destroy() - resolve(false) - } - writeLog("got kernel port [" + kernelPort + "]") - let gotVersion = false let apiData let count = 0 @@ -696,8 +693,12 @@ const initKernel = (initData) => { count++ if (14 < count) { writeLog('get kernel ver failed') + + showErrorWindow('⚠️ 获取内核服务端口失败 Failed to get kernel serve port', + '
获取内核服务端口失败,请确保程序拥有网络权限并不受防火墙和杀毒软件阻止。
Failed to get kernel serve port, please make sure the program has network permissions and is not blocked by firewalls and antivirus software.
') bootWindow.destroy() resolve(false) + return } } } diff --git a/app/pnpm-lock.yaml b/app/pnpm-lock.yaml index e4326a260..0a258c8a7 100644 --- a/app/pnpm-lock.yaml +++ b/app/pnpm-lock.yaml @@ -1928,10 +1928,10 @@ packages: resolution: {integrity: sha512-m0+M53+HYMzqKxwNQZT143K7WwXEGUy9LY31l8dJphXx2P/FQod615mVbxHyqbDCG4J5bHdWm21qZ0e2DVY6CQ==} engines: {node: '>=14.0.0'} dependencies: + 7zip-bin: 5.1.1 '@develar/schema-utils': 2.6.5 '@electron/universal': 1.2.1 '@malept/flatpak-bundler': 0.4.0 - 7zip-bin: 5.1.1 async-exit-hook: 2.0.1 bluebird-lst: 1.0.9 builder-util: 23.3.3 @@ -2215,9 +2215,9 @@ packages: /builder-util/23.3.3: resolution: {integrity: sha512-MJZlUiq2PY5hjYv9+XNaoYdsITqvLgRDoHSFg/4nzpInbNxNjLQOolL04Zsyp+hgfcbFvMC4h0KkR1CMPHLWbA==} dependencies: + 7zip-bin: 5.1.1 '@types/debug': 4.1.7 '@types/fs-extra': 9.0.13 - 7zip-bin: 5.1.1 app-builder-bin: 4.0.0 bluebird-lst: 1.0.9 builder-util-runtime: 9.0.3 diff --git a/kernel/util/working.go b/kernel/util/working.go index 84b48a3f1..cb8453b92 100644 --- a/kernel/util/working.go +++ b/kernel/util/working.go @@ -446,10 +446,16 @@ func GetDataAssetsAbsPath() (ret string) { func tryLockWorkspace() { WorkspaceLock = flock.New(filepath.Join(WorkspaceDir, ".lock")) - if err := WorkspaceLock.Lock(); nil != err { - logging.LogErrorf("lock workspace [%s] failed: %s", WorkspaceDir, err) - os.Exit(ExitCodeWorkspaceLocked) + ok, err := WorkspaceLock.TryLock() + if ok { + return } + if nil != err { + logging.LogErrorf("lock workspace [%s] failed: %s", WorkspaceDir, err) + } else { + logging.LogErrorf("lock workspace [%s] failed", WorkspaceDir) + } + os.Exit(ExitCodeWorkspaceLocked) } func UnlockWorkspace() { From 9de0fe0d93f5a368cf52226e7d6fb2ab4330f6d5 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 20 Dec 2022 19:50:10 +0800 Subject: [PATCH 4/8] =?UTF-8?q?:art:=20=E6=94=B9=E8=BF=9B=E6=A1=8C?= =?UTF-8?q?=E9=9D=A2=E7=AB=AF=E6=8B=89=E8=B5=B7=E5=86=85=E6=A0=B8=20https:?= =?UTF-8?q?//github.com/siyuan-note/siyuan/issues/6894?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/appearance/langs/en_US.json | 2 -- app/appearance/langs/es_ES.json | 2 -- app/appearance/langs/fr_FR.json | 2 -- app/appearance/langs/zh_CHT.json | 2 -- app/appearance/langs/zh_CN.json | 2 -- app/src/config/about.ts | 16 ---------------- app/src/config/search.ts | 2 +- kernel/api/router.go | 1 - kernel/api/system.go | 17 ----------------- kernel/conf/system.go | 1 - kernel/model/conf.go | 7 ------- 11 files changed, 1 insertion(+), 53 deletions(-) diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index ca6cdb453..1730d7f6b 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -38,8 +38,6 @@ "floatWindowMode": "Hover to display a floating window", "floatWindowModeTip": "After enabling, a floating window will appear when the mouse hovers over the block reference, breadcrumb block icon, etc. After disabling, you need to hold down the ${hotkey} key to appear the floating window", "codeSnippet": "Code Snippet", - "useFixedPort": "Use Fixed Port", - "useFixedPortTip": "After enabling, only the port 6806 will be used. When disabled, both random ports and 6806 will be used. The application will be closed automatically after modification, please restart manually", "expandDown": "Expand Down", "expandUp": "Expand Up", "goForward": "Go forward", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index 7f4f97f94..18a5e8677 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -38,8 +38,6 @@ "floatWindowMode": "Pase el cursor para mostrar una ventana flotante", "floatWindowModeTip": "Después de habilitar, aparecerá una ventana flotante cuando el mouse se desplace sobre la referencia del bloque, el ícono del bloque de navegación, etc. Después de deshabilitar, debe mantener presionada la tecla ${hotkey} para aparece la ventana flotante", "codeSnippet": "Fragmento de código", - "useFixedPort": "Usar puerto fijo", - "useFixedPortTip": "Después de habilitarlo, solo se usará el puerto 6806. Cuando está deshabilitado, se utilizarán tanto los puertos aleatorios como 6806. La aplicación se cerrará automáticamente después de la modificación, por favor reinicie manualmente", "expandDown": "Expandir hacia abajo", "expandUp": "Expandir hacia arriba", "goForward": "Ir hacia adelante", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index 1056b50e6..acae91320 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -38,8 +38,6 @@ "floatWindowMode": "Survolez pour afficher une fenêtre flottante", "floatWindowModeTip": "Après l'activation, une fenêtre flottante apparaît lorsque la souris survole la référence du bloc, l'icône du fil d'Ariane, etc. Après la désactivation, vous devez maintenir enfoncée la touche ${hotkey} pour apparaît la fenêtre flottante", "codeSnippet": "Extrait de code", - "useFixedPort": "Utiliser un port fixe", - "useFixedPortTip": "Après activation, seul le port 6806 sera utilisé. Lorsqu'il est désactivé, les ports aléatoires et 6806 seront utilisés. L'application sera fermée automatiquement après modification, veuillez la redémarrer manuellement.", "expandDown": "Développer vers le bas", "expandUp": "Développer vers le haut", "goForward": "Suivant", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index 32a61206d..2647a1da5 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -38,8 +38,6 @@ "floatWindowMode": "懸停出現浮窗", "floatWindowModeTip": "啟用後鼠標懸停塊引、導覽路徑塊標等位置會出現浮窗,關閉後需按住 ${hotkey} 鍵才會出現浮窗", "codeSnippet": "代碼片段", - "useFixedPort": "使用固定端口", - "useFixedPortTip": "啟用後將僅使用固定端口 6806,關閉時同時使用隨機端口和 6806。修改後會自動關閉應用,請手動重啟", "expandDown": "向下擴選", "expandUp": "向上擴選", "goForward": "前進", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index 506673324..43f46279c 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -38,8 +38,6 @@ "floatWindowMode": "悬停出现浮窗", "floatWindowModeTip": "启用后鼠标悬停块引、面包屑块标等位置会出现浮窗,关闭后需按住 ${hotkey} 键才会出现浮窗", "codeSnippet": "代码片段", - "useFixedPort": "使用固定端口", - "useFixedPortTip": "启用后将仅使用固定端口 6806,关闭时同时使用随机端口和 6806。修改后会自动关闭应用,请手动重启", "expandDown": "向下扩选", "expandUp": "向上扩选", "goForward": "前进", diff --git a/app/src/config/about.ts b/app/src/config/about.ts index 7b8891ad4..0cbcdc359 100644 --- a/app/src/config/about.ts +++ b/app/src/config/about.ts @@ -57,14 +57,6 @@ export const about = {
-