From cd5ee8511eb22721045d66a881db4bdb2f2cba39 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Fri, 30 Oct 2015 17:42:05 +0100 Subject: [PATCH] Continue conversion --- buffer.py | 2 ++ main.py | 7 ++++++- resources.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 buffer.py diff --git a/buffer.py b/buffer.py new file mode 100644 index 0000000..62f6638 --- /dev/null +++ b/buffer.py @@ -0,0 +1,2 @@ +class Buffer(object): + pass diff --git a/main.py b/main.py index c3cf8fa..5daad88 100755 --- a/main.py +++ b/main.py @@ -9,14 +9,16 @@ import gi gi.require_version('Clutter', '1.0') from gi.repository import Clutter +from gi.repository import GLib from resources import ResourcesCollection from utils import ensureDirExists win32 = False apple = False +developer = True -PREFIX = '' +PREFIX = '/usr' # Clutter.init() # # stage = Clutter.Stage() @@ -57,6 +59,9 @@ def loadResources(selfPath): dirs.append(PREFIX + "/share/einstein/res") dirs.append(os.environ["HOME"] + "/.einstein/res") + if developer: + dirs.append(os.path.dirname(os.path.dirname(__file__))) + dirs.append("res") dirs.append(".") resources = ResourcesCollection(dirs) diff --git a/resources.py b/resources.py index 3224ee6..2e646d8 100644 --- a/resources.py +++ b/resources.py @@ -1,6 +1,55 @@ +from os import listdir + +class ResourceFile(object): + + def __init__(fileName, buf=None): + # Ooooh, what does this button do? + # name(fileName) + + if buf: + buffer = buf + ownBuffer = False + else: + buffer = Buffer() + ownBuffer = true + + try: + with open(fileName, 'rb') as f: + try: + sign = f.read(4) + if sign[0] != 'C' \ + or sign[1] != 'R' \ + or sign[2] != 'F' \ + or sign[3]: + raise IOError("Failover") + + major = f.unpack('i', 4) + minor = f.unpack('i', 4) + priority = f.unpack('i', 4) + + if major != 2 or minor < 0: + raise Exception("Incompatible version of resource file '" + name + "'") + except IOError: + raise Exception("Invalid resource file '" + name + "'") + + # How to reproduce this? + # int readed = stream.gcount(); + + except IOError: + raise Exception("Error loading resource file '" + name + "'") + class ResourcesCollection: def __init__(self, directories): - loadResourceFiles(directories); - ResFileMoreThen comparator; - std::sort(files.begin(), files.end(), comparator); - processFiles(); + self.__files = [] + self.__buffer = None + self.loadResourceFiles(directories) + processFiles() + + def loadResourceFiles(self, directories): + for directory in directories: + try: + for name in listdir(directory): + if not name.startswith('.') and name.endswith('.res'): + self.__files.append(ResourceFile(directory + '/' + name, self.__buffer)); + except OSError: + pass