分离主进程与渲染进程的功能,禁用remote模块
parent
fddfaf23ce
commit
a2af321c5e
|
@ -1,19 +0,0 @@
|
||||||
const { ipcMain, ipcRenderer } = require('electron')
|
|
||||||
|
|
||||||
|
|
||||||
export const mainSend = (name, params) => {
|
|
||||||
ipcMain.send(name, params)
|
|
||||||
}
|
|
||||||
|
|
||||||
export const mainOn = (name, callback) => {
|
|
||||||
ipcMain.on(name, callback)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
export const rendererSend = (name, params) => {
|
|
||||||
ipcRenderer.send(name, params)
|
|
||||||
}
|
|
||||||
|
|
||||||
export const rendererOn = (name, callback) => {
|
|
||||||
ipcRenderer.on(name, callback)
|
|
||||||
}
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
const { ipcMain, ipcRenderer } = require('electron')
|
||||||
|
|
||||||
|
|
||||||
|
export const mainOn = (event, callback) => {
|
||||||
|
ipcMain.on(event, callback)
|
||||||
|
}
|
||||||
|
export const mainOnce = (event, callback) => {
|
||||||
|
ipcMain.once(event, callback)
|
||||||
|
}
|
||||||
|
|
||||||
|
export const mainHandle = (name, callback) => {
|
||||||
|
console.log(name, callback)
|
||||||
|
ipcMain.handle(name, callback)
|
||||||
|
}
|
||||||
|
export const mainHandleOnce = (name, callback) => {
|
||||||
|
ipcMain.handleOnce(name, callback)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export const rendererSend = (name, params) => {
|
||||||
|
ipcRenderer.send(name, params)
|
||||||
|
}
|
||||||
|
export const rendererSendSync = (name, params) => ipcRenderer.sendSync(name, params)
|
||||||
|
|
||||||
|
export const rendererInvoke = (name, params) => ipcRenderer.invoke(name, params)
|
||||||
|
|
||||||
|
export const rendererOn = (name, callback) => {
|
||||||
|
ipcRenderer.on(name, callback)
|
||||||
|
}
|
||||||
|
export const rendererOnce = (name, callback) => {
|
||||||
|
ipcRenderer.once(name, callback)
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
const { mainOn } = require('../../common/icp')
|
const { mainOn } = require('../../common/ipc')
|
||||||
const { app } = require('electron')
|
const { app } = require('electron')
|
||||||
const { name: defaultName } = require('../../../package.json')
|
const { name: defaultName } = require('../../../package.json')
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
const { mainHandle } = require('../../common/ipc')
|
||||||
|
|
||||||
|
mainHandle('clearCache', async(event, options) => {
|
||||||
|
if (!global.mainWindow) throw new Error('mainwindow is undefined')
|
||||||
|
return global.mainWindow.webContents.session.clearCache()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
const { mainHandle } = require('../../common/ipc')
|
||||||
|
|
||||||
|
mainHandle('getCacheSize', async(event, options) => {
|
||||||
|
if (!global.mainWindow) throw new Error('mainwindow is undefined')
|
||||||
|
return global.mainWindow.webContents.session.getCacheSize()
|
||||||
|
})
|
||||||
|
|
|
@ -4,3 +4,8 @@ require('./request')
|
||||||
require('./progressBar')
|
require('./progressBar')
|
||||||
require('./trafficLight')
|
require('./trafficLight')
|
||||||
require('./musicMeta')
|
require('./musicMeta')
|
||||||
|
require('./selectDir')
|
||||||
|
require('./setWindowSize')
|
||||||
|
require('./showSaveDialog')
|
||||||
|
require('./clearCache')
|
||||||
|
require('./getCacheSize')
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const { mainOn } = require('../../common/icp')
|
const { mainOn } = require('../../common/ipc')
|
||||||
const { setMeta } = require('../utils/musicMeta')
|
const { setMeta } = require('../utils/musicMeta')
|
||||||
|
|
||||||
mainOn('setMusicMeta', (event, { filePath, meta }) => {
|
mainOn('setMusicMeta', (event, { filePath, meta }) => {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const { mainOn } = require('../../common/icp')
|
const { mainOn } = require('../../common/ipc')
|
||||||
|
|
||||||
|
|
||||||
mainOn('progress', (event, params) => {
|
mainOn('progress', (event, params) => {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
const request = require('request')
|
const request = require('request')
|
||||||
|
|
||||||
const { mainOn } = require('../../common/icp')
|
const { mainOn } = require('../../common/ipc')
|
||||||
|
|
||||||
const tasks = []
|
const tasks = []
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const { mainOn } = require('../../common/icp')
|
const { mainOn } = require('../../common/ipc')
|
||||||
|
|
||||||
|
|
||||||
mainOn('restartWindow', (event, name) => {
|
mainOn('restartWindow', (event, name) => {
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
const { mainHandle } = require('../../common/ipc')
|
||||||
|
const { dialog } = require('electron')
|
||||||
|
|
||||||
|
mainHandle('selectDir', async(event, options) => {
|
||||||
|
if (!global.mainWindow) throw new Error('mainwindow is undefined')
|
||||||
|
return dialog.showOpenDialog(global.mainWindow, options)
|
||||||
|
})
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
const { mainOn } = require('../../common/icp')
|
|
||||||
const { dialog } = require('electron')
|
|
||||||
|
|
||||||
module.exports = win => {
|
|
||||||
mainOn('selectPath', (event, params) => {
|
|
||||||
let path = dialog.showOpenDialog(win, params.options)
|
|
||||||
if (path === undefined) return
|
|
||||||
event.sender.send(params.eventName, path)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
const { mainOn } = require('../../common/ipc')
|
||||||
|
|
||||||
|
mainOn('setWindowSize', (event, options) => {
|
||||||
|
if (!global.mainWindow) return
|
||||||
|
global.mainWindow.setBounds(options)
|
||||||
|
})
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
const { mainHandle } = require('../../common/ipc')
|
||||||
|
const { dialog } = require('electron')
|
||||||
|
|
||||||
|
mainHandle('showSaveDialog', async(event, options) => {
|
||||||
|
if (!global.mainWindow) throw new Error('mainwindow is undefined')
|
||||||
|
return dialog.showSaveDialog(global.mainWindow, options)
|
||||||
|
})
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// const { app } = require('electron')
|
// const { app } = require('electron')
|
||||||
const { mainOn } = require('../../common/icp')
|
const { mainOn } = require('../../common/ipc')
|
||||||
|
|
||||||
|
|
||||||
mainOn('min', event => {
|
mainOn('min', event => {
|
||||||
|
@ -7,11 +7,11 @@ mainOn('min', event => {
|
||||||
global.mainWindow.minimize()
|
global.mainWindow.minimize()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
// mainOn('max', event => {
|
mainOn('max', event => {
|
||||||
// if (global.mainWindow) {
|
if (global.mainWindow) {
|
||||||
// global.mainWindow.maximize()
|
global.mainWindow.maximize()
|
||||||
// }
|
}
|
||||||
// })
|
})
|
||||||
mainOn('close', event => {
|
mainOn('close', event => {
|
||||||
if (global.mainWindow) {
|
if (global.mainWindow) {
|
||||||
// global.mainWindowdow.destroy()
|
// global.mainWindowdow.destroy()
|
||||||
|
|
|
@ -50,6 +50,7 @@ function createWindow() {
|
||||||
width: windowSizeInfo.width,
|
width: windowSizeInfo.width,
|
||||||
frame: false,
|
frame: false,
|
||||||
transparent: !isLinux,
|
transparent: !isLinux,
|
||||||
|
enableRemoteModule: false,
|
||||||
// icon: path.join(global.__static, isWin ? 'icons/256x256.ico' : 'icons/512x512.png'),
|
// icon: path.join(global.__static, isWin ? 'icons/256x256.ico' : 'icons/512x512.png'),
|
||||||
resizable: false,
|
resizable: false,
|
||||||
maximizable: false,
|
maximizable: false,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
const { log } = require('../../common/utils')
|
const { log } = require('../../common/utils')
|
||||||
const { autoUpdater } = require('electron-updater')
|
const { autoUpdater } = require('electron-updater')
|
||||||
const { mainOn } = require('../../common/icp')
|
const { mainOn } = require('../../common/ipc')
|
||||||
|
|
||||||
autoUpdater.logger = log
|
autoUpdater.logger = log
|
||||||
// autoUpdater.autoDownload = false
|
// autoUpdater.autoDownload = false
|
||||||
|
@ -21,7 +21,7 @@ log.info('App starting...')
|
||||||
|
|
||||||
function sendStatusToWindow(text) {
|
function sendStatusToWindow(text) {
|
||||||
log.info(text)
|
log.info(text)
|
||||||
// global.mainWindow.webContents.send('message', text)
|
// ipcMain.send('message', text)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -90,16 +90,20 @@ module.exports = isFirstCheckedUpdate => {
|
||||||
sendStatusToWindow('Update not available.')
|
sendStatusToWindow('Update not available.')
|
||||||
handleSendEvent({ type: 'update-not-available' })
|
handleSendEvent({ type: 'update-not-available' })
|
||||||
})
|
})
|
||||||
autoUpdater.on('error', () => {
|
autoUpdater.on('error', err => {
|
||||||
sendStatusToWindow('Error in auto-updater.')
|
sendStatusToWindow('Error in auto-updater.')
|
||||||
handleSendEvent({ type: 'update-error' })
|
handleSendEvent({ type: 'update-error', info: err })
|
||||||
})
|
})
|
||||||
autoUpdater.on('download-progress', progressObj => {
|
autoUpdater.on('download-progress', progressObj => {
|
||||||
sendStatusToWindow('Download progress...')
|
let log_message = 'Download speed: ' + progressObj.bytesPerSecond
|
||||||
|
log_message = log_message + ' - Downloaded ' + progressObj.percent + '%'
|
||||||
|
log_message = log_message + ' (' + progressObj.transferred + '/' + progressObj.total + ')'
|
||||||
|
sendStatusToWindow(log_message)
|
||||||
|
handleSendEvent({ type: 'download-progress', info: progressObj })
|
||||||
})
|
})
|
||||||
autoUpdater.on('update-downloaded', info => {
|
autoUpdater.on('update-downloaded', info => {
|
||||||
sendStatusToWindow('Update downloaded.')
|
sendStatusToWindow('Update downloaded.')
|
||||||
handleSendEvent({ type: 'update-downloaded' })
|
handleSendEvent({ type: 'update-downloaded', info })
|
||||||
})
|
})
|
||||||
mainOn('quit-update', () => {
|
mainOn('quit-update', () => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
<script>
|
<script>
|
||||||
import dnscache from 'dnscache'
|
import dnscache from 'dnscache'
|
||||||
import { mapMutations, mapGetters, mapActions } from 'vuex'
|
import { mapMutations, mapGetters, mapActions } from 'vuex'
|
||||||
import { rendererOn } from '../common/icp'
|
import { ipcRenderer } from 'electron'
|
||||||
import { isLinux } from '../common/utils'
|
import { isLinux } from '../common/utils'
|
||||||
import music from './utils/music'
|
import music from './utils/music'
|
||||||
window.ELECTRON_DISABLE_SECURITY_WARNINGS = process.env.ELECTRON_DISABLE_SECURITY_WARNINGS
|
window.ELECTRON_DISABLE_SECURITY_WARNINGS = process.env.ELECTRON_DISABLE_SECURITY_WARNINGS
|
||||||
|
@ -97,7 +97,7 @@ export default {
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapActions(['getVersionInfo']),
|
...mapActions(['getVersionInfo']),
|
||||||
...mapMutations(['setNewVersion', 'setVersionModalVisible']),
|
...mapMutations(['setNewVersion', 'setVersionModalVisible', 'setDownloadProgress']),
|
||||||
...mapMutations('list', ['initList']),
|
...mapMutations('list', ['initList']),
|
||||||
...mapMutations('download', ['updateDownloadList']),
|
...mapMutations('download', ['updateDownloadList']),
|
||||||
...mapMutations(['setSetting']),
|
...mapMutations(['setSetting']),
|
||||||
|
@ -106,13 +106,15 @@ export default {
|
||||||
body.addEventListener('mouseenter', this.dieableIgnoreMouseEvents)
|
body.addEventListener('mouseenter', this.dieableIgnoreMouseEvents)
|
||||||
body.addEventListener('mouseleave', this.enableIgnoreMouseEvents)
|
body.addEventListener('mouseleave', this.enableIgnoreMouseEvents)
|
||||||
}
|
}
|
||||||
rendererOn('update-available', (e, info) => {
|
ipcRenderer.on('update-available', (e, info) => {
|
||||||
// this.showUpdateModal(true)
|
// this.showUpdateModal(true)
|
||||||
|
console.log(info)
|
||||||
this.setNewVersion({
|
this.setNewVersion({
|
||||||
version: info.version,
|
version: info.version,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
rendererOn('update-error', () => {
|
ipcRenderer.on('update-error', err => {
|
||||||
|
console.log(err)
|
||||||
if (!this.updateTimeout) return
|
if (!this.updateTimeout) return
|
||||||
this.setVersionModalVisible({ isError: true })
|
this.setVersionModalVisible({ isError: true })
|
||||||
this.clearUpdateTimeout()
|
this.clearUpdateTimeout()
|
||||||
|
@ -120,12 +122,17 @@ export default {
|
||||||
this.showUpdateModal()
|
this.showUpdateModal()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
rendererOn('update-downloaded', () => {
|
ipcRenderer.on('update-progress', progress => {
|
||||||
|
console.log(progress)
|
||||||
|
this.setDownloadProgress(progress)
|
||||||
|
})
|
||||||
|
ipcRenderer.on('update-downloaded', info => {
|
||||||
|
console.log(info)
|
||||||
this.clearUpdateTimeout()
|
this.clearUpdateTimeout()
|
||||||
this.setVersionModalVisible({ isError: false })
|
this.setVersionModalVisible({ isError: false })
|
||||||
this.showUpdateModal()
|
this.showUpdateModal()
|
||||||
})
|
})
|
||||||
rendererOn('update-not-available', () => {
|
ipcRenderer.on('update-not-available', () => {
|
||||||
if (!this.updateTimeout) return
|
if (!this.updateTimeout) return
|
||||||
if (this.setting.ignoreVersion) this.setSetting(Object.assign({}, this.setting, { ignoreVersion: null }))
|
if (this.setting.ignoreVersion) this.setSetting(Object.assign({}, this.setting, { ignoreVersion: null }))
|
||||||
this.clearUpdateTimeout()
|
this.clearUpdateTimeout()
|
||||||
|
|
|
@ -48,7 +48,7 @@ div(:class="$style.player")
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Lyric from 'lrc-file-parser'
|
import Lyric from 'lrc-file-parser'
|
||||||
import { rendererSend } from '../../../common/icp'
|
import { rendererSend } from '../../../common/ipc'
|
||||||
import { formatPlayTime2, getRandom, checkPath, setTitle, clipboardWriteText, debounce } from '../../utils'
|
import { formatPlayTime2, getRandom, checkPath, setTitle, clipboardWriteText, debounce } from '../../utils'
|
||||||
import { mapGetters, mapActions, mapMutations } from 'vuex'
|
import { mapGetters, mapActions, mapMutations } from 'vuex'
|
||||||
import { requestMsg } from '../../utils/message'
|
import { requestMsg } from '../../utils/message'
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { rendererSend } from 'common/icp'
|
import { rendererSend } from 'common/ipc'
|
||||||
import { mapGetters } from 'vuex'
|
import { mapGetters } from 'vuex'
|
||||||
import music from '../../utils/music'
|
import music from '../../utils/music'
|
||||||
import { debounce } from '../../utils'
|
import { debounce } from '../../utils'
|
||||||
|
|
|
@ -45,7 +45,7 @@ material-modal(:show="version.showModal" @close="handleClose")
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapGetters, mapMutations } from 'vuex'
|
import { mapGetters, mapMutations } from 'vuex'
|
||||||
import { rendererSend } from '../../../common/icp'
|
import { rendererSend } from '../../../common/ipc'
|
||||||
import { checkVersion, openUrl, clipboardWriteText } from '../../utils'
|
import { checkVersion, openUrl, clipboardWriteText } from '../../utils'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|
|
@ -22,12 +22,11 @@ export default {
|
||||||
state.setting.list.scroll.locations[id] = location
|
state.setting.list.scroll.locations[id] = location
|
||||||
},
|
},
|
||||||
setNewVersion(state, val) {
|
setNewVersion(state, val) {
|
||||||
// val.history.forEach(ver => {
|
|
||||||
// ver.desc = ver.desc.replace(/\n/g, '<br>')
|
|
||||||
// })
|
|
||||||
// val.desc = val.desc.replace(/\n/g, '<br>')
|
|
||||||
state.version.newVersion = val
|
state.version.newVersion = val
|
||||||
},
|
},
|
||||||
|
setDownloadProgress(state, info) {
|
||||||
|
state.version.downloadProgress = info
|
||||||
|
},
|
||||||
setVersionModalVisible(state, { isShow, isError }) {
|
setVersionModalVisible(state, { isShow, isError }) {
|
||||||
if (isShow !== undefined) state.version.showModal = isShow
|
if (isShow !== undefined) state.version.showModal = isShow
|
||||||
if (isError !== undefined) state.version.isError = isError
|
if (isError !== undefined) state.version.isError = isError
|
||||||
|
|
|
@ -62,6 +62,7 @@ export default {
|
||||||
newVersion: null,
|
newVersion: null,
|
||||||
showModal: false,
|
showModal: false,
|
||||||
isError: false,
|
isError: false,
|
||||||
|
downloadProgress: null,
|
||||||
},
|
},
|
||||||
userInfo: null,
|
userInfo: null,
|
||||||
setting,
|
setting,
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import { shell, remote, clipboard } from 'electron'
|
import { shell, clipboard } from 'electron'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import os from 'os'
|
import os from 'os'
|
||||||
import crypto from 'crypto'
|
import crypto from 'crypto'
|
||||||
import { rendererSend } from '../../common/icp'
|
import { rendererSend, rendererInvoke } from '../../common/ipc'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取两个数之间的随机整数,大于等于min,小于max
|
* 获取两个数之间的随机整数,大于等于min,小于max
|
||||||
|
@ -86,13 +86,13 @@ export const checkPath = path => fs.existsSync(path)
|
||||||
* 在资源管理器中打开目录
|
* 在资源管理器中打开目录
|
||||||
* @param {*} 选项
|
* @param {*} 选项
|
||||||
*/
|
*/
|
||||||
export const openSelectDir = options => remote.dialog.showOpenDialog(remote.getCurrentWindow(), options)
|
export const selectDir = options => rendererInvoke('selectDir', options)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 在资源管理器中打开目录
|
* 在资源管理器中打开目录
|
||||||
* @param {*} 选项
|
* @param {*} 选项
|
||||||
*/
|
*/
|
||||||
export const openSaveDir = options => remote.dialog.showSaveDialog(remote.getCurrentWindow(), options)
|
export const openSaveDir = options => rendererInvoke('showSaveDialog', options)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 在资源管理器中打开目录
|
* 在资源管理器中打开目录
|
||||||
|
@ -361,19 +361,17 @@ export const asyncSetArray = (from, to, num = 100) => new Promise(resolve => {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取缓存大小
|
* 获取缓存大小
|
||||||
* @param {*} win
|
|
||||||
*/
|
*/
|
||||||
export const getCacheSize = () => remote.getCurrentWindow().webContents.session.getCacheSize()
|
export const getCacheSize = () => rendererInvoke('getCacheSize')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 清除缓存
|
* 清除缓存
|
||||||
* @param {*} win
|
|
||||||
*/
|
*/
|
||||||
export const clearCache = () => remote.getCurrentWindow().webContents.session.clearCache()
|
export const clearCache = () => rendererInvoke('clearCache')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置窗口大小
|
* 设置窗口大小
|
||||||
* @param {*} width
|
* @param {*} width
|
||||||
* @param {*} height
|
* @param {*} height
|
||||||
*/
|
*/
|
||||||
export const setWindowSize = (width, height) => remote.getCurrentWindow().setBounds({ width, height })
|
export const setWindowSize = (width, height) => rendererSend('setWindowSize', { width, height })
|
||||||
|
|
|
@ -174,7 +174,7 @@ div.scroll(:class="$style.setting")
|
||||||
import { mapGetters, mapMutations } from 'vuex'
|
import { mapGetters, mapMutations } from 'vuex'
|
||||||
import {
|
import {
|
||||||
openDirInExplorer,
|
openDirInExplorer,
|
||||||
openSelectDir,
|
selectDir,
|
||||||
openSaveDir,
|
openSaveDir,
|
||||||
updateSetting,
|
updateSetting,
|
||||||
openUrl,
|
openUrl,
|
||||||
|
@ -184,7 +184,7 @@ import {
|
||||||
sizeFormate,
|
sizeFormate,
|
||||||
setWindowSize,
|
setWindowSize,
|
||||||
} from '../utils'
|
} from '../utils'
|
||||||
import { rendererSend } from '../../common/icp'
|
import { rendererSend } from '../../common/ipc'
|
||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
@ -328,7 +328,7 @@ export default {
|
||||||
this.getCacheSize()
|
this.getCacheSize()
|
||||||
},
|
},
|
||||||
handleChangeSavePath() {
|
handleChangeSavePath() {
|
||||||
openSelectDir({
|
selectDir({
|
||||||
title: '选择歌曲保存路径',
|
title: '选择歌曲保存路径',
|
||||||
defaultPath: this.current_setting.download.savePath,
|
defaultPath: this.current_setting.download.savePath,
|
||||||
properties: ['openDirectory'],
|
properties: ['openDirectory'],
|
||||||
|
@ -421,7 +421,7 @@ export default {
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
handleImportAllData() {
|
handleImportAllData() {
|
||||||
openSelectDir({
|
selectDir({
|
||||||
title: '选择备份文件',
|
title: '选择备份文件',
|
||||||
properties: ['openFile'],
|
properties: ['openFile'],
|
||||||
filters: [
|
filters: [
|
||||||
|
@ -443,7 +443,7 @@ export default {
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
handleImportSetting() {
|
handleImportSetting() {
|
||||||
openSelectDir({
|
selectDir({
|
||||||
title: '选择配置文件',
|
title: '选择配置文件',
|
||||||
properties: ['openFile'],
|
properties: ['openFile'],
|
||||||
filters: [
|
filters: [
|
||||||
|
@ -465,7 +465,7 @@ export default {
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
handleImportPlayList() {
|
handleImportPlayList() {
|
||||||
openSelectDir({
|
selectDir({
|
||||||
title: '选择列表文件',
|
title: '选择列表文件',
|
||||||
properties: ['openFile'],
|
properties: ['openFile'],
|
||||||
filters: [
|
filters: [
|
||||||
|
|
Loading…
Reference in New Issue