Less buggy Kivy 1.7 hackery
[erdslangetjie.git] / erdslangetjie / data.py
index 66b66bbca85f2b36de863c60197c6328180030f3..2ee869120d5880f9c5bbf1c7bbf3b9d5435cc1c6 100644 (file)
@@ -9,19 +9,47 @@ pyglet.resource search path.
 '''
 
 import os
+from kivy.core.image import ImageLoader
+from kivy.core.audio import SoundLoader
+from kivy.cache import Cache
 
 data_py = os.path.abspath(os.path.dirname(__file__))
 data_dir = os.path.normpath(os.path.join(data_py, '..', 'data'))
+imageloader = ImageLoader()
+soundloader = SoundLoader()
+Cache.register('bane', limit=200)
+
 
 def filepath(filename):
     '''Determine the path to a file in the data directory.
     '''
+    filename = os.path.join(*filename.split('/'))
     return os.path.join(data_dir, filename)
 
+
 def load(filename, mode='rb'):
     '''Open a file in the data directory.
 
     "mode" is passed as the second arg to open().
     '''
-    return open(os.path.join(data_dir, filename), mode)
+    return open(filepath(filename), mode)
+
+
+def _cache_load(filename, loader):
+    '''Load an object either from disk or from the cache.
+
+       We rely on kivy's caching infrastructure'''
+    path = filepath(filename)
+    obj = Cache.get('bane', path)
+    if obj is None:
+        obj = loader.load(path)
+        Cache.append('bane', path, obj)
+    return obj
+
+
+def load_image(filename):
+    return _cache_load(filename, imageloader)
+
 
+def load_sound(filename):
+    return _cache_load(filename, soundloader)