changeset 90:0823e2529c23

Add robustness around the savefile stuff
author Neil Muller <drnlmuller@gmail.com>
date Wed, 09 May 2012 20:30:25 +0200
parents 5dd66c1d8f26
children c57b5b46d3e0
files gamelib/gamegui.py gamelib/mainmenu.py
diffstat 2 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/gamelib/gamegui.py	Wed May 09 20:21:39 2012 +0200
+++ b/gamelib/gamegui.py	Wed May 09 20:30:25 2012 +0200
@@ -511,8 +511,10 @@
         self.activity.update_widgets()
         game_data = self.game.save_data()
         if self.autosave:
+            # Don't corrupt the savefile if json crashes
+            data = json.dumps(game_data)
             savefile = open(self.autosave, 'w')
-            json.dump(game_data, savefile)
+            savefile.write(data)
             savefile.close()
         AddWindow.post(results)
 
--- a/gamelib/mainmenu.py	Wed May 09 20:21:39 2012 +0200
+++ b/gamelib/mainmenu.py	Wed May 09 20:30:25 2012 +0200
@@ -92,10 +92,15 @@
     def load_game(self, savefile):
         if os.access(savefile, os.R_OK):
             f = open(savefile, 'r')
-            game_data = json.load(f)
+            try:
+                game_data = json.load(f)
+            except json.JSONDecodeError:
+                print 'Unable to load the autosave file - skipping'
+                game_data = None
             f.close()
             self.game_window = LabWindow(self.screen, game_data)
-            self.add_resume()
+            if game_data:
+                self.add_resume()
         # We stay at the main menu, so the user can can to continue or not
 
     def add_resume(self):