dev-sidecar/packages/gui/src/view/api.js

63 lines
1.3 KiB
JavaScript

import { ipcRenderer, shell } from 'electron'
import lodash from 'lodash'
let inited = false
let apiObj = null
export function apiInit (app) {
const invoke = (api, args) => {
return ipcRenderer.invoke('apiInvoke', [api, args]).catch((e) => {
app.$notification.error({
message: 'Api invoke error',
description: e.message,
})
})
}
const send = (channel, message) => {
console.log('do send,', channel, message)
return ipcRenderer.send(channel, message)
}
apiObj = {
ipc: {
on (channel, callback) {
ipcRenderer.on(channel, callback)
},
removeAllListeners (channel) {
ipcRenderer.removeAllListeners(channel)
},
invoke,
send,
async openExternal (href) {
await shell.openExternal(href)
},
openPath (file) {
shell.openPath(file)
},
},
}
const bindApi = (api, param1) => {
lodash.set(apiObj, api, (param2) => {
return invoke(api, param2 || param1)
})
}
if (!inited) {
return invoke('getApiList').then((list) => {
inited = true
for (const item of list) {
bindApi(item)
}
console.log('api inited:', apiObj)
return apiObj
})
}
return new Promise(resolve => {
resolve(apiObj)
})
}
export function useApi () {
return apiObj
}