//Warning: This assumes that both files are CLOSED bool IndexedEdictFile::buildIndex() { KProcess proc; proc << QStandardPaths::findExecutable("kitengen") << m_dictFile.fileName() << m_indexFile.fileName(); proc.start(); proc.waitForStarted(); do { QApplication::processEvents(); } while( proc.waitForFinished( 5000 ) ); //FIXME: This just cuts the index generator off after 5 sec //FIXME: Check for the result of this operation return proc.exitStatus() == QProcess::NormalExit && proc.exitCode() == 0; }
void QGpgMECryptoConfigComponent::runGpgConf() { const QString gpgconf = QGpgMECryptoConfig::gpgConfPath(); if ( gpgconf.isEmpty() ) { kWarning(5150) << "Can't get path to gpgconf executable..."; return; } // Run gpgconf --list-options <component>, and create all groups and entries for that component KProcess proc; proc << gpgconf; proc << "--list-options"; proc << mName; //kDebug(5150) <<"Running gpgconf --list-options" << mName; connect( &proc, SIGNAL(readyReadStandardOutput()), this, SLOT(slotCollectStdOut()) ); mCurrentGroup = 0; // run the process: int rc = 0; proc.setOutputChannelMode( KProcess::OnlyStdoutChannel ); proc.start(); if ( !proc.waitForFinished() ) rc = -2; else if ( proc.exitStatus() == QProcess::NormalExit ) rc = proc.exitCode(); else rc = -1; if( rc != 0 ) // can happen when using the wrong version of gpg... kWarning(5150) <<"Running 'gpgconf --list-options" << mName <<"' failed." << strerror( rc ) <<", but try that command to see the real output"; else { if ( mCurrentGroup && !mCurrentGroup->mEntriesNaturalOrder.empty() ) { // only add non-empty groups mGroupsByName.insert( mCurrentGroupName, mCurrentGroup ); mGroupsNaturalOrder.push_back( std::make_pair( mCurrentGroupName, mCurrentGroup ) ); } } }
void QGpgMECryptoConfig::runGpgConf( bool showErrors ) { // Run gpgconf --list-components to make the list of components KProcess process; process << gpgConfPath(); process << "--list-components"; connect( &process, SIGNAL(readyReadStandardOutput()), this, SLOT(slotCollectStdOut()) ); // run the process: int rc = 0; process.setOutputChannelMode( KProcess::OnlyStdoutChannel ); process.start(); if ( !process.waitForFinished() ) rc = -2; else if ( process.exitStatus() == QProcess::NormalExit ) rc = process.exitCode(); else rc = -1; // handle errors, if any (and if requested) if ( showErrors && rc != 0 ) { QString reason; if ( rc == -1 ) reason = i18n( "program terminated unexpectedly" ); else if ( rc == -2 ) reason = i18n( "program not found or cannot be started" ); else reason = QString::fromLocal8Bit( strerror(rc) ); // XXX errno as an exit code? QString wmsg = i18n("<qt>Failed to execute gpgconf:<p>%1</p></qt>", reason); kWarning(5150) << wmsg; // to see it from test_cryptoconfig.cpp KMessageBox::error(0, wmsg); } mParsed = true; }
bool ImageGrayScale::image2GrayScaleImageMagick(const QString& src, const QString& dest, QString& err) { KProcess process; process.clearProgram(); process << "convert"; process << "-type" << "Grayscale"; process << src + QString("[0]") << dest; kDebug( 51000 ) << "ImageMagick Command line: " << process.program() << endl; process.start(); if (!process.waitForFinished()) return false; if (process.exitStatus() != QProcess::NormalExit) return false; switch (process.exitCode()) { case 0: // Process finished successfully ! { return true; break; } case 15: // process aborted ! { return false; break; } } // Processing error ! m_stdErr = process.readAllStandardError(); err = i18n("Cannot convert to gray scale: %1", m_stdErr.replace('\n', ' ')); return false; }
bool ImageRotate::rotateImageMagick(const QString& src, const QString& dest, RotateAction angle, QString& err) { KProcess process; process.clearProgram(); process << "convert"; process << "-rotate"; switch(angle) { case (Rot90): { process << "90"; break; } case (Rot180): { process << "180"; break; } case (Rot270): { process << "270"; break; } case (Rot0): { break; } default: { kError() << "ImageRotate: Nonstandard rotation angle"; err = i18n("Nonstandard rotation angle"); return false; } } process << src + QString("[0]") << dest; kDebug() << "ImageMagick Command line: " << process.program(); process.start(); if (!process.waitForFinished()) return false; if (process.exitStatus() != QProcess::NormalExit) return false; switch (process.exitCode()) { case 0: // Process finished successfully ! { return true; break; } case 15: // process aborted ! { return false; break; } } // Processing error ! m_stdErr = process.readAllStandardError(); err = i18n("Cannot rotate: %1", m_stdErr.replace('\n', ' ')); return false; }
bool Utils::updateMetadataImageMagick(const QString& src, QString& err) { QFileInfo finfo(src); if (src.isEmpty() || !finfo.isReadable()) { err = i18n("unable to open source file"); return false; } QImage img(src); QImage iptcPreview = img.scaled(1280, 1024, Qt::KeepAspectRatio, Qt::SmoothTransformation); QImage exifThumbnail = iptcPreview.scaled(160, 120, Qt::KeepAspectRatio, Qt::SmoothTransformation); KExiv2Iface::KExiv2 meta; meta.load(src); meta.setImageOrientation(KExiv2Iface::KExiv2::ORIENTATION_NORMAL); meta.setImageProgramId(QString("Kipi-plugins"), QString(kipiplugins_version)); meta.setImageDimensions(img.size()); meta.setExifThumbnail(exifThumbnail); meta.setImagePreview(iptcPreview); #if KEXIV2_VERSION >= 0x010000 QByteArray exifData = meta.getExifEncoded(true); #else QByteArray exifData = meta.getExif(true); #endif QByteArray iptcData = meta.getIptc(true); QByteArray xmpData = meta.getXmp(); KTemporaryFile exifTemp; exifTemp.setSuffix(QString("kipipluginsexif.app1")); exifTemp.setAutoRemove(true); if ( !exifTemp.open() ) { err = i18n("unable to open temp file"); return false; } QString exifFile = exifTemp.fileName(); QDataStream streamExif( &exifTemp ); streamExif.writeRawData(exifData.data(), exifData.size()); exifTemp.close(); KTemporaryFile iptcTemp; iptcTemp.setSuffix(QString("kipipluginsiptc.8bim")); iptcTemp.setAutoRemove(true); iptcTemp.open(); if ( !iptcTemp.open() ) { err = i18n("Cannot rotate: unable to open temp file"); return false; } QString iptcFile = iptcTemp.fileName(); QDataStream streamIptc( &iptcTemp ); streamIptc.writeRawData(iptcData.data(), iptcData.size()); iptcTemp.close(); KTemporaryFile xmpTemp; xmpTemp.setSuffix(QString("kipipluginsxmp.xmp")); xmpTemp.setAutoRemove(true); if ( !xmpTemp.open() ) { err = i18n("unable to open temp file"); return false; } QString xmpFile = xmpTemp.fileName(); QDataStream streamXmp( &xmpTemp ); streamXmp.writeRawData(xmpData.data(), xmpData.size()); xmpTemp.close(); KProcess process; process.clearProgram(); process << "mogrify"; process << "-profile"; process << exifFile; process << "-profile"; process << iptcFile; process << "-profile"; process << xmpFile; process << src + QString("[0]"); kDebug() << "ImageMagick Command line: " << process.program(); process.start(); if (!process.waitForFinished()) return false; if (process.exitStatus() != QProcess::NormalExit) return false; switch (process.exitCode()) { case 0: // Process finished successfully ! { return true; break; } case 15: // process aborted ! { return false; break; } } // Processing error ! m_stdErr = process.readAllStandardError(); err = i18n("Cannot update metadata: %1", m_stdErr.replace('\n', ' ')); return false; }
Defines MsvcCompiler::defines(const QString&) const { Defines ret; //Get standard macros from kdevmsvcdefinehelpers KProcess proc; proc.setOutputChannelMode( KProcess::MergedChannels ); proc.setTextModeEnabled( true ); // we want to use kdevmsvcdefinehelper as a pseudo compiler backend which // returns the defines used in msvc. there is no such thing as -dM with cl.exe proc << path() << "/nologo" << "/Bxkdevmsvcdefinehelper" << "empty.cpp"; // this will fail, so check on that as well if ( proc.execute( 5000 ) == 2 ) { QString line; proc.readLine(); // read the filename while ( proc.canReadLine() ) { QByteArray buff = proc.readLine(); definesAndIncludesDebug() << "msvcstandardmacros:" << buff; if ( !buff.isEmpty() ) { line = buff; if ( line.startsWith( "#define " ) ) { line = line.right( line.length() - 8 ).trimmed(); int pos = line.indexOf( ' ' ); if ( pos != -1 ) { ret[line.left( pos )] = line.right( line.length() - pos - 1 ).toUtf8(); } else { ret[line] = ""; } } } } } else { definesAndIncludesDebug() << "Unable to read standard c++ macro definitions from " + path(); while ( proc.canReadLine() ){ definesAndIncludesDebug() << proc.readLine(); } definesAndIncludesDebug() << proc.exitCode(); } // MSVC builtin attributes { ret["__cdecl"] = ""; ret["__fastcall"] = ""; ret["__stdcall"] = ""; ret["__thiscall"] = ""; } // MSVC builtin types // see http://msdn.microsoft.com/en-us/library/cc953fe1.aspx { ret["__int8"] = "char"; ret["__int16"] = "short"; ret["__int32"] = "int"; ret["__int64"] = "long long"; ret["__int16"] = "short"; ret["__ptr32"] = ""; ret["__ptr64"] = ""; } // MSVC specific modifiers // see http://msdn.microsoft.com/en-us/library/vstudio/s04b5w00.aspx { ret["__sptr"] = ""; ret["__uptr"] = ""; ret["__unaligned"] = ""; ret["__w64"] = ""; } // MSVC function specifiers // see http://msdn.microsoft.com/de-de/library/z8y1yy88.aspx { ret["__inline"] = ""; ret["__forceinline"] = ""; } return ret; }