X-Git-Url: https://git.ctpug.org.za/?p=erdslangetjie.git;a=blobdiff_plain;f=erdslangetjie%2Fdata.py;h=2ee869120d5880f9c5bbf1c7bbf3b9d5435cc1c6;hp=66b66bbca85f2b36de863c60197c6328180030f3;hb=HEAD;hpb=e9fc58543d2b9f385d0bf245828fdeea1b60c0ae diff --git a/erdslangetjie/data.py b/erdslangetjie/data.py index 66b66bb..2ee8691 100644 --- a/erdslangetjie/data.py +++ b/erdslangetjie/data.py @@ -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)