changeset 577:486c7ae141ea

Add client support for level server API version 2.
author Simon Cross <hodgestar@gmail.com>
date Sun, 06 Oct 2013 22:46:41 +0200
parents cd51099911ca
children 1306f7d8ed35
files mamba/habitats/userlevelmenu.py
diffstat 1 files changed, 22 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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):