Mercurial > mamba
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 |