Skip to content

Commit 524f4f3

Browse files
committed
refactor: Move getDiskInfo to worker to reduce dist size
1 parent c2ea0c1 commit 524f4f3

File tree

5 files changed

+45
-7
lines changed

5 files changed

+45
-7
lines changed

xmcl-electron-app/main/controllers/setupWindow.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
import { ElectronController } from '@/ElectronController'
2-
import { ControllerPlugin } from './plugin'
3-
import { getDiskInfo } from 'node-disk-info'
2+
import { kSetupWorker } from '@/setupWorker'
43
import { ipcMain } from 'electron'
54
import { join, parse } from 'path'
6-
import type Drive from 'node-disk-info/dist/classes/drive'
5+
import { setTimeout } from 'timers/promises'
6+
import { ControllerPlugin } from './plugin'
77

88
/**
99
* Handle setup window preset request
1010
*/
1111
export const setupWindow: ControllerPlugin = function (this: ElectronController) {
1212
ipcMain.handle('preset', async () => {
13-
const drives = await new Promise<Drive[]>((resolve) => {
14-
getDiskInfo().then(resolve, () => resolve([]))
15-
setTimeout(() => { resolve([]) }, 4000)
16-
})
13+
const drives = await Promise.race([
14+
this.app.registry.get(kSetupWorker).then(w => w.getDiskInfo()),
15+
setTimeout(4000).then(() => []),
16+
])
1717
const defaultPath = join(this.app.host.getPath('home'), '.xmcl')
1818
const getPath = (driveSymbol: string) => {
1919
const parsedHome = parse(defaultPath)

xmcl-electron-app/main/definedPlugins.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import { pluginYggdrasilHandler } from '@xmcl/runtime/yggdrasilServer/pluginYggd
3131

3232
import { LauncherAppPlugin } from '~/app'
3333
import { definedServices } from './definedServices'
34+
import { pluginSetupWorker } from './pluginSetupWorker'
3435

3536
export const definedPlugins: LauncherAppPlugin[] = [
3637
pluginAutoUpdate,
@@ -39,6 +40,7 @@ export const definedPlugins: LauncherAppPlugin[] = [
3940
pluginIconProtocol,
4041
pluginResourceWorker,
4142
pluginEncodingWorker,
43+
pluginSetupWorker,
4244

4345
pluginMediaProtocol,
4446
pluginResourcePackLink,
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { checkUpdate, createLazyWorker } from '@xmcl/runtime/worker'
2+
import { LauncherAppPlugin } from '~/app'
3+
import { SetupWorker, kSetupWorker } from './setupWorker'
4+
import createSetupWorker, { path as setupWorkerPath } from './setupWorkerEntry?worker'
5+
import Drive from 'node-disk-info/dist/classes/drive'
6+
7+
export const pluginSetupWorker: LauncherAppPlugin = async (app) => {
8+
const logger = app.getLogger('SetupWorker')
9+
10+
const worker: SetupWorker = createLazyWorker(createSetupWorker, ['getDiskInfo'], logger)
11+
app.registry.register(kSetupWorker, {
12+
getDiskInfo: async () => {
13+
const infos = await worker.getDiskInfo()
14+
for (const i of infos) {
15+
Object.setPrototypeOf(i, Drive.prototype)
16+
}
17+
return infos
18+
},
19+
})
20+
21+
app.waitEngineReady().then(() => {
22+
checkUpdate(setupWorkerPath, logger)
23+
})
24+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import type Drive from 'node-disk-info/dist/classes/drive'
2+
import { InjectionKey } from '~/app'
3+
4+
export interface SetupWorker {
5+
getDiskInfo(): Promise<Drive[]>
6+
}
7+
8+
export const kSetupWorker: InjectionKey<SetupWorker> = Symbol('kSetupWorker')
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { setHandler } from '@xmcl/runtime/worker/helper'
2+
import { getDiskInfo } from 'node-disk-info'
3+
4+
setHandler({ getDiskInfo })

0 commit comments

Comments
 (0)