修复Mac下的虾米验证、托盘问题

pull/225/head
lyswhut 2020-05-01 18:22:19 +08:00
parent edff998be9
commit 36d140d4bd
7 changed files with 128 additions and 39 deletions

View File

@ -10,7 +10,7 @@ global.lx_event.tray.on(TRAY_EVENT_NAME.destroy, () => {
})
let tray
function createTray() {
const createTray = () => {
if ((tray && !tray.isDestroyed()) || !global.appSetting.tray || !global.appSetting.tray.isShow) return
const iconPath = path.join(global.__static, 'images/tray', isWin ? 'trayTemplate.ico' : 'trayTemplate.png')
@ -18,6 +18,25 @@ function createTray() {
// 托盘
tray = new Tray(iconPath)
tray.setToolTip('洛雪音乐助手')
if (isWin) createMenu(tray)
tray.setIgnoreDoubleClickEvents(true)
tray.on('click', () => {
const mainWindow = global.mainWindow
if (!mainWindow) return
mainWindow.isVisible()
? mainWindow.focus()
: mainWindow.show()
})
}
const destroyTray = () => {
if (!tray) return
tray.destroy()
tray = null
}
const createMenu = tray => {
const contextMenu = Menu.buildFromTemplate([
{
label: '退出',
@ -27,26 +46,6 @@ function createTray() {
},
},
])
tray.setToolTip('洛雪音乐助手')
tray.setContextMenu(contextMenu)
tray.on('click', () => {
const mainWindow = global.mainWindow
if (!mainWindow) return
mainWindow.isVisible()
? mainWindow.focus()
: mainWindow.show()
})
tray.on('double-click', () => {
const mainWindow = global.mainWindow
if (!mainWindow) return
mainWindow.isVisible()
? mainWindow.focus()
: mainWindow.show()
})
}
function destroyTray() {
if (!tray) return
tray.destroy()
tray = null
}

View File

@ -0,0 +1,4 @@
const { isMac } = require('../../../common/utils')
// mac下的 BrowserView 无法拖动验证栏,改用 BrowserWindow
require(isMac ? './xm_verify_win' : './xm_verify_view')

View File

@ -0,0 +1,4 @@
const { isMac } = require('../../../common/utils')
// mac下的 BrowserView 无法拖动验证栏,改用 BrowserWindow
require(isMac ? './xm_verify_win' : './xm_verify_view')

View File

@ -1,9 +1,10 @@
const { BrowserView } = require('electron')
const { mainHandle } = require('../../common/ipc')
const { getWindowSizeInfo } = require('../utils')
const { isMac } = require('../../common/utils')
const { mainHandle } = require('../../../common/ipc')
const { getWindowSizeInfo } = require('../../utils')
let view
let isActioned = false
let rejectFn
const closeView = async() => {
if (!view) return
@ -21,44 +22,45 @@ mainHandle('xm_verify_open', (event, url) => new Promise((resolve, reject) => {
view.destroy()
}
let firstLoad = true
rejectFn = reject
isActioned = false
view = new BrowserView({
webPreferences: {
enableRemoteModule: false,
disableHtmlFullscreenWindowResize: true,
},
movable: false,
})
view.webContents.on('did-finish-load', () => {
if (/punish\?/.test(view.webContents.getURL())) {
if (isMac) { // 解决 MAC 首次加载页面无法拖动滑块的问题
if (firstLoad) view.webContents.reload()
firstLoad = false
}
return
}
if (/punish\?/.test(view.webContents.getURL())) return
let ses = view.webContents.session
ses.cookies.get({ name: 'x5sec' })
.then(async([x5sec]) => {
isActioned = true
await closeView()
if (!x5sec) return reject(new Error('get x5sec failed'))
resolve(x5sec.value)
}).catch(async err => {
isActioned = true
await closeView()
reject(err)
})
})
global.mainWindow.setBrowserView(view)
const windowSizeInfo = getWindowSizeInfo(global.appSetting)
view.setBounds({ x: (windowSizeInfo.width - 360) / 2, y: ((windowSizeInfo.height - 320 + 52) / 2), width: 360, height: 320 })
view.setBounds({ x: (windowSizeInfo.width - 380) / 2, y: ((windowSizeInfo.height - 320 + 52) / 2), width: 380, height: 320 })
view.webContents.loadURL(url, {
httpReferrer: 'https://www.xiami.com/',
})
view.webContents.openDevTools({ mode: 'undocked' })
// view.webContents.openDevTools()
}))
mainHandle('xm_verify_close', async() => {
await closeView()
if (!rejectFn) return
if (!isActioned) rejectFn(new Error('canceled verify'))
rejectFn = null
})

View File

@ -0,0 +1,77 @@
const { BrowserWindow } = require('electron')
const { mainHandle } = require('../../../common/ipc')
const { getWindowSizeInfo } = require('../../utils')
let win
const closeWin = async() => {
if (!win) return
// await win.webContents.session.clearCache()
// if (global.mainWindow) global.mainWindow.removeBrowserView(win)
if (win.isDestroyed()) {
win = null
return
}
await win.webContents.session.clearStorageData()
win.destroy()
win = null
}
mainHandle('xm_verify_open', (event, url) => new Promise((resolve, reject) => {
if (!global.mainWindow) return reject(new Error('mainwindow is undefined'))
if (win) win.destroy()
let isActioned = false
const mainWindowSizeInfo = global.mainWindow.getBounds()
const windowSizeInfo = getWindowSizeInfo(global.appSetting)
win = new BrowserWindow({
parent: global.mainWindow,
width: 460,
height: 370,
resizable: false,
// transparent: true,
x: mainWindowSizeInfo.x + (windowSizeInfo.width - 460) / 2,
y: mainWindowSizeInfo.y + (windowSizeInfo.height - 320 + 52) / 2,
minimizable: false,
maximizable: false,
// movable: false,
// frame: false,
// modal: true,
webPreferences: {
enableRemoteModule: false,
disableHtmlFullscreenWindowResize: true,
},
})
win.webContents.on('did-finish-load', () => {
if (/punish\?/.test(win.webContents.getURL())) return
let ses = win.webContents.session
ses.cookies.get({ name: 'x5sec' })
.then(async([x5sec]) => {
isActioned = true
await closeWin()
if (!x5sec) return reject(new Error('get x5sec failed'))
resolve(x5sec.value)
}).catch(async err => {
isActioned = true
await closeWin()
reject(err)
})
})
win.webContents.loadURL(url, {
httpReferrer: 'https://www.xiami.com/',
})
win.on('closed', async() => {
await closeWin()
if (isActioned) return
reject(new Error('canceled verify'))
})
// win.webContents.openDevTools()
}))
mainHandle('xm_verify_close', async() => {
await closeWin()
})

View File

@ -90,7 +90,6 @@ export default {
if (limit != null) this.limit = limit
// http://newlyric.kuwo.cn/newlyric.lrc?62355680
return this.musicSearch(str, page).then(result => {
// console.log(result)
if (!result) return this.search(str, page, { limit }, retryNum)
if (result.code !== 'SUCCESS') return this.search(str, page, { limit }, retryNum)
// const songResultData = result.data || { songs: [], total: 0 }
@ -109,6 +108,6 @@ export default {
total: this.total,
source: 'xm',
})
}).catch(() => this.search(str, page, { limit }, retryNum))
}).catch(err => err.message.includes('canceled verify') ? Promise.reject(err) : this.search(str, page, { limit }, retryNum))
},
}

View File

@ -98,9 +98,12 @@ export const xmRequest = (path, params = '') => {
return wait(300).then(() => {
return rendererInvoke('xm_verify_open', 'https:' + resp.body.url).then(x5sec => {
handleSaveToken({ cookies: { x5sec } })
// console.log(x5sec)
console.log(x5sec)
window.globalObj.xm.isShowVerify = false
return Promise.reject(new Error('获取失败'))
return Promise.reject(new Error('获取成功'))
}).catch(err => {
window.globalObj.xm.isShowVerify = false
return Promise.reject(err)
})
})
}
@ -114,6 +117,7 @@ export const xmRequest = (path, params = '') => {
export const closeVerifyModal = async() => {
if (!window.globalObj.xm.isShowVerify) return
console.log('object')
await rendererInvoke('xm_verify_close')
window.globalObj.xm.isShowVerify = false
}