Initial import
[gregoa/zavai.git] / src / zavai
1 #!/usr/bin/python
2
3 import sys
4 import signal
5 import optparse
6 import gtk
7 import dbus
8 import dbus.mainloop.glib
9 import zavai
10
11 VERSION="0.1"
12
13 def warning(*args):
14     sys.stderr.write(" ".join(map(str, args)) + "\n")
15 def info(*args):
16     sys.stderr.write(" ".join(map(str, args)) + "\n")
17
18 class Parser(optparse.OptionParser):
19     def __init__(self, *args, **kwargs):
20         # Yes, in 2009 optparse from the *standard library* still uses old
21         # style classes
22         optparse.OptionParser.__init__(self, *args, **kwargs)
23
24     def error(self, msg):
25         sys.stderr.write("%s: error: %s\n\n" % (self.get_prog_name(), msg))
26         self.print_help(sys.stderr)
27         sys.exit(2)
28
29 parser = Parser(usage="usage: %prog [options]",
30                 version="%prog "+ VERSION,
31                 description="Simple interactive interface for the OpenMoko")
32 parser.add_option("-v", "--verbose", action="store_true", help="verbose mode")
33
34 (opts, args) = parser.parse_args()
35
36
37 if not opts.verbose:
38     def info(*args):
39         pass
40
41 # Read configuration
42 info("Loading configuration")
43 conf = zavai.read_config(nick="zavai")
44
45 # Set up dbus
46 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
47
48 # Set up zavai
49 registry = zavai.Registry()
50
51 # Register main factories
52 registry.register("conf", lambda *args, **kw: conf)
53 registry.register("app", zavai.Zavai)
54 registry.register("menu", zavai.Menu)
55
56 # Load plugins
57 info("Loading plugins")
58 for p in zavai.load_plugins(nick="zavai"):
59     try:
60         p.init(conf = conf, registry = registry)
61     except Exception, e:
62         print >>sys.stderr, "Exception caught loading plugin %s: skipping plugin" % p
63         print >>sys.stderr, "Exception details:"
64         import traceback
65         details = traceback.format_exc()
66         print >>sys.stderr, "\t"+details.rstrip().replace("\n", "\n\t")
67
68 # Shutdown the main loop on SIGINT
69 def on_kill(signum, frame):
70     gtk.main_quit()
71 signal.signal(signal.SIGINT, on_kill)
72 signal.signal(signal.SIGTERM, on_kill)
73
74 info("Starting")
75 app = registry.resource("app")
76 app.connect("destroy", gtk.main_quit)
77 app.run()
78
79 info("Shutting down")
80 registry.shutdown()
81
82 sys.exit(0)