# HG changeset patch # User Simon Cross # Date 1259194019 0 # Node ID c2a4e3a24e9a2a4c0d14a4e526dc18088e1719b3 # Parent 62b9a4e21f1a1126cccb05249515a99da9f6b046 Factor out write_savegame method. Zlib compress save games to reduce space from ~600k to ~15k. diff -r 62b9a4e21f1a -r c2a4e3a24e9a gamelib/savegame.py --- a/gamelib/savegame.py Wed Nov 25 23:51:33 2009 +0000 +++ b/gamelib/savegame.py Thu Nov 26 00:06:59 2009 +0000 @@ -4,6 +4,7 @@ import os import StringIO import base64 +import zlib from pgu import gui import pygame @@ -11,10 +12,10 @@ import config import version -def open_save_game(fullpath): +def read_savegame(fullpath): """Open a save game file.""" try: - xml = open(fullpath, "rb").read() + xml = zlib.decompress(open(fullpath, "rb").read()) params, methodname = xmlrpclib.loads(xml) if methodname != "foxassault": raise SaveGameError("File does not appear to be a " @@ -35,6 +36,16 @@ return data, snapshot +def write_savegame(fullpath, data, snapshot): + """Write a save game file.""" + try: + snapshot_data = encode_snapshot(snapshot) + params = (version.SAVE_GAME_VERSION, data, snapshot_data) + xml = xmlrpclib.dumps(params, "foxassault") + open(fullpath, "wb").write(zlib.compress(xml)) + except Exception, e: + raise SaveGameError("Failed to save game: %s" % (e,)) + def encode_snapshot(snapshot): """Encode a snapshot.""" snapshot_file = StringIO.StringIO() @@ -129,7 +140,7 @@ def _create_image_widget(self, fullpath): """Create an image showing the contents of a save game file.""" try: - data, screenshot = open_save_game(fullpath) + data, screenshot = read_savegame(fullpath) except SaveGameError: return gui.Label("Bad Save Game") @@ -176,14 +187,10 @@ return data = gameboard.save_game() - snapshot = gameboard.snapshot() - snapshot_data = encode_snapshot(snapshot) - params = (version.SAVE_GAME_VERSION, data, snapshot_data) - xml = xmlrpclib.dumps(params, "foxassault") try: - open(filename, "wb").write(xml) + write_savegame(filename, data, snapshot) except Exception, e: print "Failed to save game: %s" % (e,) @@ -201,7 +208,7 @@ return try: - data, screenshot = open_save_game(filename) + data, screenshot = read_savegame(filename) except Exception, e: print "Failed to load game: %s" % (e,) return