# HG changeset patch # User Simon Cross # Date 1381092401 -7200 # Node ID 486c7ae141ea6af25c972a3648c5a3307731c95b # Parent cd51099911ca720af740d8cd9fe9b93468befd9c Add client support for level server API version 2. diff -r cd51099911ca -r 486c7ae141ea mamba/habitats/userlevelmenu.py --- a/mamba/habitats/userlevelmenu.py Sun Oct 06 22:46:13 2013 +0200 +++ b/mamba/habitats/userlevelmenu.py Sun Oct 06 22:46:41 2013 +0200 @@ -1,10 +1,12 @@ """Level menu.""" import urllib2 +import zipfile +import StringIO from mamba.habitats.levelmenu import LevelMenu from mamba.level import Level -from mamba.constants import LEVEL_SERVER +from mamba.constants import LEVEL_SERVER, LEVEL_SERVER_VERSION from mamba.data import get_level_list, load_file @@ -43,9 +45,27 @@ for name in levels: self._populate_level(name) + def _populate_cache_from_zip(self): + try: + data = self._url_data("levels.zip") + except: + print "Failed to download online level zip." + return + level_zip = zipfile.ZipFile(StringIO.StringIO(data), "r") + levels = level_zip.namelist() + for level in levels: + try: + source = level_zip.read(level) + self.cache[level] = Level(level, self.level_namespace, source) + except: + print "Failed to parse online level %r" % level + def list_levels(self): if not self.cache: - self._populate_cache() + if LEVEL_SERVER_VERSION >= 2: + self._populate_cache_from_zip() + else: + self._populate_cache() return sorted(self.cache.keys()) def print_levels(self):