From ecbcd02abc91abb82b3b53e379f90cc3615c0eec Mon Sep 17 00:00:00 2001 From: tobspr Date: Sat, 13 Jun 2020 10:11:18 +0200 Subject: [PATCH] Fix app not starting when the savegames were corrupted - there is now a better error message --- src/js/application.js | 6 +----- src/js/changelog.js | 1 + src/js/states/main_menu.js | 16 ++++++++++++---- src/js/states/preload.js | 13 ++++--------- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/js/application.js b/src/js/application.js index a1557263..ee913a3f 100644 --- a/src/js/application.js +++ b/src/js/application.js @@ -14,13 +14,10 @@ import { Vector } from "./core/vector"; import { AdProviderInterface } from "./platform/ad_provider"; import { NoAdProvider } from "./platform/ad_providers/no_ad_provider"; import { AnalyticsInterface } from "./platform/analytics"; -import { ShapezGameAnalytics } from "./platform/browser/game_analytics"; import { GoogleAnalyticsImpl } from "./platform/browser/google_analytics"; +import { NoGameAnalytics } from "./platform/browser/no_game_analytics"; import { SoundImplBrowser } from "./platform/browser/sound"; -import { StorageImplBrowser } from "./platform/browser/storage"; -import { StorageImplBrowserIndexedDB } from "./platform/browser/storage_indexed_db"; import { PlatformWrapperImplBrowser } from "./platform/browser/wrapper"; -import { StorageImplElectron } from "./platform/electron/storage"; import { PlatformWrapperImplElectron } from "./platform/electron/wrapper"; import { GameAnalyticsInterface } from "./platform/game_analytics"; import { SoundInterface } from "./platform/sound"; @@ -36,7 +33,6 @@ import { MainMenuState } from "./states/main_menu"; import { MobileWarningState } from "./states/mobile_warning"; import { PreloadState } from "./states/preload"; import { SettingsState } from "./states/settings"; -import { NoGameAnalytics } from "./platform/browser/no_game_analytics"; const logger = createLogger("application"); diff --git a/src/js/changelog.js b/src/js/changelog.js index f875ff85..ba631df4 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -9,6 +9,7 @@ export const CHANGELOG = [ "You can now configure the camera movement speed when using WASD (by mini-bomba)", "Selecting an area now is relative to the world and thus does not move when moving the screen (by Dimava)", "Fix bug regarding number rounding", + "Fix app not starting when the savegames were corrupted - there is now a better error message", ], }, { diff --git a/src/js/states/main_menu.js b/src/js/states/main_menu.js index a2a75db9..b782155f 100644 --- a/src/js/states/main_menu.js +++ b/src/js/states/main_menu.js @@ -366,11 +366,19 @@ export class MainMenuState extends GameState { this.app.adProvider.showVideoAd().then(() => { this.app.analytics.trackUiClick("resume_game_adcomplete"); const savegame = this.app.savegameMgr.getSavegameById(game.internalId); - savegame.readAsync().then(() => { - this.moveToState("InGameState", { - savegame, + savegame + .readAsync() + .then(() => { + this.moveToState("InGameState", { + savegame, + }); + }) + .catch(err => { + this.dialogs.showWarning( + T.dialogs.gameLoadFailure.title, + T.dialogs.gameLoadFailure.text + "

" + err + ); }); - }); }); } diff --git a/src/js/states/preload.js b/src/js/states/preload.js index 535d7004..eee57f05 100644 --- a/src/js/states/preload.js +++ b/src/js/states/preload.js @@ -138,15 +138,10 @@ export class PreloadState extends GameState { .then(() => { return this.app.savegameMgr.initialize().catch(err => { logger.error("Failed to initialize savegames:", err); - return new Promise(resolve => { - // const { ok } = this.dialogs.showWarning( - // T.preload.savegame_corrupt_dialog.title, - // T.preload.savegame_corrupt_dialog.content, - // ["ok:good"] - // ); - // ok.add(resolve); - alert("Your savegames failed to load. They might not show up. Sorry!"); - }); + alert( + "Your savegames failed to load, it seems your data files got corrupted. I'm so sorry!\n\n(This can happen if your pc crashed while a game was saved).\n\nYou can try re-importing your savegames." + ); + return this.app.savegameMgr.writeAsync(); }); })