OSDN Git Service

Introduce uri opener.
[fukui-no-namari/fukui-no-namari.git] / src / hage1
1 #!/usr/bin/env python
2
3 # Copyright (C) 2006 by Aiwota Programmer
4 # aiwotaprog@tetteke.tk
5 #
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19
20 import pygtk
21 pygtk.require('2.0')
22 import gtk
23 import gnome.ui
24 import gobject
25 import getopt
26 import sys
27 import dbus
28 import dbus.service
29
30 from Hage1 import thread_window
31 from Hage1 import board_window
32 from Hage1 import config
33 from Hage1 import dbus_object
34 from Hage1 import uri_opener
35
36 APPNAME = 'Hage1'
37 APPVERSION = '0.1'
38
39 # where are these values ?
40 DBUS_NAME_FLAG_ALLOW_REPLACEMENT = 1
41 DBUS_NAME_FLAG_REPLACE_EXISTING = 2
42 DBUS_NAME_FLAG_DO_NOT_QUEUE = 4
43 DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER = 1
44 DBUS_REQUEST_NAME_REPLY_IN_QUEUE = 2
45 DBUS_REQUEST_NAME_REPLY_EXISTS = 3
46 DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER = 4
47
48 dbus_bus_name = "tk.tetteke.Hage1"
49 dbus_object_path = "/tk/tetteke/Hage1"
50 dbus_object.dbus_interface_name = "tk.tetteke.Hage1"
51
52 def usage():
53     print """usage: hage1 uri"""
54
55 def getoption():
56     try:
57         opts, args = getopt.getopt(
58             sys.argv[1:], "h", ["help"])
59     except getopt.GetoptError, msg:
60         print msg
61         usage()
62         sys.exit(2)
63     for option, value in opts:
64         if option in ("-h", "--help"):
65             usage()
66             sys.exit()
67     return args
68
69     
70 if __name__ == "__main__":
71
72     # get option
73     uris = getoption()
74
75     # check if an instance exists
76     session_bus = dbus.SessionBus()
77     dbus_proxy_object = session_bus.get_object(
78         "org.freedesktop.DBus", "/org/freedesktop/DBus")
79     dbus_iface = dbus.Interface(dbus_proxy_object, "org.freedesktop.DBus")
80     req_name_ret = dbus_iface.RequestName(
81         dbus_bus_name, DBUS_NAME_FLAG_DO_NOT_QUEUE)
82
83     if req_name_ret == DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER or \
84        req_name_ret == DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER:
85         # the instance does not exist. start normally.
86
87         bus_name = dbus.service.BusName(dbus_bus_name, bus=session_bus)
88         obj = dbus_object.DBusHage1Object(bus_name, dbus_object_path)
89
90         gnome.init(APPNAME, APPVERSION)
91         gobject.threads_init()
92         config.APPNAME = APPNAME
93
94         # open some windows
95         if uris:
96             from Hage1.BbsType import bbs_type_judge_uri
97             from Hage1.BbsType import bbs_type_exception
98             for uri in uris:
99                 try:
100                     uri_opener.open_uri(uri)
101                 except bbs_type_exception.BbsTypeError, msg:
102                     print msg
103             gtk.main()
104     else:
105         # the instance exists. send message and exit.
106
107         proxy_object = session_bus.get_object(dbus_bus_name, dbus_object_path)
108         iface = dbus.Interface(proxy_object, dbus_object.dbus_interface_name)
109
110         # open some windows
111         if uris:
112             from Hage1.BbsType import bbs_type_judge_uri
113             from Hage1.BbsType import bbs_type_exception
114             for uri in uris:
115                 try:
116                     iface.open_uri(uri)
117                 except bbs_type_exception.BbsTypeError, msg:
118                     print msg