mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-03-01 18:22:41 -08:00
refactor: extract main runtime lifecycle helper builders
This commit is contained in:
48
src/main/runtime/yomitan-extension-loader.ts
Normal file
48
src/main/runtime/yomitan-extension-loader.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import type { Extension } from 'electron';
|
||||
import type { YomitanExtensionLoaderDeps } from '../../core/services/yomitan-extension-loader';
|
||||
|
||||
export function createLoadYomitanExtensionHandler(deps: {
|
||||
loadYomitanExtensionCore: (options: YomitanExtensionLoaderDeps) => Promise<Extension | null>;
|
||||
userDataPath: YomitanExtensionLoaderDeps['userDataPath'];
|
||||
getYomitanParserWindow: YomitanExtensionLoaderDeps['getYomitanParserWindow'];
|
||||
setYomitanParserWindow: YomitanExtensionLoaderDeps['setYomitanParserWindow'];
|
||||
setYomitanParserReadyPromise: YomitanExtensionLoaderDeps['setYomitanParserReadyPromise'];
|
||||
setYomitanParserInitPromise: YomitanExtensionLoaderDeps['setYomitanParserInitPromise'];
|
||||
setYomitanExtension: YomitanExtensionLoaderDeps['setYomitanExtension'];
|
||||
}) {
|
||||
return async (): Promise<Extension | null> => {
|
||||
return deps.loadYomitanExtensionCore({
|
||||
userDataPath: deps.userDataPath,
|
||||
getYomitanParserWindow: deps.getYomitanParserWindow,
|
||||
setYomitanParserWindow: deps.setYomitanParserWindow,
|
||||
setYomitanParserReadyPromise: deps.setYomitanParserReadyPromise,
|
||||
setYomitanParserInitPromise: deps.setYomitanParserInitPromise,
|
||||
setYomitanExtension: deps.setYomitanExtension,
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
export function createEnsureYomitanExtensionLoadedHandler(deps: {
|
||||
getYomitanExtension: () => Extension | null;
|
||||
getLoadInFlight: () => Promise<Extension | null> | null;
|
||||
setLoadInFlight: (promise: Promise<Extension | null> | null) => void;
|
||||
loadYomitanExtension: () => Promise<Extension | null>;
|
||||
}) {
|
||||
return async (): Promise<Extension | null> => {
|
||||
const existing = deps.getYomitanExtension();
|
||||
if (existing) {
|
||||
return existing;
|
||||
}
|
||||
|
||||
const inFlight = deps.getLoadInFlight();
|
||||
if (inFlight) {
|
||||
return inFlight;
|
||||
}
|
||||
|
||||
const promise = deps.loadYomitanExtension().finally(() => {
|
||||
deps.setLoadInFlight(null);
|
||||
});
|
||||
deps.setLoadInFlight(promise);
|
||||
return promise;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user