From 86478c0268bc450243d5fb880af660f8a881a04b Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sat, 29 Aug 2020 14:44:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0electron=E5=88=B0=2010.1.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- package-lock.json | 53 ++++++++------- package.json | 9 ++- publish/changeLog.md | 2 +- src/common/ipcNames.js | 8 +++ src/common/utils.js | 2 +- src/main/index.js | 6 +- .../{setAppSetting.js => appSetting.js} | 4 +- .../{getCacheSize.js => cache.js} | 6 +- src/main/rendererEvents/clearCache.js | 8 --- src/main/rendererEvents/data.js | 12 ++++ src/main/rendererEvents/hotKey.js | 12 +++- src/main/rendererEvents/index.js | 7 +- src/main/rendererEvents/playList.js | 23 +++++++ src/renderer/App.vue | 66 ++++++++++++++----- src/renderer/event/index.js | 19 +++--- src/renderer/main.js | 43 ++++++++++-- src/renderer/store/modules/search.js | 15 ++--- src/renderer/store/mutations.js | 6 +- src/renderer/store/state.js | 62 +---------------- src/renderer/utils/index.js | 20 ++++++ 21 files changed, 228 insertions(+), 157 deletions(-) rename src/main/rendererEvents/{setAppSetting.js => appSetting.js} (51%) rename src/main/rendererEvents/{getCacheSize.js => cache.js} (59%) delete mode 100644 src/main/rendererEvents/clearCache.js create mode 100644 src/main/rendererEvents/data.js create mode 100644 src/main/rendererEvents/playList.js diff --git a/README.md b/README.md index f57bf9a6..91e1f1c2 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ 所用技术栈: -- Electron 9 +- Electron 10 - Vue 2 已支持的平台: diff --git a/package-lock.json b/package-lock.json index ae9dd40a..798c87f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "lx-music-desktop", - "version": "1.0.1", + "version": "1.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -5301,9 +5301,9 @@ }, "dependencies": { "caniuse-lite": { - "version": "1.0.30001112", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001112.tgz", - "integrity": "sha512-J05RTQlqsatidif/38aN3PGULCLrg8OYQOlJUKbeYVzC2mGZkZLIztwRlB3MtrfLmawUmjFlNJvy/uhwniIe1Q==", + "version": "1.0.30001119", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001119.tgz", + "integrity": "sha512-Hpwa4obv7EGP+TjkCh/wVvbtNJewxmtg4yVJBLFnxo35vbPapBr138bUWENkb5j5L9JZJ9RXLn4OrXRG/cecPQ==", "dev": true } } @@ -5954,12 +5954,6 @@ } } }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -7543,9 +7537,9 @@ } }, "electron": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-9.2.1.tgz", - "integrity": "sha512-ZsetaQjXB8+9/EFW1FnfK4ukpkwXCxMEaiKiUZhZ0ZLFlLnFCpe0Bg4vdDf7e4boWGcnlgN1jAJpBw7w0eXuqA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-10.1.0.tgz", + "integrity": "sha512-DyS6WhQ59+ZXQsI1EkpsYkOXFt0Xbp+mbxPTJS9A7O21r3JDzaTC+1Jxz7g6J+Sbi9Y7UFdRs0tn/vqhHJx2gA==", "dev": true, "requires": { "@electron/get": "^1.0.1", @@ -7733,9 +7727,9 @@ } }, "electron-to-chromium": { - "version": "1.3.526", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.526.tgz", - "integrity": "sha512-HiroW5ZbGwgT8kCnoEO8qnGjoTPzJxduvV/Vv/wH63eo2N6Zj3xT5fmmaSPAPUM05iN9/5fIEkIg3owTtV6QZg==", + "version": "1.3.554", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.554.tgz", + "integrity": "sha512-Vtz2dVH5nMtKK4brahmgScwFS8PBnpA4VObYXtlsqN8ZpT9IFelv0Rpflc1+NIILjGVaj6vEiXQbhrs3Pl8O7g==", "dev": true }, "electron-updater": { @@ -11525,6 +11519,12 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, + "klona": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.3.tgz", + "integrity": "sha512-CgPOT3ZadDpXxKcfV56lEQ9OQSZ42Mk26gnozI+uN/k39vzD8toUhRQoqsX0m9Q3eMPEfsLWmtyUpK/yqST4yg==", + "dev": true + }, "last-call-webpack-plugin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", @@ -11614,21 +11614,20 @@ } }, "less-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-6.2.0.tgz", - "integrity": "sha512-Cl5h95/Pz/PWub/tCBgT1oNMFeH1WTD33piG80jn5jr12T4XbxZcjThwNXDQ7AG649WEynuIzO4b0+2Tn9Qolg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-7.0.0.tgz", + "integrity": "sha512-fAgAaZHQJdX/woSMyNhvJt6bQUhpOtKODfuhk5AqgVPo6FVD3PezwHIZEtNPr4aumYoNQ1KBLnhynGX2XE/Lrg==", "dev": true, "requires": { - "clone": "^2.1.2", - "less": "^3.11.3", + "klona": "^2.0.3", "loader-utils": "^2.0.0", "schema-utils": "^2.7.0" }, "dependencies": { "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -12054,9 +12053,9 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.10.0.tgz", - "integrity": "sha512-QgKgJBjaJhxVPwrLNqqwNS0AGkuQQ31Hp4xGXEK/P7wehEg6qmNtReHKai3zRXqY60wGVWLYcOMJK2b98aGc3A==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.0.tgz", + "integrity": "sha512-dVWGuWJlQw2lZxsxBI3hOsoxg1k3DruLR0foHQLSkQMfk+qLJbv9dUk8fjmjWQKN9ef2n54ehA2FjClAsQhrWQ==", "dev": true, "requires": { "loader-utils": "^1.1.0", diff --git a/package.json b/package.json index 6ef14ab3..91ccf772 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "lint:fix": "eslint --ext .js,.vue -f ./node_modules/eslint-formatter-friendly --fix src" }, "browserslist": [ - "Electron 9.2.1" + "Electron 10.0.1" ], "engines": { "node": ">= 12" @@ -169,7 +169,6 @@ "babel-loader": "^8.1.0", "babel-minify-webpack-plugin": "^0.3.1", "babel-preset-minify": "^0.5.1", - "browserslist": "^4.14.0", "cfonts": "^2.8.6", "chalk": "^4.1.0", "changelog-parser": "^2.8.0", @@ -178,7 +177,7 @@ "cross-env": "^7.0.2", "css-loader": "^3.6.0", "del": "^5.1.0", - "electron": "^9.2.1", + "electron": "^10.1.0", "electron-builder": "^22.8.0", "electron-debug": "^3.1.0", "electron-devtools-installer": "^3.1.1", @@ -195,9 +194,9 @@ "friendly-errors-webpack-plugin": "^1.7.0", "html-webpack-plugin": "^4.3.0", "less": "^3.12.2", - "less-loader": "^6.2.0", + "less-loader": "^7.0.0", "markdown-it": "^11.0.0", - "mini-css-extract-plugin": "^0.10.0", + "mini-css-extract-plugin": "^0.11.0", "optimize-css-assets-webpack-plugin": "^5.0.3", "postcss-loader": "^3.0.0", "postcss-pxtorem": "^5.1.1", diff --git a/publish/changeLog.md b/publish/changeLog.md index ea930f10..476e8a04 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -23,4 +23,4 @@ ### 其他 -- 更新electron到 9.2.1 +- 更新electron到 10.1.0 diff --git a/src/common/ipcNames.js b/src/common/ipcNames.js index f461a435..9aac43ce 100644 --- a/src/common/ipcNames.js +++ b/src/common/ipcNames.js @@ -43,6 +43,14 @@ const names = { hide_toggle: 'hide_toggle', get_data_path: 'get_data_path', show_dialog: 'show_dialog', + + get_setting: 'get_setting', + get_playlist: 'get_playlist', + save_playlist: 'save_playlist', + get_data: 'get_data', + set_data: 'set_data', + save_data: 'save_data', + get_hot_key: 'get_hot_key', }, winLyric: { close: 'close', diff --git a/src/common/utils.js b/src/common/utils.js index 94cf70b5..47fee60c 100644 --- a/src/common/utils.js +++ b/src/common/utils.js @@ -188,7 +188,7 @@ exports.initSetting = () => { // newSetting.controlBtnPosition = 'right' electronStore_config.set('version', settingVersion) electronStore_config.set('setting', newSetting) - return newSetting + return { version: settingVersion, setting: newSetting } } /** diff --git a/src/main/index.js b/src/main/index.js index 40c30ae2..ec5d955a 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -35,7 +35,7 @@ app.commandLine.appendSwitch('wm-window-animations-disabled') // https://github.com/electron/electron/issues/18397 // 开发模式下为true时 多次引入native模块会导致渲染进程卡死 // https://github.com/electron/electron/issues/22791 -app.allowRendererProcessReuse = !isDev +// app.allowRendererProcessReuse = !isDev app.on('web-contents-created', (event, contents) => { @@ -124,7 +124,9 @@ global.appHotKey = { } function init() { - global.appSetting = initSetting() + const info = initSetting() + global.appSetting = info.setting + global.appSettingVersion = info.version global.appHotKey.config = initHotKey() global.lx_event.common.initSetting() global.lx_event.hotKey.init() diff --git a/src/main/rendererEvents/setAppSetting.js b/src/main/rendererEvents/appSetting.js similarity index 51% rename from src/main/rendererEvents/setAppSetting.js rename to src/main/rendererEvents/appSetting.js index c66bc58b..415da098 100644 --- a/src/main/rendererEvents/setAppSetting.js +++ b/src/main/rendererEvents/appSetting.js @@ -1,7 +1,9 @@ const { mainWindow: MAIN_WINDOW_EVENT_NAME } = require('../events/_name') -const { mainOn, NAMES: { mainWindow: ipcMainWindowNames } } = require('../../common/ipc') +const { mainOn, NAMES: { mainWindow: ipcMainWindowNames }, mainHandle } = require('../../common/ipc') mainOn(ipcMainWindowNames.set_app_setting, (event, config) => { if (!config) return global.lx_event.common.setAppConfig(config, MAIN_WINDOW_EVENT_NAME.name) }) + +mainHandle(ipcMainWindowNames.get_setting, async() => ({ setting: global.appSetting, version: global.appSettingVersion })) diff --git a/src/main/rendererEvents/getCacheSize.js b/src/main/rendererEvents/cache.js similarity index 59% rename from src/main/rendererEvents/getCacheSize.js rename to src/main/rendererEvents/cache.js index 5c990563..ef6441eb 100644 --- a/src/main/rendererEvents/getCacheSize.js +++ b/src/main/rendererEvents/cache.js @@ -1,7 +1,11 @@ const { mainHandle, NAMES: { mainWindow: ipcMainWindowNames } } = require('../../common/ipc') +mainHandle(ipcMainWindowNames.clear_cache, async(event, options) => { + if (!global.modules.mainWindow) throw new Error('mainWindow is undefined') + return global.modules.mainWindow.webContents.session.clearCache() +}) + mainHandle(ipcMainWindowNames.get_cache_size, async(event, options) => { if (!global.modules.mainWindow) throw new Error('mainWindow is undefined') return global.modules.mainWindow.webContents.session.getCacheSize() }) - diff --git a/src/main/rendererEvents/clearCache.js b/src/main/rendererEvents/clearCache.js deleted file mode 100644 index 8e5dc91d..00000000 --- a/src/main/rendererEvents/clearCache.js +++ /dev/null @@ -1,8 +0,0 @@ -const { mainHandle, NAMES: { mainWindow: ipcMainWindowNames } } = require('../../common/ipc') - -mainHandle(ipcMainWindowNames.clear_cache, async(event, options) => { - if (!global.modules.mainWindow) throw new Error('mainWindow is undefined') - return global.modules.mainWindow.webContents.session.clearCache() -}) - - diff --git a/src/main/rendererEvents/data.js b/src/main/rendererEvents/data.js new file mode 100644 index 00000000..18cdf81a --- /dev/null +++ b/src/main/rendererEvents/data.js @@ -0,0 +1,12 @@ +const Store = require('electron-store') +const { mainOn, NAMES: { mainWindow: ipcMainWindowNames }, mainHandle } = require('../../common/ipc') + + +const electronStore_data = new Store({ + name: 'data', +}) + +mainHandle(ipcMainWindowNames.get_data, async(event, path) => electronStore_data.get(path)) + + +mainOn(ipcMainWindowNames.save_data, (event, { path, data }) => electronStore_data.get(path, data)) diff --git a/src/main/rendererEvents/hotKey.js b/src/main/rendererEvents/hotKey.js index 30c0022b..487234c9 100644 --- a/src/main/rendererEvents/hotKey.js +++ b/src/main/rendererEvents/hotKey.js @@ -1,5 +1,10 @@ -const { mainSend, NAMES: { mainWindow: ipcMainWindowNames }, mainOn } = require('../../common/ipc') +const Store = require('electron-store') +const { mainSend, NAMES: { mainWindow: ipcMainWindowNames }, mainOn, mainHandle } = require('../../common/ipc') const { mainWindow: MAIN_WINDOW_EVENT_NAME, hotKey: HOT_KEY_EVENT_NAME } = require('../events/_name') + +const electronStore_hotKey = new Store({ + name: 'hotKey', +}) // const { registerHotkey, unRegisterHotkey } = require('../modules/hotKey/utils') // mainHandle(ipcMainWindowNames.set_hot_key_config, async(event, { action, data }) => { @@ -14,6 +19,11 @@ const { mainWindow: MAIN_WINDOW_EVENT_NAME, hotKey: HOT_KEY_EVENT_NAME } = requi // } // }) +mainHandle(ipcMainWindowNames.get_hot_key, async() => ({ + local: electronStore_hotKey.get('local'), + global: electronStore_hotKey.get('global'), +})) + mainOn(ipcMainWindowNames.quit, () => global.lx_event.mainWindow.quit()) mainOn(ipcMainWindowNames.min_toggle, () => global.lx_event.mainWindow.toggleMinimize()) mainOn(ipcMainWindowNames.hide_toggle, () => global.lx_event.mainWindow.toggleHide()) diff --git a/src/main/rendererEvents/index.js b/src/main/rendererEvents/index.js index 93f71df8..395d0fca 100644 --- a/src/main/rendererEvents/index.js +++ b/src/main/rendererEvents/index.js @@ -7,15 +7,16 @@ require('./musicMeta') require('./selectDir') require('./setWindowSize') require('./showSaveDialog') -require('./clearCache') -require('./getCacheSize') +require('./cache') require('./setIgnoreMouseEvent') require('./getEnvParams') -require('./setAppSetting') +require('./appSetting') require('./setLyricInfo') require('./hotKey') require('./getDataPath') require('./showDialog') +require('./playList') +require('./data') require('./xm_verify') diff --git a/src/main/rendererEvents/playList.js b/src/main/rendererEvents/playList.js new file mode 100644 index 00000000..32d15aa1 --- /dev/null +++ b/src/main/rendererEvents/playList.js @@ -0,0 +1,23 @@ +const Store = require('electron-store') +const { mainOn, NAMES: { mainWindow: ipcMainWindowNames }, mainHandle } = require('../../common/ipc') + + +const electronStore_list = new Store({ + name: 'playList', +}) + +mainHandle(ipcMainWindowNames.get_playlist, async(event, isIgnoredError = false) => { + let electronStore_list = new Store({ + name: 'playList', + clearInvalidConfig: !isIgnoredError, + }) + + return { + defaultList: electronStore_list.get('defaultList'), + loveList: electronStore_list.get('loveList'), + userList: electronStore_list.get('userList'), + downloadList: electronStore_list.get('downloadList'), + } +}) + +mainOn(ipcMainWindowNames.save_playlist, (event, { type, data }) => electronStore_list.set(type, data)) diff --git a/src/renderer/App.vue b/src/renderer/App.vue index 5defe753..7b94dfbd 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -27,7 +27,7 @@ import { mapMutations, mapGetters, mapActions } from 'vuex' import { rendererOn, rendererSend, rendererInvoke, NAMES } from '../common/ipc' import { isLinux } from '../common/utils' import music from './utils/music' -import { throttle, openUrl, compareVer } from './utils' +import { throttle, openUrl, compareVer, getPlayList } from './utils' import { base as eventBaseName } from './event/names' window.ELECTRON_DISABLE_SECURITY_WARNINGS = process.env.ELECTRON_DISABLE_SECURITY_WARNINGS @@ -70,19 +70,34 @@ export default { }, created() { this.saveDefaultList = throttle(n => { - window.electronStore_list.set('defaultList', n) + rendererSend(NAMES.mainWindow.save_playlist, { + type: 'defaultList', + data: n, + }) }, 500) this.saveLoveList = throttle(n => { - window.electronStore_list.set('loveList', n) + rendererSend(NAMES.mainWindow.save_playlist, { + type: 'loveList', + data: n, + }) }, 500) this.saveUserList = throttle(n => { - window.electronStore_list.set('userList', n) + rendererSend(NAMES.mainWindow.save_playlist, { + type: 'userList', + data: n, + }) }, 500) this.saveDownloadList = throttle(n => { - window.electronStore_list.set('downloadList', n) + rendererSend(NAMES.mainWindow.save_playlist, { + type: 'downloadList', + data: n, + }) }, 1000) this.saveSearchHistoryList = throttle(n => { - window.electronStore_data.set('searchHistoryList', n) + rendererSend(NAMES.mainWindow.set_data, { + path: 'searchHistoryList', + data: n, + }) }, 500) }, mounted() { @@ -155,6 +170,9 @@ export default { ...mapMutations(['setNewVersion', 'setVersionModalVisible', 'setDownloadProgress', 'setSetting', 'setDesktopLyricConfig']), ...mapMutations('list', ['initList']), ...mapMutations('download', ['updateDownloadList']), + ...mapMutations('search', { + setSearchHistoryList: 'setHistory', + }), init() { document.documentElement.style.fontSize = this.windowSizeActive.fontSize @@ -243,19 +261,23 @@ export default { }, initData() { // 初始化数据 - this.initPlayList() // 初始化播放列表 - this.initDownloadList() // 初始化下载列表 + this.initLocalList() // 初始化播放列表 + // this.initDownloadList() // 初始化下载列表 + this.initSearchHistoryList() // 初始化搜索历史列表 }, - initPlayList() { - let defaultList = window.electronStore_list.get('defaultList') || this.defaultList - let loveList = window.electronStore_list.get('loveList') || this.loveList - let userList = window.electronStore_list.get('userList') || this.userList - if (!defaultList.list) defaultList.list = [] - if (!loveList.list) loveList.list = [] - this.initList({ defaultList, loveList, userList }) + initLocalList() { + getPlayList().then(({ defaultList, loveList, userList, downloadList }) => { + if (!defaultList) defaultList = this.defaultList + if (!loveList) loveList = this.loveList + if (!userList) userList = this.userList + + if (!defaultList.list) defaultList.list = [] + if (!loveList.list) loveList.list = [] + this.initList({ defaultList, loveList, userList }) + this.initDownloadList(downloadList) // 初始化下载列表 + }) }, - initDownloadList() { - let downloadList = window.electronStore_list.get('downloadList') + initDownloadList(downloadList) { if (downloadList) { downloadList.forEach(item => { if (item.status == this.downloadStatus.RUN || item.status == this.downloadStatus.WAITING) { @@ -266,6 +288,16 @@ export default { this.updateDownloadList(downloadList) } }, + initSearchHistoryList() { + rendererInvoke(NAMES.mainWindow.get_data, 'searchHistoryList').then(historyList => { + if (historyList == null) { + historyList = [] + rendererInvoke(NAMES.mainWindow.set_data, { path: 'searchHistoryList', data: historyList }) + } else { + this.setSearchHistoryList(historyList) + } + }) + }, showUpdateModal() { (this.version.newVersion && this.version.newVersion.history ? Promise.resolve(this.version.newVersion) diff --git a/src/renderer/event/index.js b/src/renderer/event/index.js index 495d4085..d818b955 100644 --- a/src/renderer/event/index.js +++ b/src/renderer/event/index.js @@ -1,21 +1,22 @@ import Vue from 'vue' import keyBind from '../utils/keyBind' -import { rendererOn, rendererSend, NAMES } from '../../common/ipc' +import { rendererOn, rendererSend, NAMES, rendererInvoke } from '../../common/ipc' import { base as baseName } from './names' -import Store from 'electron-store' import { common as hotKeyNamesCommon } from '../../common/hotKey' const eventHub = window.eventHub = new Vue() -const electronStore_hotKey = window.electronStore_hotKey = new Store({ - name: 'hotKey', -}) - window.isEditingHotKey = false -const appHotKeyConfig = window.appHotKeyConfig = { - local: electronStore_hotKey.get('local'), - global: electronStore_hotKey.get('global'), +let appHotKeyConfig = { + local: {}, + global: {}, } +rendererInvoke(NAMES.mainWindow.get_hot_key).then(({ local, global }) => { + appHotKeyConfig = window.appHotKeyConfig = { + local, + global, + } +}) eventHub.$on(baseName.bindKey, () => { keyBind.bindKey((key, type, event, keys) => { diff --git a/src/renderer/main.js b/src/renderer/main.js index 18898ec9..bac4f660 100644 --- a/src/renderer/main.js +++ b/src/renderer/main.js @@ -16,14 +16,45 @@ import store from './store' import '../common/error' +import { getSetting } from './utils' +import languageList from '@/lang/languages.json' +import { rendererSend, NAMES } from '../common/ipc' + sync(store, router) Vue.config.productionTip = false -new Vue({ - router, - store, - i18n, - el: '#root', - render: h => h(App), + +getSetting().then(({ setting, version }) => { + // Set language automatically + if (!window.i18n.availableLocales.includes(setting.langId)) { + let langId = null + let locale = window.navigator.language.toLocaleLowerCase() + if (window.i18n.availableLocales.includes(locale)) { + langId = locale + } else { + for (const lang of languageList) { + if (lang.alternate == locale) { + langId = lang.locale + break + } + } + if (langId == null) langId = 'en-us' + } + setting.langId = langId + rendererSend(NAMES.mainWindow.set_app_setting, setting) + console.log('Set lang', setting.langId) + } + window.i18n.locale = setting.langId + store.commit('setSetting', setting) + store.commit('setSettingVersion', version) + + new Vue({ + router, + store, + i18n, + el: '#root', + render: h => h(App), + }) }) + diff --git a/src/renderer/store/modules/search.js b/src/renderer/store/modules/search.js index f8b06b80..ff3a3e2b 100644 --- a/src/renderer/store/modules/search.js +++ b/src/renderer/store/modules/search.js @@ -1,15 +1,5 @@ -import Store from 'electron-store' import music from '../../utils/music' -const electronStore_data = window.electronStore_data = new Store({ - name: 'data', -}) -let historyList = electronStore_data.get('searchHistoryList') -if (historyList == null) { - historyList = [] - electronStore_data.set('searchHistoryList', historyList) -} - const sources = [] const sourceList = {} const sourceMaxPage = {} @@ -103,7 +93,7 @@ const state = { allPage: 1, total: 0, sourceMaxPage, - historyList, + historyList: [], } // getters @@ -211,6 +201,9 @@ const mutations = { clearHistory(state) { state.historyList = [] }, + setHistory(state, list) { + state.historyList = list + }, } export default { diff --git a/src/renderer/store/mutations.js b/src/renderer/store/mutations.js index 1d9648b4..418c7a4e 100644 --- a/src/renderer/store/mutations.js +++ b/src/renderer/store/mutations.js @@ -9,12 +9,12 @@ export default { setSetting(state, val) { state.setting = val }, - setAgreePact(state) { - state.setting.isAgreePact = true - }, setSettingVersion(state, val) { state.settingVersion = val }, + setAgreePact(state) { + state.setting.isAgreePact = true + }, 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 23a968c5..96b7ad03 100644 --- a/src/renderer/store/state.js +++ b/src/renderer/store/state.js @@ -1,67 +1,9 @@ - // const isDev = process.env.NODE_ENV === 'development' -import Store from 'electron-store' import { windowSizeList } from '../../common/config' import { version } from '../../../package.json' -import { rendererSend, rendererInvoke, NAMES } from '../../common/ipc' -import languageList from '@/lang/languages.json' -import path from 'path' -import { openDirInExplorer } from '../utils' - - -const electronStore_config = window.electronStore_config = new Store({ - name: 'config', -}) -let setting = electronStore_config.get('setting') -let settingVersion = electronStore_config.get('version') process.versions.app = version -// Set language automatically -if (!window.i18n.availableLocales.includes(setting.langId)) { - let langId = null - let locale = window.navigator.language.toLocaleLowerCase() - if (window.i18n.availableLocales.includes(locale)) { - langId = locale - } else { - for (const lang of languageList) { - if (lang.alternate == locale) { - langId = lang.locale - break - } - } - if (langId == null) langId = 'en-us' - } - setting.langId = langId - electronStore_config.set('setting', setting) - rendererSend(NAMES.mainWindow.set_app_setting, setting) - console.log('Set lang', setting.langId) -} - -window.i18n.locale = setting.langId - -try { - window.electronStore_list = new Store({ - name: 'playList', - clearInvalidConfig: false, - }) -} catch (error) { - rendererInvoke(NAMES.mainWindow.get_data_path).then(dataPath => { - let filePath = path.join(dataPath, 'playList.json.bak') - rendererInvoke(NAMES.mainWindow.show_dialog, { - type: 'error', - message: window.i18n.t('store.state.load_list_file_error_title'), - detail: window.i18n.t('store.state.load_list_file_error_detail', { - path: filePath, - detail: error.message, - }), - }).then(() => openDirInExplorer(filePath)) - }) - window.electronStore_list = new Store({ - name: 'playList', - }) -} - export default { themes: [ @@ -144,8 +86,8 @@ export default { downloadProgress: null, }, userInfo: null, - setting, - settingVersion, + setting: null, + settingVersion: null, windowSizeList, } diff --git a/src/renderer/utils/index.js b/src/renderer/utils/index.js index d9faabdd..3b30ed43 100644 --- a/src/renderer/utils/index.js +++ b/src/renderer/utils/index.js @@ -1,4 +1,5 @@ import fs from 'fs' +import path from 'path' import { shell, clipboard } from 'electron' import crypto from 'crypto' import { rendererSend, rendererInvoke, NAMES } from '../../common/ipc' @@ -341,3 +342,22 @@ export const getProxyInfo = () => window.globalObj.proxy.enable export const assertApiSupport = source => window.globalObj.qualityList[source] != undefined + +export const getSetting = () => rendererInvoke(NAMES.mainWindow.get_setting) +export const saveSetting = () => rendererInvoke(NAMES.mainWindow.set_app_setting) + +export const getPlayList = () => rendererInvoke(NAMES.mainWindow.get_playlist).catch(error => { + rendererInvoke(NAMES.mainWindow.get_data_path).then(dataPath => { + let filePath = path.join(dataPath, 'playList.json.bak') + rendererInvoke(NAMES.mainWindow.show_dialog, { + type: 'error', + message: window.i18n.t('store.state.load_list_file_error_title'), + detail: window.i18n.t('store.state.load_list_file_error_detail', { + path: filePath, + detail: error.message, + }), + }).then(() => openDirInExplorer(filePath)) + }) + return rendererInvoke(NAMES.mainWindow.get_playlist, true) +}) +