压缩备份数据文件
parent
e4e880edd9
commit
bcd13b6f27
|
@ -24,6 +24,7 @@
|
||||||
- 优化批量添加、删除播放列表的歌曲操作逻辑,大幅提升批量添加、删除列表歌曲的流畅度
|
- 优化批量添加、删除播放列表的歌曲操作逻辑,大幅提升批量添加、删除列表歌曲的流畅度
|
||||||
- 改进歌单列表展示
|
- 改进歌单列表展示
|
||||||
- **改进聚合搜索的搜索结果排序**,修复当某些源搜索失败时导致其他源无法显示结果的问题,现在聚合搜索已达到最初的理想效果,欢迎体验~!
|
- **改进聚合搜索的搜索结果排序**,修复当某些源搜索失败时导致其他源无法显示结果的问题,现在聚合搜索已达到最初的理想效果,欢迎体验~!
|
||||||
|
- 压缩备份数据文件,文件大小
|
||||||
|
|
||||||
### 修复
|
### 修复
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,9 @@ exports.objectDeepMerge = (target, source, mergedObj) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.mergeSetting = (setting, version) => {
|
exports.mergeSetting = (setting, version) => {
|
||||||
const defaultVersion = defaultSetting.version
|
let defaultSettingCopy = JSON.parse(JSON.stringify(defaultSetting))
|
||||||
|
let overwriteSettingCopy = JSON.parse(JSON.stringify(overwriteSetting))
|
||||||
|
const defaultVersion = defaultSettingCopy.version
|
||||||
if (!version) {
|
if (!version) {
|
||||||
if (setting) {
|
if (setting) {
|
||||||
version = setting.version
|
version = setting.version
|
||||||
|
@ -103,11 +105,11 @@ exports.mergeSetting = (setting, version) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!setting) {
|
if (!setting) {
|
||||||
setting = defaultSetting
|
setting = defaultSettingCopy
|
||||||
} else if (exports.compareVer(version, defaultVersion) < 0) {
|
} else if (exports.compareVer(version, defaultVersion) < 0) {
|
||||||
exports.objectDeepMerge(defaultSetting, setting)
|
exports.objectDeepMerge(defaultSettingCopy, setting)
|
||||||
exports.objectDeepMerge(defaultSetting, overwriteSetting)
|
exports.objectDeepMerge(defaultSettingCopy, overwriteSettingCopy)
|
||||||
setting = defaultSetting
|
setting = defaultSettingCopy
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!apiSource.some(api => api.id === setting.apiSource && !api.disabled)) {
|
if (!apiSource.some(api => api.id === setting.apiSource && !api.disabled)) {
|
||||||
|
|
|
@ -283,6 +283,7 @@ import languageList from '@/lang/languages.json'
|
||||||
import { base as eventBaseName } from '../event/names'
|
import { base as eventBaseName } from '../event/names'
|
||||||
import * as hotKeys from '../../common/hotKey'
|
import * as hotKeys from '../../common/hotKey'
|
||||||
import { mainWindow as eventsNameMainWindow, winLyric as eventsNameWinLyric } from '../../main/events/_name'
|
import { mainWindow as eventsNameMainWindow, winLyric as eventsNameWinLyric } from '../../main/events/_name'
|
||||||
|
import { gzip, gunzip } from 'zlib'
|
||||||
|
|
||||||
let hotKeyTargetInput
|
let hotKeyTargetInput
|
||||||
let newHotKey
|
let newHotKey
|
||||||
|
@ -638,7 +639,7 @@ export default {
|
||||||
async importSetting(path) {
|
async importSetting(path) {
|
||||||
let settingData
|
let settingData
|
||||||
try {
|
try {
|
||||||
settingData = JSON.parse(await fs.promises.readFile(path, 'utf8'))
|
settingData = JSON.parse(await this.handleReadFile(path))
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -653,14 +654,12 @@ export default {
|
||||||
type: 'setting',
|
type: 'setting',
|
||||||
data: Object.assign({ version: this.settingVersion }, this.setting),
|
data: Object.assign({ version: this.settingVersion }, this.setting),
|
||||||
}
|
}
|
||||||
fs.writeFile(path, JSON.stringify(data, null, 2), 'utf8', err => {
|
this.handleSaveFile(path, JSON.stringify(data))
|
||||||
console.log(err)
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
async importPlayList(path) {
|
async importPlayList(path) {
|
||||||
let listData
|
let listData
|
||||||
try {
|
try {
|
||||||
listData = JSON.parse(await fs.promises.readFile(path, 'utf8'))
|
listData = JSON.parse(await this.handleReadFile(path))
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -685,14 +684,12 @@ export default {
|
||||||
...this.userList,
|
...this.userList,
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
fs.writeFile(path, JSON.stringify(data, null, 2), 'utf8', err => {
|
this.handleSaveFile(path, JSON.stringify(data))
|
||||||
console.log(err)
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
async importAllData(path) {
|
async importAllData(path) {
|
||||||
let allData
|
let allData
|
||||||
try {
|
try {
|
||||||
allData = JSON.parse(await fs.promises.readFile(path, 'utf8'))
|
allData = JSON.parse(await this.handleReadFile(path))
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -709,7 +706,7 @@ export default {
|
||||||
this.setList(list)
|
this.setList(list)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
exportAllData(path) {
|
async exportAllData(path) {
|
||||||
let allData = {
|
let allData = {
|
||||||
type: 'allData',
|
type: 'allData',
|
||||||
setting: Object.assign({ version: this.settingVersion }, this.setting),
|
setting: Object.assign({ version: this.settingVersion }, this.setting),
|
||||||
|
@ -719,16 +716,14 @@ export default {
|
||||||
...this.userList,
|
...this.userList,
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
fs.writeFile(path, JSON.stringify(allData, null, 2), 'utf8', err => {
|
this.handleSaveFile(path, JSON.stringify(allData))
|
||||||
console.log(err)
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
handleImportAllData() {
|
handleImportAllData() {
|
||||||
selectDir({
|
selectDir({
|
||||||
title: this.$t('view.setting.backup_all_import_desc'),
|
title: this.$t('view.setting.backup_all_import_desc'),
|
||||||
properties: ['openFile'],
|
properties: ['openFile'],
|
||||||
filters: [
|
filters: [
|
||||||
{ name: 'Setting', extensions: ['json'] },
|
{ name: 'Setting', extensions: ['json', 'lxmc'] },
|
||||||
{ name: 'All Files', extensions: ['*'] },
|
{ name: 'All Files', extensions: ['*'] },
|
||||||
],
|
],
|
||||||
}).then(result => {
|
}).then(result => {
|
||||||
|
@ -739,7 +734,7 @@ export default {
|
||||||
handleExportAllData() {
|
handleExportAllData() {
|
||||||
openSaveDir({
|
openSaveDir({
|
||||||
title: this.$t('view.setting.backup_all_export_desc'),
|
title: this.$t('view.setting.backup_all_export_desc'),
|
||||||
defaultPath: 'lx_datas.json',
|
defaultPath: 'lx_datas.lxmc',
|
||||||
}).then(result => {
|
}).then(result => {
|
||||||
if (result.canceled) return
|
if (result.canceled) return
|
||||||
this.exportAllData(result.filePath)
|
this.exportAllData(result.filePath)
|
||||||
|
@ -750,7 +745,7 @@ export default {
|
||||||
title: this.$t('view.setting.backup_part_import_setting_desc'),
|
title: this.$t('view.setting.backup_part_import_setting_desc'),
|
||||||
properties: ['openFile'],
|
properties: ['openFile'],
|
||||||
filters: [
|
filters: [
|
||||||
{ name: 'Setting', extensions: ['json'] },
|
{ name: 'Setting', extensions: ['json', 'lxmc'] },
|
||||||
{ name: 'All Files', extensions: ['*'] },
|
{ name: 'All Files', extensions: ['*'] },
|
||||||
],
|
],
|
||||||
}).then(result => {
|
}).then(result => {
|
||||||
|
@ -761,7 +756,7 @@ export default {
|
||||||
handleExportSetting() {
|
handleExportSetting() {
|
||||||
openSaveDir({
|
openSaveDir({
|
||||||
title: this.$t('view.setting.backup_part_export_setting_desc'),
|
title: this.$t('view.setting.backup_part_export_setting_desc'),
|
||||||
defaultPath: 'lx_setting.json',
|
defaultPath: 'lx_setting.lxmc',
|
||||||
}).then(result => {
|
}).then(result => {
|
||||||
if (result.canceled) return
|
if (result.canceled) return
|
||||||
this.exportSetting(result.filePath)
|
this.exportSetting(result.filePath)
|
||||||
|
@ -772,7 +767,7 @@ export default {
|
||||||
title: this.$t('view.setting.backup_part_import_list_desc'),
|
title: this.$t('view.setting.backup_part_import_list_desc'),
|
||||||
properties: ['openFile'],
|
properties: ['openFile'],
|
||||||
filters: [
|
filters: [
|
||||||
{ name: 'Play List', extensions: ['json'] },
|
{ name: 'Play List', extensions: ['json', 'lxmc'] },
|
||||||
{ name: 'All Files', extensions: ['*'] },
|
{ name: 'All Files', extensions: ['*'] },
|
||||||
],
|
],
|
||||||
}).then(result => {
|
}).then(result => {
|
||||||
|
@ -783,7 +778,7 @@ export default {
|
||||||
handleExportPlayList() {
|
handleExportPlayList() {
|
||||||
openSaveDir({
|
openSaveDir({
|
||||||
title: this.$t('view.setting.backup_part_export_list_desc'),
|
title: this.$t('view.setting.backup_part_export_list_desc'),
|
||||||
defaultPath: 'lx_list.json',
|
defaultPath: 'lx_list.lxmc',
|
||||||
}).then(result => {
|
}).then(result => {
|
||||||
if (result.canceled) return
|
if (result.canceled) return
|
||||||
this.exportPlayList(result.filePath)
|
this.exportPlayList(result.filePath)
|
||||||
|
@ -992,6 +987,35 @@ export default {
|
||||||
handleTrayShowChange(isShow) {
|
handleTrayShowChange(isShow) {
|
||||||
this.current_setting.tray.isToTray = isShow
|
this.current_setting.tray.isToTray = isShow
|
||||||
},
|
},
|
||||||
|
async handleSaveFile(path, data) {
|
||||||
|
if (!path.endsWith('.lxmc')) path += '.lxmc'
|
||||||
|
fs.writeFile(path, await this.gzip(data), 'binary', err => {
|
||||||
|
console.log(err)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async handleReadFile(path) {
|
||||||
|
let isJSON = path.endsWith('.json')
|
||||||
|
let data = await fs.promises.readFile(path, isJSON ? 'utf8' : 'binary')
|
||||||
|
if (!data || isJSON) return data
|
||||||
|
data = await this.gunzip(Buffer.from(data, 'binary'))
|
||||||
|
return data.toString('utf8')
|
||||||
|
},
|
||||||
|
gzip(str) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
gzip(str, (err, result) => {
|
||||||
|
if (err) return reject(err)
|
||||||
|
resolve(result)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
gunzip(buf) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
gunzip(buf, (err, result) => {
|
||||||
|
if (err) return reject(err)
|
||||||
|
resolve(result.toString())
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in New Issue