Allow running of multiple instances of the GUI. Removed HAL based detection code as it needs too many workarounds. Version bump to 0.3.0 final.

This commit is contained in:
Kovid Goyal 2007-01-11 18:51:20 +00:00
parent 7a814b5401
commit 6472b7a24a
3 changed files with 12 additions and 45 deletions

View File

@ -37,6 +37,6 @@ the following rule in C{/etc/udev/rules.d/90-local.rules} ::
You may have to adjust the GROUP and the location of the rules file to You may have to adjust the GROUP and the location of the rules file to
suit your distribution. suit your distribution.
""" """
__version__ = "0.3.0b6" __version__ = "0.3.0"
__docformat__ = "epytext" __docformat__ = "epytext"
__author__ = "Kovid Goyal <kovid@kovidgoyal.net>" __author__ = "Kovid Goyal <kovid@kovidgoyal.net>"

View File

@ -36,7 +36,8 @@ def installErrorHandler(dialog):
def _Warning(msg, e): def _Warning(msg, e):
print >> sys.stderr, msg print >> sys.stderr, msg
if e: traceback.print_exc(e) if e:
traceback.print_exc(e)
def Error(msg, e): def Error(msg, e):
if error_dialog: if error_dialog:

View File

@ -493,7 +493,9 @@ class Main(QObject, Ui_MainWindow):
self.df.setText(self.df_template.arg("").arg("").arg("")) self.df.setText(self.df_template.arg("").arg("").arg(""))
self.device_tree.hide_reader(True) self.device_tree.hide_reader(True)
self.device_tree.hide_card(True) self.device_tree.hide_card(True)
self.device_tree.selectionModel().reset() self.device_tree.selectionModel().reset()
self.status('SONY Reader disconnected')
self.progress(100)
if self.device_view.isVisible(): if self.device_view.isVisible():
self.device_view.hide() self.device_view.hide()
self.library_view.selectionModel().reset() self.library_view.selectionModel().reset()
@ -519,12 +521,11 @@ class Main(QObject, Ui_MainWindow):
self.status("Connecting to device") self.status("Connecting to device")
try: try:
info = self.dev.get_device_information(end_session=False) info = self.dev.get_device_information(end_session=False)
except DeviceBusy, err: except DeviceBusy:
Error("Device is in use by another application", None) self.status("Device is in use by another application")
self.status("Device busy")
self.window.setCursor(Qt.ArrowCursor) self.window.setCursor(Qt.ArrowCursor)
return return
except DeviceError, err: except DeviceError:
self.dev.reconnect() self.dev.reconnect()
self.thread().msleep(100) self.thread().msleep(100)
return self.establish_connection() return self.establish_connection()
@ -563,47 +564,12 @@ class DeviceConnectDetector(QObject):
elif not is_connected and self.is_connected: elif not is_connected and self.is_connected:
self.is_connected = False self.is_connected = False
self.emit(SIGNAL("device_removed()")) self.emit(SIGNAL("device_removed()"))
def udi_is_device(self, udi):
ans = False
try:
devobj = bus.get_object('org.freedesktop.Hal', udi)
dev = dbus.Interface(devobj, "org.freedesktop.Hal.Device")
properties = dev.GetAllProperties()
vendor_id = int(properties["usb_device.vendor_id"]),
product_id = int(properties["usb_device.product_id"])
if self.dev.signature() == (vendor_id, product_id): ans = True
except:
self.device_detector = self.startTimer(1000)
return ans
def device_added_callback(self, udi):
if self.udi_is_device(udi):
self.emit(SIGNAL("device_connected()"))
def device_removed_callback(self, udi):
if self.udi_is_device(udi):
self.emit(SIGNAL("device_removed()"))
def __init__(self, dev): def __init__(self, dev):
QObject.__init__(self) QObject.__init__(self)
self.dev = dev self.dev = dev
try: self.is_connected = False
raise Exception("DBUS doesn't support the Qt mainloop") self.device_detector = self.startTimer(1000)
import dbus
bus = dbus.SystemBus()
hal_manager_obj = bus.get_object('org.freedesktop.Hal',\
'/org/freedesktop/Hal/Manager')
hal_manager = dbus.Interface(hal_manager_obj,\
'org.freedesktop.Hal.Manager')
hal_manager.connect_to_signal('DeviceAdded', \
self.device_added_callback)
hal_manager.connect_to_signal('DeviceRemoved', \
self.device_removed_callback)
except Exception, e:
#_Warning("Could not connect to HAL", e)
self.is_connected = False
self.device_detector = self.startTimer(1000)
def main(): def main():
from optparse import OptionParser from optparse import OptionParser