Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--shell/intro/intro.py26
-rw-r--r--shell/model/Owner.py2
-rwxr-xr-xshell/sugar-shell5
-rw-r--r--shell/view/home/FriendsBox.py2
-rw-r--r--shell/view/home/HomeBox.py2
-rw-r--r--sugar/profile.py124
6 files changed, 64 insertions, 97 deletions
diff --git a/shell/intro/intro.py b/shell/intro/intro.py
index 90804dc..1ee386f 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 87e49ca..0abc13a 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 c2928c2..a054189 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 9a9ca9b..b5519df 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 82fa083..4cf688b 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 da99f28..c92f8b7 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._load()
-
- def update(self):
- self._load()
+ self._config_path = path
- 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])
-
- if not cp.has_section(section):
- cp.add_section(section)
- cp.set(section, key, value)
-
- f = open(self._config_path, 'w')
- cp.write(f)
- f.close()
+def get_profile():
+ global _profile
- del cp
+ if not _profile:
+ path = os.path.join(env.get_profile_path(), 'config')
+ _profile = Profile(path)
- self._load_config()
+ return _profile
-def is_valid():
- return _profile.valid
+# Convenience methods for frequently used properties
-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