Skip to content

Commit bb50b2a

Browse files
committed
Merge branch 'migrate-sendTo' into update-deps
2 parents 586be17 + 9554ab3 commit bb50b2a

File tree

9 files changed

+208
-228
lines changed

9 files changed

+208
-228
lines changed

app/src/ts/main.ts

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import './common/asar'
2-
import { app, BrowserWindow, ipcMain, BrowserWindowConstructorOptions, Menu, MenuItem, globalShortcut } from 'electron'
2+
import { app, BrowserWindow, ipcMain, BrowserWindowConstructorOptions, Menu, MenuItem, globalShortcut, MessageChannelMain } from 'electron'
33
import { join } from 'path'
44
import * as url from 'url'
55
import './common/get-path'
@@ -24,6 +24,8 @@ let mainWindow: BrowserWindow | null = null
2424
let backWindow: BrowserWindow | null = null
2525

2626
function createWindow (): void {
27+
const { port1, port2 } = new MessageChannelMain()
28+
2729
const browerWindowOptions: BrowserWindowConstructorOptions = {
2830
width: 1296,
2931
height: 863,
@@ -50,6 +52,7 @@ function createWindow (): void {
5052
if (!mainWindow) return
5153
mainWindow.show()
5254
mainWindow.focus()
55+
mainWindow.webContents.postMessage('port', null, [port1])
5356
})
5457

5558
mainWindow.on('closed', function () {
@@ -75,6 +78,11 @@ function createWindow (): void {
7578
}
7679
})
7780

81+
backWindow.on('ready-to-show', function () {
82+
if (!backWindow) return
83+
backWindow.webContents.postMessage('port', null, [port2])
84+
})
85+
7886
backWindow.on('closed', function () {
7987
backWindow = null
8088
})
@@ -127,7 +135,7 @@ async function main (): Promise<void> {
127135
await app.whenReady()
128136
registerGlobalShortcut()
129137
setMenu()
130-
ipc()
138+
ipc(() => mainWindow)
131139

132140
ipcMain.on('flash', () => {
133141
mainWindow && mainWindow.flashFrame(true)

app/src/ts/main/ipc.ts

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ipcMain, SaveDialogOptions, dialog, app, RelaunchOptions, OpenDialogOptions } from 'electron'
1+
import { ipcMain, SaveDialogOptions, dialog, app, RelaunchOptions, OpenDialogOptions, type BrowserWindow } from 'electron'
22
import { getProxyAgent } from 'mishiro-core/util/proxy'
33
import got from 'got'
44
// import onManifestQuery from './on-manifest-query'
@@ -40,7 +40,7 @@ function registerIpcConfig (configurer: Configurer): void {
4040
})
4141
}
4242

43-
export default function ipc (): void {
43+
export default function ipc (getMainWindow: () => (BrowserWindow | null)): void {
4444
if (initialized) return
4545

4646
// let manifestData: any = {}
@@ -67,8 +67,13 @@ export default function ipc (): void {
6767
// event.sender.send('readManifest', masterHash, resVer)
6868
// })
6969

70-
ipcMain.on('openScoreWindow', function () {
71-
openScoreWindow()
70+
ipcMain.handle('openScoreWindow', function () {
71+
openScoreWindow(() => {
72+
const mainWindow = getMainWindow()
73+
if (mainWindow) {
74+
mainWindow.webContents.send('liveEnd')
75+
}
76+
})
7277
})
7378

7479
ipcMain.handle('showSaveDialog', (_event, options: SaveDialogOptions) => {

app/src/ts/main/open-score-window.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { error } from './log'
66

77
let win: BrowserWindow | null = null
88

9-
export default function openScoreWindow (): void {
9+
export default function openScoreWindow (onClose?: () => void): void {
1010
if (win !== null) {
1111
return
1212
}
@@ -45,6 +45,9 @@ export default function openScoreWindow (): void {
4545
}
4646

4747
win.on('close', () => {
48+
if (typeof onClose === 'function') {
49+
onClose()
50+
}
4851
win = null
4952
})
5053
}

app/src/ts/renderer-back.ts

+69-94
Original file line numberDiff line numberDiff line change
@@ -1,134 +1,109 @@
11
import './renderer/preload'
2-
import { ipcRenderer } from 'electron'
32
import DB from './common/db'
43
import { batchDownload, batchStop, getBatchErrorList, setDownloaderProxy } from './renderer/back/batch-download'
5-
import mainWindowId from './renderer/back/main-window-id'
4+
// import mainWindowId from './renderer/back/main-window-id'
65
import readMaster from './renderer/back/on-master-read'
76

87
let manifest: DB | null = null
98
let master: DB | null = null
109

11-
ipcRenderer.on('openManifestDatabase', async (event, callbackChannel: string, path: string) => {
12-
if (manifest) {
13-
event.sender.sendTo(mainWindowId, callbackChannel, null)
14-
return
15-
}
16-
try {
17-
manifest = await DB.open(path)
18-
event.sender.sendTo(mainWindowId, callbackChannel, null)
19-
} catch (err: any) {
20-
event.sender.sendTo(mainWindowId, callbackChannel, err.message)
10+
window.node.electron.ipcRenderer.on('port', e => {
11+
const mainWindowPort = e.ports[0]
12+
const portEvent = new window.node.events.EventEmitter()
13+
14+
mainWindowPort.onmessage = function (event) {
15+
portEvent.emit('message', event)
2116
}
22-
})
2317

24-
ipcRenderer.on('openMasterDatabase', async (event, callbackChannel: string, path: string) => {
25-
if (master) {
26-
event.sender.sendTo(mainWindowId, callbackChannel, null)
27-
return
18+
function defineRemoteFunction (name: string, fn: (...args: any[]) => any): void {
19+
portEvent.on('message', (event) => {
20+
if (event.data.type === name) {
21+
Promise.resolve(fn(...event.data.payload)).then(ret => {
22+
mainWindowPort.postMessage({
23+
id: event.data.id,
24+
err: null,
25+
data: ret
26+
})
27+
}).catch(err => {
28+
mainWindowPort.postMessage({
29+
id: event.data.id,
30+
err: err.message,
31+
data: undefined
32+
})
33+
})
34+
}
35+
})
2836
}
29-
try {
37+
38+
defineRemoteFunction('openManifestDatabase', async (path: string) => {
39+
if (manifest) {
40+
return
41+
}
42+
manifest = await DB.open(path)
43+
})
44+
45+
defineRemoteFunction('openMasterDatabase', async (path: string) => {
46+
if (master) {
47+
return
48+
}
3049
master = await DB.open(path)
31-
event.sender.sendTo(mainWindowId, callbackChannel, null)
32-
} catch (err: any) {
33-
event.sender.sendTo(mainWindowId, callbackChannel, err.message)
34-
}
35-
})
50+
})
3651

37-
ipcRenderer.on('getMasterHash', async (event, callbackChannel: string) => {
38-
try {
52+
defineRemoteFunction('getMasterHash', async () => {
3953
const masterHash = (await manifest!.find('manifests', ['name', 'hash'], { name: 'master.mdb' }))[0].hash as string
40-
event.sender.sendTo(mainWindowId, callbackChannel, null, masterHash)
41-
} catch (err: any) {
42-
event.sender.sendTo(mainWindowId, callbackChannel, err.message, '')
43-
}
44-
})
54+
return masterHash
55+
})
4556

46-
ipcRenderer.on('readMasterData', async (event, callbackChannel: string, masterFile: string) => {
47-
try {
57+
defineRemoteFunction('readMasterData', async (masterFile: string) => {
4858
master = await DB.open(masterFile)
4959
const masterData = await readMaster(master, manifest!)
5060
await master.close()
5161
master = null
52-
event.sender.sendTo(mainWindowId, callbackChannel, null, masterData)
53-
} catch (err: any) {
54-
event.sender.sendTo(mainWindowId, callbackChannel, err.message, '')
55-
}
56-
})
62+
return masterData
63+
})
5764

58-
ipcRenderer.on('getCardHash', async (event, callbackChannel: string, id: string | number) => {
59-
try {
65+
defineRemoteFunction('getCardHash', async (id: string | number) => {
6066
const res = await manifest!.find('manifests', ['hash'], { name: `card_bg_${id}.unity3d` })
61-
event.sender.sendTo(mainWindowId, callbackChannel, null, res[0].hash)
62-
} catch (err: any) {
63-
event.sender.sendTo(mainWindowId, callbackChannel, err.message, '')
64-
}
65-
})
67+
return res[0].hash
68+
})
6669

67-
ipcRenderer.on('getIconHash', async (event, callbackChannel: string, id: string | number) => {
68-
try {
70+
defineRemoteFunction('getIconHash', async (id: string | number) => {
6971
const res = await manifest!.findOne('manifests', ['hash'], { name: `card_${id}_m.unity3d` })
70-
event.sender.sendTo(mainWindowId, callbackChannel, null, res.hash)
71-
} catch (err: any) {
72-
event.sender.sendTo(mainWindowId, callbackChannel, err.message, '')
73-
}
74-
})
72+
return res.hash
73+
})
7574

76-
ipcRenderer.on('getEmblemHash', async (event, callbackChannel: string, id: string | number) => {
77-
try {
75+
defineRemoteFunction('getEmblemHash', async (id: string | number) => {
7876
const res = await manifest!.findOne('manifests', ['hash'], { name: `emblem_${id}_l.unity3d` })
79-
event.sender.sendTo(mainWindowId, callbackChannel, null, res.hash)
80-
} catch (err: any) {
81-
event.sender.sendTo(mainWindowId, callbackChannel, err.message, '')
82-
}
83-
})
77+
return res.hash
78+
})
8479

85-
ipcRenderer.on('searchResources', async (event, callbackChannel: string, queryString: string) => {
86-
try {
80+
defineRemoteFunction('searchResources', async (queryString: string) => {
8781
const res = await manifest!.find<{ name: string, hash: string }>('manifests', ['name', 'hash', 'size'], { name: { $like: `%${queryString.trim()}%` } })
88-
event.sender.sendTo(mainWindowId, callbackChannel, null, res)
89-
} catch (err: any) {
90-
event.sender.sendTo(mainWindowId, callbackChannel, err.message, '')
91-
}
92-
})
82+
return res
83+
})
9384

94-
let batchDownloading = false
85+
let batchDownloading = false
9586

96-
ipcRenderer.on('startBatchDownload', async (event, callbackChannel: string) => {
97-
try {
87+
defineRemoteFunction('startBatchDownload', async () => {
9888
batchDownloading = true
99-
await batchDownload(manifest!)
100-
event.sender.sendTo(mainWindowId, callbackChannel, null, batchDownloading)
101-
} catch (err: any) {
102-
event.sender.sendTo(mainWindowId, callbackChannel, err.message, '')
103-
}
104-
})
89+
await batchDownload(mainWindowPort, manifest!)
90+
return batchDownloading
91+
})
10592

106-
ipcRenderer.on('stopBatchDownload', async (event, callbackChannel: string) => {
107-
try {
93+
defineRemoteFunction('stopBatchDownload', async () => {
10894
await batchStop()
10995
batchDownloading = false
110-
event.sender.sendTo(mainWindowId, callbackChannel, null, batchDownloading)
111-
} catch (err: any) {
112-
event.sender.sendTo(mainWindowId, callbackChannel, err.message, '')
113-
}
114-
})
96+
return batchDownloading
97+
})
11598

116-
ipcRenderer.on('getBatchErrorList', (event, callbackChannel: string) => {
117-
try {
99+
defineRemoteFunction('getBatchErrorList', () => {
118100
const list = getBatchErrorList()
119-
event.sender.sendTo(mainWindowId, callbackChannel, null, list)
120-
} catch (err: any) {
121-
event.sender.sendTo(mainWindowId, callbackChannel, err.message, null)
122-
}
123-
})
101+
return list
102+
})
124103

125-
ipcRenderer.on('setDownloaderProxy', (event, callbackChannel: string, proxy: string) => {
126-
try {
104+
defineRemoteFunction('setDownloaderProxy', (proxy: string) => {
127105
setDownloaderProxy(proxy)
128-
event.sender.sendTo(mainWindowId, callbackChannel, null)
129-
} catch (err: any) {
130-
event.sender.sendTo(mainWindowId, callbackChannel, err.message)
131-
}
106+
})
132107
})
133108

134109
window.addEventListener('beforeunload', () => {

0 commit comments

Comments
 (0)