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 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; KUrl outUrl = d->tools.m_itemUrl; KUrl workUrl = !d->settings.useOrgAlbum ? d->settings.workingUrl : KUrl(d->tools.m_itemUrl.directory(KUrl::AppendTrailingSlash)); KUrl inUrl; KUrl::List tmp2del; DImg tmpImage; QString errMsg; foreach (const BatchToolSet& set, d->tools.m_toolsList) { d->tool = BatchToolsManager::instance()->findTool(set.name, set.group)->clone(); inUrl = outUrl; index = set.index + 1; kDebug() << "Tool : index= " << index << " :: name= " << set.name << " :: group= " << set.group << " :: wurl= " << workUrl; d->tool->setImageData(tmpImage); 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->setRawDecodingSettings(d->settings.rawDecodingSettings); d->tool->setResetExifOrientationAllowed(d->settings.exifSetOrientation); d->tool->setLastChainedTool(index == d->tools.m_toolsList.count()); 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); 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 KUrl& url, tmp2del) { unlink(QFile::encodeName(url.toLocalFile())); }