miru/capacitor/src/ipc.js
2023-11-23 16:05:18 +01:00

49 lines
1.2 KiB
JavaScript

import EventEmitter from 'events'
export const ipcRendererUI = new EventEmitter()
export const main = new EventEmitter()
export default {
emit: (event, data) => {
main.emit(event, data)
},
on: (event, callback) => {
ipcRendererUI.on(event, (...args) => callback(...args))
},
once: (event, callback) => {
ipcRendererUI.once(event, (...args) => callback(...args))
},
off: event => {
ipcRendererUI.removeAllListeners(event)
}
}
main.on('portRequest', portRequest)
async function portRequest (data) {
const { port1, port2 } = new MessageChannel()
globalThis.port = {
onmessage: cb => {
port2.onmessage = ({ type, data }) => cb({ type, data })
},
postMessage: (a, b) => {
port2.postMessage(a, b)
}
}
await globalThis.controller
await globalThis.prefetchNetworkInterfaces
await new Promise(resolve => setTimeout(() => resolve(), 50))
ipcRendererUI.emit('port', { ports: [port2] })
ipcRendererWebTorrent.emit('port', { ports: [port1] })
}
export const ipcRendererWebTorrent = new EventEmitter()
const [_platform, arch] = navigator.platform.split(' ')
globalThis.version = {
platform: globalThis.cordova?.platformId,
arch,
version: globalThis.cordova?.version
}