summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/aqpkg/ipkg.cpp91
-rw-r--r--noncore/settings/aqpkg/ipkg.h3
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
@@ -142,9 +142,8 @@ void Ipkg :: runIpkg()
dependantPackages = new QList<QString>;
dependantPackages->setAutoDelete( true );
executeIpkgCommand( commands, option );
-
}
void Ipkg :: createSymLinks()
{
@@ -273,8 +272,66 @@ void Ipkg :: removeStatusEntry()
remove( statusFile );
rename( outStatusFile, statusFile );
}
+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*/ )
{
// If one is already running - should never be but just to be safe
if ( proc )
@@ -382,15 +439,42 @@ void Ipkg :: linkPackage( const QString &packFileName, const QString &dest, cons
{
if ( dest == "root" || dest == "/" )
return;
+ 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();
QStringList *fileList = getList( packFileName, destDir );
qApp->processEvents();
processFileList( fileList, destDir );
- delete fileList;
+ delete fileList;*/
}
-
+/*
QStringList* Ipkg :: getList( const QString &packageFilename, const QString &destDir )
{
QString packageFileDir = destDir;
packageFileDir.append( "/usr/lib/ipkg/info/" );
@@ -518,4 +602,5 @@ 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
@@ -69,10 +69,12 @@ signals:
void outputText( const QString &text );
void ipkgFinished();
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();
void abort();
@@ -91,8 +93,9 @@ private:
bool finished;
QList<QString> *dependantPackages;
+ int executeIpkgLinkCommand( QStringList *cmd );
int executeIpkgCommand( QStringList &cmd, const QString option );
void removeStatusEntry();
void linkPackage( const QString &packFileName, const QString &dest, const QString &destDir );
QStringList* getList( const QString &packageFilename, const QString &destDir );