comparison mamba/habitats/userlevelmenu.py @ 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 5f1aa75c9e74
children fca61cd8fc33
comparison
equal deleted inserted replaced
576:cd51099911ca 577:486c7ae141ea
1 """Level menu.""" 1 """Level menu."""
2 2
3 import urllib2 3 import urllib2
4 import zipfile
5 import StringIO
4 6
5 from mamba.habitats.levelmenu import LevelMenu 7 from mamba.habitats.levelmenu import LevelMenu
6 from mamba.level import Level 8 from mamba.level import Level
7 from mamba.constants import LEVEL_SERVER 9 from mamba.constants import LEVEL_SERVER, LEVEL_SERVER_VERSION
8 from mamba.data import get_level_list, load_file 10 from mamba.data import get_level_list, load_file
9 11
10 12
11 class UserLevelApi(object): 13 class UserLevelApi(object):
12 14
41 levels = [x.strip() for x in data.splitlines()] 43 levels = [x.strip() for x in data.splitlines()]
42 44
43 for name in levels: 45 for name in levels:
44 self._populate_level(name) 46 self._populate_level(name)
45 47
48 def _populate_cache_from_zip(self):
49 try:
50 data = self._url_data("levels.zip")
51 except:
52 print "Failed to download online level zip."
53 return
54 level_zip = zipfile.ZipFile(StringIO.StringIO(data), "r")
55 levels = level_zip.namelist()
56 for level in levels:
57 try:
58 source = level_zip.read(level)
59 self.cache[level] = Level(level, self.level_namespace, source)
60 except:
61 print "Failed to parse online level %r" % level
62
46 def list_levels(self): 63 def list_levels(self):
47 if not self.cache: 64 if not self.cache:
48 self._populate_cache() 65 if LEVEL_SERVER_VERSION >= 2:
66 self._populate_cache_from_zip()
67 else:
68 self._populate_cache()
49 return sorted(self.cache.keys()) 69 return sorted(self.cache.keys())
50 70
51 def print_levels(self): 71 def print_levels(self):
52 title = "%s levels:" % self.ctype.title() 72 title = "%s levels:" % self.ctype.title()
53 print title 73 print title