Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSimon Schampijer <simon@schampijer.de>2008-10-11 16:28:40 (GMT)
committer Simon Schampijer <simon@schampijer.de>2008-10-11 16:28:40 (GMT)
commit354dec9f0ca558ecc16864dc70e0995e74355eb0 (patch)
tree8cb707b2a77c48723449d4999ff73f1ad4b79b41 /src
parent25976df678536a5c93c12ae29cb94795303cbb2e (diff)
Use gconf for the profile
Diffstat (limited to 'src')
-rw-r--r--src/sugar/activity/activity.py11
-rw-r--r--src/sugar/profile.py198
2 files changed, 80 insertions, 129 deletions
diff --git a/src/sugar/activity/activity.py b/src/sugar/activity/activity.py
index cee8767..598098d 100644
--- a/src/sugar/activity/activity.py
+++ b/src/sugar/activity/activity.py
@@ -51,6 +51,7 @@ import os
import time
from hashlib import sha1
import traceback
+import gconf
import gtk, gobject
import dbus
@@ -67,10 +68,10 @@ from sugar.graphics.toolbutton import ToolButton
from sugar.graphics.toolcombobox import ToolComboBox
from sugar.graphics.alert import Alert
from sugar.graphics.icon import Icon
+from sugar.graphics.xocolor import XoColor
from sugar.datastore import datastore
from sugar.session import XSMPClient
from sugar import wm
-from sugar import profile
from sugar import _sugarext
_ = lambda msg: gettext.dgettext('sugar-toolkit', msg)
@@ -127,8 +128,9 @@ class ActivityToolbar(gtk.Toolbar):
self._update_share()
self.keep = ToolButton(tooltip=_('Keep'))
- keep_icon = Icon(icon_name='document-save',
- xo_color=profile.get_color())
+ client = gconf.client_get_default()
+ color = XoColor(client.get_string('/desktop/sugar/user/color'))
+ keep_icon = Icon(icon_name='document-save', xo_color=color)
self.keep.set_icon_widget(keep_icon)
keep_icon.show()
self.keep.props.accelerator = '<Ctrl>S'
@@ -560,7 +562,8 @@ class Activity(Window, gtk.Container):
if self.shared_activity is not None:
icon_color = self.shared_activity.props.color
else:
- icon_color = profile.get_color().to_string()
+ client = gconf.client_get_default()
+ icon_color = client.get_string('/desktop/sugar/user/color')
self._jobject.metadata['icon-color'] = icon_color
self._jobject.file_path = ''
diff --git a/src/sugar/profile.py b/src/sugar/profile.py
index 730570c..301903f 100644
--- a/src/sugar/profile.py
+++ b/src/sugar/profile.py
@@ -16,6 +16,7 @@
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
+import gconf
import os
import logging
from ConfigParser import ConfigParser
@@ -24,148 +25,37 @@ from sugar import env
from sugar import util
from sugar.graphics.xocolor import XoColor
-DEFAULT_JABBER_SERVER = ''
-DEFAULT_VOLUME = 81
-DEFAULT_TIMEZONE = 'UTC'
-DEFAULT_HOT_CORNERS_DELAY = 0.0
-DEFAULT_WARM_EDGES_DELAY = 1000.0
-
-RING_LAYOUT = 'ring-layout'
-RANDOM_LAYOUT = 'random-layout'
-DEFAULT_FAVORITES_LAYOUT = RING_LAYOUT
-
_profile = None
-def _set_key(cp, section, key, value):
- if not cp.has_section(section):
- cp.add_section(section)
- cp.set(section, key, value)
-
class Profile(object):
"""Local user's current options/profile information
- User settings are stored in an INI-style configuration
- file. This object uses the ConfigParser module to load
- the settings. (We only very rarely set keys, so we don't
- keep the ConfigParser around between calls.)
-
+ User settings were previously stored in an INI-style
+ configuration file. We moved to gconf now. The deprected
+ API is kept around to not break activities still using it.
+
The profile is also responsible for loading the user's
public and private ssh keys from disk.
Attributes:
-
- name -- child's name
- color -- XoColor for the child's icon
- server -- school server with which the child is
- associated
- server_registered -- whether the child has registered
- with the school server or not
- backup1 -- temporary backup info key for Trial-2
pubkey -- public ssh key
privkey_hash -- SHA has of the child's public key
"""
def __init__(self, path):
- self.nick_name = None
- self.color = None
- self.jabber_server = DEFAULT_JABBER_SERVER
- self.jabber_registered = False
- self.timezone = DEFAULT_TIMEZONE
- self.backup1 = None
- self.sound_volume = DEFAULT_VOLUME
- self.hot_corners_delay = DEFAULT_HOT_CORNERS_DELAY
- self.warm_edges_delay = DEFAULT_WARM_EDGES_DELAY
- self.automatic_pm = False
- self.extreme_pm = False
- self.favorites_layout = DEFAULT_FAVORITES_LAYOUT
-
self._pubkey = None
self._privkey_hash = None
- self._config_path = path
-
- self._load_config()
def is_valid(self):
- return self.nick_name is not None and \
- self.color is not None and \
+ client = gconf.client_get_default()
+ nick = client.get_string("/desktop/sugar/user/nick")
+ color = client.get_string("/desktop/sugar/user/color")
+
+ return nick is not '' and \
+ color is not '' and \
self.pubkey is not None and \
self.privkey_hash is not None
- def is_registered(self):
- return self.backup1 is not None
-
- def save(self):
- cp = ConfigParser()
- cp.read([self._config_path])
-
- if self.nick_name:
- _set_key(cp, 'Buddy', 'NickName', self.nick_name.encode('utf8'))
- if self.color:
- _set_key(cp, 'Buddy', 'Color', self.color.to_string())
- if self.backup1:
- _set_key(cp, 'Server', 'Backup1', self.backup1)
- if self.jabber_server is not None:
- _set_key(cp, 'Jabber', 'Server', self.jabber_server)
-
- _set_key(cp, 'Date', 'Timezone', self.timezone)
-
- _set_key(cp, 'Frame', 'HotCorners', self.hot_corners_delay)
-
- _set_key(cp, 'Frame', 'WarmEdges', self.warm_edges_delay)
-
- _set_key(cp, 'Jabber', 'Registered', self.jabber_registered)
-
- _set_key(cp, 'Sound', 'Volume', self.sound_volume)
-
- _set_key(cp, 'Power', 'AutomaticPM', self.automatic_pm)
-
- _set_key(cp, 'Power', 'ExtremePM', self.extreme_pm)
-
- _set_key(cp, 'Shell', 'FavoritesLayout', self.favorites_layout)
-
- f = open(self._config_path, 'w')
- cp.write(f)
- f.close()
-
- def _load_config(self):
- cp = ConfigParser()
- cp.read([self._config_path])
-
- if cp.has_option('Buddy', 'NickName'):
- name = cp.get('Buddy', 'NickName')
- # decode nickname from ascii-safe chars to unicode
- self.nick_name = name.decode("utf-8")
- if cp.has_option('Buddy', 'Color'):
- self.color = XoColor(cp.get('Buddy', 'Color'))
- if cp.has_option('Jabber', 'Server'):
- self.jabber_server = cp.get('Jabber', 'Server')
- if cp.has_option('Jabber', 'Registered'):
- registered = cp.get('Jabber', 'Registered')
- if registered.lower() == "true":
- self.jabber_registered = True
- if cp.has_option('Date', 'Timezone'):
- self.timezone = cp.get('Date', 'Timezone')
- if cp.has_option('Frame', 'HotCorners'):
- self.hot_corners_delay = float(cp.get('Frame', 'HotCorners'))
- if cp.has_option('Frame', 'WarmEdges'):
- self.warm_edges_delay = float(cp.get('Frame', 'WarmEdges'))
- if cp.has_option('Server', 'Backup1'):
- self.backup1 = cp.get('Server', 'Backup1')
- if cp.has_option('Sound', 'Volume'):
- self.sound_volume = float(cp.get('Sound', 'Volume'))
- if cp.has_option('Power', 'AutomaticPM'):
- state = cp.get('Power', 'AutomaticPM')
- if state.lower() == "true":
- self.automatic_pm = True
- if cp.has_option('Power', 'ExtremePM'):
- state = cp.get('Power', 'ExtremePM')
- if state.lower() == "true":
- self.extreme_pm = True
- if cp.has_option('Shell', 'FavoritesLayout'):
- self.favorites_layout = cp.get('Shell', 'FavoritesLayout')
-
- del cp
-
def _load_pubkey(self):
key_path = os.path.join(env.get_profile_path(), 'owner.key.pub')
try:
@@ -227,6 +117,63 @@ class Profile(object):
privkey_hash = property(_get_privkey_hash)
pubkey = property(_get_pubkey)
+ def convert_profile(self):
+ cp = ConfigParser()
+ path = os.path.join(env.get_profile_path(), 'config')
+ cp.read([path])
+
+ client = gconf.client_get_default()
+
+ if cp.has_option('Buddy', 'NickName'):
+ name = cp.get('Buddy', 'NickName')
+ # decode nickname from ascii-safe chars to unicode
+ nick = name.decode("utf-8")
+ client.set_string("/desktop/sugar/user/nick", nick)
+ if cp.has_option('Buddy', 'Color'):
+ color = cp.get('Buddy', 'Color')
+ client.set_string("/desktop/sugar/user/color", color)
+ if cp.has_option('Jabber', 'Server'):
+ server = cp.get('Jabber', 'Server')
+ client.set_string("/desktop/sugar/collaboration/jabber_server",
+ server)
+ if cp.has_option('Jabber', 'Registered'):
+ registered = cp.get('Jabber', 'Registered')
+ if registered.lower() == "true":
+ client.set_bool(\
+ "/desktop/sugar/collaboration/jabber_registered", True)
+ if cp.has_option('Date', 'Timezone'):
+ timezone = cp.get('Date', 'Timezone')
+ client.set_string("/desktop/sugar/date/timezone", timezone)
+ if cp.has_option('Frame', 'HotCorners'):
+ delay = float(cp.get('Frame', 'HotCorners'))
+ client.set_int("/desktop/sugar/frame/corner_delay", int(delay))
+ if cp.has_option('Frame', 'WarmEdges'):
+ delay = float(cp.get('Frame', 'WarmEdges'))
+ client.set_int("/desktop/sugar/frame/edge_delay", int(delay))
+ if cp.has_option('Server', 'Backup1'):
+ backup1 = cp.get('Server', 'Backup1')
+ client.set_string("/desktop/sugar/backup_url", backup1)
+ if cp.has_option('Sound', 'Volume'):
+ volume = int(cp.get('Sound', 'Volume'))
+ client.set_int("/desktop/sugar/sound/volume", volume)
+ if cp.has_option('Power', 'AutomaticPM'):
+ state = cp.get('Power', 'AutomaticPM')
+ if state.lower() == "true":
+ client.set_bool("/desktop/sugar/power/automatic", True)
+ if cp.has_option('Power', 'ExtremePM'):
+ state = cp.get('Power', 'ExtremePM')
+ if state.lower() == "true":
+ client.set_bool("/desktop/sugar/power/extreme", True)
+ if cp.has_option('Shell', 'FavoritesLayout'):
+ layout = cp.get('Shell', 'FavoritesLayout')
+ client.set_string("/desktop/sugar/desktop/favorites_layout",
+ layout)
+ del cp
+ try:
+ os.unlink(path)
+ except OSError:
+ logging.error('Error removing old profile.')
+
def get_profile():
global _profile
@@ -236,13 +183,14 @@ def get_profile():
return _profile
-# Convenience methods for frequently used properties
-
def get_nick_name():
- return get_profile().nick_name
+ client = gconf.client_get_default()
+ return client.get_string("/desktop/sugar/user/nick")
def get_color():
- return get_profile().color
+ client = gconf.client_get_default()
+ color = client.get_string("/desktop/sugar/user/color")
+ return XoColor(color)
def get_pubkey():
return get_profile().pubkey