From 800e3caabcd9c85b0b2ae9299217ea31d0309545 Mon Sep 17 00:00:00 2001 From: Antoine van Gelder Date: Sun, 28 Oct 2007 09:45:28 +0000 Subject: Initial import --- (limited to 'globals.py') diff --git a/globals.py b/globals.py new file mode 100644 index 0000000..5cadaeb --- /dev/null +++ b/globals.py @@ -0,0 +1,118 @@ +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + + +import os +import logging +from sugar.activity import activity +try: + from hashlib import sha1 +except ImportError: + # Python < 2.5 + from sha import new as sha1 + +from persistence.jokemachinestate import JokeMachineState + + +class __globals(object): + '''All applications have code that affects global state. These are the + globals for Jokemachine''' + + def __init__(self): + self.__pwd = activity.get_bundle_path() + self.__logo = 'resources/GameLogoCharacter.png' + self.__activity_state = None + self.__activity = None + + # owner + self.__owner = None + self.__owner_sha1 = None + + self.__temporary_filenames = [] + + + # convert all of these to @Property + def set_activity_instance(self, activity_instance): + logging.debug('setting actifity %r' % activity_instance) + self.__activity = activity_instance + + # TODO -> Should we refresh the GUI for this one ? + def set_activity_state(self, activity_state): + self.__activity_state = activity_state + + def set_owner(self, owner): + logging.debug('Owner is %s' % owner.props.nick) + self.__owner = owner + self.__owner_sha1 = sha1(owner.props.nick).hexdigest() + + @property + def pwd(self): + return self.__pwd + + @property + def tmpdir(self): + '''Temporary directory - currently this exists for the sole purpose of + having a place to dump sounds and images into so we don't have to keep + them in memory - don't know if this will still be valid under bitfrost, + don't know if sounds and images can be pulled directly out of the journal + when needing to be (dis)played''' + return '/tmp' #os.path.join(self.__pwd, 'tmp') + + @property + def logo(self): + return os.path.join(self.pwd, self.__logo) + + @property + def JokeMachineState(self): + if not self.__activity_state: + # Okay - When app is not run from Journal activity.read_file() is never + # called, which means we never call Globals.set_activity_state so we + # create a default state here: + logging.debug('Globals.JokeMachineState() - creating default data') + self.__activity_state = JokeMachineState().test_data() # TODO - implement JokeMachineState.new() + return self.__activity_state + + @property + def JokeMachineActivity(self): + if not self.__activity: + # todo log this!! + logging.debug('no activity set! - use Globals.set_activity_instance to register activity with Global manager') + return None + return self.__activity + + @property + def nickname(self): + return self.__owner.props.nick + + + # utility functions with global state + + def temporary_filename(self): + # TODO - remember these and delete them all on app exit + file_name = os.tempnam(self.tmpdir) + self.__temporary_filenames.append(file_name) + return file_name + + + def shutdown(self): + for filename in self.__temporary_filenames: + if os.path.exists(filename): + logging.info(' deleting temporary file: %s' % filename) + os.remove(filename) + + +Globals = __globals() + + \ No newline at end of file -- cgit v0.9.1