1
by Henrique de Moraes Holschuh
Import upstream version 0.8.7 |
1 |
#!/usr/bin/env python
|
1.2.4
by Matthias Klose
Import upstream version 0.9.11 |
2 |
# -*- coding: utf-8 -*-
|
3 |
#
|
|
1.3.2
by Till Kamppeter
Import upstream version 3.9.2 |
4 |
# (c) Copyright 2003-2009 Hewlett-Packard Development Company, L.P.
|
1
by Henrique de Moraes Holschuh
Import upstream version 0.8.7 |
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
19 |
#
|
|
20 |
# Author: Don Welch
|
|
21 |
#
|
|
1.1.1
by Henrique de Moraes Holschuh
Import upstream version 0.9.2 |
22 |
# Thanks to Henrique M. Holschuh <hmh@debian.org> for various security patches
|
23 |
#
|
|
24 |
||
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
25 |
__version__ = '15.0' |
26 |
__mod__ = 'hp-toolbox' |
|
1.2.4
by Matthias Klose
Import upstream version 0.9.11 |
27 |
__title__ = 'HP Device Manager' |
1.3.2
by Till Kamppeter
Import upstream version 3.9.2 |
28 |
__doc__ = """The HP Device Manager (aka "Toolbox") for HPLIP supported devices. Provides access to status, tools, and supplies levels.""" |
1.1.1
by Henrique de Moraes Holschuh
Import upstream version 0.9.2 |
29 |
|
30 |
# Std Lib
|
|
31 |
import sys |
|
1.2.15
by Till Kamppeter
Import upstream version 2.8.4 |
32 |
import os |
1.1.1
by Henrique de Moraes Holschuh
Import upstream version 0.9.2 |
33 |
import getopt |
34 |
import signal |
|
35 |
||
36 |
# Local
|
|
1
by Henrique de Moraes Holschuh
Import upstream version 0.8.7 |
37 |
from base.g import * |
1.1.1
by Henrique de Moraes Holschuh
Import upstream version 0.9.2 |
38 |
import base.utils as utils |
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
39 |
from base import status, tui, module |
1.2.15
by Till Kamppeter
Import upstream version 2.8.4 |
40 |
|
41 |
||
42 |
w = None # write pipe |
|
1.1.1
by Henrique de Moraes Holschuh
Import upstream version 0.9.2 |
43 |
app = None |
44 |
toolbox = None |
|
1.2.15
by Till Kamppeter
Import upstream version 2.8.4 |
45 |
session_bus = None |
1.2.1
by LaMont Jones
Import upstream version 0.9.5 |
46 |
|
1.2.16
by Till Kamppeter
Import upstream version 2.8.5 |
47 |
|
1.2.15
by Till Kamppeter
Import upstream version 2.8.4 |
48 |
def handle_session_signal(*args, **kwds): |
1.2.16
by Till Kamppeter
Import upstream version 2.8.5 |
49 |
if kwds['interface'] == 'com.hplip.Toolbox' and \ |
1.2.15
by Till Kamppeter
Import upstream version 2.8.4 |
50 |
kwds['member'] == 'Event': |
1.2.16
by Till Kamppeter
Import upstream version 2.8.5 |
51 |
|
1.2.15
by Till Kamppeter
Import upstream version 2.8.4 |
52 |
event = device.Event(*args) |
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
53 |
event.debug() |
1.2.21
by Till Kamppeter
Import upstream version 2.8.12 |
54 |
|
1.2.15
by Till Kamppeter
Import upstream version 2.8.4 |
55 |
if event.event_code > EVENT_MAX_EVENT: |
56 |
event.event_code = status.MapPJLErrorCode(event.event_code) |
|
57 |
||
58 |
# regular user/device status event
|
|
1.2.16
by Till Kamppeter
Import upstream version 2.8.5 |
59 |
log.debug("Received event notifier: %d" % event.event_code) |
60 |
||
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
61 |
if not event.send_via_pipe(w, 'toolbox ui'): |
62 |
sys.exit(1) |
|
63 |
# if this fails, then hp-toolbox must be killed.
|
|
64 |
# No need to continue running...
|
|
65 |
||
66 |
||
67 |
mod = module.Module(__mod__, __title__, __version__, __doc__, None, |
|
68 |
(GUI_MODE,), (UI_TOOLKIT_QT3, UI_TOOLKIT_QT4)) |
|
69 |
mod.lockInstance() |
|
70 |
||
1.2.21
by Till Kamppeter
Import upstream version 2.8.12 |
71 |
mod.setUsage(module.USAGE_FLAG_NONE, |
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
72 |
extra_options=[("Disable dbus (Qt3 only):", "-x or --disable-dbus", "option", False)], |
1.3.4
by Till Kamppeter
Import upstream version 3.9.6 |
73 |
see_also_list = ['hp-align', 'hp-clean', 'hp-colorcal', 'hp-devicesettings', |
1.3.13
by Till Kamppeter
Import upstream version 3.10.9 |
74 |
'hp-faxsetup', 'hp-firmware', 'hp-info', 'hp-levels', |
1.2.21
by Till Kamppeter
Import upstream version 2.8.12 |
75 |
'hp-linefeedcal', 'hp-makecopies', 'hp-plugin', |
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
76 |
'hp-pqdiag', 'hp-print', 'hp-printsettings', 'hp-scan', |
77 |
'hp-sendfax', 'hp-testpage', 'hp-timedate', 'hp-unload']) |
|
78 |
||
79 |
opts, device_uri, printer_name, mode, ui_toolkit, loc = \ |
|
80 |
mod.parseStdOpts('x', ['disable-dbus']) |
|
81 |
||
1.2.15
by Till Kamppeter
Import upstream version 2.8.4 |
82 |
disable_dbus = False |
1.2.8
by Till Kamppeter
Import upstream version 1.7.1 |
83 |
|
1.2.6
by Matthias Klose
Import upstream version 1.6.9 |
84 |
for o, a in opts: |
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
85 |
if o in ('-x', '--disable-dbus') and ui_toolkit == 'qt3': |
1.2.15
by Till Kamppeter
Import upstream version 2.8.4 |
86 |
disable_dbus = True |
1.2.16
by Till Kamppeter
Import upstream version 2.8.5 |
87 |
|
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
88 |
if ui_toolkit == 'qt3': |
89 |
if not utils.canEnterGUIMode(): |
|
90 |
log.error("%s requires GUI support. Exiting." % __mod__) |
|
91 |
sys.exit(1) |
|
1.3.2
by Till Kamppeter
Import upstream version 3.9.2 |
92 |
elif ui_toolkit == 'qt4': |
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
93 |
if not utils.canEnterGUIMode4(): |
94 |
log.error("%s requires GUI support. Exiting." % __mod__) |
|
95 |
sys.exit(1) |
|
1.2.16
by Till Kamppeter
Import upstream version 2.8.5 |
96 |
|
1.2.15
by Till Kamppeter
Import upstream version 2.8.4 |
97 |
child_pid, w, r = 0, 0, 0 |
98 |
||
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
99 |
if ui_toolkit == 'qt3': |
100 |
try: |
|
101 |
from dbus import SessionBus |
|
102 |
import dbus.service |
|
1.5.4
by Till Kamppeter
Import upstream version 3.11.12 |
103 |
from dbus.mainloop.glib import DBusGMainLoop, threads_init |
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
104 |
from gobject import MainLoop |
1.5.4
by Till Kamppeter
Import upstream version 3.11.12 |
105 |
import glib |
106 |
glib.threads_init() |
|
107 |
dbus.mainloop.glib.threads_init() |
|
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
108 |
except ImportError: |
109 |
log.error("Unable to load dbus - Automatic status updates in HPLIP Device Manager will be disabled.") |
|
1.2.21
by Till Kamppeter
Import upstream version 2.8.12 |
110 |
disable_dbus = True |
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
111 |
|
112 |
if not disable_dbus: |
|
113 |
r, w = os.pipe() |
|
114 |
parent_pid = os.getpid() |
|
115 |
log.debug("Parent PID=%d" % parent_pid) |
|
116 |
child_pid = os.fork() |
|
117 |
||
118 |
if disable_dbus or child_pid: # qt3/ui |
|
119 |
# parent (UI)
|
|
120 |
log.set_module("hp-toolbox(UI)") |
|
121 |
||
122 |
if w: |
|
123 |
os.close(w) |
|
124 |
||
1.2.21
by Till Kamppeter
Import upstream version 2.8.12 |
125 |
try: |
126 |
from qt import * |
|
127 |
from ui.devmgr4 import DevMgr4 |
|
128 |
except ImportError: |
|
129 |
log.error("Unable to load Qt3 support. Is it installed?") |
|
130 |
sys.exit(1) |
|
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
131 |
|
132 |
# create the main application object
|
|
133 |
app = QApplication(sys.argv) |
|
134 |
||
135 |
if loc is None: |
|
1.3.2
by Till Kamppeter
Import upstream version 3.9.2 |
136 |
loc = user_conf.get('ui', 'loc', 'system') |
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
137 |
if loc.lower() == 'system': |
138 |
loc = str(QTextCodec.locale()) |
|
139 |
log.debug("Using system locale: %s" % loc) |
|
140 |
||
1.2.21
by Till Kamppeter
Import upstream version 2.8.12 |
141 |
if loc.lower() != 'c': |
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
142 |
e = 'utf8' |
143 |
try: |
|
144 |
l, x = loc.split('.') |
|
145 |
loc = '.'.join([l, e]) |
|
146 |
except ValueError: |
|
147 |
l = loc |
|
148 |
loc = '.'.join([loc, e]) |
|
149 |
||
150 |
log.debug("Trying to load .qm file for %s locale." % loc) |
|
151 |
trans = QTranslator(None) |
|
152 |
||
153 |
qm_file = 'hplip_%s.qm' % l |
|
154 |
log.debug("Name of .qm file: %s" % qm_file) |
|
155 |
loaded = trans.load(qm_file, prop.localization_dir) |
|
156 |
||
157 |
if loaded: |
|
158 |
app.installTranslator(trans) |
|
159 |
else: |
|
160 |
loc = 'c' |
|
161 |
||
162 |
if loc == 'c': |
|
163 |
log.debug("Using default 'C' locale") |
|
164 |
else: |
|
165 |
log.debug("Using locale: %s" % loc) |
|
166 |
QLocale.setDefault(QLocale(loc)) |
|
167 |
prop.locale = loc |
|
168 |
try: |
|
169 |
locale.setlocale(locale.LC_ALL, locale.normalize(loc)) |
|
170 |
except locale.Error: |
|
171 |
pass
|
|
172 |
||
173 |
toolbox = DevMgr4(r, __version__, device_uri, disable_dbus) |
|
174 |
app.setMainWidget(toolbox) |
|
175 |
||
176 |
toolbox.show() |
|
177 |
||
178 |
try: |
|
179 |
try: |
|
180 |
log.debug("Starting GUI loop...") |
|
181 |
app.exec_loop() |
|
182 |
except KeyboardInterrupt: |
|
183 |
sys.exit(0) |
|
184 |
||
185 |
finally: |
|
186 |
if child_pid: |
|
187 |
log.debug("Killing child toolbox process (pid=%d)..." % child_pid) |
|
188 |
try: |
|
189 |
os.kill(child_pid, signal.SIGKILL) |
|
190 |
except OSError, e: |
|
191 |
log.debug("Failed: %s" % e.message) |
|
192 |
||
193 |
mod.unlockInstance() |
|
194 |
sys.exit(0) |
|
195 |
||
196 |
elif not disable_dbus: # qt3/dbus |
|
197 |
# dBus
|
|
198 |
log.set_module("hp-toolbox(dbus)") |
|
199 |
from base import device |
|
200 |
||
201 |
try: |
|
202 |
# child (dbus connector)
|
|
203 |
os.close(r) |
|
204 |
||
205 |
dbus_loop = DBusGMainLoop(set_as_default=True) |
|
206 |
||
207 |
try: |
|
208 |
session_bus = dbus.SessionBus() |
|
209 |
except dbus.exceptions.DBusException, e: |
|
210 |
if os.getuid() != 0: |
|
211 |
log.error("Unable to connect to dbus session bus. Exiting.") |
|
212 |
sys.exit(1) |
|
213 |
else: |
|
1.2.21
by Till Kamppeter
Import upstream version 2.8.12 |
214 |
log.error("Unable to connect to dbus session bus (running as root?)") |
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
215 |
sys.exit(1) |
216 |
||
217 |
# Receive events from the session bus
|
|
218 |
session_bus.add_signal_receiver(handle_session_signal, sender_keyword='sender', |
|
219 |
destination_keyword='dest', interface_keyword='interface', |
|
220 |
member_keyword='member', path_keyword='path') |
|
221 |
||
222 |
log.debug("Entering main loop...") |
|
223 |
||
224 |
try: |
|
225 |
MainLoop().run() |
|
226 |
except KeyboardInterrupt: |
|
227 |
log.debug("Ctrl-C: Exiting...") |
|
228 |
||
229 |
finally: |
|
230 |
if parent_pid: |
|
231 |
log.debug("Killing parent toolbox process (pid=%d)..." % parent_pid) |
|
232 |
try: |
|
233 |
os.kill(parent_pid, signal.SIGKILL) |
|
234 |
except OSError, e: |
|
235 |
log.debug("Failed: %s" % e.message) |
|
236 |
||
237 |
mod.unlockInstance() |
|
238 |
||
1.2.21
by Till Kamppeter
Import upstream version 2.8.12 |
239 |
sys.exit(0) |
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
240 |
|
1.2.21
by Till Kamppeter
Import upstream version 2.8.12 |
241 |
else: # qt4 |
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
242 |
try: |
243 |
from PyQt4.QtGui import QApplication |
|
1.3.2
by Till Kamppeter
Import upstream version 3.9.2 |
244 |
|
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
245 |
except ImportError: |
246 |
log.error("Unable to load Qt4 support. Is it installed?") |
|
1.2.21
by Till Kamppeter
Import upstream version 2.8.12 |
247 |
sys.exit(1) |
248 |
||
1.3.2
by Till Kamppeter
Import upstream version 3.9.2 |
249 |
from ui4.devmgr5 import DevMgr5 |
250 |
||
1.2.15
by Till Kamppeter
Import upstream version 2.8.4 |
251 |
log.set_module("hp-toolbox(UI)") |
1.2.16
by Till Kamppeter
Import upstream version 2.8.5 |
252 |
|
1.2.21
by Till Kamppeter
Import upstream version 2.8.12 |
253 |
if 1: |
254 |
#try:
|
|
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
255 |
app = QApplication(sys.argv) |
256 |
||
257 |
toolbox = DevMgr5(__version__, device_uri, None) |
|
258 |
toolbox.show() |
|
1.2.15
by Till Kamppeter
Import upstream version 2.8.4 |
259 |
try: |
260 |
log.debug("Starting GUI loop...") |
|
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
261 |
app.exec_() |
1.2.15
by Till Kamppeter
Import upstream version 2.8.4 |
262 |
except KeyboardInterrupt: |
263 |
sys.exit(0) |
|
1.2.16
by Till Kamppeter
Import upstream version 2.8.5 |
264 |
|
1.2.21
by Till Kamppeter
Import upstream version 2.8.12 |
265 |
if 1: |
266 |
#finally:
|
|
1.2.20
by Till Kamppeter
Import upstream version 2.8.10 |
267 |
mod.unlockInstance() |
1.2.15
by Till Kamppeter
Import upstream version 2.8.4 |
268 |
sys.exit(0) |