From a50ecff18909b6f5ce1f8553930e02b0735d7f18 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Mon, 23 Dec 2019 19:24:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E8=BD=AF=E4=BB=B6=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E4=B8=8E=E6=92=AD=E6=94=BE=E5=88=97=E8=A1=A8=E5=88=86=E7=A6=BB?= =?UTF-8?q?=E5=AD=98=E5=82=A8=E6=88=90=E4=B8=A4=E4=B8=AA=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 5 ++++ src/renderer/App.vue | 18 ++++++------- src/renderer/store/getters.js | 4 +-- src/renderer/store/mutations.js | 3 +++ src/renderer/store/state.js | 24 +++++++++++++++--- src/renderer/utils/index.js | 18 ++++++++----- src/renderer/views/Setting.vue | 45 +++++++++++++++++++-------------- 7 files changed, 77 insertions(+), 40 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index 6268ff95..73d386cd 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,3 +1,8 @@ ### 修复 - 修复更新弹窗底部文字颜色没有适配当前主题颜色的问题 +- 修复导入设置窗口大小、代理设置不立即生效的问题 + +### 其他 + +- 将软件设置与播放列表分离存储成两个文件 diff --git a/src/renderer/App.vue b/src/renderer/App.vue index 9aa6e215..8f4afa36 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -44,7 +44,7 @@ export default { } }, computed: { - ...mapGetters(['electronStore', 'setting', 'theme', 'version']), + ...mapGetters(['setting', 'theme', 'version']), ...mapGetters('list', ['defaultList', 'loveList']), ...mapGetters('download', { downloadList: 'list', @@ -53,16 +53,16 @@ export default { }, created() { this.saveSetting = throttle(n => { - this.electronStore.set('setting', n) + window.electronStore_config.set('setting', n) }) this.saveDefaultList = throttle(n => { - this.electronStore.set('list.defaultList', n) + window.electronStore_list.set('defaultList', n) }, 500) this.saveLoveList = throttle(n => { - this.electronStore.set('list.loveList', n) + window.electronStore_list.set('loveList', n) }, 500) this.saveDownloadList = throttle(n => { - this.electronStore.set('download.list', n) + window.electronStore_list.set('downloadList', n) }, 1000) }, mounted() { @@ -188,12 +188,12 @@ export default { this.initDownloadList() // 初始化下载列表 }, initPlayList() { - let defaultList = this.electronStore.get('list.defaultList') - let loveList = this.electronStore.get('list.loveList') + let defaultList = window.electronStore_list.get('defaultList') + let loveList = window.electronStore_list.get('loveList') this.initList({ defaultList, loveList }) }, initDownloadList() { - let downloadList = this.electronStore.get('download.list') + let downloadList = window.electronStore_list.get('download.list') if (downloadList) { downloadList.forEach(item => { if (item.status == this.downloadStatus.RUN || item.status == this.downloadStatus.WAITING) { @@ -218,7 +218,7 @@ export default { this.setNewVersion(result) return result }).then(result => { - if (result.version === this.version.version) return + if (result.version === this.version.version || result.version === this.setting.ignoreVersion) return // console.log(this.version) this.$nextTick(() => { this.setVersionModalVisible({ isShow: true }) diff --git a/src/renderer/store/getters.js b/src/renderer/store/getters.js index 8470e2f3..ac3aa968 100644 --- a/src/renderer/store/getters.js +++ b/src/renderer/store/getters.js @@ -25,8 +25,8 @@ export default { setting(state) { return state.setting }, - electronStore(state) { - return state.electronStore + settingVersion(state) { + return state.settingVersion }, version(state) { return state.version diff --git a/src/renderer/store/mutations.js b/src/renderer/store/mutations.js index 78c353ee..f5dae734 100644 --- a/src/renderer/store/mutations.js +++ b/src/renderer/store/mutations.js @@ -9,6 +9,9 @@ export default { setSetting(state, val) { state.setting = val }, + setSettingVersion(state, val) { + state.settingVersion = val + }, setLeaderboard(state, { tabId, source }) { if (tabId != null) state.setting.leaderboard.tabId = tabId if (source != null) state.setting.leaderboard.source = source diff --git a/src/renderer/store/state.js b/src/renderer/store/state.js index ed563e28..e32e6c2a 100644 --- a/src/renderer/store/state.js +++ b/src/renderer/store/state.js @@ -4,9 +4,24 @@ import Store from 'electron-store' import { updateSetting } from '../utils' import { windowSizeList } from '../../common/config' import { version } from '../../../package.json' -let electronStore = new Store() -const setting = updateSetting(electronStore.get('setting')) -electronStore.set('setting', setting) +const electronStore_list = window.electronStore_list = new Store({ + name: 'playList', +}) +const electronStore_config = window.electronStore_config = new Store({ + name: 'config', +}) +if (!electronStore_config.get('version') && electronStore_config.get('setting')) { // 迁移配置 + electronStore_list.set('defaultList', electronStore_config.get('list.defaultList')) + electronStore_list.set('loveList', electronStore_config.get('list.loveList')) + electronStore_list.set('downloadList', electronStore_config.get('download.list')) + electronStore_config.set('version', electronStore_config.get('setting.version')) + electronStore_config.delete('setting.version') + electronStore_config.delete('list') + electronStore_config.delete('download') +} +const { version: settingVersion, setting } = updateSetting(electronStore_config.get('setting'), electronStore_config.get('version')) +electronStore_config.set('version', settingVersion) +electronStore_config.set('setting', setting) process.versions.app = version export default { @@ -70,6 +85,7 @@ export default { }, userInfo: null, setting, - electronStore, + settingVersion, + windowSizeList, } diff --git a/src/renderer/utils/index.js b/src/renderer/utils/index.js index 47d25e09..64e70730 100644 --- a/src/renderer/utils/index.js +++ b/src/renderer/utils/index.js @@ -176,10 +176,15 @@ export const isChildren = (parent, children) => { * 升级设置 * @param {*} setting */ -export const updateSetting = setting => { - const defaultVersion = '1.0.14' +export const updateSetting = (setting, version) => { + const defaultVersion = '1.0.15' + if (!version) { + if (setting) { + version = setting.version + delete setting.version + } + } const defaultSetting = { - version: defaultVersion, player: { togglePlayMethod: 'listLoop', highQuality: false, @@ -235,21 +240,22 @@ export const updateSetting = setting => { sourceId: 'kw', apiSource: 'temp', randomAnimate: true, + ignoreVersion: null, } const overwriteSetting = { - version: defaultVersion, + } if (!setting) { setting = defaultSetting - } else if (checkVersion(setting.version, defaultSetting.version)) { + } else if (checkVersion(version, defaultVersion)) { objectDeepMerge(defaultSetting, setting) objectDeepMerge(defaultSetting, overwriteSetting) setting = defaultSetting } if (setting.apiSource != 'temp') setting.apiSource = 'test' // 强制设置回 test 接口源 - return setting + return { setting, version: defaultVersion } } /** diff --git a/src/renderer/views/Setting.vue b/src/renderer/views/Setting.vue index 464d44cd..33009423 100644 --- a/src/renderer/views/Setting.vue +++ b/src/renderer/views/Setting.vue @@ -197,7 +197,7 @@ import fs from 'fs' export default { name: 'Setting', computed: { - ...mapGetters(['setting', 'themes', 'version', 'windowSizeList']), + ...mapGetters(['setting', 'settingVersion', 'themes', 'version', 'windowSizeList']), ...mapGetters('list', ['defaultList', 'loveList']), isLatestVer() { return this.version.newVersion && this.version.version === this.version.newVersion.version @@ -214,7 +214,6 @@ export default { data() { return { current_setting: { - version: null, player: { togglePlayMethod: 'random', highQuality: false, @@ -303,7 +302,7 @@ export default { watch: { current_setting: { handler(n, o) { - if (!o.version) return + if (!this.settingVersion) return this.setSetting(JSON.parse(JSON.stringify(n))) }, deep: true, @@ -322,7 +321,7 @@ export default { this.init() }, methods: { - ...mapMutations(['setSetting', 'setVersionModalVisible']), + ...mapMutations(['setSetting', 'setSettingVersion', 'setVersionModalVisible']), ...mapMutations('list', ['setList']), init() { this.current_setting = JSON.parse(JSON.stringify(this.setting)) @@ -343,23 +342,23 @@ export default { openDirInExplorer(dir) }, importSetting(path) { - let setting + let settingData try { - setting = JSON.parse(fs.readFileSync(path, 'utf8')) + settingData = JSON.parse(fs.readFileSync(path, 'utf8')) } catch (error) { return } - if (setting.type !== 'setting') return - this.setSetting(updateSetting(setting.data)) - this.init() + if (settingData.type !== 'setting') return + const { version: settingVersion, setting } = updateSetting(settingData.data) + this.refreshSetting(setting, settingVersion) }, exportSetting(path) { console.log(path) const data = { type: 'setting', - data: this.setting, + data: Object.assign({ version: this.settingVersion }, this.setting), } - fs.writeFile(path, JSON.stringify(data), 'utf8', err => { + fs.writeFile(path, JSON.stringify(data, null, 2), 'utf8', err => { console.log(err) }) }, @@ -389,7 +388,7 @@ export default { this.loveList, ], } - fs.writeFile(path, JSON.stringify(data), 'utf8', err => { + fs.writeFile(path, JSON.stringify(data, null, 2), 'utf8', err => { console.log(err) }) }, @@ -401,9 +400,8 @@ export default { return } if (allData.type !== 'allData') return - this.setSetting(updateSetting(allData.setting)) - this.init() - if (allData.defaultList) return this.setList({ id: 'default', list: allData.defaultList.list }) + const { version: settingVersion, setting } = updateSetting(allData.setting) + this.refreshSetting(setting, settingVersion) for (const list of allData.playList) { this.setList({ id: list.id, list: list.list }) @@ -412,13 +410,13 @@ export default { exportAllData(path) { let allData = { type: 'allData', - setting: this.setting, + setting: Object.assign({ version: this.settingVersion }, this.setting), playList: [ this.defaultList, this.loveList, ], } - fs.writeFile(path, JSON.stringify(allData), 'utf8', err => { + fs.writeFile(path, JSON.stringify(allData, null, 2), 'utf8', err => { console.log(err) }) }, @@ -515,10 +513,19 @@ export default { this.getCacheSize() }) }, - handleWindowSizeChange(index) { - let info = this.windowSizeList[index] + handleWindowSizeChange(index, id) { + let info = id == null ? this.windowSizeList[index] : this.windowSizeList.find(s => s.id == id) setWindowSize(info.width, info.height) }, + refreshSetting(setting, version) { + this.setSetting(setting) + this.setSettingVersion(version) + if (setting.windowSizeId != null) this.handleWindowSizeChange(null, setting.windowSizeId) + for (let key of Object.keys(setting.network.proxy)) { + window.globalObj.proxy[key] = setting.network.proxy[key] + } + this.init() + }, }, }