void SingleThreadedApplication::run() { signalDone(); boost::mutex::scoped_lock lock(newEventMutex_); eventLock_ = &lock; for (;;) { if (!newEvent_) { log("debug") << "STA" << ": [thread] waiting for event"; newEventCondition_.wait(lock); } log("debug") << "STA" << ": [thread] handling event"; attachThread(true); try { threadNotify(*event_); } catch (std::exception& e) { log("error") << "STA" << ": [thread] Caught exception: " << e.what(); exception_ = true; } catch (...) { log("error") << "STA" << ": [thread] Caught exception"; exception_ = true; } attachThread(false); signalDone(); if (finalized_) break; newEvent_ = false; } signalDone(); }
TrackFileReader::TrackFileReader(QObject *parent) : QObject(parent), _worker(new TrackFileReaderWorker(this)) { connect(_worker, &TrackFileReaderWorker::signalReady, this, &TrackFileReader::signalReady); connect(_worker, &TrackFileReaderWorker::signalError, this, &TrackFileReader::signalError); connect(_worker, SIGNAL(signalUpdate(const QString&, int, int)), SIGNAL(signalUpdate(const QString&, int, int))); connect(_worker, SIGNAL(signalDone()), SIGNAL(signalDone())); }
void DispatchThread::run() { dispatchObject_ = new DispatchObject(this); signalDone(); exec(); delete dispatchObject_; signalDone(); }
void run() { MetaEngine meta; if (!meta.load(url.toLocalFile())) { qDebug() << url.fileName() << " : cannot load metadata!"; } else { if (direction == QLatin1String("READ")) { qDebug() << url.fileName() << " :: Dim: " << meta.getImageDimensions() << " :: Dat: " << meta.getImageDateTime() << " :: Com: " << meta.getCommentsDecoded() << " :: Ori: " << meta.getImageOrientation() << " :: Col: " << meta.getImageColorWorkSpace(); } else { qDebug() << "Patch file: " << url.fileName(); meta.setImageProgramId(QLatin1String("digiKam"), QLatin1String("Exiv2")); meta.applyChanges(); } } emit signalDone(); }
void DispatchThread::run() { if (qtEventLoop_) dispatchObject_ = new DispatchObject(this); signalDone(); if (qtEventLoop_) exec(); else myExec(); delete dispatchObject_; signalDone(); }
void TrackFileReaderWorker::run() { while (!_cancelRequested) { WorkPair work; _inMutex.lock(); if (!_input.isEmpty()) { work = _input.first(); _input.pop_front(); QString what = QString("Parsing %0").arg(work.first); emit signalUpdate(what, _workCount, _workCount - _input.length()); } else { _workCount = 0; emit signalDone(); _inMutex.unlock(); break; } _inMutex.unlock(); std::string whyNot; if (!_reader->read(work.first, work.second, &whyNot)) { QString error = QString::fromStdString(whyNot); emit signalError(work.first, error); } else { emit signalReady(work.first, work.second); } } };
void ImageQualityTask::run() { if (!d->cancel) { // Get item preview to perform quality analysis. No need to load whole image, this will be slower. // TODO : check if 1024 pixels size is enough to get suitable Quality results. DImg dimg = PreviewLoadThread::loadFastSynchronously(d->path, 1024); if (!dimg.isNull() && !d->cancel) { // TODO : run here Quality analysis backend and store Pick Label result to DB. // Backend Input : d->quality as Quality analysis settings, // dimg as reduced size image data to parse, // d->path as file path to patch DB properties. // Result : Backend must scan Quality of image depending of settings and compute a Quality estimation accordingly. // Finaly, using file path, DB Pick Label properties must be assigned through ImageInfo interface. // Warning : All code here will run in a separated thread and must be re-entrant/thread-safe. Only pure computation // must be processed. GUI calls are prohibited. ImageInfo and DImg can be used safety in thread. PickLabel pick; d->imgqsort = new ImgQSort(dimg, d->quality, &pick); d->imgqsort->startAnalyse(); ImageInfo info = ImageInfo::fromLocalFile(d->path); info.setPickLabel(pick); delete d->imgqsort; //delete image data after setting label d->imgqsort = 0; } // Dispatch progress to Progress Manager QImage qimg = dimg.smoothScale(22, 22, Qt::KeepAspectRatio).copyQImage(); emit signalFinished(qimg); emit signalDone(); } }
void MetadataTask::run() { if(d->cancel) { return; } if (d->direction == MetadataSynchronizer::WriteFromDatabaseToFile) { MetadataHub fileHub; // read in from database fileHub.load(d->item); // write out to file DMetadata if(d->tagsOnly) { fileHub.writeTags(d->item.filePath()); } else { fileHub.write(d->item.filePath(), MetadataHub::WRITE_ALL, true); } } else // MetadataSynchronizer::ReadFromFileToDatabase { CollectionScanner scanner; scanner.scanFile(d->item, CollectionScanner::Rescan); } emit signalFinished(QImage()); emit signalDone(); }
void IndicatorDialog::done () { emit signalDone(_indicator->currentText(), _row->value(), _name->text()); accept(); }
void DispatchThread::doEvent() { app_->attachThread(true); app_->realNotify(*event_); signalDone(); app_->attachThread(false); }
void DispatchThread::doEvent() { // qDebug() << "--- DispatchThread doEvent: Thr=" << QThread::currentThread(); _app->attachThread(true); _app->realNotify(*_event); signalDone(); _app->attachThread(false); }
void DispatchThread::run() { // app_->createQt(); // qDebug() << "--- DispatchThread run: Thr=" << QThread::currentThread(); if (_qtEventLoop) _dispatchObject = new DispatchObject(this); signalDone(); if (_qtEventLoop) exec(); else myExec(); delete _dispatchObject; // app_->destroyQt(); signalDone(); }
void WidgetMain::createUploadSetting() { if(NULL == pUploadSetting_) { pUploadSetting_ = new UploadSettingForm(this->rect(), this); connect(pUploadSetting_.data(), SIGNAL(signalDone()), this, SLOT(slotDone())); connect(pUploadSetting_, SIGNAL(signalSelectBoardType(QString,QString)), this, SLOT(slotBoardTypeItemClicked(QString,QString))); connect(pUploadSetting_, SIGNAL(signalSelectSerial(QString)), this, SLOT(slotSerialItemClicked(QString))); pUploadSetting_ ->setAttribute(Qt::WA_DeleteOnClose); qDebug() << this->pos(); pUploadSetting_->show(); } }
void DispatchThread::doEvent() { log("debug") << "WQApplication: [thread] handling event"; app_->attachThread(true); try { app_->realNotify(*event_); } catch (std::exception& e) { log("error") << "WQApplication: [thread] Caught exception: " << e.what(); exception_ = true; } catch (...) { log("error") << "WQApplication: [thread] Caught exception"; exception_ = true; } app_->attachThread(false); signalDone(); }
void CustomFileDialog::done( int i ) { emit signalDone(i); }
void Task::run() { if (d->cancel) { return; } emitActionData(ActionData::BatchStarted); // Loop with all batch tools operations to apply on item. bool success = false; int index = 0; QUrl outUrl = d->tools.m_itemUrl; QUrl workUrl = !d->settings.useOrgAlbum ? d->settings.workingUrl : d->tools.m_itemUrl.adjusted(QUrl::RemoveFilename); QUrl inUrl; QList<QUrl> tmp2del; DImg tmpImage; QString errMsg; // ImageInfo must be tread-safe. ImageInfo source = ImageInfo::fromUrl(d->tools.m_itemUrl); foreach (const BatchToolSet& set, d->tools.m_toolsList) { d->tool = BatchToolsManager::instance()->findTool(set.name, set.group)->clone(); inUrl = outUrl; index = set.index + 1; qCDebug(DIGIKAM_GENERAL_LOG) << "Tool : index= " << index << " :: name= " << set.name << " :: group= " << set.group << " :: wurl= " << workUrl; d->tool->setImageData(tmpImage); d->tool->setImageInfo(source); d->tool->setInputUrl(inUrl); d->tool->setWorkingUrl(workUrl); d->tool->setSettings(set.settings); d->tool->setIOFileSettings(d->settings.ioFileSettings); d->tool->setRawLoadingRules(d->settings.rawLoadingRule); d->tool->setDRawDecoderSettings(d->settings.rawDecodingSettings); d->tool->setResetExifOrientationAllowed(d->settings.exifSetOrientation); if (index == d->tools.m_toolsList.count()) { d->tool->setLastChainedTool(true); } // If the next tool is under the custom group (user script) // treat as the last chained tool, i.e. save image to file else if (d->tools.m_toolsList[index].group == BatchTool::CustomTool) { d->tool->setLastChainedTool(true); } else { d->tool->setLastChainedTool(false); } d->tool->setOutputUrlFromInputUrl(); d->tool->setBranchHistory(true); outUrl = d->tool->outputUrl(); success = d->tool->apply(); tmpImage = d->tool->imageData(); errMsg = d->tool->errorDescription(); tmp2del.append(outUrl); if (d->cancel) { emitActionData(ActionData::BatchCanceled); emit signalDone(); delete d->tool; d->tool = 0; return; } else if (!success) { emitActionData(ActionData::BatchFailed, errMsg); break; } delete d->tool; d->tool = 0; } // Clean up all tmp url. // We don't remove last output tmp url. tmp2del.removeAll(outUrl); foreach (const QUrl& url, tmp2del) { unlink(QFile::encodeName(url.toLocalFile()).constData()); }
void TimeAdjustTask::run() { if (m_cancel) return; emit signalProcessStarted(d->url); QDateTime dt = d->itemsMap.value(d->url); if (!dt.isValid()) { emit signalProcessEnded(d->url, TimeAdjustList::META_TIME_ERROR); emit signalDone(); return; } bool writeToSidecar = (MetaEngineSettings::instance()->settings() .metadataWritingMode != DMetadata::WRITE_TO_FILE_ONLY); bool metadataChanged = d->settings.updEXIFModDate || d->settings.updEXIFOriDate || d->settings.updEXIFDigDate || d->settings.updEXIFThmDate || d->settings.updIPTCDate || d->settings.updXMPVideo || d->settings.updXMPDate; int status = TimeAdjustList::NOPROCESS_ERROR; if (metadataChanged) { bool ret = true; DMetadata meta; ret &= meta.load(d->url.toLocalFile()); if (ret) { QString exifDateTimeFormat = QLatin1String("yyyy:MM:dd hh:mm:ss"); QString xmpDateTimeFormat = QLatin1String("yyyy:MM:ddThh:mm:ss"); if (writeToSidecar || meta.canWriteExif(d->url.toLocalFile())) { if (d->settings.updEXIFModDate) { if (!d->settings.updIfAvailable || !meta.getExifTagString("Exif.Image.DateTime").isEmpty()) { ret &= meta.setExifTagString("Exif.Image.DateTime", dt.toString(exifDateTimeFormat)); } } if (d->settings.updEXIFOriDate) { if (!d->settings.updIfAvailable || !meta.getExifTagString("Exif.Photo.DateTimeOriginal").isEmpty()) { ret &= meta.setExifTagString("Exif.Photo.DateTimeOriginal", dt.toString(exifDateTimeFormat)); } } if (d->settings.updEXIFDigDate) { if (!d->settings.updIfAvailable || !meta.getExifTagString("Exif.Photo.DateTimeDigitized").isEmpty()) { ret &= meta.setExifTagString("Exif.Photo.DateTimeDigitized", dt.toString(exifDateTimeFormat)); } } if (d->settings.updEXIFThmDate) { if (!d->settings.updIfAvailable || !meta.getExifTagString("Exif.Image.PreviewDateTime").isEmpty()) { ret &= meta.setExifTagString("Exif.Image.PreviewDateTime", dt.toString(exifDateTimeFormat)); } } } else if (d->settings.updEXIFModDate || d->settings.updEXIFOriDate || d->settings.updEXIFDigDate || d->settings.updEXIFThmDate) { ret = false; } if (d->settings.updIPTCDate) { if (writeToSidecar || meta.canWriteIptc(d->url.toLocalFile())) { if (!d->settings.updIfAvailable || !meta.getIptcTagString("Iptc.Application2.DateCreated").isEmpty()) { ret &= meta.setIptcTagString("Iptc.Application2.DateCreated", dt.date().toString(Qt::ISODate)); } if (!d->settings.updIfAvailable || !meta.getIptcTagString("Iptc.Application2.TimeCreated").isEmpty()) { ret &= meta.setIptcTagString("Iptc.Application2.TimeCreated", dt.time().toString(Qt::ISODate)); } } else { ret = false; } } if (d->settings.updXMPDate) { if (writeToSidecar || (meta.supportXmp() && meta.canWriteXmp(d->url.toLocalFile()))) { if (!d->settings.updIfAvailable || !meta.getXmpTagString("Xmp.exif.DateTimeOriginal").isEmpty()) { ret &= meta.setXmpTagString("Xmp.exif.DateTimeOriginal", dt.toString(xmpDateTimeFormat)); } if (!d->settings.updIfAvailable || !meta.getXmpTagString("Xmp.photoshop.DateCreated").isEmpty()) { ret &= meta.setXmpTagString("Xmp.photoshop.DateCreated", dt.toString(xmpDateTimeFormat)); } if (!d->settings.updIfAvailable || !meta.getXmpTagString("Xmp.tiff.DateTime").isEmpty()) { ret &= meta.setXmpTagString("Xmp.tiff.DateTime", dt.toString(xmpDateTimeFormat)); } if (!d->settings.updIfAvailable || !meta.getXmpTagString("Xmp.xmp.CreateDate").isEmpty()) { ret &= meta.setXmpTagString("Xmp.xmp.CreateDate", dt.toString(xmpDateTimeFormat)); } if (!d->settings.updIfAvailable || !meta.getXmpTagString("Xmp.xmp.MetadataDate").isEmpty()) { ret &= meta.setXmpTagString("Xmp.xmp.MetadataDate", dt.toString(xmpDateTimeFormat)); } if (!d->settings.updIfAvailable || !meta.getXmpTagString("Xmp.xmp.ModifyDate").isEmpty()) { ret &= meta.setXmpTagString("Xmp.xmp.ModifyDate", dt.toString(xmpDateTimeFormat)); } } else { ret = false; } } if (d->settings.updXMPVideo) { if (writeToSidecar || (meta.supportXmp() && meta.canWriteXmp(d->url.toLocalFile()))) { if (!d->settings.updIfAvailable || !meta.getXmpTagString("Xmp.video.DateTimeOriginal").isEmpty()) { ret &= meta.setXmpTagString("Xmp.video.DateTimeOriginal", dt.toString(xmpDateTimeFormat)); } if (!d->settings.updIfAvailable || !meta.getXmpTagString("Xmp.video.DateTimeDigitized").isEmpty()) { ret &= meta.setXmpTagString("Xmp.video.DateTimeDigitized", dt.toString(xmpDateTimeFormat)); } if (!d->settings.updIfAvailable || !meta.getXmpTagString("Xmp.video.ModificationDate").isEmpty()) { ret &= meta.setXmpTagString("Xmp.video.ModificationDate", dt.toString(xmpDateTimeFormat)); } if (!d->settings.updIfAvailable || !meta.getXmpTagString("Xmp.video.DateUTC").isEmpty()) { ret &= meta.setXmpTagString("Xmp.video.DateUTC", dt.toUTC().toString(xmpDateTimeFormat)); } } else { ret = false; } } ret &= meta.save(d->url.toLocalFile()); if (!ret) { qCDebug(DIGIKAM_DPLUGIN_GENERIC_LOG) << "Failed to update metadata in file " << d->url.fileName(); } } else { qCDebug(DIGIKAM_DPLUGIN_GENERIC_LOG) << "Failed to load metadata from file " << d->url.fileName(); } if (!ret) { status |= TimeAdjustList::META_TIME_ERROR; } } if (d->settings.updFileModDate) { // Since QFileInfo does not support timestamp updates, // we have to use the utime() system call. int modtime; QDateTime unixDate; unixDate.setDate(QDate(1970, 1, 1)); unixDate.setTime(QTime(0, 0, 0, 0)); if (dt < unixDate) modtime = -(dt.secsTo(unixDate) + (60 * 60)); else modtime = dt.toTime_t(); struct utimbuf ut; ut.modtime = modtime; ut.actime = QDateTime::currentDateTime().toTime_t(); if (::utime(QFile::encodeName(d->url.toLocalFile()).constData(), &ut) != 0) { status |= TimeAdjustList::FILE_TIME_ERROR; } } if (writeToSidecar && DMetadata::hasSidecar(d->url.toLocalFile())) { QT_STATBUF st; if (QT_STAT(QFile::encodeName(d->url.toLocalFile()).constData(), &st) == 0) { struct utimbuf ut; ut.modtime = st.st_mtime; ut.actime = st.st_atime; if (::utime(QFile::encodeName(DMetadata::sidecarPath(d->url.toLocalFile())).constData(), &ut) != 0) { status |= TimeAdjustList::FILE_TIME_ERROR; } } } if (status == TimeAdjustList::NOPROCESS_ERROR) { emit signalDateTimeForUrl(d->url, dt, d->settings.updFileModDate); } emit signalProcessEnded(d->url, status); emit signalDone(); }