# HG changeset patch # User Simon Cross # Date 1259276530 0 # Node ID 77a3f7f1c85688db584954844d67cac5db72d634 # Parent 8fbff3505d1de312a288dab4b780517083c78020 Add level name and timestamp to save games. diff -r 8fbff3505d1d -r 77a3f7f1c856 gamelib/savegame.py --- a/gamelib/savegame.py Thu Nov 26 22:55:26 2009 +0000 +++ b/gamelib/savegame.py Thu Nov 26 23:02:10 2009 +0000 @@ -5,6 +5,7 @@ import StringIO import base64 import zlib +import datetime from pgu import gui import pygame @@ -12,6 +13,8 @@ import config import version +TIMESTAMP_FORMAT = "%Y-%m-%dT%H:%M:%S" + def read_savegame(fullpath): """Open a save game file.""" try: @@ -31,16 +34,27 @@ except Exception, e: snapshot = None + try: + level_name = params[3] + except Exception, e: + level_name = None + + try: + timestamp = datetime.datetime.strptime(params[4], TIMESTAMP_FORMAT) + except Exception, e: + timestamp = None + except Exception, e: raise SaveGameError("Failed to load game: %s" % (e,)) - return data, snapshot + return data, snapshot, level_name, timestamp -def write_savegame(fullpath, data, snapshot): +def write_savegame(fullpath, data, snapshot, level_name, timestamp): """Write a save game file.""" try: snapshot_data = encode_snapshot(snapshot) - params = (version.SAVE_GAME_VERSION, data, snapshot_data) + timestamp_str = timestamp.strftime(TIMESTAMP_FORMAT) + params = (version.SAVE_GAME_VERSION, data, snapshot_data, level_name, timestamp_str) xml = xmlrpclib.dumps(params, "foxassault") open(fullpath, "wb").write(zlib.compress(xml)) except Exception, e: @@ -69,6 +83,8 @@ class BaseSaveRestoreDialog(gui.Dialog): """Save game dialog.""" + TIMESTAMP_DISPLAY = "%H:%M, %d %b %Y" + def __init__(self, title_txt, button_txt, allow_new, cls="dialog"): self.value = None self.save_folder = config.config.save_folder @@ -140,14 +156,29 @@ def _create_image_widget(self, fullpath): """Create an image showing the contents of a save game file.""" try: - data, screenshot = read_savegame(fullpath) + data, screenshot, level_name, timestamp = read_savegame(fullpath) except SaveGameError: return gui.Label("Bad Save Game") + tbl = gui.Table() + + tbl.tr() if screenshot is None: - return gui.Label("No screenshot") + tbl.td(gui.Label("No screenshot")) + else: + tbl.td(gui.Image(screenshot)) - return gui.Image(screenshot) + tbl.tr() + if level_name is None: + tbl.td(gui.Label("Level: ???")) + else: + tbl.td(gui.Label("Level: %s" % (level_name,))) + + if timestamp is not None: + tbl.tr() + tbl.td(gui.Label(timestamp.strftime(self.TIMESTAMP_DISPLAY))) + + return tbl def _save_list_change(self): if self.name_input: @@ -188,9 +219,11 @@ data = gameboard.save_game() snapshot = gameboard.snapshot() + level_name = gameboard.level.level_name + timestamp = datetime.datetime.now() try: - write_savegame(filename, data, snapshot) + write_savegame(filename, data, snapshot, level_name, timestamp) except Exception, e: print "Failed to save game: %s" % (e,) @@ -208,7 +241,7 @@ return try: - data, screenshot = read_savegame(filename) + data, screenshot, level_name, timestamp = read_savegame(filename) except Exception, e: print "Failed to load game: %s" % (e,) return