import os
import gtk
import gobject
import time
import re

from Shell import Shell
from ConsoleWindow import ConsoleWindow
from session.Process import Process
from FirstTimeDialog import FirstTimeDialog
from sugar import env
from sugar import logger
import conf

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

class MatchboxProcess(Process):
	def __init__(self):
		kbd_config = os.path.join(env.get_data_dir(), 'kbdconfig')
		options = '-kbdconfig %s ' % kbd_config

		options += '-theme olpc '

		command = 'matchbox-window-manager %s ' % options
		Process.__init__(self, command)
	
	def get_name(self):
		return 'Matchbox'

class DBusMonitorProcess(Process):
	def __init__(self):
		Process.__init__(self, "dbus-monitor --session")
	
	def get_name(self):
		return 'dbus-monitor'

class Session:
	"""Takes care of running the shell and all the sugar processes"""

	def _check_profile(self):
		profile = conf.get_profile()

		if profile.get_nick_name() == None:
			dialog = FirstTimeDialog()
			dialog.run()
			profile.save()

		env.setup_user(profile)

	def start(self):
		"""Start the session"""
		process = MatchboxProcess()
		process.start()

		self._check_profile()

		process = DbusProcess()
		process.start()

		if os.environ['SUGAR_DBUS_MONITOR']:
			dbm = DBusMonitorProcess()
			dbm.start()

		console = ConsoleWindow()
		logger.start('Shell', console)

		shell = Shell()
		shell.set_console(console)

		from sugar import TracebackUtils
		tbh = TracebackUtils.TracebackHelper()
		try:
			gtk.main()
		except KeyboardInterrupt:
			print 'Ctrl+C pressed, exiting...'
		del tbh

import os
import gtk
import gobject
import time
import re

from Shell import Shell
from ConsoleWindow import ConsoleWindow
from session.Process import Process
from FirstTimeDialog import FirstTimeDialog
from sugar import env
from sugar import logger
import conf

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

class MatchboxProcess(Process):
	def __init__(self):
		kbd_config = os.path.join(env.get_data_dir(), 'kbdconfig')
		options = '-kbdconfig %s ' % kbd_config

		options += '-theme olpc '

		command = 'matchbox-window-manager %s ' % options
		Process.__init__(self, command)
	
	def get_name(self):
		return 'Matchbox'

class DBusMonitorProcess(Process):
	def __init__(self):
		Process.__init__(self, "dbus-monitor --session")
	
	def get_name(self):
		return 'dbus-monitor'

class Session:
	"""Takes care of running the shell and all the sugar processes"""

	def _check_profile(self):
		profile = conf.get_profile()

		if profile.get_nick_name() == None:
			dialog = FirstTimeDialog()
			dialog.run()
			profile.save()

		env.setup_user(profile)

	def start(self):
		"""Start the session"""
		process = MatchboxProcess()
		process.start()

		self._check_profile()

		process = DbusProcess()
		process.start()

		if os.environ.has_key('SUGAR_DBUS_MONITOR'):
			dbm = DBusMonitorProcess()
			dbm.start()

		console = ConsoleWindow()
		logger.start('Shell', console)

		shell = Shell()
		shell.set_console(console)

		from sugar import TracebackUtils
		tbh = TracebackUtils.TracebackHelper()
		try:
			gtk.main()
		except KeyboardInterrupt:
			print 'Ctrl+C pressed, exiting...'
		del tbh

Use has_key to check environ var