author | drw <drw> | 2003-05-17 15:34:26 (UTC) |
---|---|---|
committer | drw <drw> | 2003-05-17 15:34:26 (UTC) |
commit | 325096fb28d129429b17a781c4c1e8d6ca9aa585 (patch) (side-by-side diff) | |
tree | 1e241dcf42a2eb1caf146282c3a20e9716ebc1e2 | |
parent | c48833d1d58c3d691c39df5326c6daff811a6d07 (diff) | |
download | opie-325096fb28d129429b17a781c4c1e8d6ca9aa585.zip opie-325096fb28d129429b17a781c4c1e8d6ca9aa585.tar.gz opie-325096fb28d129429b17a781c4c1e8d6ca9aa585.tar.bz2 |
Fix for bug #913 - added periodic qApp->processEvents() while updating ipkg status file to improve UI responsiveness
-rw-r--r-- | noncore/settings/aqpkg/ipkg.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/noncore/settings/aqpkg/ipkg.cpp b/noncore/settings/aqpkg/ipkg.cpp index 08ae386..3df569b 100644 --- a/noncore/settings/aqpkg/ipkg.cpp +++ b/noncore/settings/aqpkg/ipkg.cpp @@ -166,162 +166,173 @@ void Ipkg :: createSymLinks() linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir ); // link dependant packages that were installed with this release QString *pkg; for ( pkg = dependantPackages->first(); pkg != 0; pkg = dependantPackages->next() ) { if ( *pkg == package ) continue; emit outputText( " " ); emit outputText( QString( "Creating symbolic links for " )+ (*pkg) ); linkPackage( Utils::getPackageNameFromIpkFilename( *pkg ), destination, destDir ); } } } delete dependantPackages; emit outputText( "Finished" ); emit outputText( "" ); } void Ipkg :: removeStatusEntry() { QString statusFile = destDir; if ( statusFile.right( 1 ) != "/" ) statusFile.append( "/" ); statusFile.append( "usr/lib/ipkg/status" ); QString outStatusFile = statusFile; outStatusFile.append( ".tmp" ); emit outputText( "" ); emit outputText( "Removing status entry..." ); QString tempstr = "status file - "; tempstr.append( statusFile ); emit outputText( tempstr ); tempstr = "package - "; tempstr.append( package ); emit outputText( tempstr ); ifstream in( statusFile ); ofstream out( outStatusFile ); if ( !in.is_open() ) { tempstr = "Couldn't open status file - "; tempstr.append( statusFile ); emit outputText( tempstr ); return; } if ( !out.is_open() ) { tempstr = "Couldn't create tempory status file - "; tempstr.append( outStatusFile ); emit outputText( tempstr ); return; } char line[1001]; char k[21]; char v[1001]; QString key; QString value; vector<QString> lines; + int i = 0; do { in.getline( line, 1000 ); if ( in.eof() ) continue; k[0] = '\0'; v[0] = '\0'; sscanf( line, "%[^:]: %[^\n]", k, v ); key = k; value = v; key = key.stripWhiteSpace(); value = value.stripWhiteSpace(); if ( key == "Package" && value == package ) { // Ignore all lines up to next empty do { in.getline( line, 1000 ); if ( in.eof() || QString( line ).stripWhiteSpace() == "" ) continue; } while ( !in.eof() && QString( line ).stripWhiteSpace() != "" ); } lines.push_back( QString( line ) ); out << line << endl; + + // Improve UI responsiveness + i++; + if ( ( i % 50 ) == 0 ) + qApp->processEvents(); } while ( !in.eof() ); // Write lines out vector<QString>::iterator it; for ( it = lines.begin() ; it != lines.end() ; ++it ) { out << (const char *)(*it) << endl; + + // Improve UI responsiveness + i++; + if ( ( i % 50 ) == 0 ) + qApp->processEvents(); } in.close(); out.close(); // Remove old status file and put tmp stats file in its place remove( statusFile ); rename( outStatusFile, statusFile ); } 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; 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(OProcess *)), this, SLOT( processFinished())); connect(proc, SIGNAL(receivedStdout(OProcess *, char *, int)), this, SLOT(commandStdout(OProcess *, char *, int))); connect(proc, SIGNAL(receivedStderr(OProcess *, char *, int)), this, SLOT(commandStderr(OProcess *, char *, int))); for ( QStringList::Iterator it = cmd.begin(); it != cmd.end(); ++it ) { *proc << (*it).latin1(); } // Start the process going finished = false; if(!proc->start(OProcess::NotifyOnExit, OProcess::All)) { emit outputText( QString( "Couldn't start ipkg process" ) ); } } void Ipkg::commandStdout(OProcess*, char *buffer, int buflen) { QString lineStr = buffer; if ( lineStr[buflen-1] == '\n' ) buflen --; lineStr = lineStr.left( buflen ); emit outputText( lineStr ); // check if we are installing dependant packages if ( option == "install" || option == "reinstall" ) { // Need to keep track of any dependant packages that get installed // so that we can create links to them as necessary if ( lineStr.startsWith( "Installing " ) ) { int start = lineStr.find( " " ) + 1; int end = lineStr.find( " ", start ); |