Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/conf
diff options
context:
space:
mode:
authorMarco 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)
commit01c4658ee0e5f36a966d03375de1afb14605d9e3 (patch)
treebc3c13ed85cc8b8fa5886f23507185f11e5c397d /shell/conf
parent995c74b11640941d985bd756320068cb0a7d05a1 (diff)
Make conf private, expose the nick name from env
Diffstat (limited to 'shell/conf')
-rw-r--r--shell/conf/ActivityRegistry.py116
-rw-r--r--shell/conf/Makefile.am5
-rw-r--r--shell/conf/Profile.py61
-rw-r--r--shell/conf/__init__.py11
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