diff --git a/src/main/core/db/init/tbl_setting.json b/src/main/core/db/init/tbl_setting.json index 537ca5cc2..2e8137133 100644 --- a/src/main/core/db/init/tbl_setting.json +++ b/src/main/core/db/init/tbl_setting.json @@ -35,6 +35,10 @@ "key": "ua", "value": "Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36" }, + { + "key": "dns", + "value": "" + }, { "key": "playerMode", "value": { diff --git a/src/main/core/db/magrite/data/update3_3_6_to3_3_7.ts b/src/main/core/db/magrite/data/update3_3_6_to3_3_7.ts index d4f28dc66..2310d13a7 100644 --- a/src/main/core/db/magrite/data/update3_3_6_to3_3_7.ts +++ b/src/main/core/db/magrite/data/update3_3_6_to3_3_7.ts @@ -19,8 +19,17 @@ const update3_3_6_to3_3_7 = () => { db.get(TABLE_NAME).remove({ key: 'defaultFilterType' }).write(); }; db.get(TABLE_NAME).insert({ key: 'defaultFilterType', value: 'off' }).write(); + + if (db.get(TABLE_NAME).find({ key: 'debug' }).value()?.value) { + db.get(TABLE_NAME).remove({ key: 'debug' }).write(); + }; db.get(TABLE_NAME).insert({ key: 'debug', value: false }).write(); + if (db.get(TABLE_NAME).find({ key: 'dns' }).value()?.value) { + db.get(TABLE_NAME).remove({ key: 'dns' }).write(); + }; + db.get(TABLE_NAME).insert({ key: 'dns', value: false }).write(); + db.get(TABLE_NAME).find({ key: 'version' }).assign({ key: 'version', value: '3.3.7' }).write(); logger.info('[db][magrite][update3_3_6_to3_3_7]completed'); }; diff --git a/src/main/core/ipc.ts b/src/main/core/ipc.ts index d27510b44..a94fed4ba 100644 --- a/src/main/core/ipc.ts +++ b/src/main/core/ipc.ts @@ -206,6 +206,20 @@ const ipcListen = () => { } }); + ipcMain.on('updateDns', (_, item) => { + logger.info(`[ipcMain] new dns: ${item}`); + if (item) { + app.configureHostResolver({ + secureDnsMode: 'secure', + secureDnsServers: [item], + }); + } else { + app.configureHostResolver({ + secureDnsMode: 'off', + }); + } + }); + // 事件广播通知 ipcMain.handle('event-broadcast', (event, eventInfo) => { // 遍历window执行 diff --git a/src/main/index.ts b/src/main/index.ts index 2f1c5d5d4..2f73a99b5 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -57,6 +57,15 @@ let reqIdRedirect = {}; // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. app.whenReady().then(async () => { + if (setting.find({ key: 'dns' }).value) { + const doh = setting.find({ key: 'dns' }).value; + logger.info(`[dns] doh: ${doh}`) + app.configureHostResolver({ + secureDnsMode: 'secure', + secureDnsServers: [doh], + }); + }; + registerTitleBarListener(); const defaultSession = session.defaultSession; diff --git a/src/renderer/src/config/doh.ts b/src/renderer/src/config/doh.ts index 5c9181b35..c4c07d33a 100644 --- a/src/renderer/src/config/doh.ts +++ b/src/renderer/src/config/doh.ts @@ -9,19 +9,15 @@ export default { dns: 'https://dns.alidns.com/dns-query', }, { - name: 'cloudflare', - dns: 'https://cloudflare-dns.com/dns-query', - }, - { - name: 'Google', - dns: 'https://dns.google/dns-query', + name: '360', + dns: 'https://doh.360.cn/dns-query', }, { - name: 'IBM', - dns: 'https://dns.quad9.net/dns-query', + name: 'Cloudflare', + dns: 'https://cloudflare-dns.com/dns-query', }, { - name: 'Cisco', + name: 'OpenDNS', dns: 'https://doh.opendns.com/dns-query', }, ], diff --git a/src/renderer/src/locales/lang/en_US/pages/setting.ts b/src/renderer/src/locales/lang/en_US/pages/setting.ts index 18e02bbd9..44e0500b8 100644 --- a/src/renderer/src/locales/lang/en_US/pages/setting.ts +++ b/src/renderer/src/locales/lang/en_US/pages/setting.ts @@ -163,6 +163,7 @@ export default { security: 'Security', proxy: 'Proxy', ua: 'UA', + dns: 'DNS', jurisdiction: 'Jurisdiction', selefBoot: 'SelefBoot', hardwareAcceleration: 'HardwareAcceleration', @@ -192,7 +193,12 @@ export default { ua: { title: 'User-Agent', topTip: 'Emulate User Agent', - bottomTip: 'recommend chrome, empty use system default', + bottomTip: 'Recommend chrome, empty use system default', + }, + dns: { + title: 'DNS-over-HTTP', + topTip: 'Using Secure DNS', + bottomTip: 'Recommend Tencent, empty use system default', }, barrage: { title: 'Barrage', diff --git a/src/renderer/src/locales/lang/zh_CN/pages/setting.ts b/src/renderer/src/locales/lang/zh_CN/pages/setting.ts index 8283a3a19..9a475981b 100644 --- a/src/renderer/src/locales/lang/zh_CN/pages/setting.ts +++ b/src/renderer/src/locales/lang/zh_CN/pages/setting.ts @@ -163,6 +163,7 @@ export default { security: '安全', proxy: '网络代理', ua: '用户代理', + dns: 'DNS', jurisdiction: '权限', selefBoot: '自启动', hardwareAcceleration: '硬件加速', @@ -195,6 +196,11 @@ export default { topTip: '模拟用户代理', bottomTip: '推荐chrome, 空使用系统默认', }, + dns: { + title: 'DNS-over-HTTP', + topTip: '使用安全DNS', + bottomTip: '推荐腾讯, 空使用系统默认', + }, barrage: { title: '弹幕', header: '启用该参数需预处理数据, 将增加起播时间', diff --git a/src/renderer/src/pages/setting/base/BaseSetting.vue b/src/renderer/src/pages/setting/base/BaseSetting.vue index 3a5cf5f85..12332c190 100644 --- a/src/renderer/src/pages/setting/base/BaseSetting.vue +++ b/src/renderer/src/pages/setting/base/BaseSetting.vue @@ -118,10 +118,12 @@ {{ $t('pages.setting.base.proxy') }} - {{ $t('pages.setting.base.ua') }} + {{ $t('pages.setting.base.ua') }} + {{ $t('pages.setting.base.dns') }} - + + @@ -179,6 +181,7 @@ import SettingDarkIcon from '@/assets/assets-setting-dark.svg'; import SettingLightIcon from '@/assets/assets-setting-light.svg'; import DialogDataView from './components/DialogData.vue'; import DialogUaView from './components/DialogUA.vue'; +import DialogDnsView from './components/DialogDns.vue'; import DialogUpdateView from './components/DialogUpdate.vue'; import DialogThumbnailView from './components/DialogThumbnail.vue'; import DialogCustomPlayer from './components/DialogCustomPlayer.vue'; @@ -203,7 +206,7 @@ const isVisible = reactive({ disclaimer: false, }); -const uaDialogData = ref({ data: '', type: 'ua' }); +const safeDialogData = ref({ data: '', type: 'dns' }); const webdevDialogData = ref({ webdev: { sync: false, data: { url: "https://dav.jianguoyun.com/dav/", username: "", password: "" } } }); const snifferDialogData = ref({ data: { type: '', url: '' }, type: 'snifferMode' }); const barrageDialogData = ref({ url: '', key: '', support: [], start: '', mode: '', color: '', content: '' }); @@ -643,15 +646,14 @@ const debugEvnet = () => { window?.location.reload(); }; -// ua:打开dialog并设置数据 -const uaEvnet = () => { - const { ua } = formData.value; - uaDialogData.value = { - data: ua, - type: 'ua', + +const safeEvnet = (type) => { + safeDialogData.value = { + data: formData.value[type], + type: type, }; - isVisible.ua = true; + isVisible[type] = true; }; const snifferEvent = () => { diff --git a/src/renderer/src/pages/setting/base/components/DialogData.vue b/src/renderer/src/pages/setting/base/components/DialogData.vue index f167dcb47..e2beb3a14 100644 --- a/src/renderer/src/pages/setting/base/components/DialogData.vue +++ b/src/renderer/src/pages/setting/base/components/DialogData.vue @@ -519,6 +519,7 @@ const formatSet = (data) => { }, { key: "defaultFilterType", value: "off" }, { key: "debug", value: false }, + { key: "dns", value: "" }, { key: "version", value: pkgVersion }, // ... 其他新键值对 ]; diff --git a/src/renderer/src/pages/setting/base/components/DialogDns.vue b/src/renderer/src/pages/setting/base/components/DialogDns.vue index f36978027..d02da4eb8 100644 --- a/src/renderer/src/pages/setting/base/components/DialogDns.vue +++ b/src/renderer/src/pages/setting/base/components/DialogDns.vue @@ -1,23 +1,23 @@