自定义源新增更新弹窗方法
This commit is contained in:
@@ -5,6 +5,10 @@ class UserApi extends EventEmitter {
|
||||
status(info) {
|
||||
this.emit(USER_API_EVENT_NAME.status, info)
|
||||
}
|
||||
|
||||
showUpdateAlert(info) {
|
||||
this.emit(USER_API_EVENT_NAME.showUpdateAlert, info)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = UserApi
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
module.exports = {
|
||||
status: 'status',
|
||||
showUpdateAlert: 'showUpdateAlert',
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const Event = require('./event/event')
|
||||
const eventNames = require('./event/name')
|
||||
const { closeWindow } = require('./main')
|
||||
const { getUserApis, importApi, removeApi } = require('./utils')
|
||||
const { request, cancelRequest, getStatus, loadApi } = require('./rendererEvent/rendererEvent')
|
||||
const { getUserApis, importApi, removeApi, setAllowShowUpdateAlert: saveAllowShowUpdateAlert } = require('./utils')
|
||||
const { request, cancelRequest, getStatus, loadApi, setAllowShowUpdateAlert } = require('./rendererEvent/rendererEvent')
|
||||
|
||||
// const { getApiList, importApi, removeApi, setApi, getStatus, request, eventNames }
|
||||
let userApiId
|
||||
@@ -41,4 +41,7 @@ exports.setApi = async id => {
|
||||
await loadApi(id)
|
||||
}
|
||||
|
||||
|
||||
exports.setAllowShowUpdateAlert = (id, enable) => {
|
||||
saveAllowShowUpdateAlert(id, enable)
|
||||
setAllowShowUpdateAlert(id, enable)
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ fs.readFile(path.join(dir, 'renderer/user-api.html'), 'utf8', (err, data) => {
|
||||
})
|
||||
|
||||
const denyEvents = [
|
||||
'new-window',
|
||||
'will-navigate',
|
||||
'will-redirect',
|
||||
'will-attach-webview',
|
||||
@@ -49,11 +48,13 @@ exports.createWindow = async userApi => {
|
||||
contextIsolation: true,
|
||||
// worldSafeExecuteJavaScript: true,
|
||||
nodeIntegration: false,
|
||||
nodeIntegrationInWorker: false,
|
||||
|
||||
spellcheck: false,
|
||||
autoplayPolicy: 'document-user-activation-required',
|
||||
enableWebSQL: false,
|
||||
disableDialogs: true,
|
||||
nativeWindowOpen: false,
|
||||
webgl: false,
|
||||
images: false,
|
||||
|
||||
@@ -70,6 +71,9 @@ exports.createWindow = async userApi => {
|
||||
// eslint-disable-next-line node/no-callback-literal
|
||||
callback(false)
|
||||
})
|
||||
global.modules.userApiWindow.webContents.setWindowOpenHandler(() => {
|
||||
return { action: 'deny' }
|
||||
})
|
||||
|
||||
winEvent(global.modules.userApiWindow)
|
||||
|
||||
|
||||
@@ -3,14 +3,16 @@ const needle = require('needle')
|
||||
const { createCipheriv, publicEncrypt, constants, randomBytes, createHash } = require('crypto')
|
||||
const USER_API_RENDERER_EVENT_NAME = require('../rendererEvent/name')
|
||||
|
||||
const sendMessage = (action, status, data, message) => {
|
||||
ipcRenderer.send(action, { status, data, message })
|
||||
const sendMessage = (action, data, status, message) => {
|
||||
ipcRenderer.send(action, { data, status, message })
|
||||
}
|
||||
|
||||
let isInitedApi = false
|
||||
let isShowedUpdateAlert = false
|
||||
const EVENT_NAMES = {
|
||||
request: 'request',
|
||||
inited: 'inited',
|
||||
updateAlert: 'updateAlert',
|
||||
}
|
||||
const eventNames = Object.values(EVENT_NAMES)
|
||||
const events = {
|
||||
@@ -35,7 +37,7 @@ const supportActions = {
|
||||
|
||||
const handleRequest = (context, { requestKey, data }) => {
|
||||
// console.log(data)
|
||||
if (!events.request) return sendMessage(USER_API_RENDERER_EVENT_NAME.response, false, { requestKey }, 'Request event is not defined')
|
||||
if (!events.request) return sendMessage(USER_API_RENDERER_EVENT_NAME.response, { requestKey }, false, 'Request event is not defined')
|
||||
try {
|
||||
events.request.call(context, { source: data.source, action: data.action, info: data.info }).then(response => {
|
||||
let sendData = {
|
||||
@@ -53,12 +55,12 @@ const handleRequest = (context, { requestKey, data }) => {
|
||||
}
|
||||
break
|
||||
}
|
||||
sendMessage(USER_API_RENDERER_EVENT_NAME.response, true, sendData)
|
||||
sendMessage(USER_API_RENDERER_EVENT_NAME.response, sendData, true)
|
||||
}).catch(err => {
|
||||
sendMessage(USER_API_RENDERER_EVENT_NAME.response, false, { requestKey }, err.message)
|
||||
sendMessage(USER_API_RENDERER_EVENT_NAME.response, { requestKey }, false, err.message)
|
||||
})
|
||||
} catch (err) {
|
||||
sendMessage(USER_API_RENDERER_EVENT_NAME.response, false, { requestKey }, err.message)
|
||||
sendMessage(USER_API_RENDERER_EVENT_NAME.response, { requestKey }, false, err.message)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,7 +82,7 @@ const handleRequest = (context, { requestKey, data }) => {
|
||||
*/
|
||||
const handleInit = (context, info) => {
|
||||
if (!info) {
|
||||
sendMessage(USER_API_RENDERER_EVENT_NAME.init, false, null, 'Init failed')
|
||||
sendMessage(USER_API_RENDERER_EVENT_NAME.init, null, false, 'Init failed')
|
||||
// sendMessage(USER_API_RENDERER_EVENT_NAME.init, false, null, typeof info.message === 'string' ? info.message.substring(0, 100) : '')
|
||||
return
|
||||
}
|
||||
@@ -88,7 +90,7 @@ const handleInit = (context, info) => {
|
||||
sendMessage(USER_API_RENDERER_EVENT_NAME.openDevTools)
|
||||
}
|
||||
if (!info.status) {
|
||||
sendMessage(USER_API_RENDERER_EVENT_NAME.init, false, null, 'Init failed')
|
||||
sendMessage(USER_API_RENDERER_EVENT_NAME.init, null, false, 'Init failed')
|
||||
// sendMessage(USER_API_RENDERER_EVENT_NAME.init, false, null, typeof info.message === 'string' ? info.message.substring(0, 100) : '')
|
||||
return
|
||||
}
|
||||
@@ -109,16 +111,22 @@ const handleInit = (context, info) => {
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
sendMessage(USER_API_RENDERER_EVENT_NAME.init, false, null, error.message)
|
||||
sendMessage(USER_API_RENDERER_EVENT_NAME.init, null, false, error.message)
|
||||
return
|
||||
}
|
||||
sendMessage(USER_API_RENDERER_EVENT_NAME.init, true, sourceInfo)
|
||||
sendMessage(USER_API_RENDERER_EVENT_NAME.init, sourceInfo, true)
|
||||
|
||||
ipcRenderer.on(USER_API_RENDERER_EVENT_NAME.request, (event, data) => {
|
||||
handleRequest(context, data)
|
||||
})
|
||||
}
|
||||
|
||||
const handleShowUpdateAlert = (message) => {
|
||||
if (!message || typeof message != 'string') return
|
||||
if (message.length > 1024) message = message.substring(0, 1024) + '...'
|
||||
sendMessage(USER_API_RENDERER_EVENT_NAME.showUpdateAlert, message)
|
||||
}
|
||||
|
||||
contextBridge.exposeInMainWorld('lx', {
|
||||
EVENT_NAMES,
|
||||
request(url, { method = 'get', timeout, headers, body, form, formData }, callback) {
|
||||
@@ -165,12 +173,19 @@ contextBridge.exposeInMainWorld('lx', {
|
||||
if (!eventNames.includes(eventName)) return reject(new Error('The event is not supported: ' + eventName))
|
||||
switch (eventName) {
|
||||
case EVENT_NAMES.inited:
|
||||
if (isInitedApi) return
|
||||
if (isInitedApi) return reject(new Error('Script is inited'))
|
||||
isInitedApi = true
|
||||
handleInit(this, data)
|
||||
resolve()
|
||||
break
|
||||
case EVENT_NAMES.updateAlert:
|
||||
if (isShowedUpdateAlert) return reject(new Error('The update alert can only be called once'))
|
||||
isShowedUpdateAlert = true
|
||||
handleShowUpdateAlert(data)
|
||||
resolve()
|
||||
break
|
||||
default:
|
||||
resolve(new Error('Unknown event name: ' + eventName))
|
||||
reject(new Error('Unknown event name: ' + eventName))
|
||||
}
|
||||
})
|
||||
},
|
||||
@@ -180,7 +195,9 @@ contextBridge.exposeInMainWorld('lx', {
|
||||
case EVENT_NAMES.request:
|
||||
events.request = handler
|
||||
break
|
||||
default: return Promise.reject(new Error('The event is not supported: ' + eventName))
|
||||
}
|
||||
return Promise.resolve()
|
||||
},
|
||||
utils: {
|
||||
crypto: {
|
||||
@@ -208,7 +225,7 @@ contextBridge.exposeInMainWorld('lx', {
|
||||
},
|
||||
},
|
||||
},
|
||||
version: '1.1.0',
|
||||
version: '1.2.0',
|
||||
// removeEvent(eventName, handler) {
|
||||
// if (!eventNames.includes(eventName)) return Promise.reject(new Error('The event is not supported: ' + eventName))
|
||||
// let handlers
|
||||
|
||||
@@ -3,6 +3,7 @@ const names = {
|
||||
request: '',
|
||||
response: '',
|
||||
openDevTools: '',
|
||||
showUpdateAlert: '',
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -37,9 +37,18 @@ const handleOpenDevTools = () => {
|
||||
})
|
||||
}
|
||||
}
|
||||
const handleShowUpdateAlert = (event, { data }) => {
|
||||
if (!userApi.allowShowUpdateAlert) return
|
||||
global.lx_event.userApi.showUpdateAlert({
|
||||
name: userApi.name,
|
||||
description: userApi.description,
|
||||
message: data,
|
||||
})
|
||||
}
|
||||
mainOn(USER_API_RENDERER_EVENT_NAME.init, handleInit)
|
||||
mainOn(USER_API_RENDERER_EVENT_NAME.response, handleResponse)
|
||||
mainOn(USER_API_RENDERER_EVENT_NAME.openDevTools, handleOpenDevTools)
|
||||
mainOn(USER_API_RENDERER_EVENT_NAME.showUpdateAlert, handleShowUpdateAlert)
|
||||
|
||||
exports.loadApi = async apiId => {
|
||||
if (!apiId) return global.lx_event.userApi.status(status = { status: false, message: 'api id is null' })
|
||||
@@ -82,3 +91,8 @@ exports.request = ({ requestKey, data }) => new Promise((resolve, reject) => {
|
||||
})
|
||||
|
||||
exports.getStatus = () => status
|
||||
|
||||
exports.setAllowShowUpdateAlert = (id, enable) => {
|
||||
if (!userApi || userApi.id != id) return
|
||||
userApi.allowShowUpdateAlert = enable
|
||||
}
|
||||
|
||||
@@ -11,6 +11,9 @@ exports.getUserApis = () => {
|
||||
userApis = defaultUserApis
|
||||
electronStore_userApi.set('userApis', userApis)
|
||||
}
|
||||
for (const api of userApis) {
|
||||
if (api.allowShowUpdateAlert == null) api.allowShowUpdateAlert = false
|
||||
}
|
||||
return userApis
|
||||
}
|
||||
|
||||
@@ -27,6 +30,7 @@ exports.importApi = script => {
|
||||
name,
|
||||
description,
|
||||
script,
|
||||
allowShowUpdateAlert: true,
|
||||
}
|
||||
userApis.push(apiInfo)
|
||||
getStore('userApi').set('userApis', userApis)
|
||||
@@ -42,3 +46,10 @@ exports.removeApi = ids => {
|
||||
}
|
||||
getStore('userApi').set('userApis', userApis)
|
||||
}
|
||||
|
||||
exports.setAllowShowUpdateAlert = (id, enable) => {
|
||||
const targetApi = userApis.find(api => api.id == id)
|
||||
if (!targetApi) return
|
||||
targetApi.allowShowUpdateAlert = enable
|
||||
getStore('userApi').set('userApis', userApis)
|
||||
}
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
const { mainSend, mainHandle, NAMES: { mainWindow: ipcMainWindowNames } } = require('@common/ipc')
|
||||
const { getApiList, importApi, removeApi, setApi, getStatus, request, cancelRequest, eventNames } = require('../modules/userApi')
|
||||
const { getApiList, importApi, removeApi, setApi, getStatus, request, cancelRequest, eventNames, setAllowShowUpdateAlert } = require('../modules/userApi')
|
||||
|
||||
const handleStatusChange = status => {
|
||||
mainSend(global.modules.mainWindow, ipcMainWindowNames.user_api_status, status)
|
||||
}
|
||||
const handleShowUpdateAlert = info => {
|
||||
mainSend(global.modules.mainWindow, ipcMainWindowNames.user_api_show_update_alert, info)
|
||||
}
|
||||
|
||||
global.lx_event.userApi.on(eventNames.status, handleStatusChange)
|
||||
global.lx_event.userApi.on(eventNames.showUpdateAlert, handleShowUpdateAlert)
|
||||
|
||||
mainHandle(ipcMainWindowNames.import_user_api, async(event, script) => {
|
||||
return importApi(script)
|
||||
@@ -27,6 +31,10 @@ mainHandle(ipcMainWindowNames.get_user_api_status, event => {
|
||||
return getStatus()
|
||||
})
|
||||
|
||||
mainHandle(ipcMainWindowNames.user_api_set_allow_update_alert, (event, { id, enable }) => {
|
||||
return setAllowShowUpdateAlert(id, enable)
|
||||
})
|
||||
|
||||
mainHandle(ipcMainWindowNames.request_user_api, (event, musicInfo) => {
|
||||
return request(musicInfo)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user