diff options
author | Marco Pesenti Gritti <marco@localhost.localdomain> | 2006-09-04 19:34:54 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@localhost.localdomain> | 2006-09-04 19:34:54 (GMT) |
commit | 01c4658ee0e5f36a966d03375de1afb14605d9e3 (patch) | |
tree | bc3c13ed85cc8b8fa5886f23507185f11e5c397d /shell/conf | |
parent | 995c74b11640941d985bd756320068cb0a7d05a1 (diff) |
Make conf private, expose the nick name from env
Diffstat (limited to 'shell/conf')
-rw-r--r-- | shell/conf/ActivityRegistry.py | 116 | ||||
-rw-r--r-- | shell/conf/Makefile.am | 5 | ||||
-rw-r--r-- | shell/conf/Profile.py | 61 | ||||
-rw-r--r-- | shell/conf/__init__.py | 11 |
4 files changed, 193 insertions, 0 deletions
diff --git a/shell/conf/ActivityRegistry.py b/shell/conf/ActivityRegistry.py new file mode 100644 index 0000000..5223284 --- /dev/null +++ b/shell/conf/ActivityRegistry.py @@ -0,0 +1,116 @@ +import logging +import os +from ConfigParser import ConfigParser +from ConfigParser import NoOptionError + +from sugar import activity +from sugar import env +import sugar + +class ActivityModule: + """Info about an activity module. Wraps a .activity file.""" + + def __init__(self, name, activity_id, directory): + self._name = name + self._icon = None + self._id = activity_id + self._directory = directory + self._show_launcher = False + + def get_name(self): + """Get the activity user visible name.""" + return self._name + + def get_id(self): + """Get the activity identifier""" + return self._id + + def get_icon(self): + """Get the activity icon name""" + return self._icon + + def set_icon(self, icon): + """Set the activity icon name""" + self._icon = icon + + def get_directory(self): + """Get the path to activity directory.""" + return self._directory + + def get_default_type(self): + """Get the the type of the default activity service.""" + return activity.get_default_type(self._id) + + def set_default_type(self, default_type): + """Set the the type of the default activity service.""" + self._default_type = default_type + + def get_show_launcher(self): + """Get whether there should be a visible launcher for the activity""" + return self._show_launcher + + def set_show_launcher(self, show_launcher): + """Set whether there should be a visible launcher for the activity""" + self._show_launcher = show_launcher + +class _ActivityRegistry: + """Service that tracks the available activities""" + + def __init__(self): + self._activities = [] + self.scan_directory(env.get_activities_dir()) + + def get_activity(self, activity_id): + """Returns an activity given his identifier""" + for activity in self._activities: + if activity.get_id() == activity_id: + return activity + return None + + def get_activity_from_type(self, default_type): + """Returns an activity given his default type""" + for activity in self._activities: + if activity.get_default_type() == default_type: + return activity + return None + + def scan_directory(self, path): + """Scan a directory for activities and add them to the registry.""" + if os.path.isdir(path): + for f in os.listdir(path): + if f.endswith(".activity"): + self.add(os.path.join(path, f)) + + def add(self, path): + """Add an activity to the registry. The path points to a .activity file.""" + cp = ConfigParser() + cp.read([path]) + + directory = os.path.dirname(path) + + try: + activity_id = cp.get('Activity', 'id') + except NoOptionError: + logging.error('%s miss the required id option' % (path)) + return False + + try: + name = cp.get('Activity', 'name') + except NoOptionError: + logging.error('%s miss the required name option' % (path)) + return False + + module = ActivityModule(name, activity_id, directory) + self._activities.append(module) + + if cp.has_option('Activity', 'show_launcher'): + module.set_show_launcher(True) + + if cp.has_option('Activity', 'icon'): + module.set_icon(cp.get('Activity', 'icon')) + + return True + + def list_activities(self): + """Enumerate the registered activities as an ActivityModule list.""" + return self._activities diff --git a/shell/conf/Makefile.am b/shell/conf/Makefile.am new file mode 100644 index 0000000..cd6290e --- /dev/null +++ b/shell/conf/Makefile.am @@ -0,0 +1,5 @@ +sugardir = $(pythondir)/sugar/conf +sugar_PYTHON = \ + __init__.py \ + ActivityRegistry.py \ + Profile.py diff --git a/shell/conf/Profile.py b/shell/conf/Profile.py new file mode 100644 index 0000000..c3ca053 --- /dev/null +++ b/shell/conf/Profile.py @@ -0,0 +1,61 @@ +import os +from ConfigParser import ConfigParser + +from sugar.canvas.IconColor import IconColor +from sugar import env + +class _Profile: + def __init__(self,): + self._path = env.get_profile_path() + self._nick_name = None + self._color = None + + self._ensure_dirs() + + cp = ConfigParser() + parsed = cp.read([self._get_config_path()]) + + if cp.has_option('Buddy', 'NickName'): + self._nick_name = cp.get('Buddy', 'NickName') + if cp.has_option('Buddy', 'Color'): + self._color = IconColor(cp.get('Buddy', 'Color')) + + if self._color == None: + self.set_color(IconColor()) + + def _ensure_dirs(self): + try: + os.makedirs(self._path) + except OSError, exc: + if exc[0] != 17: # file exists + print "Could not create user directory." + + def get_color(self): + return self._color + + def set_color(self, color): + self._color = color + + def get_nick_name(self): + return self._nick_name + + def set_nick_name(self, nick_name): + self._nick_name = nick_name + + def get_path(self): + return self._path + + def save(self): + cp = ConfigParser() + + section = 'Buddy' + cp.add_section(section) + cp.set(section, 'NickName', self._nick_name) + cp.set(section, 'Color', self._color.get_fill_color()) + + fileobject = open(self._get_config_path(), 'w') + cp.write(fileobject) + fileobject.close() + + def _get_config_path(self): + return os.path.join(self._path, 'config') diff --git a/shell/conf/__init__.py b/shell/conf/__init__.py new file mode 100644 index 0000000..f69dccb --- /dev/null +++ b/shell/conf/__init__.py @@ -0,0 +1,11 @@ +from conf.ActivityRegistry import _ActivityRegistry +from conf.Profile import _Profile + +__registry = _ActivityRegistry() +__profile = _Profile() + +def get_activity_registry(): + return __registry + +def get_profile(): + return __profile |