From 67a4fe516da3fb704059fb03dbc29da45bd5b9e5 Mon Sep 17 00:00:00 2001 From: pompurin404 Date: Mon, 23 Sep 2024 15:42:13 +0800 Subject: [PATCH] fix ssid on new system --- changelog.md | 5 +++++ src/main/resolve/autoUpdater.ts | 36 ++++++++++++++++++--------------- src/main/sys/ssid.ts | 28 +++++++++++++++---------- 3 files changed, 42 insertions(+), 27 deletions(-) diff --git a/changelog.md b/changelog.md index 486ed97..dc15f97 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,8 @@ +### Breaking Changes + +- 为了修复macOS应用内更新问题,此版本需要手动下载dmg进行安装 + ### Bug Fixes - 修复macOS应用内更新后权限丢失的问题 +- 修复高版本macOS SSID获取失败的问题 diff --git a/src/main/resolve/autoUpdater.ts b/src/main/resolve/autoUpdater.ts index 980e7d8..ab76312 100644 --- a/src/main/resolve/autoUpdater.ts +++ b/src/main/resolve/autoUpdater.ts @@ -1,6 +1,6 @@ import axios from 'axios' import yaml from 'yaml' -import { app } from 'electron' +import { app, shell } from 'electron' import { getControledMihomoConfig } from '../config' import { dataDir, exeDir, exePath, isPortable, resourcesFilesDir } from '../utils/dirs' import { rm, writeFile } from 'fs/promises' @@ -85,23 +85,27 @@ export async function downloadAndInstallUpdate(version: string): Promise { app.quit() } if (file.endsWith('.dmg')) { - const execPromise = promisify(exec) - const name = exePath().split('.app')[0].replace('/Applications/', '') - await execPromise( - `hdiutil attach "${path.join(dataDir(), file)}" -mountpoint "/Volumes/mihomo-party" -nobrowse` - ) try { - await execPromise(`mv /Applications/${name}.app /tmp`) - await execPromise('cp -R "/Volumes/mihomo-party/mihomo-party.app" /Applications/') - await execPromise(`rm -rf /tmp/${name}.app`) - } catch (e) { - await execPromise(`mv /tmp/${name}.app /Applications`) - throw e - } finally { - await execPromise('hdiutil detach "/Volumes/mihomo-party"') + const execPromise = promisify(exec) + const name = exePath().split('.app')[0].replace('/Applications/', '') + await execPromise( + `hdiutil attach "${path.join(dataDir(), file)}" -mountpoint "/Volumes/mihomo-party" -nobrowse` + ) + try { + await execPromise(`mv /Applications/${name}.app /tmp`) + await execPromise('cp -R "/Volumes/mihomo-party/mihomo-party.app" /Applications/') + await execPromise(`rm -rf /tmp/${name}.app`) + } catch (e) { + await execPromise(`mv /tmp/${name}.app /Applications`) + throw e + } finally { + await execPromise('hdiutil detach "/Volumes/mihomo-party"') + } + app.relaunch() + app.quit() + } catch { + shell.openPath(path.join(dataDir(), file)) } - app.relaunch() - app.quit() } } catch (e) { rm(path.join(dataDir(), file)) diff --git a/src/main/sys/ssid.ts b/src/main/sys/ssid.ts index 5305de2..fb223bf 100644 --- a/src/main/sys/ssid.ts +++ b/src/main/sys/ssid.ts @@ -3,7 +3,7 @@ import { promisify } from 'util' import { getAppConfig, patchControledMihomoConfig } from '../config' import { patchMihomoConfig } from '../core/mihomoApi' import { mainWindow } from '..' -import { ipcMain } from 'electron' +import { ipcMain, net } from 'electron' import { getDefaultService } from '../core/manager' export async function getCurrentSSID(): Promise { @@ -26,21 +26,27 @@ export async function getCurrentSSID(): Promise { } } if (process.platform === 'darwin') { - try { - const { stdout } = await execPromise( - '/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I' - ) + const { stdout } = await execPromise( + '/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I' + ) + if (stdout.trim().startsWith('WARNING')) { + if (net.isOnline()) { + const service = await getDefaultService() + const { stdout } = await execPromise( + `networksetup -listpreferredwirelessnetworks ${service}` + ) + if (stdout.trim().startsWith('Preferred networks on')) { + if (stdout.split('\n').length > 1) { + return stdout.split('\n')[1].trim() + } + } + } + } else { for (const line of stdout.split('\n')) { if (line.trim().startsWith('SSID')) { return line.split(': ')[1].trim() } } - } catch { - const service = await getDefaultService() - const { stdout } = await execPromise(`networksetup -getairportnetwork ${service}`) - if (stdout.split(': ').length > 1) { - return stdout.split(': ')[1].trim() - } } } } catch {