|
1 | | -import { FileCache } from '../cache' |
2 | 1 | import { Lang } from '../lang-manager' |
3 | 2 | import { LocalMods } from '../local-mods' |
4 | 3 | import { InstallQueue, ModInstaller, ModInstallerDownloadingProgress } from '../mod-installer' |
@@ -129,11 +128,14 @@ export class ModInstallDialogs { |
129 | 128 | dialogUpdate() |
130 | 129 | } |
131 | 130 |
|
| 131 | + // @ts-ignore allow cc-instanceinator to hook sc.Dialogs.showYesNoDialog |
| 132 | + sc.Dialogs.id = window.instanceinator?.id |
| 133 | + |
132 | 134 | const toInstall = InstallQueue.values() |
133 | 135 | ModInstaller.install(toInstall) |
134 | 136 | .then(() => { |
135 | 137 | InstallQueue.clear() |
136 | | - modmanager.gui.menu && |
| 138 | + if (modmanager.gui.menu) |
137 | 139 | sc.Model.notifyObserver(modmanager.gui.menu, modmanager.gui.MENU_MESSAGES.UPDATE_ENTRIES) |
138 | 140 |
|
139 | 141 | ModInstaller.eventListeners.splice(eventIndex, 1) |
@@ -208,13 +210,20 @@ export class ModInstallDialogs { |
208 | 210 | sc.DIALOG_INFO_ICON.QUESTION, |
209 | 211 | [ig.lang.get('sc.gui.dialogs.yes'), ig.lang.get('sc.gui.dialogs.no')], |
210 | 212 | button => { |
| 213 | + // @ts-ignore allow cc-instanceinator to hook sc.Dialogs.showYesNoDialog |
| 214 | + sc.Dialogs.id = window.instanceinator?.id |
| 215 | + |
211 | 216 | if (button.data == 0) { |
212 | 217 | ModInstaller.uninstallMod(localMod) |
213 | 218 | .then(() => { |
214 | 219 | localMod.awaitingRestart = true |
215 | 220 | localMod.active = false |
216 | 221 | localMod.uninstalled = true |
217 | | - sc.Model.notifyObserver(modmanager.gui.menu, modmanager.gui.MENU_MESSAGES.UPDATE_ENTRIES) |
| 222 | + if (modmanager.gui.menu) |
| 223 | + sc.Model.notifyObserver( |
| 224 | + modmanager.gui.menu, |
| 225 | + modmanager.gui.MENU_MESSAGES.UPDATE_ENTRIES |
| 226 | + ) |
218 | 227 | sc.BUTTON_SOUND.shop_cash.play() |
219 | 228 | sc.Dialogs.showYesNoDialog( |
220 | 229 | Lang.askRestartUninstall, |
@@ -251,24 +260,22 @@ export class ModInstallDialogs { |
251 | 260 | return false |
252 | 261 | } |
253 | 262 |
|
254 | | - static async checkCanEnableMod(mod: ModEntryLocal): Promise<ModEntryLocal[] | undefined> { |
| 263 | + static checkCanEnableMod(mod: ModEntryLocal, callback: (deps: ModEntryLocal[] | undefined) => void) { |
255 | 264 | const deps = LocalMods.findDeps(mod).filter(mod => !mod.active) |
256 | | - if (deps.length == 0) return [] |
| 265 | + if (deps.length == 0) return callback([]) |
257 | 266 |
|
258 | | - return new Promise(resolve => { |
259 | | - sc.Dialogs.showYesNoDialog( |
260 | | - Lang.doYouWantToEnable |
261 | | - .replace(/\[modName\]/, prepareModName(mod.name)) |
262 | | - .replace(/\[mods\]/, deps.map(mod => `- ${yellow}${prepareModName(mod.name)}${white}\n`).join('')), |
263 | | - sc.DIALOG_INFO_ICON.QUESTION, |
264 | | - button => { |
265 | | - if (button.data == 0) { |
266 | | - resolve(deps) |
267 | | - } else { |
268 | | - resolve(undefined) |
269 | | - } |
| 267 | + sc.Dialogs.showYesNoDialog( |
| 268 | + Lang.doYouWantToEnable |
| 269 | + .replace(/\[modName\]/, prepareModName(mod.name)) |
| 270 | + .replace(/\[mods\]/, deps.map(mod => `- ${yellow}${prepareModName(mod.name)}${white}\n`).join('')), |
| 271 | + sc.DIALOG_INFO_ICON.QUESTION, |
| 272 | + button => { |
| 273 | + if (button.data == 0) { |
| 274 | + callback(deps) |
| 275 | + } else { |
| 276 | + callback(undefined) |
270 | 277 | } |
271 | | - ) |
272 | | - }) |
| 278 | + } |
| 279 | + ) |
273 | 280 | } |
274 | 281 | } |
0 commit comments