-rw-r--r-- | noncore/settings/aqpkg/ipkg.cpp | 91 | ||||
-rw-r--r-- | noncore/settings/aqpkg/ipkg.h | 3 |
2 files changed, 91 insertions, 3 deletions
diff --git a/noncore/settings/aqpkg/ipkg.cpp b/noncore/settings/aqpkg/ipkg.cpp index 420863c..17efda9 100644 --- a/noncore/settings/aqpkg/ipkg.cpp +++ b/noncore/settings/aqpkg/ipkg.cpp @@ -145,3 +145,2 @@ void Ipkg :: runIpkg() executeIpkgCommand( commands, option ); - } @@ -276,2 +275,60 @@ void Ipkg :: removeStatusEntry() +int Ipkg :: executeIpkgLinkCommand( QStringList *cmd ) +{ + // If one is already running - should never be but just to be safe + if ( proc ) + { + delete proc; + proc = 0; + } + + // OK we're gonna use OProcess to run this thing + proc = new OProcess(); + aborted = false; + + // Connect up our slots + connect(proc, SIGNAL(processExited(Opie::Core::OProcess*)), + this, SLOT( linkProcessFinished())); + connect(proc, SIGNAL(receivedStdout(Opie::Core::OProcess*,char*,int)), + this, SLOT(linkCommandStdout(Opie::Core::OProcess*,char*,int))); + + *proc << *cmd; + + if(!proc->start(OProcess::NotifyOnExit, OProcess::All)) + { + emit outputText( tr("Couldn't start ipkg-link process" ) ); + } +} + +void Ipkg::linkProcessFinished() +{ + // Report that the link process succeeded/failed + + if ( error ) + emit outputText( tr("Symbolic linking failed!\n") ); + else + emit outputText( tr("Symbolic linking succeeded.\n") ); + + delete proc; + proc = 0; + finished = true; +} + +void Ipkg::linkCommandStdout(OProcess*, char *buffer, int buflen) +{ + QString lineStr = buffer; + if ( lineStr[buflen-1] == '\n' ) + buflen --; + lineStr = lineStr.left( buflen ); + emit outputText( lineStr ); + + if ( lineStr.find( " not found." ) != -1 ) + { + // Capture ipkg-link errors + error = true; + } + + buffer[0] = '\0'; +} + int Ipkg :: executeIpkgCommand( QStringList &cmd, const QString /*option*/ ) @@ -385,2 +442,29 @@ void Ipkg :: linkPackage( const QString &packFileName, const QString &dest, cons + if( option == "remove" || option == "reinstall" || option == "upgrade" ) + { + QStringList commands; + + if ( runtimeDir != "" ) + { + commands << "cd "; + commands << runtimeDir; + commands << ";"; + } + commands << "ipkg-link" << "remove" << packFileName; + executeIpkgLinkCommand( &commands ); + } + + if( option == "install" || option == "reinstall" || option == "upgrade" ) + { + QStringList commands; + if ( runtimeDir != "" ) + { + commands << "cd "; + commands << runtimeDir; + commands << ";"; + } + commands << "ipkg-link" << "add" << packFileName; + executeIpkgLinkCommand( &commands ); + } +/* qApp->processEvents(); @@ -389,5 +473,5 @@ void Ipkg :: linkPackage( const QString &packFileName, const QString &dest, cons processFileList( fileList, destDir ); - delete fileList; + delete fileList;*/ } - +/* QStringList* Ipkg :: getList( const QString &packageFilename, const QString &destDir ) @@ -521 +605,2 @@ void Ipkg :: processLinkDir( const QString &file, const QString &destDir, const } +*/ diff --git a/noncore/settings/aqpkg/ipkg.h b/noncore/settings/aqpkg/ipkg.h index e216d17..5df63f1 100644 --- a/noncore/settings/aqpkg/ipkg.h +++ b/noncore/settings/aqpkg/ipkg.h @@ -72,4 +72,6 @@ signals: public slots: + void linkCommandStdout(Opie::Core::OProcess*, char *buffer, int buflen); void commandStdout(Opie::Core::OProcess*, char *buffer, int buflen); void commandStderr(Opie::Core::OProcess*, char *buffer, int buflen); + void linkProcessFinished(); void processFinished(); @@ -94,2 +96,3 @@ private: + int executeIpkgLinkCommand( QStringList *cmd ); int executeIpkgCommand( QStringList &cmd, const QString option ); |