From bc0ee6d34c963de81f65d3319e99be0b1e13effc Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Mon, 16 Oct 2006 11:34:43 +0000 Subject: Refactor startup. In progress, give me a couple hours. For now start sugar with "sugar-emulator shell/sugar-shell" --- (limited to 'shell') diff --git a/shell/Makefile.am b/shell/Makefile.am index a4fd719..28b7674 100644 --- a/shell/Makefile.am +++ b/shell/Makefile.am @@ -1,7 +1,7 @@ SUBDIRS = conf data model view bin_SCRIPTS = \ - sugar \ + sugar-shell \ sugar-activity \ sugar-activity-factory \ sugar-console diff --git a/shell/conf/Profile.py b/shell/conf/Profile.py deleted file mode 100644 index f81831f..0000000 --- a/shell/conf/Profile.py +++ /dev/null @@ -1,76 +0,0 @@ -# Copyright (C) 2006, Red Hat, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -import os -from ConfigParser import ConfigParser - -from sugar.graphics import iconcolor -from sugar import env - -class _Profile: - def __init__(self,): - self._path = env.get_profile_path() - self._nick_name = None - self._color = iconcolor.IconColor() - - 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'): - color = cp.get('Buddy', 'Color') - if iconcolor.is_valid(color): - self._color = iconcolor.IconColor(color) - - 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.to_string()) - - 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 index f69dccb..8842dac 100644 --- a/shell/conf/__init__.py +++ b/shell/conf/__init__.py @@ -1,11 +1,6 @@ from conf.ActivityRegistry import _ActivityRegistry -from conf.Profile import _Profile -__registry = _ActivityRegistry() -__profile = _Profile() +_activity_registry = _ActivityRegistry() def get_activity_registry(): - return __registry - -def get_profile(): - return __profile + return _activity_registry diff --git a/shell/model/Owner.py b/shell/model/Owner.py index 0382e3c..7d83ab2 100644 --- a/shell/model/Owner.py +++ b/shell/model/Owner.py @@ -18,15 +18,15 @@ import os import random import base64 import time +import logging +import dbus -import conf from sugar import env -import logging +from sugar import profile from sugar.p2p import Stream from sugar.presence import PresenceService from sugar import util from model.Invites import Invites -import dbus PRESENCE_SERVICE_TYPE = "_presence_olpc._tcp" @@ -35,10 +35,8 @@ class ShellOwner(object): runs in the shell and serves up the buddy icon and other stuff. It's the server portion of the Owner, paired with the client portion in Buddy.py.""" def __init__(self): - profile = conf.get_profile() - self._nick = profile.get_nick_name() - user_dir = profile.get_path() + user_dir = env.get_profile_path() self._icon = None self._icon_hash = "" @@ -71,7 +69,7 @@ class ShellOwner(object): def announce(self): # Create and announce our presence - color = conf.get_profile().get_color() + color = profile.get_color() props = {'color': color.to_string(), 'icon-hash': self._icon_hash} self._service = self._pservice.register_service(self._nick, PRESENCE_SERVICE_TYPE, properties=props) diff --git a/shell/sugar b/shell/sugar-shell index a47bfc7..95deb40 100755 --- a/shell/sugar +++ b/shell/sugar-shell @@ -16,33 +16,27 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -import sys -import os - import pygtk pygtk.require('2.0') - -curdir = os.path.abspath(os.path.dirname(__file__)) -sourcedir = os.path.dirname(curdir) - -if os.path.isfile(os.path.join(sourcedir, 'sugar/__uninstalled__.py')): - print 'Running sugar from ' + sourcedir + ' ...' - sys.path.insert(0, sourcedir) -else: - print 'Running the installed sugar...' - -from sugar import env - -env.setup_system() - -from sugar.session.Emulator import Emulator - -if os.environ.has_key('SUGAR_EMULATOR') and \ - os.environ['SUGAR_EMULATOR'] == 'yes': - emulator = Emulator() - emulator.start() - -from Session import Session - -session = Session() -session.start() +import gtk + +from sugar import profile +from sugar import TracebackUtils +from view.FirstTimeDialog import FirstTimeDialog +from view.Shell import Shell +from model.ShellModel import ShellModel + +name = profile.get_nick_name() +if not name or not len(name): + dialog = FirstTimeDialog() + dialog.run() + +model = ShellModel() +shell = Shell(model) + +tbh = TracebackUtils.TracebackHelper() +try: + gtk.main() +except KeyboardInterrupt: + print 'Ctrl+C pressed, exiting...' +del tbh diff --git a/shell/view/ActivityHost.py b/shell/view/ActivityHost.py index fe8bc19..4074de2 100644 --- a/shell/view/ActivityHost.py +++ b/shell/view/ActivityHost.py @@ -18,6 +18,7 @@ import gtk import dbus import conf +from sugar import profile from sugar.activity import Activity from sugar.presence import PresenceService from sugar.graphics.iconcolor import IconColor @@ -92,7 +93,7 @@ class ActivityHost: if activity != None: return IconColor(activity.get_color()) else: - return conf.get_profile().get_color() + return profile.get_color() def share(self): self._activity.share() diff --git a/shell/view/FirstTimeDialog.py b/shell/view/FirstTimeDialog.py index 5e878f9..463114a 100644 --- a/shell/view/FirstTimeDialog.py +++ b/shell/view/FirstTimeDialog.py @@ -14,11 +14,14 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -import gtk +import os +from ConfigParser import ConfigParser +import gtk from gettext import gettext as _ -import conf +from sugar.graphics.iconcolor import IconColor +from sugar import env class FirstTimeDialog(gtk.Dialog): def __init__(self): @@ -37,22 +40,24 @@ class FirstTimeDialog(gtk.Dialog): self._ok = gtk.Button(None, gtk.STOCK_OK) self._ok.set_sensitive(False) self.vbox.pack_start(self._ok) - self._ok.connect('clicked', self.__ok_button_clicked_cb) + self._ok.connect('clicked', self._ok_button_clicked_cb) self._ok.show() def _entry_changed_cb(self, entry): valid = (len(entry.get_text()) > 0) self._ok.set_sensitive(valid) - def __ok_button_clicked_cb(self, button): - profile = conf.get_profile() - profile.set_nick_name(self._entry.get_text()) - self.destroy() + def _ok_button_clicked_cb(self, button): + cp = ConfigParser() -def get_profile(): - profile = conf.get_profile() - if profile.get_nick_name() == None: - dialog = FirstTimeDialog() - dialog.connect('destroy', self.__first_time_dialog_destroy_cb) - dialog.show() - return profile + section = 'Buddy' + cp.add_section(section) + cp.set(section, 'NickName', self._entry.get_text()) + cp.set(section, 'Color', IconColor().to_string()) + + config_path = os.path.join(env.get_profile_path(), 'config') + fileobject = open(config_path, 'w') + cp.write(fileobject) + fileobject.close() + + self.destroy() diff --git a/shell/view/home/MyIcon.py b/shell/view/home/MyIcon.py index 8da1692..df59317 100644 --- a/shell/view/home/MyIcon.py +++ b/shell/view/home/MyIcon.py @@ -15,10 +15,9 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA from sugar.graphics.canvasicon import CanvasIcon -import conf +from sugar import profile class MyIcon(CanvasIcon): def __init__(self): - profile = conf.get_profile() CanvasIcon.__init__(self, icon_name='stock-buddy', color=profile.get_color()) -- cgit v0.9.1