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 'sugar') diff --git a/sugar/Makefile.am b/sugar/Makefile.am index 6f27a08..7e2b0d2 100644 --- a/sugar/Makefile.am +++ b/sugar/Makefile.am @@ -1,9 +1,10 @@ -SUBDIRS = activity chat graphics p2p presence session +SUBDIRS = activity chat graphics p2p presence sugardir = $(pythondir)/sugar sugar_PYTHON = \ __init__.py \ __installed__.py \ + emulator.py \ env.py \ logger.py \ setup.py \ diff --git a/sugar/env.py b/sugar/env.py index 2d75737..a2dfa45 100644 --- a/sugar/env.py +++ b/sugar/env.py @@ -26,25 +26,8 @@ except ImportError: import sugar.setup -def setup_user(profile): - os.environ['SUGAR_NICK_NAME'] = profile.get_nick_name() - os.environ['SUGAR_COLOR'] = profile.get_color().to_string() - -def get_nick_name(): - if os.environ.has_key('SUGAR_NICK_NAME'): - return os.environ['SUGAR_NICK_NAME'] - else: - return None - -def get_color(): - if os.environ.has_key('SUGAR_COLOR'): - return os.environ['SUGAR_COLOR'] - else: - return None - def setup_python_path(): for path in sugar_python_path: - sys.path.insert(0, path) if os.environ.has_key('PYTHONPATH'): old_path = os.environ['PYTHONPATH'] os.environ['PYTHONPATH'] = path + ':' + old_path @@ -76,9 +59,15 @@ def get_profile_path(): profile_id = os.environ['SUGAR_PROFILE'] else: profile_id = 'default' - path = os.path.expanduser('~/.sugar') - return os.path.join(path, profile_id) + path = os.path.join(os.path.expanduser('~/.sugar'), profile_id) + if not os.path.isdir(path): + try: + os.makedirs(path) + except OSError, exc: + print "Could not create user directory." + + return path def get_data_dir(): return sugar_data_dir diff --git a/sugar/profile.py b/sugar/profile.py new file mode 100644 index 0000000..12eb08b --- /dev/null +++ b/sugar/profile.py @@ -0,0 +1,43 @@ +# 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 import env +from sugar.graphics.iconcolor import IconColor + +def get_nick_name(): + return _nick_name + +def get_color(): + return _color + +cp = ConfigParser() +config_path = os.path.join(env.get_profile_path(), 'config') +parsed = cp.read([config_path]) + +if cp.has_option('Buddy', 'NickName'): + _nick_name = cp.get('Buddy', 'NickName') +else: + _nick_name = None + +if cp.has_option('Buddy', 'Color'): + _color = IconColor(cp.get('Buddy', 'Color')) +else: + _color = None + +del cp diff --git a/sugar/session/DbusProcess.py b/sugar/session/DbusProcess.py deleted file mode 100644 index fb3246e..0000000 --- a/sugar/session/DbusProcess.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (C) 2006, Red Hat, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -import os - -from sugar.session.Process import Process -from sugar import env - -class DbusProcess(Process): - def __init__(self): - config = env.get_dbus_config() - cmd = "dbus-daemon --print-address --config-file %s" % config - Process.__init__(self, cmd) - - def get_name(self): - return 'Dbus' - - def start(self): - Process.start(self, True) - dbus_file = os.fdopen(self._stdout) - addr = dbus_file.readline().strip() - dbus_file.close() - os.environ["DBUS_SESSION_BUS_ADDRESS"] = addr diff --git a/sugar/session/Emulator.py b/sugar/session/Emulator.py deleted file mode 100644 index 4468509..0000000 --- a/sugar/session/Emulator.py +++ /dev/null @@ -1,87 +0,0 @@ -# Copyright (C) 2006, Red Hat, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -import os -import socket -import sys - -from sugar.session.Process import Process -import sugar.env - -def get_display_number(): - """Find a free display number trying to connect to 6000+ ports""" - retries = 20 - display_number = 1 - display_is_free = False - - while not display_is_free and retries > 0: - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - try: - s.connect(('127.0.0.1', 6000 + display_number)) - s.close() - - display_number += 1 - retries -= 1 - except: - display_is_free = True - - if display_is_free: - return display_number - else: - logging.error('Cannot find a free display.') - sys.exit(0) - -class XephyrProcess(Process): - def __init__(self): - self._display = get_display_number() - cmd = 'Xephyr :%d -ac -screen 800x600' % (self._display) - Process.__init__(self, cmd) - - def get_name(self): - return 'Xephyr' - - def start(self): - Process.start(self) - os.environ['DISPLAY'] = ":%d" % (self._display) - -class XnestProcess(Process): - def __init__(self): - self._display = get_display_number() - cmd = 'Xnest :%d -ac -geometry 800x600' % (self._display) - Process.__init__(self, cmd) - - def get_name(self): - return 'Xnest' - - def start(self): - Process.start(self) - os.environ['DISPLAY'] = ":%d" % (self._display) - -class Emulator: - """The OLPC emulator""" - def start(self): - try: - process = XephyrProcess() - process.start() - except: - try: - process = XnestProcess() - process.start() - except: - print 'Cannot run the emulator. You need to install \ - Xephyr or Xnest.' - sys.exit(0) diff --git a/sugar/session/Makefile.am b/sugar/session/Makefile.am deleted file mode 100644 index 8c1e4f7..0000000 --- a/sugar/session/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -sugardir = $(pythondir)/sugar/session -sugar_PYTHON = \ - __init__.py \ - DbusProcess.py \ - Emulator.py \ - MatchboxProcess.py \ - Process.py \ - TestSession.py \ - UITestSession.py diff --git a/sugar/session/MatchboxProcess.py b/sugar/session/MatchboxProcess.py deleted file mode 100644 index b6a7e35..0000000 --- a/sugar/session/MatchboxProcess.py +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (C) 2006, Red Hat, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -import os - -from sugar.session.Process import Process -from sugar import env - -class MatchboxProcess(Process): - def __init__(self): - kbd_config = os.path.join(env.get_data_dir(), 'kbdconfig') - options = '-kbdconfig %s ' % kbd_config - - options += '-use_titlebar no ' - options += '-theme olpc ' - - command = 'matchbox-window-manager %s ' % options - Process.__init__(self, command) - - def get_name(self): - return 'Matchbox' diff --git a/sugar/session/Process.py b/sugar/session/Process.py deleted file mode 100644 index 80bed1a..0000000 --- a/sugar/session/Process.py +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright (C) 2006, Red Hat, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -import logging - -import gobject - -class Process: - """Object representing one of the session processes""" - - def __init__(self, command): - self._command = command - - def get_name(self): - return self._command - - def start(self, standard_output=False): - args = self._command.split() - flags = gobject.SPAWN_SEARCH_PATH - result = gobject.spawn_async(args, flags=flags, - standard_output=standard_output) - self._stdout = result[2] diff --git a/sugar/session/TestSession.py b/sugar/session/TestSession.py deleted file mode 100644 index 2381548..0000000 --- a/sugar/session/TestSession.py +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (C) 2006, Red Hat, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -from sugar.session.DbusProcess import DbusProcess -from sugar import env - -class TestSession: - def start(self): - env.setup_python_path() - - process = DbusProcess() - process.start() diff --git a/sugar/session/UITestSession.py b/sugar/session/UITestSession.py deleted file mode 100644 index 1daf9d0..0000000 --- a/sugar/session/UITestSession.py +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright (C) 2006, Red Hat, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -import os - -from sugar.session.DbusProcess import DbusProcess -from sugar.session.MatchboxProcess import MatchboxProcess -from sugar.session.Emulator import Emulator -from sugar import env - -class UITestSession: - def start(self): - env.setup_python_path() - - if os.environ.has_key('SUGAR_EMULATOR') and \ - os.environ['SUGAR_EMULATOR'] == 'yes': - emulator = Emulator() - emulator.start() - - process = MatchboxProcess() - process.start() - - process = DbusProcess() - process.start() diff --git a/sugar/session/__init__.py b/sugar/session/__init__.py deleted file mode 100644 index e69de29..0000000 --- a/sugar/session/__init__.py +++ /dev/null -- cgit v0.9.1