将软件设置与播放列表分离存储成两个文件

pull/166/head
lyswhut 2019-12-23 19:24:35 +08:00
parent 73321829ae
commit a50ecff189
7 changed files with 77 additions and 40 deletions

View File

@ -1,3 +1,8 @@
### 修复 ### 修复
- 修复更新弹窗底部文字颜色没有适配当前主题颜色的问题 - 修复更新弹窗底部文字颜色没有适配当前主题颜色的问题
- 修复导入设置窗口大小、代理设置不立即生效的问题
### 其他
- 将软件设置与播放列表分离存储成两个文件

View File

@ -44,7 +44,7 @@ export default {
} }
}, },
computed: { computed: {
...mapGetters(['electronStore', 'setting', 'theme', 'version']), ...mapGetters(['setting', 'theme', 'version']),
...mapGetters('list', ['defaultList', 'loveList']), ...mapGetters('list', ['defaultList', 'loveList']),
...mapGetters('download', { ...mapGetters('download', {
downloadList: 'list', downloadList: 'list',
@ -53,16 +53,16 @@ export default {
}, },
created() { created() {
this.saveSetting = throttle(n => { this.saveSetting = throttle(n => {
this.electronStore.set('setting', n) window.electronStore_config.set('setting', n)
}) })
this.saveDefaultList = throttle(n => { this.saveDefaultList = throttle(n => {
this.electronStore.set('list.defaultList', n) window.electronStore_list.set('defaultList', n)
}, 500) }, 500)
this.saveLoveList = throttle(n => { this.saveLoveList = throttle(n => {
this.electronStore.set('list.loveList', n) window.electronStore_list.set('loveList', n)
}, 500) }, 500)
this.saveDownloadList = throttle(n => { this.saveDownloadList = throttle(n => {
this.electronStore.set('download.list', n) window.electronStore_list.set('downloadList', n)
}, 1000) }, 1000)
}, },
mounted() { mounted() {
@ -188,12 +188,12 @@ export default {
this.initDownloadList() // this.initDownloadList() //
}, },
initPlayList() { initPlayList() {
let defaultList = this.electronStore.get('list.defaultList') let defaultList = window.electronStore_list.get('defaultList')
let loveList = this.electronStore.get('list.loveList') let loveList = window.electronStore_list.get('loveList')
this.initList({ defaultList, loveList }) this.initList({ defaultList, loveList })
}, },
initDownloadList() { initDownloadList() {
let downloadList = this.electronStore.get('download.list') let downloadList = window.electronStore_list.get('download.list')
if (downloadList) { if (downloadList) {
downloadList.forEach(item => { downloadList.forEach(item => {
if (item.status == this.downloadStatus.RUN || item.status == this.downloadStatus.WAITING) { if (item.status == this.downloadStatus.RUN || item.status == this.downloadStatus.WAITING) {
@ -218,7 +218,7 @@ export default {
this.setNewVersion(result) this.setNewVersion(result)
return result return result
}).then(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) // console.log(this.version)
this.$nextTick(() => { this.$nextTick(() => {
this.setVersionModalVisible({ isShow: true }) this.setVersionModalVisible({ isShow: true })

View File

@ -25,8 +25,8 @@ export default {
setting(state) { setting(state) {
return state.setting return state.setting
}, },
electronStore(state) { settingVersion(state) {
return state.electronStore return state.settingVersion
}, },
version(state) { version(state) {
return state.version return state.version

View File

@ -9,6 +9,9 @@ export default {
setSetting(state, val) { setSetting(state, val) {
state.setting = val state.setting = val
}, },
setSettingVersion(state, val) {
state.settingVersion = val
},
setLeaderboard(state, { tabId, source }) { setLeaderboard(state, { tabId, source }) {
if (tabId != null) state.setting.leaderboard.tabId = tabId if (tabId != null) state.setting.leaderboard.tabId = tabId
if (source != null) state.setting.leaderboard.source = source if (source != null) state.setting.leaderboard.source = source

View File

@ -4,9 +4,24 @@ import Store from 'electron-store'
import { updateSetting } from '../utils' import { updateSetting } from '../utils'
import { windowSizeList } from '../../common/config' import { windowSizeList } from '../../common/config'
import { version } from '../../../package.json' import { version } from '../../../package.json'
let electronStore = new Store() const electronStore_list = window.electronStore_list = new Store({
const setting = updateSetting(electronStore.get('setting')) name: 'playList',
electronStore.set('setting', setting) })
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 process.versions.app = version
export default { export default {
@ -70,6 +85,7 @@ export default {
}, },
userInfo: null, userInfo: null,
setting, setting,
electronStore, settingVersion,
windowSizeList, windowSizeList,
} }

View File

@ -176,10 +176,15 @@ export const isChildren = (parent, children) => {
* 升级设置 * 升级设置
* @param {*} setting * @param {*} setting
*/ */
export const updateSetting = setting => { export const updateSetting = (setting, version) => {
const defaultVersion = '1.0.14' const defaultVersion = '1.0.15'
if (!version) {
if (setting) {
version = setting.version
delete setting.version
}
}
const defaultSetting = { const defaultSetting = {
version: defaultVersion,
player: { player: {
togglePlayMethod: 'listLoop', togglePlayMethod: 'listLoop',
highQuality: false, highQuality: false,
@ -235,21 +240,22 @@ export const updateSetting = setting => {
sourceId: 'kw', sourceId: 'kw',
apiSource: 'temp', apiSource: 'temp',
randomAnimate: true, randomAnimate: true,
ignoreVersion: null,
} }
const overwriteSetting = { const overwriteSetting = {
version: defaultVersion,
} }
if (!setting) { if (!setting) {
setting = defaultSetting setting = defaultSetting
} else if (checkVersion(setting.version, defaultSetting.version)) { } else if (checkVersion(version, defaultVersion)) {
objectDeepMerge(defaultSetting, setting) objectDeepMerge(defaultSetting, setting)
objectDeepMerge(defaultSetting, overwriteSetting) objectDeepMerge(defaultSetting, overwriteSetting)
setting = defaultSetting setting = defaultSetting
} }
if (setting.apiSource != 'temp') setting.apiSource = 'test' // 强制设置回 test 接口源 if (setting.apiSource != 'temp') setting.apiSource = 'test' // 强制设置回 test 接口源
return setting return { setting, version: defaultVersion }
} }
/** /**

View File

@ -197,7 +197,7 @@ import fs from 'fs'
export default { export default {
name: 'Setting', name: 'Setting',
computed: { computed: {
...mapGetters(['setting', 'themes', 'version', 'windowSizeList']), ...mapGetters(['setting', 'settingVersion', 'themes', 'version', 'windowSizeList']),
...mapGetters('list', ['defaultList', 'loveList']), ...mapGetters('list', ['defaultList', 'loveList']),
isLatestVer() { isLatestVer() {
return this.version.newVersion && this.version.version === this.version.newVersion.version return this.version.newVersion && this.version.version === this.version.newVersion.version
@ -214,7 +214,6 @@ export default {
data() { data() {
return { return {
current_setting: { current_setting: {
version: null,
player: { player: {
togglePlayMethod: 'random', togglePlayMethod: 'random',
highQuality: false, highQuality: false,
@ -303,7 +302,7 @@ export default {
watch: { watch: {
current_setting: { current_setting: {
handler(n, o) { handler(n, o) {
if (!o.version) return if (!this.settingVersion) return
this.setSetting(JSON.parse(JSON.stringify(n))) this.setSetting(JSON.parse(JSON.stringify(n)))
}, },
deep: true, deep: true,
@ -322,7 +321,7 @@ export default {
this.init() this.init()
}, },
methods: { methods: {
...mapMutations(['setSetting', 'setVersionModalVisible']), ...mapMutations(['setSetting', 'setSettingVersion', 'setVersionModalVisible']),
...mapMutations('list', ['setList']), ...mapMutations('list', ['setList']),
init() { init() {
this.current_setting = JSON.parse(JSON.stringify(this.setting)) this.current_setting = JSON.parse(JSON.stringify(this.setting))
@ -343,23 +342,23 @@ export default {
openDirInExplorer(dir) openDirInExplorer(dir)
}, },
importSetting(path) { importSetting(path) {
let setting let settingData
try { try {
setting = JSON.parse(fs.readFileSync(path, 'utf8')) settingData = JSON.parse(fs.readFileSync(path, 'utf8'))
} catch (error) { } catch (error) {
return return
} }
if (setting.type !== 'setting') return if (settingData.type !== 'setting') return
this.setSetting(updateSetting(setting.data)) const { version: settingVersion, setting } = updateSetting(settingData.data)
this.init() this.refreshSetting(setting, settingVersion)
}, },
exportSetting(path) { exportSetting(path) {
console.log(path) console.log(path)
const data = { const data = {
type: 'setting', 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) console.log(err)
}) })
}, },
@ -389,7 +388,7 @@ export default {
this.loveList, this.loveList,
], ],
} }
fs.writeFile(path, JSON.stringify(data), 'utf8', err => { fs.writeFile(path, JSON.stringify(data, null, 2), 'utf8', err => {
console.log(err) console.log(err)
}) })
}, },
@ -401,9 +400,8 @@ export default {
return return
} }
if (allData.type !== 'allData') return if (allData.type !== 'allData') return
this.setSetting(updateSetting(allData.setting)) const { version: settingVersion, setting } = updateSetting(allData.setting)
this.init() this.refreshSetting(setting, settingVersion)
if (allData.defaultList) return this.setList({ id: 'default', list: allData.defaultList.list })
for (const list of allData.playList) { for (const list of allData.playList) {
this.setList({ id: list.id, list: list.list }) this.setList({ id: list.id, list: list.list })
@ -412,13 +410,13 @@ export default {
exportAllData(path) { exportAllData(path) {
let allData = { let allData = {
type: 'allData', type: 'allData',
setting: this.setting, setting: Object.assign({ version: this.settingVersion }, this.setting),
playList: [ playList: [
this.defaultList, this.defaultList,
this.loveList, this.loveList,
], ],
} }
fs.writeFile(path, JSON.stringify(allData), 'utf8', err => { fs.writeFile(path, JSON.stringify(allData, null, 2), 'utf8', err => {
console.log(err) console.log(err)
}) })
}, },
@ -515,10 +513,19 @@ export default {
this.getCacheSize() this.getCacheSize()
}) })
}, },
handleWindowSizeChange(index) { handleWindowSizeChange(index, id) {
let info = this.windowSizeList[index] let info = id == null ? this.windowSizeList[index] : this.windowSizeList.find(s => s.id == id)
setWindowSize(info.width, info.height) 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()
},
}, },
} }
</script> </script>