From 8a0f67c606f391a7ba9c97ce320ab93cf37692d3 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 12 Nov 2007 21:03:42 +0000 Subject: [PATCH] Move opening of device into worker thread as this is expensive operation for 505 and I dont like to have the GUI freeze, however briefly. --- src/libprs500/gui2/device.py | 21 +++++++++++++-------- src/libprs500/gui2/main.py | 8 ++++---- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/libprs500/gui2/device.py b/src/libprs500/gui2/device.py index 19419af76c..12fb552c19 100644 --- a/src/libprs500/gui2/device.py +++ b/src/libprs500/gui2/device.py @@ -12,7 +12,7 @@ ## You should have received a copy of the GNU General Public License along ## with this program; if not, write to the Free Software Foundation, Inc., ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.Warning -import os +import os, sys, traceback from PyQt4.QtCore import QThread, SIGNAL, QObject @@ -45,11 +45,17 @@ class DeviceDetector(QThread): try: connected = device[0].is_connected(helper=helper) except: - raise connected = False if connected and not device[1]: - self.emit(SIGNAL('connected(PyQt_PyObject, PyQt_PyObject)'), device[0], True) - device[1] ^= True + try: + dev = device[0]() + dev.open() + self.emit(SIGNAL('connected(PyQt_PyObject, PyQt_PyObject)'), dev, True) + except: + print 'Unable to open device' + traceback.print_exc() + finally: + device[1] = True elif not connected and device[1]: self.emit(SIGNAL('connected(PyQt_PyObject, PyQt_PyObject)'), device[0], False) device[1] ^= True @@ -58,11 +64,10 @@ class DeviceDetector(QThread): class DeviceManager(QObject): - def __init__(self, device_class): + def __init__(self, device): QObject.__init__(self) - self.device_class = device_class - self.device = device_class() - self.device.open() + self.device_class = device.__class__ + self.device = device def device_removed(self): self.device = None diff --git a/src/libprs500/gui2/main.py b/src/libprs500/gui2/main.py index a4e33dfcc7..5fa0efed5d 100644 --- a/src/libprs500/gui2/main.py +++ b/src/libprs500/gui2/main.py @@ -179,16 +179,16 @@ class Main(MainWindow, Ui_MainWindow): ########################## Connect to device ############################## - def device_detected(self, cls, connected): + def device_detected(self, device, connected): ''' Called when a device is connected to the computer. ''' if connected: - self.device_manager = DeviceManager(cls) + self.device_manager = DeviceManager(device) func = self.device_manager.info_func() self.job_manager.run_device_job(self.info_read, func) - self.set_default_thumbnail(cls.THUMBNAIL_HEIGHT) - self.status_bar.showMessage('Device: '+cls.__name__+' detected.', 3000) + self.set_default_thumbnail(device.THUMBNAIL_HEIGHT) + self.status_bar.showMessage('Device: '+device.__class__.__name__+' detected.', 3000) self.action_sync.setEnabled(True) self.device_connected = True else: