From 30edb542b16a544977cf22f2b1a669d4d618730c Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Mon, 17 Sep 2007 13:53:10 +0200 Subject: [PATCH] Cleanup the profile code and rename the Server section to Jabber. --- shell/intro/intro.py | 26 ++----- shell/model/Owner.py | 2 +- shell/sugar-shell | 5 +- shell/view/home/FriendsBox.py | 2 +- shell/view/home/HomeBox.py | 2 +- sugar/profile.py | 124 +++++++++++++++------------------- 6 files changed, 64 insertions(+), 97 deletions(-) diff --git a/shell/intro/intro.py b/shell/intro/intro.py index 90804dcb..1ee386f7 100644 --- a/shell/intro/intro.py +++ b/shell/intro/intro.py @@ -28,6 +28,7 @@ from sugar import env from sugar.graphics import style from sugar.graphics.button import CanvasButton from sugar.graphics.entry import CanvasEntry +from sugar.profile import get_profile import colorpicker @@ -233,27 +234,10 @@ class IntroWindow(gtk.Window): scaled = pixbuf.scale_simple(200, 200, gtk.gdk.INTERP_BILINEAR) pixbuf.save(icon_path, "jpeg", {"quality":"85"}) - cp = ConfigParser() - section = 'Buddy' - if not cp.has_section(section): - cp.add_section(section) - # encode nickname to ascii-safe characters - cp.set(section, 'NickName', name.encode("utf-8")) - cp.set(section, 'Color', color.to_string()) - - section = 'Server' - if not cp.has_section(section): - cp.add_section(section) - if env.is_emulator(): - cp.set(section, 'Server', 'olpc.collabora.co.uk') - else: - cp.set(section, 'Server', '') - cp.set(section, 'Registered', 'False') - - config_path = os.path.join(env.get_profile_path(), 'config') - f = open(config_path, 'w') - cp.write(f) - f.close() + profile = get_profile() + profile.name = name + profile.color = color + profile.save() # Generate keypair import commands diff --git a/shell/model/Owner.py b/shell/model/Owner.py index 87e49cae..0abc13a3 100644 --- a/shell/model/Owner.py +++ b/shell/model/Owner.py @@ -46,7 +46,7 @@ class ShellOwner(gobject.GObject): def __init__(self): gobject.GObject.__init__(self) - self._nick = profile.get_nick_name() + self._nick = profile.get_name() self._icon = None self._icon_hash = "" diff --git a/shell/sugar-shell b/shell/sugar-shell index c2928c25..a054189a 100755 --- a/shell/sugar-shell +++ b/shell/sugar-shell @@ -26,8 +26,8 @@ import gtk import gobject from sugar import logger -from sugar import profile from sugar import env +from sugar.profile import get_profile logger.cleanup() logger.start('shell') @@ -95,11 +95,10 @@ def main(): _setup_translations() # Do initial setup if needed - if not profile.is_valid(): + if not get_profile().is_valid(): win = intro.IntroWindow() win.show_all() gtk.main() - profile.update() if os.environ.has_key("SUGAR_TP_DEBUG"): # Allow the user time to start up telepathy connection managers diff --git a/shell/view/home/FriendsBox.py b/shell/view/home/FriendsBox.py index 9a9ca9b3..b5519dfa 100644 --- a/shell/view/home/FriendsBox.py +++ b/shell/view/home/FriendsBox.py @@ -41,7 +41,7 @@ class FriendsBox(hippo.CanvasBox): self._owner_icon = CanvasIcon(icon_name='computer-xo', cache=True, xo_color=profile.get_color()) self._owner_icon.props.size = style.LARGE_ICON_SIZE - palette = Palette(profile.get_nick_name()) + palette = Palette(profile.get_name()) self._owner_icon.set_palette(palette) self._layout.add_center(self._owner_icon) diff --git a/shell/view/home/HomeBox.py b/shell/view/home/HomeBox.py index 82fa083d..4cf688bb 100644 --- a/shell/view/home/HomeBox.py +++ b/shell/view/home/HomeBox.py @@ -149,7 +149,7 @@ class HomeMyIcon(MyIcon): self._shell = shell def enable_palette(self): - palette = Palette(profile.get_nick_name()) + palette = Palette(profile.get_name()) reboot_menu_item = gtk.MenuItem(_('Reboot')) reboot_menu_item.connect('activate', self._reboot_activate_cb) diff --git a/sugar/profile.py b/sugar/profile.py index da99f284..c92f8b7d 100644 --- a/sugar/profile.py +++ b/sugar/profile.py @@ -24,7 +24,16 @@ from sugar import env from sugar import util from sugar.graphics.xocolor import XoColor -class _Profile(object): +DEFAULT_JABBER_SERVER = 'olpc.collabora.co.uk' + +_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 @@ -48,28 +57,46 @@ class _Profile(object): pubkey -- public ssh key privkey_hash -- SHA has of the child's public key """ - def __init__(self): - self.valid = True + def __init__(self, path): self.name = None self.color = None self.pubkey = None self.privkey_hash = None - self.server = None - self.server_registered = False + self.jabber_server = DEFAULT_JABBER_SERVER + self.jabber_registered = False self.backup1 = None - self._config_path = os.path.join(env.get_profile_path(), 'config') + self._config_path = path - self._load() - - def update(self): - self._load() - - def _load(self): self._load_config() self._load_pubkey() self._hash_private_key() + def is_valid(self): + return self.name is not None and \ + self.color is not None and \ + self.pubkey is not None and \ + self.privkey_hash is not None + + def save(self): + cp = ConfigParser() + parsed = cp.read([self._config_path]) + + if self.name: + _set_key(cp, 'Buddy', 'NickName', self.name) + 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: + _set_key(cp, 'Jabber', 'Server', self.jabber_server) + + _set_key(cp, 'Jabber', 'Registered', self.jabber_registered) + + f = open(self._config_path, 'w') + cp.write(f) + f.close() + def _load_config(self): cp = ConfigParser() parsed = cp.read([self._config_path]) @@ -78,20 +105,14 @@ class _Profile(object): name = cp.get('Buddy', 'NickName') # decode nickname from ascii-safe chars to unicode self.name = name.decode("utf-8") - else: - self.valid = False - if cp.has_option('Buddy', 'Color'): self.color = XoColor(cp.get('Buddy', 'Color')) - - if cp.has_option('Server', 'Server'): - self.server = cp.get('Server', 'Server') - - if cp.has_option('Server', 'Registered'): - registered = cp.get('Server', 'Registered') + 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.server_registered = True - + self.jabber_registered = True if cp.has_option('Server', 'Backup1'): self.backup1 = cp.get('Server', 'Backup1') @@ -147,56 +168,19 @@ class _Profile(object): key_hash = util._sha_data(key) self.privkey_hash = util.printable_hash(key_hash) - def set_key(self, section, key, value): - cp = ConfigParser() - parsed = cp.read([self._config_path]) +def get_profile(): + global _profile - if not cp.has_section(section): - cp.add_section(section) - cp.set(section, key, value) + if not _profile: + path = os.path.join(env.get_profile_path(), 'config') + _profile = Profile(path) - f = open(self._config_path, 'w') - cp.write(f) - f.close() + return _profile - del cp +# Convenience methods for frequently used properties - self._load_config() - -def is_valid(): - return _profile.valid - -def get_nick_name(): - return _profile.name +def get_name(): + return get_profile().name def get_color(): - return _profile.color - -def get_pubkey(): - return _profile.pubkey - -def get_private_key_hash(): - return _profile.privkey_hash - -def get_server(): - return _profile.server - -def set_server(server): - _profile.set_key('Server', 'server', server) - -def get_trial2_backup(): - return _profile.backup1 - -def set_trial2_backup(backup_info): - _profile.set_key('Server', 'backup1', backup_info) - -def get_server_registered(): - return _profile.server_registered - -def set_server_registered(): - _profile.set_key('Server', 'Registered', True) - -def update(): - _profile.update() - -_profile = _Profile() + return get_profile().color