class TypeWorker(QThread): def __init__(self, *args): QThread.__init__(self) self.typeQueue = Queue() self.regImage = re.compile("(JPEG|JPG|jpg|jpeg|GIF|gif|bmp|BMP|png|PNG|pbm|PBM|pgm|PGM|ppm|PPM|xpm|XPM|xbm|XBM|TIFF|tiff).*", re.IGNORECASE) self.typeQueue = [] self.setUniq = set() self.qmutex = QMutex() self.qsem = QSemaphore() def enqueue(self, parent, index, node): self.qmutex.lock() if long(node.this) not in self.setUniq: self.typeQueue.insert(0, (parent, index, node)) self.setUniq.add(long(node.this)) self.qsem.release() self.qmutex.unlock() def clear(self): self.qmutex.lock() self.typeQueue = [] self.setUniq.clear() self.qsem.acquire(self.qsem.available()) self.qmutex.unlock() def get(self): self.qsem.acquire() self.qmutex.lock() res = self.typeQueue.pop() self.setUniq.remove(long(res[2].this)) self.qmutex.unlock() return res def isImage(self, ftype): res = self.regImage.search(ftype) return res def run(self): count = 0 while True: (parent, index, node) = self.get() if node.size(): ftype = str(node.dataType()) if parent.imagesthumbnails and self.isImage(ftype): thumb = ImageThumb() img = thumb.getImage(ftype, node, index) if img: parent.emit(SIGNAL('dataImage'), index, node, img)