diff options
author | kh1 <qt-info@nokia.com> | 2011-05-13 18:36:26 +0200 |
---|---|---|
committer | kh1 <qt-info@nokia.com> | 2011-05-16 20:37:25 +0200 |
commit | 367477f07449f25cdfbd2c1d4274df698f279a21 (patch) | |
tree | cf3edcc27c8f2e4ef144c7c02dd9ad3e29ab04b0 /installerbuilder/libinstaller/fsengineclient.cpp | |
parent | 2f382c906bb77a99ff3c2363304fff5138e86497 (diff) |
Make use of the QProcessWrapper own source.
Diffstat (limited to 'installerbuilder/libinstaller/fsengineclient.cpp')
-rw-r--r-- | installerbuilder/libinstaller/fsengineclient.cpp | 367 |
1 files changed, 0 insertions, 367 deletions
diff --git a/installerbuilder/libinstaller/fsengineclient.cpp b/installerbuilder/libinstaller/fsengineclient.cpp index 3df09b166..f5f8d8c5b 100644 --- a/installerbuilder/libinstaller/fsengineclient.cpp +++ b/installerbuilder/libinstaller/fsengineclient.cpp @@ -1269,372 +1269,5 @@ RETURN_NO_ARGS_CONST( QSettingsWrapper::Status, status ); VOID_NO_ARGS( sync ) RETURN_TWO_ARGS_CONST( QVariant, value, const QString&, const QVariant& ) -class QProcessWrapper::Private -{ -public: - Private( QProcessWrapper* qq ) - : q( qq ), - ignoreTimer( false ), - socket( 0 ) - { - } - - bool createSocket() - { - if( !FSEngineClientHandler::instance()->isActive() ) - return false; - if( socket != 0 && socket->state() == static_cast< int >( QLocalSocket::ConnectedState ) ) - return true; - if( socket != 0 ) - delete socket; -#ifdef FSENGINE_TCP - socket = new QTcpSocket; -#else - socket = new QLocalSocket; -#endif - if( !FSEngineClientHandler::instance()->connect( socket ) ) - return false; - stream.setDevice( socket ); - stream.setVersion( QDataStream::Qt_4_2 ); - - stream << QString::fromLatin1( "createQProcess" ); - socket->flush(); - stream.device()->waitForReadyRead( -1 ); - quint32 test; - stream >> test; - stream.device()->readAll(); - - q->startTimer( 250 ); - - return true; - } - - class TimerBlocker - { - public: - explicit TimerBlocker( const QProcessWrapper* wrapper ) - : w( const_cast< QProcessWrapper* >( wrapper ) ) - { - w->d->ignoreTimer = true; - } - ~TimerBlocker() - { - w->d->ignoreTimer = false; - } - - private: - QProcessWrapper* const w; - }; - -private: - QProcessWrapper* const q; - -public: - bool ignoreTimer; - - QProcess process; -#ifdef FSENGINE_TCP - mutable QTcpSocket* socket; -#else - mutable QLocalSocket* socket; -#endif - mutable QDataStream stream; -}; - -QProcessWrapper::QProcessWrapper( QObject* parent ) - : QObject( parent ), - d( new Private( this ) ) -{ - KDMetaMethodIterator it( QProcess::staticMetaObject, KDMetaMethodIterator::Signal, KDMetaMethodIterator::IgnoreQObjectMethods ); - while( it.hasNext() ) - { - it.next(); - connect( &d->process, it.connectableSignature(), this, it.connectableSignature() ); - } -} - -QProcessWrapper::~QProcessWrapper() -{ - if( d->socket != 0 ) - { - d->stream << QString::fromLatin1( "destroyQProcess" ); - d->socket->flush(); - quint32 result; - d->stream >> result; - - if( QThread::currentThread() == d->socket->thread() ) - { - d->socket->close(); - delete d->socket; - } - else - { - d->socket->deleteLater(); - } - } - delete d; -} - -void QProcessWrapper::timerEvent( QTimerEvent* event ) -{ - Q_UNUSED( event ) - - if( d->ignoreTimer ) - return; - - QList< QVariant > receivedSignals; - - { - const Private::TimerBlocker blocker( this ); - - d->stream << QString::fromLatin1( "getQProcessSignals" ); - d->socket->flush(); - d->stream.device()->waitForReadyRead( -1 ); - quint32 test; - d->stream >> test; - d->stream >> receivedSignals; - d->stream.device()->readAll(); - } - - while( !receivedSignals.isEmpty() ) - { - const QString name = receivedSignals.takeFirst().toString(); - if( name == QLatin1String( "started" ) ) - { - emit started(); - } - else if( name == QLatin1String( "readyRead" ) ) - { - emit readyRead(); - } - else if( name == QLatin1String( "stateChanged" ) ) - { - const QProcess::ProcessState newState = static_cast< QProcess::ProcessState >( receivedSignals.takeFirst().toInt() ); - emit stateChanged( newState ); - } - else if( name == QLatin1String( "finished" ) ) - { - const int exitCode = receivedSignals.takeFirst().toInt(); - const QProcess::ExitStatus exitStatus = static_cast< QProcess::ExitStatus >( receivedSignals.takeFirst().toInt() ); - emit finished( exitCode ); - emit finished( exitCode, exitStatus ); - } - } -} - -static QDataStream& operator>>( QDataStream& stream, QProcessWrapper::ProcessState& state ) -{ - int s; - stream >> s; - state = static_cast< QProcessWrapper::ProcessState >( s ); - return stream; -} - -static QDataStream& operator>>( QDataStream& stream, QProcessWrapper::ExitStatus& status ) -{ - int s; - stream >> s; - status = static_cast< QProcessWrapper::ExitStatus >( s ); - return stream; -} - -static QDataStream& operator>>( QDataStream& stream, QProcessWrapper::ProcessChannelMode& status ) -{ - int s; - stream >> s; - status = static_cast< QProcessWrapper::ProcessChannelMode >( s ); - return stream; -} - -static QDataStream& operator>>( QDataStream& stream, QProcessWrapper::ProcessChannel& status ) -{ - int s; - stream >> s; - status = static_cast< QProcessWrapper::ProcessChannel >( s ); - return stream; -} - -#undef RETURN_NO_ARGS_CONST -#define RETURN_NO_ARGS_CONST( RESULT, NAME ) \ -RESULT QProcessWrapper::NAME() const \ -{ \ - const Private::TimerBlocker blocker( this );\ - if( d->createSocket() ) \ - return callRemoteMethod< RESULT >( d->stream, QLatin1String( "QProcess::"#NAME ) ); \ - else \ - return static_cast< RESULT >( d->process.NAME() ); \ -} - -#define RETURN_NO_ARGS( RESULT, NAME ) \ -RESULT QProcessWrapper::NAME() \ -{ \ - const Private::TimerBlocker blocker( this );\ - if( d->createSocket() ) \ - return callRemoteMethod< RESULT >( d->stream, QLatin1String( "QProcess::"#NAME ) ); \ - else \ - return d->process.NAME(); \ -} - -#undef RETURN_ONE_ARG -#define RETURN_ONE_ARG( RESULT, NAME, TYPE1 ) \ -RESULT QProcessWrapper::NAME( TYPE1 param1 ) \ -{ \ - const Private::TimerBlocker blocker( this );\ - if( d->createSocket() ) \ - return callRemoteMethod< RESULT >( d->stream, QLatin1String( "QProcess::"#NAME ), param1 ); \ - else \ - return d->process.NAME( param1 ); \ -} - -#undef RETURN_ONE_ARG_CONST -#define RETURN_ONE_ARG_CONST( RESULT, NAME, TYPE1 ) \ -RESULT QProcessWrapper::NAME( TYPE1 param1 ) const \ -{ \ - const Private::TimerBlocker blocker( this );\ - if( d->createSocket() ) \ - return callRemoteMethod< RESULT >( d->stream, QLatin1String( "QProcess::"#NAME ), param1 ); \ - else \ - return d->process.NAME( param1 ); \ -} - -#undef RETURN_TWO_ARGS_CONST -#define RETURN_TWO_ARGS_CONST( RESULT, NAME, TYPE1, TYPE2 ) \ -RESULT QProcessWrapper::NAME( TYPE1 param1, TYPE2 param2 ) const \ -{ \ - const Private::TimerBlocker blocker( this );\ - if( d->createSocket() ) \ - return callRemoteMethod< RESULT >( d->stream, QLatin1String( "QProcess::"#NAME ), param1, param2 ); \ - else \ - return d->process.NAME( param1, param2 ); \ -} - -#undef VOID_NO_ARGS -#define VOID_NO_ARGS( NAME ) \ -void QProcessWrapper::NAME() \ -{ \ - qDebug() << Q_FUNC_INFO; \ - const Private::TimerBlocker blocker( this );\ - if( d->createSocket() ) \ - callRemoteVoidMethod( d->stream, QLatin1String( "QProcess::"#NAME ) ); \ - else \ - d->process.NAME(); \ -} - -#undef VOID_ONE_ARG -#define VOID_ONE_ARG( NAME, TYPE1 ) \ -void QProcessWrapper::NAME( TYPE1 param1 ) \ -{ \ - qDebug() << Q_FUNC_INFO; \ - const Private::TimerBlocker blocker( this );\ - if( d->createSocket() ) \ - callRemoteVoidMethod( d->stream, QLatin1String( "QProcess::"#NAME ), param1 ); \ - else \ - d->process.NAME( param1 ); \ -} - -#undef VOID_TWO_ARGS -#define VOID_TWO_ARGS( NAME, TYPE1, TYPE2 ) \ -void QProcessWrapper::NAME( TYPE1 param1, TYPE2 param2 ) \ -{ \ - qDebug() << Q_FUNC_INFO; \ - const Private::TimerBlocker blocker( this );\ - if( d->createSocket() ) \ - callRemoteVoidMethod( d->stream, QLatin1String( "QProcess::"#NAME ), param1, param2 ); \ - else \ - d->process.NAME( param1, param2 ); \ -} - -#define VOID_THREE_ARGS( NAME, TYPE1, TYPE2, TYPE3 ) \ -void QProcessWrapper::NAME( TYPE1 param1, TYPE2 param2, TYPE3 param3 ) \ -{ \ - qDebug() << Q_FUNC_INFO; \ - const Private::TimerBlocker blocker( this );\ - if( d->createSocket() ) \ - callRemoteVoidMethod( d->stream, QLatin1String( "QProcess::"#NAME ), param1, param2, param3 ); \ - else \ - d->process.NAME( param1, param2, param3 ); \ -} - -VOID_NO_ARGS( closeWriteChannel ); -RETURN_NO_ARGS_CONST( int, exitCode ); -RETURN_NO_ARGS_CONST( QProcessWrapper::ExitStatus, exitStatus ); -VOID_NO_ARGS( kill ) -RETURN_NO_ARGS( QByteArray, readAll ); -RETURN_NO_ARGS( QByteArray, readAllStandardOutput ); -VOID_THREE_ARGS( start, const QString&, const QStringList&, QIODevice::OpenMode ) -VOID_ONE_ARG( start, const QString& ) - -bool startDetached( const QString& program, const QStringList& args, const QString& workingDirectory, qint64* pid ); - -bool QProcessWrapper::startDetached( const QString& program, const QStringList& arguments, const QString& workingDirectory, qint64* pid ) -{ - QProcessWrapper w; - if( w.d->createSocket() ) - { - const QPair< bool, qint64 > result = callRemoteMethod< QPair< bool, qint64 > >( w.d->stream, QLatin1String( "QProcess::startDetached" ), program, arguments, workingDirectory ); - if( pid != 0 ) - *pid = result.second; - return result.first; - } - else - { - return ::startDetached( program, arguments, workingDirectory, pid ); - } -} - -bool QProcessWrapper::startDetached( const QString& program, const QStringList& arguments ) -{ - return startDetached( program, arguments, QDir::currentPath() ); -} - -bool QProcessWrapper::startDetached( const QString& program ) -{ - return startDetached( program, QStringList() ); -} - -void QProcessWrapper::setProcessChannelMode( QProcessWrapper::ProcessChannelMode mode ) -{ \ - const Private::TimerBlocker blocker( this );\ - if( d->createSocket() ) \ - callRemoteVoidMethod( d->stream, QLatin1String( "QProcess::setProcessChannelMode" ), static_cast<QProcess::ProcessChannelMode>( mode ) ); \ - else \ - d->process.setProcessChannelMode( static_cast<QProcess::ProcessChannelMode>( mode ) ); \ -} - -/*! - Cancels the process. This methods tries to terminate the process - gracefully by calling QProcess::terminate. After 10 seconds, the process gets killed. - */ -void QProcessWrapper::cancel() -{ - if( state() == QProcessWrapper::Running ) - terminate(); - if( !waitForFinished( 10000 ) ) - kill(); -} - -void QProcessWrapper::setReadChannel( QProcessWrapper::ProcessChannel chan ) -{ \ - const Private::TimerBlocker blocker( this );\ - if( d->createSocket() ) \ - callRemoteVoidMethod( d->stream, QLatin1String( "QProcess::setReadChannel" ), static_cast<QProcess::ProcessChannel>( chan ) ); \ - else \ - d->process.setReadChannel( static_cast<QProcess::ProcessChannel>( chan ) ); \ -} - -RETURN_NO_ARGS_CONST( QProcessWrapper::ProcessState, state ) -VOID_NO_ARGS( terminate ) -RETURN_ONE_ARG( bool, waitForFinished, int ) -RETURN_ONE_ARG( bool, waitForStarted, int ) -RETURN_NO_ARGS_CONST( QProcessWrapper::ProcessChannel, readChannel ) -RETURN_NO_ARGS_CONST( QProcessWrapper::ProcessChannelMode, processChannelMode ) -RETURN_NO_ARGS_CONST( QString, workingDirectory ) -RETURN_ONE_ARG( qint64, write, const QByteArray& ) -VOID_ONE_ARG( setEnvironment, const QStringList& ) -#ifdef Q_OS_WIN -VOID_ONE_ARG( setNativeArguments, const QString& ) -#endif -VOID_ONE_ARG( setWorkingDirectory, const QString& ) - #include "moc_fsengineclient.cpp" #include "fsengineclient.moc" |