Use gconf for the profile
This commit is contained in:
parent
25976df678
commit
354dec9f0c
@ -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 = ''
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user