File tree Expand file tree Collapse file tree 5 files changed +45
-7
lines changed Expand file tree Collapse file tree 5 files changed +45
-7
lines changed Original file line number Diff line number Diff line change 1
1
import { ElectronController } from '@/ElectronController'
2
- import { ControllerPlugin } from './plugin'
3
- import { getDiskInfo } from 'node-disk-info'
2
+ import { kSetupWorker } from '@/setupWorker'
4
3
import { ipcMain } from 'electron'
5
4
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'
7
7
8
8
/**
9
9
* Handle setup window preset request
10
10
*/
11
11
export const setupWindow : ControllerPlugin = function ( this : ElectronController ) {
12
12
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
+ ] )
17
17
const defaultPath = join ( this . app . host . getPath ( 'home' ) , '.xmcl' )
18
18
const getPath = ( driveSymbol : string ) => {
19
19
const parsedHome = parse ( defaultPath )
Original file line number Diff line number Diff line change @@ -31,6 +31,7 @@ import { pluginYggdrasilHandler } from '@xmcl/runtime/yggdrasilServer/pluginYggd
31
31
32
32
import { LauncherAppPlugin } from '~/app'
33
33
import { definedServices } from './definedServices'
34
+ import { pluginSetupWorker } from './pluginSetupWorker'
34
35
35
36
export const definedPlugins : LauncherAppPlugin [ ] = [
36
37
pluginAutoUpdate ,
@@ -39,6 +40,7 @@ export const definedPlugins: LauncherAppPlugin[] = [
39
40
pluginIconProtocol ,
40
41
pluginResourceWorker ,
41
42
pluginEncodingWorker ,
43
+ pluginSetupWorker ,
42
44
43
45
pluginMediaProtocol ,
44
46
pluginResourcePackLink ,
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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' )
Original file line number Diff line number Diff line change
1
+ import { setHandler } from '@xmcl/runtime/worker/helper'
2
+ import { getDiskInfo } from 'node-disk-info'
3
+
4
+ setHandler ( { getDiskInfo } )
You can’t perform that action at this time.
0 commit comments