Refactor the console stuff
This commit is contained in:
parent
cb47f17b31
commit
628271959c
@ -18,6 +18,7 @@ from ActivityHost import ActivityHost
|
|||||||
from ChatController import ChatController
|
from ChatController import ChatController
|
||||||
from sugar.activity import ActivityFactory
|
from sugar.activity import ActivityFactory
|
||||||
from sugar.activity import Activity
|
from sugar.activity import Activity
|
||||||
|
import sugar.logger
|
||||||
|
|
||||||
class ShellDbusService(dbus.service.Object):
|
class ShellDbusService(dbus.service.Object):
|
||||||
def __init__(self, shell, bus_name):
|
def __init__(self, shell, bus_name):
|
||||||
@ -59,13 +60,12 @@ class Shell(gobject.GObject):
|
|||||||
self._console_windows = {}
|
self._console_windows = {}
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
#log_writer = LogWriter("Shell", False)
|
|
||||||
#log_writer.start()
|
|
||||||
|
|
||||||
session_bus = dbus.SessionBus()
|
session_bus = dbus.SessionBus()
|
||||||
bus_name = dbus.service.BusName('com.redhat.Sugar.Shell', bus=session_bus)
|
bus_name = dbus.service.BusName('com.redhat.Sugar.Shell', bus=session_bus)
|
||||||
ShellDbusService(self, bus_name)
|
ShellDbusService(self, bus_name)
|
||||||
|
|
||||||
|
sugar.logger.start('Shell', self)
|
||||||
|
|
||||||
self._owner = ShellOwner()
|
self._owner = ShellOwner()
|
||||||
self._owner.announce()
|
self._owner.announce()
|
||||||
|
|
||||||
@ -132,6 +132,9 @@ class Shell(gobject.GObject):
|
|||||||
module = self._registry.get_activity(activity.get_default_type())
|
module = self._registry.get_activity(activity.get_default_type())
|
||||||
console = self.get_console(module.get_id())
|
console = self.get_console(module.get_id())
|
||||||
activity.show_dialog(console)
|
activity.show_dialog(console)
|
||||||
|
else:
|
||||||
|
console = self.get_console('Shell')
|
||||||
|
console.show()
|
||||||
|
|
||||||
def join_activity(self, service):
|
def join_activity(self, service):
|
||||||
info = self._registry.get_activity(service.get_type())
|
info = self._registry.get_activity(service.get_type())
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import logging
|
|
||||||
import os
|
import os
|
||||||
import socket
|
import socket
|
||||||
import sys
|
import sys
|
||||||
@ -9,8 +8,8 @@ def get_display_number():
|
|||||||
"""Find a free display number trying to connect to 6000+ ports"""
|
"""Find a free display number trying to connect to 6000+ ports"""
|
||||||
retries = 20
|
retries = 20
|
||||||
display_number = 1
|
display_number = 1
|
||||||
display_is_free = False
|
display_is_free = False
|
||||||
|
|
||||||
while not display_is_free and retries > 0:
|
while not display_is_free and retries > 0:
|
||||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
try:
|
try:
|
||||||
@ -57,10 +56,6 @@ class XnestProcess(Process):
|
|||||||
|
|
||||||
class Emulator:
|
class Emulator:
|
||||||
"""The OLPC emulator"""
|
"""The OLPC emulator"""
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
try:
|
try:
|
||||||
process = XephyrProcess()
|
process = XephyrProcess()
|
||||||
@ -70,6 +65,6 @@ class Emulator:
|
|||||||
process = XnestProcess()
|
process = XnestProcess()
|
||||||
process.start()
|
process.start()
|
||||||
except:
|
except:
|
||||||
logging.error('Cannot run the emulator. You need to install \
|
print('Cannot run the emulator. You need to install\
|
||||||
Xephyr or Xnest.')
|
Xephyr or Xnest.')
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
@ -74,7 +74,6 @@ from ActivityRegistry import ActivityRegistry
|
|||||||
|
|
||||||
registry = ActivityRegistry()
|
registry = ActivityRegistry()
|
||||||
registry.scan_directory(activities_dest)
|
registry.scan_directory(activities_dest)
|
||||||
#registry.scan_directory(os.path.join(env.get_user_dir(), 'activities'))
|
|
||||||
|
|
||||||
from session.Emulator import Emulator
|
from session.Emulator import Emulator
|
||||||
|
|
||||||
@ -82,8 +81,6 @@ from session.Emulator import Emulator
|
|||||||
emulator = Emulator()
|
emulator = Emulator()
|
||||||
emulator.start()
|
emulator.start()
|
||||||
|
|
||||||
print 'Redirecting output to the console, press F3 to open it.'
|
|
||||||
|
|
||||||
from session.Session import Session
|
from session.Session import Session
|
||||||
|
|
||||||
session = Session(registry)
|
session = Session(registry)
|
||||||
|
@ -12,6 +12,9 @@ gtk.gdk.threads_init()
|
|||||||
dbus.glib.threads_init()
|
dbus.glib.threads_init()
|
||||||
|
|
||||||
from sugar.activity import ActivityFactory
|
from sugar.activity import ActivityFactory
|
||||||
|
import sugar.logger
|
||||||
|
|
||||||
|
sugar.logger.start(sys.argv[1])
|
||||||
|
|
||||||
logging.info('Starting activity factory %s' % sys.argv[1])
|
logging.info('Starting activity factory %s' % sys.argv[1])
|
||||||
|
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
import sys
|
|
||||||
import logging
|
|
||||||
|
|
||||||
import dbus
|
|
||||||
|
|
||||||
import sugar.env
|
|
||||||
|
|
||||||
class LogWriter:
|
|
||||||
def __init__(self, application, use_console = True):
|
|
||||||
self._application = application
|
|
||||||
self._use_console = use_console
|
|
||||||
|
|
||||||
bus = dbus.SessionBus()
|
|
||||||
proxy_obj = bus.get_object('com.redhat.Sugar.Shell', '/com/redhat/Sugar/Shell')
|
|
||||||
self._logger = dbus.Interface(proxy_obj, 'com.redhat.Sugar.Shell')
|
|
||||||
|
|
||||||
def start(self):
|
|
||||||
if self._use_console:
|
|
||||||
sys.stdout = self
|
|
||||||
sys.stderr = self
|
|
||||||
|
|
||||||
level = sugar.env.get_logging_level()
|
|
||||||
if level == 'debug':
|
|
||||||
logging.basicConfig(level=logging.DEBUG,
|
|
||||||
format='%(levelname)s %(message)s')
|
|
||||||
|
|
||||||
def write(self, s):
|
|
||||||
self._logger.log(self._application, s, ignore_reply=True)
|
|
||||||
|
|
||||||
def emit(self, record):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def flush(self):
|
|
||||||
pass
|
|
34
sugar/logger.py
Normal file
34
sugar/logger.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import logging
|
||||||
|
|
||||||
|
import dbus
|
||||||
|
import gobject
|
||||||
|
|
||||||
|
class Handler(logging.Handler):
|
||||||
|
def __init__(self, shell, console_id):
|
||||||
|
logging.Handler.__init__(self)
|
||||||
|
|
||||||
|
self._console_id = console_id
|
||||||
|
self._shell = shell
|
||||||
|
self._messages = []
|
||||||
|
|
||||||
|
def _log(self):
|
||||||
|
for message in self._messages:
|
||||||
|
# FIXME use a single dbus call
|
||||||
|
self._shell.log(self._console_id, message)
|
||||||
|
return False
|
||||||
|
|
||||||
|
def emit(self, record):
|
||||||
|
self._messages.append(record.msg)
|
||||||
|
if len(self._messages) == 1:
|
||||||
|
gobject.idle_add(self._log)
|
||||||
|
|
||||||
|
def start(console_id, shell = None):
|
||||||
|
root_logger = logging.getLogger('')
|
||||||
|
root_logger.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
|
if shell == None:
|
||||||
|
bus = dbus.SessionBus()
|
||||||
|
proxy_obj = bus.get_object('com.redhat.Sugar.Shell', '/com/redhat/Sugar/Shell')
|
||||||
|
shell = dbus.Interface(proxy_obj, 'com.redhat.Sugar.Shell')
|
||||||
|
|
||||||
|
root_logger.addHandler(Handler(shell, console_id))
|
Loading…
Reference in New Issue
Block a user