diff --git a/publish/changeLog.md b/publish/changeLog.md index 64643a7b..6a4e4d48 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,4 +1,8 @@ ### 新增 -- 新增「设置 → 其他设置 → 主窗口使用软件内置的圆角及阴影」设置(#2360) +- 新增「设置 → 其他设置 → 主窗口使用软件内置的圆角及阴影」设置(#2360) *默认启用,关闭后将使用系统原生的窗口样式,该设置重启软件后生效* + +### 变更 + +- 更新代理配置规则,现在不启用代理时,图片、音频加载将不再走系统代理(#2382 @Folltoshe) diff --git a/src/common/defaultSetting.ts b/src/common/defaultSetting.ts index 02c2adc6..88664105 100644 --- a/src/common/defaultSetting.ts +++ b/src/common/defaultSetting.ts @@ -128,7 +128,7 @@ const defaultSetting: LX.AppSetting = { 'search.isShowHistorySearch': false, 'search.isFocusSearchBox': false, - 'network.proxy.type': 'disable', + 'network.proxy.enable': false, 'network.proxy.host': '', 'network.proxy.port': '', diff --git a/src/common/types/app_setting.d.ts b/src/common/types/app_setting.d.ts index 455c0d70..aeff0891 100644 --- a/src/common/types/app_setting.d.ts +++ b/src/common/types/app_setting.d.ts @@ -596,9 +596,9 @@ declare global { 'search.isFocusSearchBox': boolean /** - * 代理类型 + * 是否启用代理 */ - 'network.proxy.type': 'disable' | 'system' | 'custom' + 'network.proxy.enable': boolean /** * 代理服务器地址 diff --git a/src/common/utils/migrateSetting.ts b/src/common/utils/migrateSetting.ts index 0a94705f..6c06630f 100644 --- a/src/common/utils/migrateSetting.ts +++ b/src/common/utils/migrateSetting.ts @@ -113,7 +113,7 @@ export default (setting: any): Partial => { setting['search.isShowHistorySearch'] = setting.search?.isShowHistorySearch setting['search.isFocusSearchBox'] = setting.search?.isFocusSearchBox - // setting['network.proxy.enable'] = setting.network?.proxy?.enable + setting['network.proxy.enable'] = setting.network?.proxy?.enable setting['network.proxy.host'] = setting.network?.proxy?.host setting['network.proxy.port'] = setting.network?.proxy?.port diff --git a/src/lang/en-us.json b/src/lang/en-us.json index 73d1e1af..a58c6fa7 100644 --- a/src/lang/en-us.json +++ b/src/lang/en-us.json @@ -472,9 +472,6 @@ "setting__list_scroll": "Remember position of scroll bar of playlist (Only valid for \"Your Library\" page)", "setting__list_source": "Show which music streaming service the song is from (Only valid for \"Your Library\" page)", "setting__network": "Network", - "setting__network_proxy_type_disable": "Do not use proxy", - "setting__network_proxy_type_system": "Use system proxy", - "setting__network_proxy_type_custom": "Custom proxy", "setting__network_proxy_host": "Host", "setting__network_proxy_password": "Password", "setting__network_proxy_port": "Port", diff --git a/src/lang/zh-cn.json b/src/lang/zh-cn.json index 48aa1572..bec3ac91 100644 --- a/src/lang/zh-cn.json +++ b/src/lang/zh-cn.json @@ -472,9 +472,6 @@ "setting__list_scroll": "记住播放列表滚动条位置(仅对「我的列表」有效)", "setting__list_source": "显示歌曲来源平台(仅对「我的列表」有效)", "setting__network": "网络设置", - "setting__network_proxy_type_disable": "不使用代理", - "setting__network_proxy_type_system": "使用系统代理", - "setting__network_proxy_type_custom": "自定义代理", "setting__network_proxy_host": "主机", "setting__network_proxy_password": "密码", "setting__network_proxy_port": "端口", diff --git a/src/lang/zh-tw.json b/src/lang/zh-tw.json index 3184fda4..05e4d913 100644 --- a/src/lang/zh-tw.json +++ b/src/lang/zh-tw.json @@ -472,9 +472,6 @@ "setting__list_scroll": "記住播放清單滾動條位置(僅對「我的清單」有效)", "setting__list_source": "顯示歌曲來自哪個音樂串流平台(僅對「我的清單」有效)", "setting__network": "網路設定", - "setting__network_proxy_type_disable": "不使用代理", - "setting__network_proxy_type_system": "使用系統代理", - "setting__network_proxy_type_custom": "自訂代理", "setting__network_proxy_host": "主機", "setting__network_proxy_password": "密碼", "setting__network_proxy_port": "埠", diff --git a/src/main/modules/userApi/main.ts b/src/main/modules/userApi/main.ts index 7f70d95b..96aad60b 100644 --- a/src/main/modules/userApi/main.ts +++ b/src/main/modules/userApi/main.ts @@ -19,41 +19,31 @@ const denyEvents = [ 'media-started-playing', ] as const + export const getProxy = () => { - const envProxyStr = envParams.cmdParams['proxy-server'] - if (envProxyStr && typeof envProxyStr == 'string') { - const [host, port = ''] = envProxyStr.split(':') + if (global.lx.appSetting['network.proxy.enable'] && global.lx.appSetting['network.proxy.host']) { return { - host, - port: parseInt(port || '80'), + host: global.lx.appSetting['network.proxy.host'], + port: global.lx.appSetting['network.proxy.port'], } } - - switch (global.lx.appSetting['network.proxy.type']) { - case 'custom': - const custom = { - enable: global.lx.appSetting['network.proxy.type'] === 'custom', - host: global.lx.appSetting['network.proxy.host'], - port: global.lx.appSetting['network.proxy.port'], - } - return custom.enable && custom.host - ? { - host: custom.host, - port: parseInt(custom.port || '80'), - } - : { - host: '', - port: '', - } - default: + const envProxy = envParams.cmdParams['proxy-server'] + if (envProxy) { + if (envProxy && typeof envProxy == 'string') { + const [host, port = ''] = envProxy.split(':') return { - host: '', - port: '', + host, + port, } + } + } + return { + host: '', + port: '', } } const handleUpdateProxy = (keys: Array) => { - if (keys.some(k => k.startsWith('network.proxy.'))) { + if (keys.includes('network.proxy.enable') || (global.lx.appSetting['network.proxy.enable'] && keys.some(k => k.startsWith('network.proxy.')))) { sendEvent(USER_API_RENDERER_EVENT_NAME.proxyUpdate, getProxy()) } } diff --git a/src/main/modules/winMain/index.ts b/src/main/modules/winMain/index.ts index 4c03c983..c05e4466 100644 --- a/src/main/modules/winMain/index.ts +++ b/src/main/modules/winMain/index.ts @@ -108,7 +108,7 @@ export default () => { setProgressBar(-1, { mode: 'none' }) } } - if (keys.some(k => k.includes('network.proxy.'))) { + if (keys.includes('network.proxy.enable') || (global.lx.appSetting['network.proxy.enable'] && keys.some(k => k.includes('network.proxy.')))) { setProxy() } }) diff --git a/src/main/modules/winMain/main.ts b/src/main/modules/winMain/main.ts index e1113b14..42a11488 100644 --- a/src/main/modules/winMain/main.ts +++ b/src/main/modules/winMain/main.ts @@ -65,6 +65,8 @@ export const createWindow = () => { const { shouldUseDarkColors, theme } = global.lx.theme const ses = session.fromPartition('persist:win-main') + const proxy = getProxy() + setSesProxy(ses, proxy?.host, String(proxy?.port)) /** * Initial window options @@ -102,12 +104,11 @@ export const createWindow = () => { } browserWindow = new BrowserWindow(options) - setProxy() - winEvent() - const winURL = process.env.NODE_ENV !== 'production' ? 'http://localhost:9080' : `file://${path.join(encodePath(__dirname), 'index.html')}` void browserWindow.loadURL(winURL + `?os=${getPlatform()}&dt=${global.envParams.cmdParams.dt}&dark=${shouldUseDarkColors}&theme=${encodeURIComponent(JSON.stringify(theme))}`) + winEvent() + if (global.envParams.cmdParams.odt) handleOpenDevTools(browserWindow.webContents) // global.lx.mainWindowClosed = false @@ -126,28 +127,24 @@ export const closeWindow = () => { browserWindow.close() } -export const setProxy = () => { - if (!browserWindow) return - switch (global.lx.appSetting['network.proxy.type']) { - case 'system': - void browserWindow.webContents.session.setProxy({ - mode: 'system', - }) - break - case 'disable': - void browserWindow.webContents.session.setProxy({ - mode: 'direct', - }) - break - default: - const proxy = getProxy() - if (!proxy) break - void browserWindow.webContents.session.setProxy({ - proxyRules: `http://${proxy.host}:${proxy.port}`, - }) - break +const setSesProxy = (ses: Electron.Session, host?: string, port?: string) => { + if (host) { + void ses.setProxy({ + mode: 'fixed_servers', + proxyRules: `http://${host}:${port}`, + }) + } else { + void ses.setProxy({ + mode: 'direct', + }) } } +export const setProxy = () => { + if (!browserWindow) return + const proxy = getProxy() + setSesProxy(browserWindow.webContents.session, proxy?.host, String(proxy?.port)) +} + export const sendEvent = (name: string, params?: T) => { if (!browserWindow) return diff --git a/src/main/utils/index.ts b/src/main/utils/index.ts index fee6c147..453ef558 100644 --- a/src/main/utils/index.ts +++ b/src/main/utils/index.ts @@ -295,25 +295,30 @@ export const setPowerSaveBlocker = (enabled: boolean) => { } } + +let envProxy: null | { host: string, port: number } = null export const getProxy = () => { - const envProxyStr = envParams.cmdParams['proxy-server'] - if (envProxyStr && typeof envProxyStr == 'string') { - const [host, port = ''] = envProxyStr.split(':') + if (global.lx.appSetting['network.proxy.enable'] && global.lx.appSetting['network.proxy.host']) { return { - host, - port: parseInt(port || '80'), + host: global.lx.appSetting['network.proxy.host'], + port: parseInt(global.lx.appSetting['network.proxy.port'] || '80'), + } + } + if (envProxy) { + return { + host: envProxy.host, + port: envProxy.port, + } + } else { + const envProxyStr = envParams.cmdParams['proxy-server'] + if (envProxyStr && typeof envProxyStr == 'string') { + const [host, port = ''] = envProxyStr.split(':') + return envProxy = { + host, + port: parseInt(port || '80'), + } } } - const custom = { - enable: global.lx.appSetting['network.proxy.type'] === 'custom', - host: global.lx.appSetting['network.proxy.host'], - port: global.lx.appSetting['network.proxy.port'], - } - return custom.enable && custom.host - ? { - host: custom.host, - port: parseInt(custom.port || '80'), - } - : null + return null } diff --git a/src/renderer/core/useApp/index.ts b/src/renderer/core/useApp/index.ts index 5f779056..79536141 100644 --- a/src/renderer/core/useApp/index.ts +++ b/src/renderer/core/useApp/index.ts @@ -19,7 +19,7 @@ import handleListAutoUpdate from './listAutoUpdate' export default () => { // apiSource.value = appSetting['common.apiSource'] - proxy.type = appSetting['network.proxy.type'] + proxy.enable = appSetting['network.proxy.enable'] proxy.host = appSetting['network.proxy.host'] proxy.port = appSetting['network.proxy.port'] isFullscreen.value = appSetting['common.startInFullscreen'] diff --git a/src/renderer/core/useApp/useSettingSync.ts b/src/renderer/core/useApp/useSettingSync.ts index 61ee030a..665b97ba 100644 --- a/src/renderer/core/useApp/useSettingSync.ts +++ b/src/renderer/core/useApp/useSettingSync.ts @@ -95,8 +95,8 @@ export default () => { sync.client.host = host }) - watch(() => appSetting['network.proxy.type'], type => { - proxy.type = type + watch(() => appSetting['network.proxy.enable'], enable => { + proxy.enable = enable }) watch(() => appSetting['network.proxy.host'], host => { proxy.host = host diff --git a/src/renderer/store/download/action.ts b/src/renderer/store/download/action.ts index fc28043c..15618e9e 100644 --- a/src/renderer/store/download/action.ts +++ b/src/renderer/store/download/action.ts @@ -134,7 +134,7 @@ const setStatus = (downloadInfo: LX.Download.ListItem, status: LX.Download.Downl const fixKgLyric = (lrc: string) => /\[00:\d\d:\d\d.\d+\]/.test(lrc) ? lrc.replace(/(?:\[00:(\d\d:\d\d.\d+\]))/gm, '[$1') : lrc const getProxy = () => { - return proxy.type === 'custom' && proxy.host ? { + return proxy.enable && proxy.host ? { host: proxy.host, port: parseInt(proxy.port || '80'), } : proxy.envProxy ? { diff --git a/src/renderer/store/index.ts b/src/renderer/store/index.ts index d2faadee..585c8345 100644 --- a/src/renderer/store/index.ts +++ b/src/renderer/store/index.ts @@ -8,15 +8,16 @@ process.versions.app = pkg.version export const apiSource = ref(null) export const proxy: { - type: LX.AppSetting['network.proxy.type'] + enable: boolean host: string port: string + envProxy?: { host: string port: string } } = { - type: 'disable', + enable: false, host: '', port: '', } diff --git a/src/renderer/utils/request.js b/src/renderer/utils/request.js index dd11a06c..6a30ee35 100644 --- a/src/renderer/utils/request.js +++ b/src/renderer/utils/request.js @@ -10,12 +10,23 @@ import { httpOverHttp, httpsOverHttp } from 'tunnel' const httpsRxp = /^https:/ const getRequestAgent = url => { - const options = proxy.type === 'custom' && proxy.host - ? { host: proxy.host, port: parseInt(proxy.port || '80') } - : proxy.envProxy - ? { host: proxy.envProxy.host, port: parseInt(proxy.envProxy.port || '80') } - : null - return options ? (httpsRxp.test(url) ? httpsOverHttp : httpOverHttp)({ proxy: options }) : undefined + let options + if (proxy.enable && proxy.host) { + options = { + proxy: { + host: proxy.host, + port: proxy.port, + }, + } + } else if (proxy.envProxy) { + options = { + proxy: { + host: proxy.envProxy.host, + port: proxy.envProxy.port, + }, + } + } + return options ? (httpsRxp.test(url) ? httpsOverHttp : httpOverHttp)(options) : undefined } diff --git a/src/renderer/views/Setting/components/SettingNetwork.vue b/src/renderer/views/Setting/components/SettingNetwork.vue index 733bcc0d..29780370 100644 --- a/src/renderer/views/Setting/components/SettingNetwork.vue +++ b/src/renderer/views/Setting/components/SettingNetwork.vue @@ -4,18 +4,16 @@ dd h3#network_proxy_title {{ $t('setting__network_proxy_title') }} div .p - base-checkbox.gap-left(id="setting_network_proxy_type_disable" key="disable" value="disable" need :model-value="appSetting['network.proxy.type']" :label="$t('setting__network_proxy_type_disable')" @update:model-value="updateSetting({'network.proxy.type': 'disable'})") - base-checkbox.gap-left(id="setting_network_proxy_type_system" key="system" value="system" need :model-value="appSetting['network.proxy.type']" :label="$t('setting__network_proxy_type_system')" @update:model-value="updateSetting({'network.proxy.type': 'system'})") - base-checkbox.gap-left(id="setting_network_proxy_type_custom" key="custom" value="custom" need :model-value="appSetting['network.proxy.type']" :label="$t('setting__network_proxy_type_custom')" @update:model-value="updateSetting({'network.proxy.type': 'custom'})") - .p(v-if="appSetting['network.proxy.type'] == 'custom'") - .p - base-input(:model-value="appSetting['network.proxy.host']" :placeholder="proxy.envProxy ? proxy.envProxy.host : $t('setting__network_proxy_host')" @update:model-value="setHost") - .p - base-input(:model-value="appSetting['network.proxy.port']" :placeholder="proxy.envProxy ? proxy.envProxy.port : $t('setting__network_proxy_port')" @update:model-value="setPort") + base-checkbox(id="setting_network_proxy_enable" :model-value="appSetting['network.proxy.enable']" :label="$t('setting__is_enable')" @update:model-value="updateSetting({'network.proxy.enable': $event})") + .p + base-input(:model-value="appSetting['network.proxy.host']" :placeholder="proxy.envProxy ? proxy.envProxy.host : $t('setting__network_proxy_host')" @update:model-value="setHost") + .p + base-input(:model-value="appSetting['network.proxy.port']" :placeholder="proxy.envProxy ? proxy.envProxy.port : $t('setting__network_proxy_port')" @update:model-value="setPort") +