From 3175edff2aa4c93adb1bee87c94e3013cbed841c Mon Sep 17 00:00:00 2001 From: xVanTuring Date: Thu, 12 Mar 2020 21:47:09 +0800 Subject: [PATCH 1/3] fix: unable to import/export config --- src/main/tray-handler.js | 32 ++++++++++++++++++-------------- src/shared/dialog.js | 34 ---------------------------------- 2 files changed, 18 insertions(+), 48 deletions(-) delete mode 100644 src/shared/dialog.js diff --git a/src/main/tray-handler.js b/src/main/tray-handler.js index 49ec847..57a81ad 100644 --- a/src/main/tray-handler.js +++ b/src/main/tray-handler.js @@ -1,4 +1,4 @@ -import { app, shell, clipboard } from 'electron' +import { app, shell, clipboard, dialog } from 'electron' import { readJson, writeJson } from 'fs-extra' import path from 'path' import sudo from 'sudo-prompt' @@ -11,7 +11,6 @@ import { startProxy } from './proxy' import { showNotification } from './notification' import * as events from '../shared/events' import { loadConfigsFromString } from '../shared/ssr' -import { chooseFile, chooseSavePath } from '../shared/dialog' import * as i18n from './locales' const $t = i18n.default export { openDevtool } from './window' @@ -48,26 +47,31 @@ export function scanQRCode () { sendData(events.EVENT_APP_SCAN_DESKTOP) } -// 打开选项设置页面 export function openOptionsWindow () { sendData(events.EVENT_APP_SHOW_PAGE, 'Options') } -// 导入配置文件 -export function importConfigFromFile () { - const _path = chooseFile('选择gui-config.json', [{ name: 'Json', extensions: ['json'] }]) - if (_path) { - readJson(_path).then(fileConfig => { +export async function importConfigFromFile () { + const result = await dialog.showOpenDialog({ + title: 'Open from', + properties: ['openFile'], + filters: [{ name: 'Json', extensions: ['json'] }, + { name: 'All', extensions: ['*'] }] + }) + if (result.filePaths.length === 1) { + readJson(result.filePaths[0]).then(fileConfig => { updateAppConfig(fileConfig, false, true) - }).catch(() => {}) + }).catch(() => { }) } } -// 导出配置文件 -export function exportConfigToFile () { - const _path = chooseSavePath('选择导出的目录') - if (_path) { - writeJson(path.join(_path, 'gui-config.json'), currentConfig, { spaces: '\t' }) +export async function exportConfigToFile () { + const result = await dialog.showOpenDialog({ + title: 'Save to', + properties: ['openDirectory'] + }) + if (result.filePaths.length === 1) { + writeJson(path.join(result.filePaths[0], 'gui-config.json'), currentConfig, { spaces: '\t' }) } } diff --git a/src/shared/dialog.js b/src/shared/dialog.js deleted file mode 100644 index e95de1f..0000000 --- a/src/shared/dialog.js +++ /dev/null @@ -1,34 +0,0 @@ -import { isWin } from './env' -import { dialog as _dialog, remote } from 'electron' - -const dialog = _dialog || remote.dialog - -function choose (title, filters, isFile = true, isSave = false, defaultPath) { - const path = dialog[isSave ? 'showSaveDialog' : 'showOpenDialog']({ - title, - defaultPath, - properties: [isFile ? 'openFile' : 'openDirectory'], - filters - }) - if (isSave) { - if (path) { - return path - } else { - return null - } - } else if (path && path.length) { - let _path = path[0] - if (isWin) { - _path = _path.replace(/\\/g, '\\\\') - } - return _path - } - return null -} - -export function chooseFile (title, filters, defaultPath) { - return choose(title, filters, true, false, defaultPath) -} -export function chooseSavePath (title, filters, defaultPath) { - return choose(title, filters, true, true, defaultPath) -} From 5e56a4d3d50dc41d36c01c20f46171d41fd5ad8b Mon Sep 17 00:00:00 2001 From: xVanTuring Date: Fri, 13 Mar 2020 15:21:11 +0800 Subject: [PATCH 2/3] fix: unable to use global proxy in windows A dialog will be open for switching to http global proxy --- src/main/proxy.js | 9 +++++--- src/main/tray-handler.js | 1 - src/main/tray.js | 20 +++++++++++++--- src/renderer/locales/en-US.json | 1 + src/renderer/locales/zh-CN.json | 1 + src/renderer/views/option/Common.vue | 34 +++++++++++++++++----------- src/shared/config.js | 3 ++- 7 files changed, 48 insertions(+), 21 deletions(-) diff --git a/src/main/proxy.js b/src/main/proxy.js index 03958a1..8730d63 100644 --- a/src/main/proxy.js +++ b/src/main/proxy.js @@ -68,7 +68,7 @@ export async function setProxyToNone (force = true) { export async function setProxyToGlobal (host, port) { let command if (isWin && await pathExists(winToolPath)) { - command = `${winToolPath} global ${host}:${port}` + command = `${winToolPath} global ${host}:${port} "localhost;127.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;192.168.*;"` } else if (isMac && await pathExists(macToolPath) && !await isOldMacVersion) { command = `"${macToolPath}" -m global -p ${port}` } else if (isLinux && await isGsettingsAvaliable) { @@ -98,7 +98,7 @@ async function setProxyByMode (mode) { } else if (mode === 1) { await setProxyToPac(`http://127.0.0.1:${currentConfig.pacPort}/proxy.pac`) } else if (mode === 2) { - await setProxyToGlobal('127.0.0.1', currentConfig.localPort) + await setProxyToGlobal('127.0.0.1', currentConfig.preferHTTPGlobal ? currentConfig.httpProxyPort : currentConfig.localPort) } } @@ -116,6 +116,9 @@ export function startProxy (mode) { if (mode === undefined) { mode = currentConfig.sysProxyMode } + if (isWin && mode === 2 && currentConfig.preferHTTPGlobal === 1 && !currentConfig.httpProxyEnable) { + updateAppConfig({ httpProxyEnable: true }) + } setProxyByMode(mode) } @@ -129,7 +132,7 @@ appConfig$.subscribe(data => { if (appConfig.sysProxyMode === 1 && (changed.indexOf('pacPort') > -1 || changed.indexOf('enable') > -1)) { // pacPort changes or enable changed startProxy(1) - } else if (appConfig.sysProxyMode === 2 && (changed.indexOf('localPort') > -1 || changed.indexOf('enable') > -1)) { + } else if (appConfig.sysProxyMode === 2 && (changed.indexOf('localPort') > -1 || changed.indexOf('enable') > -1 || changed.indexOf('preferHTTPGlobal') > -1)) { startProxy(2) } } diff --git a/src/main/tray-handler.js b/src/main/tray-handler.js index 57a81ad..bb715b6 100644 --- a/src/main/tray-handler.js +++ b/src/main/tray-handler.js @@ -20,7 +20,6 @@ export { updateSubscribes } from './subscribe' export function toggleEnable () { updateAppConfig({ enable: !currentConfig.enable }) } - // 切换代理方式 export function toggleProxy (mode) { startProxy(mode) diff --git a/src/main/tray.js b/src/main/tray.js index 2a4d469..86cbc96 100644 --- a/src/main/tray.js +++ b/src/main/tray.js @@ -1,7 +1,7 @@ -import { Menu, nativeImage, Tray } from 'electron' -import { appConfig$ } from './data' +import { Menu, nativeImage, Tray, dialog } from 'electron' +import { appConfig$, updateAppConfig } from './data' import * as handler from './tray-handler' -import { groupConfigs } from '../shared/utils' +import { groupConfigs } from '@/shared/utils' import { isMac, isWin, isOldMacVersion } from '../shared/env' import { disabledTray, enabledHighlightTray, enabledTray, globalHighlightTray, globalTray, pacHighlightTray, pacTray } from '../shared/icon' import * as i18n from './locales' @@ -121,6 +121,20 @@ export function changeProxy (e, mode, appConfig) { if (mode === appConfig.sysProxyMode) { e.checked = true } else { + if (isWin && mode === 2 && appConfig.preferHTTPGlobal === -1) { + dialog.showMessageBox({ + title: 'Global Proxy', + message: 'Windows does not play well with socks5 provide by ssr-python.\nUse HTTP Proxy instead?', + buttons: ['Yes', 'No'], + type: 'info' + }).then((response) => { + if (response.response === 0) { + updateAppConfig({ preferHTTPGlobal: 1 }) + } else { + updateAppConfig({ preferHTTPGlobal: 0 }) + } + }) + } handler.toggleProxy(mode) } } diff --git a/src/renderer/locales/en-US.json b/src/renderer/locales/en-US.json index bb163f3..7eb16b4 100644 --- a/src/renderer/locales/en-US.json +++ b/src/renderer/locales/en-US.json @@ -33,6 +33,7 @@ "UI_SETTING_HTTP_PORT": "Http Proxy Port", "UI_SETTING_ENABLE_HTTP_PORT": "Enable Http Proxy", "UI_SETTING_SSR_INPUT_PLACEHOLDER": "Please select shadowsocks Dir", + "UI_SETTING_PREFER_HTTP":"Use Http as Global", "UI_SETTING_SHORTCUT_TOGGLE_VISI": "Toggle Windows", "UI_SETTING_SHORTCUT_CHANGE_SYS_PROXY": "Change Sys Proxy Mode", "UI_SETTING_SHORTCUT_REGISTED":"Shortcut {shortcutStr} has been registered.", diff --git a/src/renderer/locales/zh-CN.json b/src/renderer/locales/zh-CN.json index 1e618fa..0a2961f 100644 --- a/src/renderer/locales/zh-CN.json +++ b/src/renderer/locales/zh-CN.json @@ -33,6 +33,7 @@ "UI_SETTING_HTTP_PORT": "HTTP代理端口", "UI_SETTING_ENABLE_HTTP_PORT": "启用HTTP代理", "UI_SETTING_SSR_INPUT_PLACEHOLDER": "请选择shadowsocks目录", + "UI_SETTING_PREFER_HTTP":"使用Http全局代理", "UI_SETTING_SHORTCUT_TOGGLE_VISI": "切换窗口显隐", "UI_SETTING_SHORTCUT_CHANGE_SYS_PROXY": "切换系统代理模式", diff --git a/src/renderer/views/option/Common.vue b/src/renderer/views/option/Common.vue index c06da9e..601faa5 100644 --- a/src/renderer/views/option/Common.vue +++ b/src/renderer/views/option/Common.vue @@ -1,6 +1,6 @@