summaryrefslogtreecommitdiff
path: root/noncore/settings/aqpkg/ipkg.cpp
Side-by-side diff
Diffstat (limited to 'noncore/settings/aqpkg/ipkg.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/settings/aqpkg/ipkg.cpp91
1 files changed, 88 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
@@ -140,13 +140,12 @@ void Ipkg :: runIpkg()
// Execute command
dependantPackages = new QList<QString>;
dependantPackages->setAutoDelete( true );
executeIpkgCommand( commands, option );
-
}
void Ipkg :: createSymLinks()
{
if ( option == "install" || option == "reinstall" || option == "upgrade" )
{
@@ -271,12 +270,70 @@ void Ipkg :: removeStatusEntry()
// Remove old status file and put tmp stats file in its place
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 )
{
delete proc;
@@ -380,19 +437,46 @@ void Ipkg :: abort()
void Ipkg :: linkPackage( const QString &packFileName, const QString &dest, const QString &destDir )
{
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/" );
packageFileDir.append( packageFilename );
packageFileDir.append( ".list" );
@@ -516,6 +600,7 @@ void Ipkg :: processLinkDir( const QString &file, const QString &destDir, const
emit outputText( text );
}
}
}
}
}
+*/