summaryrefslogtreecommitdiff
authordrw <drw>2003-04-26 22:42:19 (UTC)
committer drw <drw>2003-04-26 22:42:19 (UTC)
commit98a9291263e167b8882ac916330e7215ebd884b4 (patch) (unidiff)
tree882a909e9381ab4cc97e77377fd61361d7f21eab
parent64c48b637c1bd1bef679bff500f3e0ce5365358d (diff)
downloadopie-98a9291263e167b8882ac916330e7215ebd884b4.zip
opie-98a9291263e167b8882ac916330e7215ebd884b4.tar.gz
opie-98a9291263e167b8882ac916330e7215ebd884b4.tar.bz2
1. Fix for bug #872 - reduce CPU useage while ipkg is doing its thing 2. Re-enable setDocument function for identifying local ipks
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/aqpkg/installdlgimpl.cpp130
-rw-r--r--noncore/settings/aqpkg/installdlgimpl.h8
-rw-r--r--noncore/settings/aqpkg/ipkg.cpp17
-rw-r--r--noncore/settings/aqpkg/ipkg.h4
-rw-r--r--noncore/settings/aqpkg/mainwin.cpp8
-rw-r--r--noncore/settings/aqpkg/mainwin.h2
6 files changed, 116 insertions, 53 deletions
diff --git a/noncore/settings/aqpkg/installdlgimpl.cpp b/noncore/settings/aqpkg/installdlgimpl.cpp
index 76d0a80..896e370 100644
--- a/noncore/settings/aqpkg/installdlgimpl.cpp
+++ b/noncore/settings/aqpkg/installdlgimpl.cpp
@@ -40,25 +40,25 @@
40#include "datamgr.h" 40#include "datamgr.h"
41#include "destination.h" 41#include "destination.h"
42#include "instoptionsimpl.h" 42#include "instoptionsimpl.h"
43#include "installdlgimpl.h" 43#include "installdlgimpl.h"
44#include "ipkg.h" 44#include "ipkg.h"
45#include "utils.h" 45#include "utils.h"
46#include "global.h" 46#include "global.h"
47 47
48enum { 48enum {
49 MAXLINES = 100, 49 MAXLINES = 100,
50}; 50};
51 51
52InstallDlgImpl::InstallDlgImpl( QList<InstallData> &packageList, DataManager *dataManager, const char *title ) 52InstallDlgImpl::InstallDlgImpl( const QList<InstallData> &packageList, DataManager *dataManager, const char *title )
53 : QWidget( 0, 0, 0 ) 53 : QWidget( 0, 0, 0 )
54{ 54{
55 setCaption( title ); 55 setCaption( title );
56 init( TRUE ); 56 init( TRUE );
57 57
58 pIpkg = 0; 58 pIpkg = 0;
59 upgradePackages = false; 59 upgradePackages = false;
60 dataMgr = dataManager; 60 dataMgr = dataManager;
61 61
62 QString defaultDest = "root"; 62 QString defaultDest = "root";
63#ifdef QWS 63#ifdef QWS
64 Config cfg( "aqpkg" ); 64 Config cfg( "aqpkg" );
@@ -92,54 +92,53 @@ InstallDlgImpl::InstallDlgImpl( QList<InstallData> &packageList, DataManager *da
92 92
93 destination->setCurrentItem( defIndex ); 93 destination->setCurrentItem( defIndex );
94 94
95 QListIterator<InstallData> it( packageList ); 95 QListIterator<InstallData> it( packageList );
96 // setup package data 96 // setup package data
97 QString remove = tr( "Remove\n" ); 97 QString remove = tr( "Remove\n" );
98 QString install = tr( "Install\n" ); 98 QString install = tr( "Install\n" );
99 QString upgrade = tr( "Upgrade\n" ); 99 QString upgrade = tr( "Upgrade\n" );
100 for ( ; it.current(); ++it ) 100 for ( ; it.current(); ++it )
101 { 101 {
102 InstallData *item = it.current(); 102 InstallData *item = it.current();
103 InstallData *newitem = new InstallData(); 103 InstallData *newitem = new InstallData();
104 104
105 newitem->option = item->option; 105 newitem->option = item->option;
106 newitem->packageName = item->packageName; 106 newitem->packageName = item->packageName;
107 newitem->destination = item->destination; 107 newitem->destination = item->destination;
108 newitem->recreateLinks = item->recreateLinks; 108 newitem->recreateLinks = item->recreateLinks;
109 109 packages.append( newitem );
110 if ( item->option == "I" ) 110
111 if ( item->option == "I" )
111 { 112 {
112 installList.append( newitem );
113 install.append( QString( " %1\n" ).arg( item->packageName ) ); 113 install.append( QString( " %1\n" ).arg( item->packageName ) );
114 } 114 }
115 else if ( item->option == "D" ) 115 else if ( item->option == "D" )
116 { 116 {
117 removeList.append( newitem );
118 remove.append( QString( " %1\n" ).arg( item->packageName ) ); 117 remove.append( QString( " %1\n" ).arg( item->packageName ) );
119 } 118 }
120 else if ( item->option == "U" || item->option == "R" ) 119 else if ( item->option == "U" || item->option == "R" )
121 { 120 {
122 updateList.append( newitem ); 121 QString type;
123 QString type; 122 if ( item->option == "R" )
124 if ( item->option == "R" ) 123 type = tr( "(ReInstall)" );
125 type = tr( "(ReInstall)" ); 124 else
126 else 125 type = tr( "(Upgrade)" );
127 type = tr( "(Upgrade)" ); 126 upgrade.append( QString( " %1 %2\n" ).arg( item->packageName ).arg( type ) );
128 upgrade.append( QString( " %1 %2\n" ).arg( item->packageName ).arg( type ) ); 127 }
129 } 128 }
130 }
131 output->setText( QString( "%1\n%2\n%3\n" ).arg( remove ).arg( install ).arg( upgrade ) );
132 129
133 displayAvailableSpace( destination->currentText() ); 130 output->setText( QString( "%1\n%2\n%3\n" ).arg( remove ).arg( install ).arg( upgrade ) );
131
132 displayAvailableSpace( destination->currentText() );
134} 133}
135 134
136InstallDlgImpl::InstallDlgImpl( Ipkg *ipkg, QString initialText, const char *title ) 135InstallDlgImpl::InstallDlgImpl( Ipkg *ipkg, QString initialText, const char *title )
137 : QWidget( 0, 0, 0 ) 136 : QWidget( 0, 0, 0 )
138{ 137{
139 setCaption( title ); 138 setCaption( title );
140 init( FALSE ); 139 init( FALSE );
141 pIpkg = ipkg; 140 pIpkg = ipkg;
142 output->setText( initialText ); 141 output->setText( initialText );
143} 142}
144 143
145 144
@@ -259,48 +258,54 @@ void InstallDlgImpl :: installSelected()
259 258
260 // Disable buttons 259 // Disable buttons
261 btnOptions->setEnabled( false ); 260 btnOptions->setEnabled( false );
262// btnInstall->setEnabled( false ); 261// btnInstall->setEnabled( false );
263 262
264 btnInstall->setText( tr( "Abort" ) ); 263 btnInstall->setText( tr( "Abort" ) );
265 btnInstall->setIconSet( Resource::loadPixmap( "close" ) ); 264 btnInstall->setIconSet( Resource::loadPixmap( "close" ) );
266 265
267 if ( pIpkg ) 266 if ( pIpkg )
268 { 267 {
269 output->setText( "" ); 268 output->setText( "" );
270 connect( pIpkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &))); 269 connect( pIpkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &)));
270 connect( pIpkg, SIGNAL(ipkgFinished()), this, SLOT(ipkgFinished()));
271 pIpkg->runIpkg(); 271 pIpkg->runIpkg();
272 } 272 }
273 else 273 else
274 { 274 {
275 output->setText( "" ); 275 output->setText( "" );
276 Destination *d = dataMgr->getDestination( destination->currentText() ); 276 Destination *d = dataMgr->getDestination( destination->currentText() );
277 QString dest = d->getDestinationName(); 277 QString dest = d->getDestinationName();
278 QString destDir = d->getDestinationPath(); 278 QString destDir = d->getDestinationPath();
279 int instFlags = flags; 279 int instFlags = flags;
280 if ( d->linkToRoot() ) 280 if ( d->linkToRoot() )
281 instFlags |= MAKE_LINKS; 281 instFlags |= MAKE_LINKS;
282 282
283#ifdef QWS 283#ifdef QWS
284 // Save settings 284 // Save settings
285 Config cfg( "aqpkg" ); 285 Config cfg( "aqpkg" );
286 cfg.setGroup( "settings" ); 286 cfg.setGroup( "settings" );
287 cfg.writeEntry( "dest", dest ); 287 cfg.writeEntry( "dest", dest );
288#endif 288#endif
289 289
290 pIpkg = new Ipkg; 290 pIpkg = new Ipkg;
291 connect( pIpkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &))); 291 connect( pIpkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &)));
292 connect( pIpkg, SIGNAL(ipkgFinished()), this, SLOT(ipkgFinished()));
293
294 firstPackage = TRUE;
295 ipkgFinished();
292 296
293 // First run through the remove list, then the install list then the upgrade list 297 // First run through the remove list, then the install list then the upgrade list
294 pIpkg->setOption( "remove" ); 298/*
299 pIpkg->setOption( "remove" );
295 QListIterator<InstallData> it( removeList ); 300 QListIterator<InstallData> it( removeList );
296 InstallData *idata; 301 InstallData *idata;
297 for ( ; it.current(); ++it ) 302 for ( ; it.current(); ++it )
298 { 303 {
299 idata = it.current(); 304 idata = it.current();
300 pIpkg->setDestination( idata->destination->getDestinationName() ); 305 pIpkg->setDestination( idata->destination->getDestinationName() );
301 pIpkg->setDestinationDir( idata->destination->getDestinationPath() ); 306 pIpkg->setDestinationDir( idata->destination->getDestinationPath() );
302 pIpkg->setPackage( idata->packageName ); 307 pIpkg->setPackage( idata->packageName );
303 308
304 int tmpFlags = flags; 309 int tmpFlags = flags;
305 if ( idata->destination->linkToRoot() ) 310 if ( idata->destination->linkToRoot() )
306 tmpFlags |= MAKE_LINKS; 311 tmpFlags |= MAKE_LINKS;
@@ -333,36 +338,26 @@ void InstallDlgImpl :: installSelected()
333 pIpkg->setDestinationDir( idata->destination->getDestinationPath() ); 338 pIpkg->setDestinationDir( idata->destination->getDestinationPath() );
334 pIpkg->setPackage( idata->packageName ); 339 pIpkg->setPackage( idata->packageName );
335 340
336 int tmpFlags = flags; 341 int tmpFlags = flags;
337 if ( idata->destination->linkToRoot() && idata->recreateLinks ) 342 if ( idata->destination->linkToRoot() && idata->recreateLinks )
338 tmpFlags |= MAKE_LINKS; 343 tmpFlags |= MAKE_LINKS;
339 pIpkg->setFlags( tmpFlags, infoLevel ); 344 pIpkg->setFlags( tmpFlags, infoLevel );
340 pIpkg->runIpkg(); 345 pIpkg->runIpkg();
341 } 346 }
342 347
343 delete pIpkg; 348 delete pIpkg;
344 pIpkg = 0; 349 pIpkg = 0;
350*/
345 } 351 }
346
347 btnOptions->setEnabled( true );
348// btnInstall->setEnabled( true );
349 btnInstall->setText( tr( "Close" ) );
350 btnInstall->setIconSet( Resource::loadPixmap( "enter" ) );
351
352 btnOptions->setText( tr( "Save output" ) );
353 btnOptions->setIconSet( Resource::loadPixmap( "save" ) );
354
355 if ( destination && destination->currentText() != 0 && destination->currentText() != "" )
356 displayAvailableSpace( destination->currentText() );
357} 352}
358 353
359 354
360void InstallDlgImpl :: displayText(const QString &text ) 355void InstallDlgImpl :: displayText(const QString &text )
361{ 356{
362 QString newtext = QString( "%1\n%2" ).arg( output->text() ).arg( text ); 357 QString newtext = QString( "%1\n%2" ).arg( output->text() ).arg( text );
363 358
364 /* Set a max line count for the QMultiLineEdit, as users have reported 359 /* Set a max line count for the QMultiLineEdit, as users have reported
365 * performance issues when line count gets extreme. 360 * performance issues when line count gets extreme.
366 */ 361 */
367 if(output->numLines() >= MAXLINES) 362 if(output->numLines() >= MAXLINES)
368 output->removeLine(0); 363 output->removeLine(0);
@@ -391,12 +386,81 @@ void InstallDlgImpl :: displayAvailableSpace( const QString &text )
391 long avail = availBlocks * mult / div; 386 long avail = availBlocks * mult / div;
392// long used = total - avail; 387// long used = total - avail;
393 388
394 space.sprintf( "%ld Kb", avail ); 389 space.sprintf( "%ld Kb", avail );
395 } 390 }
396 else 391 else
397 space = tr( "Unknown" ); 392 space = tr( "Unknown" );
398 393
399 if ( txtAvailableSpace ) 394 if ( txtAvailableSpace )
400 txtAvailableSpace->setText( space ); 395 txtAvailableSpace->setText( space );
401} 396}
402 397
398void InstallDlgImpl :: ipkgFinished()
399{
400 InstallData *item;
401 if ( firstPackage )
402 item = packages.first();
403 else
404 {
405 // Create symlinks if necessary before moving on to next package
406 pIpkg->createSymLinks();
407
408 item = packages.next();
409 }
410
411 firstPackage = FALSE;
412 if ( item )
413 {
414 pIpkg->setPackage( item->packageName );
415 int tmpFlags = flags;
416
417 if ( item->option == "I" )
418 {
419 pIpkg->setOption( "install" );
420 Destination *d = dataMgr->getDestination( destination->currentText() );
421 pIpkg->setDestination( d->getDestinationName() );
422 pIpkg->setDestinationDir( d->getDestinationPath() );
423
424 if ( d->linkToRoot() )
425 tmpFlags |= MAKE_LINKS;
426 }
427 else if ( item->option == "D" )
428 {
429 pIpkg->setOption( "remove" );
430 pIpkg->setDestination( item->destination->getDestinationName() );
431 pIpkg->setDestinationDir( item->destination->getDestinationPath() );
432
433 if ( item->destination->linkToRoot() )
434 tmpFlags |= MAKE_LINKS;
435 }
436 else
437 {
438 if ( item->option == "R" )
439 pIpkg->setOption( "reinstall" );
440 else
441 pIpkg->setOption( "upgrade" );
442
443 pIpkg->setDestination( item->destination->getDestinationName() );
444 pIpkg->setDestinationDir( item->destination->getDestinationPath() );
445 pIpkg->setPackage( item->packageName );
446
447 tmpFlags |= FORCE_REINSTALL;
448 if ( item->destination->linkToRoot() && item->recreateLinks )
449 tmpFlags |= MAKE_LINKS;
450 }
451 pIpkg->setFlags( tmpFlags, infoLevel );
452 pIpkg->runIpkg();
453 }
454 else
455 {
456 btnOptions->setEnabled( true );
457 btnInstall->setText( tr( "Close" ) );
458 btnInstall->setIconSet( Resource::loadPixmap( "enter" ) );
459
460 btnOptions->setText( tr( "Save output" ) );
461 btnOptions->setIconSet( Resource::loadPixmap( "save" ) );
462
463 if ( destination && destination->currentText() != 0 && destination->currentText() != "" )
464 displayAvailableSpace( destination->currentText() );
465 }
466} \ No newline at end of file
diff --git a/noncore/settings/aqpkg/installdlgimpl.h b/noncore/settings/aqpkg/installdlgimpl.h
index 15cf427..9a7dbff 100644
--- a/noncore/settings/aqpkg/installdlgimpl.h
+++ b/noncore/settings/aqpkg/installdlgimpl.h
@@ -36,51 +36,51 @@ class InstallData
36{ 36{
37public: 37public:
38 QString option; // I - install, D - delete, R- reinstall U - upgrade 38 QString option; // I - install, D - delete, R- reinstall U - upgrade
39 QString packageName; 39 QString packageName;
40 Destination *destination; 40 Destination *destination;
41 bool recreateLinks; 41 bool recreateLinks;
42}; 42};
43 43
44class InstallDlgImpl : public QWidget 44class InstallDlgImpl : public QWidget
45{ 45{
46 Q_OBJECT 46 Q_OBJECT
47public: 47public:
48 InstallDlgImpl( QList<InstallData> &packageList, DataManager *dataManager, const char *title = 0 ); 48 InstallDlgImpl( const QList<InstallData> &packageList, DataManager *dataManager, const char *title = 0 );
49 InstallDlgImpl( Ipkg *ipkg, QString initialText, const char *title = 0 ); 49 InstallDlgImpl( Ipkg *ipkg, QString initialText, const char *title = 0 );
50 ~InstallDlgImpl(); 50 ~InstallDlgImpl();
51 51
52 bool upgradeServer( QString &server ); 52 bool upgradeServer( QString &server );
53 53
54protected: 54protected:
55 55
56private: 56private:
57 DataManager *dataMgr; 57 DataManager *dataMgr;
58 QList<InstallData> installList; 58 QList<InstallData> packages;
59 QList<InstallData> removeList; 59 bool firstPackage;
60 QList<InstallData> updateList;
61 int flags; 60 int flags;
62 int infoLevel; 61 int infoLevel;
63 Ipkg *pIpkg; 62 Ipkg *pIpkg;
64 bool upgradePackages; 63 bool upgradePackages;
65 64
66 QComboBox *destination; 65 QComboBox *destination;
67 QPushButton *btnInstall; 66 QPushButton *btnInstall;
68 QPushButton *btnOptions; 67 QPushButton *btnOptions;
69 QMultiLineEdit *output; 68 QMultiLineEdit *output;
70 QLabel *txtAvailableSpace; 69 QLabel *txtAvailableSpace;
71 70
72 void init( bool ); 71 void init( bool );
73 72
74 bool runIpkg( QString &option, const QString& package, const QString& dest, int flags ); 73 bool runIpkg( QString &option, const QString& package, const QString& dest, int flags );
75 74
76signals: 75signals:
77 void reloadData( InstallDlgImpl * ); 76 void reloadData( InstallDlgImpl * );
78 77
79public slots: 78public slots:
80 void optionsSelected(); 79 void optionsSelected();
81 void installSelected(); 80 void installSelected();
82 void displayText(const QString &text ); 81 void displayText(const QString &text );
83 void displayAvailableSpace( const QString &text); 82 void displayAvailableSpace( const QString &text);
83 void ipkgFinished();
84}; 84};
85 85
86#endif 86#endif
diff --git a/noncore/settings/aqpkg/ipkg.cpp b/noncore/settings/aqpkg/ipkg.cpp
index e906653..34999ad 100644
--- a/noncore/settings/aqpkg/ipkg.cpp
+++ b/noncore/settings/aqpkg/ipkg.cpp
@@ -46,28 +46,27 @@ Ipkg :: ~Ipkg()
46{ 46{
47} 47}
48 48
49// Option is what we are going to do - install, upgrade, download, reinstall 49// Option is what we are going to do - install, upgrade, download, reinstall
50// package is the package name to install - either a fully qualified path and ipk 50// package is the package name to install - either a fully qualified path and ipk
51// file (if stored locally) or just the name of the package (for a network package) 51// file (if stored locally) or just the name of the package (for a network package)
52// packageName is the package name - (for a network package this will be the same as 52// packageName is the package name - (for a network package this will be the same as
53// package parameter) 53// package parameter)
54// dest is the destination alias (from ipk.conf) 54// dest is the destination alias (from ipk.conf)
55// destDir is the dir that the destination alias points to (used to link to root) 55// destDir is the dir that the destination alias points to (used to link to root)
56// flags is the ipkg options flags 56// flags is the ipkg options flags
57// dir is the directory to run ipkg in (defaults to "") 57// dir is the directory to run ipkg in (defaults to "")
58bool Ipkg :: runIpkg( ) 58void Ipkg :: runIpkg()
59{ 59{
60 error = false; 60 error = false;
61 bool ret = false;
62 QStringList commands; 61 QStringList commands;
63 62
64 QDir::setCurrent( "/tmp" ); 63 QDir::setCurrent( "/tmp" );
65 64
66 if ( runtimeDir != "" ) 65 if ( runtimeDir != "" )
67 { 66 {
68 commands << "cd "; 67 commands << "cd ";
69 commands << runtimeDir; 68 commands << runtimeDir;
70 commands << ";"; 69 commands << ";";
71 } 70 }
72 commands << "ipkg" << "-V" << QString::number( infoLevel ) << "-force-defaults"; 71 commands << "ipkg" << "-V" << QString::number( infoLevel ) << "-force-defaults";
73 72
@@ -128,29 +127,30 @@ bool Ipkg :: runIpkg( )
128 if ( flags & MAKE_LINKS ) 127 if ( flags & MAKE_LINKS )
129 { 128 {
130 emit outputText( QString( "Removing symbolic links...\n" ) ); 129 emit outputText( QString( "Removing symbolic links...\n" ) );
131 linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir ); 130 linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir );
132 emit outputText( QString( " " ) ); 131 emit outputText( QString( " " ) );
133 } 132 }
134 } 133 }
135 134
136 // Execute command 135 // Execute command
137 dependantPackages = new QList<QString>; 136 dependantPackages = new QList<QString>;
138 dependantPackages->setAutoDelete( true ); 137 dependantPackages->setAutoDelete( true );
139 138
140 ret = executeIpkgCommand( commands, option ); 139 executeIpkgCommand( commands, option );
141 140
142 if ( aborted ) 141}
143 return false;
144 142
143void Ipkg :: createSymLinks()
144{
145 if ( option == "install" || option == "reinstall" || option == "upgrade" ) 145 if ( option == "install" || option == "reinstall" || option == "upgrade" )
146 { 146 {
147 // If we are not removing packages and make links option is selected 147 // If we are not removing packages and make links option is selected
148 // create the links 148 // create the links
149 createLinks = true; 149 createLinks = true;
150 if ( flags & MAKE_LINKS ) 150 if ( flags & MAKE_LINKS )
151 { 151 {
152 emit outputText( " " ); 152 emit outputText( " " );
153 emit outputText( QString( "Creating symbolic links for " )+ package ); 153 emit outputText( QString( "Creating symbolic links for " )+ package );
154 154
155 linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir ); 155 linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir );
156 156
@@ -162,25 +162,24 @@ bool Ipkg :: runIpkg( )
162 continue; 162 continue;
163 emit outputText( " " ); 163 emit outputText( " " );
164 emit outputText( QString( "Creating symbolic links for " )+ (*pkg) ); 164 emit outputText( QString( "Creating symbolic links for " )+ (*pkg) );
165 linkPackage( Utils::getPackageNameFromIpkFilename( *pkg ), destination, destDir ); 165 linkPackage( Utils::getPackageNameFromIpkFilename( *pkg ), destination, destDir );
166 } 166 }
167 } 167 }
168 } 168 }
169 169
170 delete dependantPackages; 170 delete dependantPackages;
171 171
172 emit outputText( "Finished" ); 172 emit outputText( "Finished" );
173 emit outputText( "" ); 173 emit outputText( "" );
174 return ret;
175} 174}
176 175
177void Ipkg :: removeStatusEntry() 176void Ipkg :: removeStatusEntry()
178{ 177{
179 QString statusFile = destDir; 178 QString statusFile = destDir;
180 if ( statusFile.right( 1 ) != "/" ) 179 if ( statusFile.right( 1 ) != "/" )
181 statusFile.append( "/" ); 180 statusFile.append( "/" );
182 statusFile.append( "usr/lib/ipkg/status" ); 181 statusFile.append( "usr/lib/ipkg/status" );
183 QString outStatusFile = statusFile; 182 QString outStatusFile = statusFile;
184 outStatusFile.append( ".tmp" ); 183 outStatusFile.append( ".tmp" );
185 184
186 emit outputText( "" ); 185 emit outputText( "" );
@@ -286,28 +285,24 @@ int Ipkg :: executeIpkgCommand( QStringList &cmd, const QString /*option*/ )
286 285
287 for ( QStringList::Iterator it = cmd.begin(); it != cmd.end(); ++it ) 286 for ( QStringList::Iterator it = cmd.begin(); it != cmd.end(); ++it )
288 { 287 {
289 *proc << (*it).latin1(); 288 *proc << (*it).latin1();
290 } 289 }
291 290
292 // Start the process going 291 // Start the process going
293 finished = false; 292 finished = false;
294 if(!proc->start(OProcess::NotifyOnExit, OProcess::All)) 293 if(!proc->start(OProcess::NotifyOnExit, OProcess::All))
295 { 294 {
296 emit outputText( QString( "Couldn't start ipkg process" ) ); 295 emit outputText( QString( "Couldn't start ipkg process" ) );
297 } 296 }
298
299 // Now wait for it to finish
300 while ( !finished )
301 qApp->processEvents();
302} 297}
303 298
304void Ipkg::commandStdout(OProcess*, char *buffer, int buflen) 299void Ipkg::commandStdout(OProcess*, char *buffer, int buflen)
305{ 300{
306 QString lineStr = buffer; 301 QString lineStr = buffer;
307 if ( lineStr[buflen-1] == '\n' ) 302 if ( lineStr[buflen-1] == '\n' )
308 buflen --; 303 buflen --;
309 lineStr = lineStr.left( buflen ); 304 lineStr = lineStr.left( buflen );
310 emit outputText( lineStr ); 305 emit outputText( lineStr );
311 306
312 // check if we are installing dependant packages 307 // check if we are installing dependant packages
313 if ( option == "install" || option == "reinstall" ) 308 if ( option == "install" || option == "reinstall" )
@@ -345,24 +340,26 @@ void Ipkg::commandStderr(OProcess*, char *buffer, int buflen)
345 340
346void Ipkg::processFinished() 341void Ipkg::processFinished()
347{ 342{
348 // Finally, if we are removing a package, remove its entry from the <destdir>/usr/lib/ipkg/status file 343 // Finally, if we are removing a package, remove its entry from the <destdir>/usr/lib/ipkg/status file
349 // to workaround an ipkg bug which stops reinstall to a different location 344 // to workaround an ipkg bug which stops reinstall to a different location
350 345
351 if ( !error && option == "remove" ) 346 if ( !error && option == "remove" )
352 removeStatusEntry(); 347 removeStatusEntry();
353 348
354 delete proc; 349 delete proc;
355 proc = 0; 350 proc = 0;
356 finished = true; 351 finished = true;
352
353 emit ipkgFinished();
357} 354}
358 355
359 356
360void Ipkg :: abort() 357void Ipkg :: abort()
361{ 358{
362 if ( proc ) 359 if ( proc )
363 { 360 {
364 proc->kill(); 361 proc->kill();
365 aborted = true; 362 aborted = true;
366 } 363 }
367} 364}
368 365
diff --git a/noncore/settings/aqpkg/ipkg.h b/noncore/settings/aqpkg/ipkg.h
index 531bfc0..a0d38e3 100644
--- a/noncore/settings/aqpkg/ipkg.h
+++ b/noncore/settings/aqpkg/ipkg.h
@@ -34,35 +34,37 @@
34#define FORCE_OVERWRITE 0x0008 34#define FORCE_OVERWRITE 0x0008
35#define MAKE_LINKS 0x0010 35#define MAKE_LINKS 0x0010
36#define VERBOSE_WGET 0x0020 36#define VERBOSE_WGET 0x0020
37 37
38class OProcess; 38class OProcess;
39 39
40class Ipkg : public QObject 40class Ipkg : public QObject
41{ 41{
42 Q_OBJECT 42 Q_OBJECT
43public: 43public:
44 Ipkg(); 44 Ipkg();
45 ~Ipkg(); 45 ~Ipkg();
46 bool runIpkg( ); 46 void runIpkg();
47 void createSymLinks();
47 48
48 void setOption( const char *opt ) { option = opt; } 49 void setOption( const char *opt ) { option = opt; }
49 void setPackage( const char *pkg ) { package = pkg; } 50 void setPackage( const char *pkg ) { package = pkg; }
50 void setDestination( const char *dest ) { destination = dest; } 51 void setDestination( const char *dest ) { destination = dest; }
51 void setDestinationDir( const char *dir ) { destDir = dir; } 52 void setDestinationDir( const char *dir ) { destDir = dir; }
52 void setFlags( int fl, int il ) { flags = fl; infoLevel = il; } 53 void setFlags( int fl, int il ) { flags = fl; infoLevel = il; }
53 void setRuntimeDirectory( const char *dir ) { runtimeDir = dir; } 54 void setRuntimeDirectory( const char *dir ) { runtimeDir = dir; }
54 55
55signals: 56signals:
56 void outputText( const QString &text ); 57 void outputText( const QString &text );
58 void ipkgFinished();
57 59
58public slots: 60public slots:
59 void commandStdout(OProcess*, char *buffer, int buflen); 61 void commandStdout(OProcess*, char *buffer, int buflen);
60 void commandStderr(OProcess*, char *buffer, int buflen); 62 void commandStderr(OProcess*, char *buffer, int buflen);
61 void processFinished(); 63 void processFinished();
62 void abort(); 64 void abort();
63 65
64 66
65private: 67private:
66 bool createLinks; 68 bool createLinks;
67 bool aborted; 69 bool aborted;
68 bool error; 70 bool error;
diff --git a/noncore/settings/aqpkg/mainwin.cpp b/noncore/settings/aqpkg/mainwin.cpp
index 1aec6a8..58f6feb 100644
--- a/noncore/settings/aqpkg/mainwin.cpp
+++ b/noncore/settings/aqpkg/mainwin.cpp
@@ -288,25 +288,25 @@ void MainWindow :: init()
288 connect( mgr, SIGNAL( progressUpdate( int ) ), this, SLOT( updateProgress( int ) ) ); 288 connect( mgr, SIGNAL( progressUpdate( int ) ), this, SLOT( updateProgress( int ) ) );
289 mgr->loadServers(); 289 mgr->loadServers();
290 290
291 showUninstalledPkgs = false; 291 showUninstalledPkgs = false;
292 showInstalledPkgs = false; 292 showInstalledPkgs = false;
293 showUpgradedPkgs = false; 293 showUpgradedPkgs = false;
294 categoryFilterEnabled = false; 294 categoryFilterEnabled = false;
295 295
296 updateData(); 296 updateData();
297 297
298 stack->raiseWidget( networkPkgWindow ); 298 stack->raiseWidget( networkPkgWindow );
299} 299}
300/* 300
301void MainWindow :: setDocument( const QString &doc ) 301void MainWindow :: setDocument( const QString &doc )
302{ 302{
303 // Remove path from package 303 // Remove path from package
304 QString package = Utils::getPackageNameFromIpkFilename( doc ); 304 QString package = Utils::getPackageNameFromIpkFilename( doc );
305// std::cout << "Selecting package " << package << std::endl; 305// std::cout << "Selecting package " << package << std::endl;
306 306
307 // First select local server 307 // First select local server
308 for ( int i = 0 ; i < serversList->count() ; ++i ) 308 for ( int i = 0 ; i < serversList->count() ; ++i )
309 { 309 {
310 if ( serversList->text( i ) == LOCAL_IPKGS ) 310 if ( serversList->text( i ) == LOCAL_IPKGS )
311 { 311 {
312 serversList->setCurrentItem( i ); 312 serversList->setCurrentItem( i );
@@ -318,25 +318,25 @@ void MainWindow :: setDocument( const QString &doc )
318 // Now set the check box of the selected package 318 // Now set the check box of the selected package
319 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); 319 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
320 item != 0 ; 320 item != 0 ;
321 item = (QCheckListItem *)item->nextSibling() ) 321 item = (QCheckListItem *)item->nextSibling() )
322 { 322 {
323 if ( item->text().startsWith( package ) ) 323 if ( item->text().startsWith( package ) )
324 { 324 {
325 item->setOn( true ); 325 item->setOn( true );
326 break; 326 break;
327 } 327 }
328 } 328 }
329} 329}
330*/ 330
331void MainWindow :: displaySettings() 331void MainWindow :: displaySettings()
332{ 332{
333 SettingsImpl *dlg = new SettingsImpl( mgr, this, "Settings", true ); 333 SettingsImpl *dlg = new SettingsImpl( mgr, this, "Settings", true );
334 if ( dlg->showDlg() ) 334 if ( dlg->showDlg() )
335 { 335 {
336 stack->raiseWidget( progressWindow ); 336 stack->raiseWidget( progressWindow );
337 updateData(); 337 updateData();
338 stack->raiseWidget( networkPkgWindow ); 338 stack->raiseWidget( networkPkgWindow );
339 } 339 }
340 delete dlg; 340 delete dlg;
341} 341}
342 342
@@ -983,32 +983,32 @@ InstallData *MainWindow :: dealWithItem( QCheckListItem *item )
983 // Get package 983 // Get package
984 Server *s = mgr->getServer( serversList->currentText() ); 984 Server *s = mgr->getServer( serversList->currentText() );
985 Package *p = s->getPackage( name ); 985 Package *p = s->getPackage( name );
986 986
987 // If the package has a filename then it is a local file 987 // If the package has a filename then it is a local file
988 if ( p->isPackageStoredLocally() ) 988 if ( p->isPackageStoredLocally() )
989 name = p->getFilename(); 989 name = p->getFilename();
990 990
991 QString option; 991 QString option;
992 QString dest = "root"; 992 QString dest = "root";
993 if ( !p->isInstalled() ) 993 if ( !p->isInstalled() )
994 { 994 {
995 InstallData *newitem = new InstallData();; 995 InstallData *newitem = new InstallData();
996 newitem->option = "I"; 996 newitem->option = "I";
997 newitem->packageName = name; 997 newitem->packageName = name;
998 return newitem; 998 return newitem;
999 } 999 }
1000 else 1000 else
1001 { 1001 {
1002 InstallData *newitem = new InstallData();; 1002 InstallData *newitem = new InstallData();
1003 newitem->option = "D"; 1003 newitem->option = "D";
1004 if ( !p->isPackageStoredLocally() ) 1004 if ( !p->isPackageStoredLocally() )
1005 newitem->packageName = p->getInstalledPackageName(); 1005 newitem->packageName = p->getInstalledPackageName();
1006 else 1006 else
1007 newitem->packageName = name; 1007 newitem->packageName = name;
1008 1008
1009 if ( p->getInstalledTo() ) 1009 if ( p->getInstalledTo() )
1010 { 1010 {
1011 newitem->destination = p->getInstalledTo(); 1011 newitem->destination = p->getInstalledTo();
1012// cout << "dest - " << p->getInstalledTo()->getDestinationName() << endl; 1012// cout << "dest - " << p->getInstalledTo()->getDestinationName() << endl;
1013// cout << "dest - " << p->getInstalledTo()->getDestinationPath() << endl; 1013// cout << "dest - " << p->getInstalledTo()->getDestinationPath() << endl;
1014 } 1014 }
diff --git a/noncore/settings/aqpkg/mainwin.h b/noncore/settings/aqpkg/mainwin.h
index 0295519..c4548b1 100644
--- a/noncore/settings/aqpkg/mainwin.h
+++ b/noncore/settings/aqpkg/mainwin.h
@@ -97,25 +97,25 @@ private:
97 void downloadSelectedPackages(); 97 void downloadSelectedPackages();
98 void downloadRemotePackage(); 98 void downloadRemotePackage();
99 InstallData *dealWithItem( QCheckListItem *item ); 99 InstallData *dealWithItem( QCheckListItem *item );
100 100
101 // Progress widget 101 // Progress widget
102 QWidget *progressWindow; 102 QWidget *progressWindow;
103 QLabel *m_status; 103 QLabel *m_status;
104 QProgressBar *m_progress; 104 QProgressBar *m_progress;
105 105
106 void initProgressWidget(); 106 void initProgressWidget();
107 107
108public slots: 108public slots:
109// void setDocument( const QString &doc ); 109 void setDocument( const QString &doc );
110 void displayFindBar(); 110 void displayFindBar();
111 void displayJumpBar(); 111 void displayJumpBar();
112 void repeatFind(); 112 void repeatFind();
113 void findPackage( const QString & ); 113 void findPackage( const QString & );
114 void hideFindBar(); 114 void hideFindBar();
115 void hideJumpBar(); 115 void hideJumpBar();
116 void displaySettings(); 116 void displaySettings();
117 void filterUninstalledPackages(); 117 void filterUninstalledPackages();
118 void filterInstalledPackages(); 118 void filterInstalledPackages();
119 void filterUpgradedPackages(); 119 void filterUpgradedPackages();
120 void filterCategory(); 120 void filterCategory();
121 bool setFilterCategory(); 121 bool setFilterCategory();