summaryrefslogtreecommitdiff
path: root/noncore/settings/aqpkg/installdlgimpl.cpp
Unidiff
Diffstat (limited to 'noncore/settings/aqpkg/installdlgimpl.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/aqpkg/installdlgimpl.cpp130
1 files changed, 97 insertions, 33 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
@@ -28,49 +28,49 @@
28#endif 28#endif
29 29
30#include <qcheckbox.h> 30#include <qcheckbox.h>
31#include <qcombobox.h> 31#include <qcombobox.h>
32#include <qdialog.h> 32#include <qdialog.h>
33#include <qfileinfo.h> 33#include <qfileinfo.h>
34#include <qgroupbox.h> 34#include <qgroupbox.h>
35#include <qmultilineedit.h> 35#include <qmultilineedit.h>
36#include <qlabel.h> 36#include <qlabel.h>
37#include <qlayout.h> 37#include <qlayout.h>
38#include <qpushbutton.h> 38#include <qpushbutton.h>
39 39
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" );
65 cfg.setGroup( "settings" ); 65 cfg.setGroup( "settings" );
66 defaultDest = cfg.readEntry( "dest", "root" ); 66 defaultDest = cfg.readEntry( "dest", "root" );
67 67
68 // Grab flags - Turn MAKE_LINKS on by default (if no flags found) 68 // Grab flags - Turn MAKE_LINKS on by default (if no flags found)
69 flags = cfg.readNumEntry( "installFlags", 0 ); 69 flags = cfg.readNumEntry( "installFlags", 0 );
70 infoLevel = cfg.readNumEntry( "infoLevel", 1 ); 70 infoLevel = cfg.readNumEntry( "infoLevel", 1 );
71#else 71#else
72 flags = 0; 72 flags = 0;
73#endif 73#endif
74 74
75 // Output text is read only 75 // Output text is read only
76 output->setReadOnly( true ); 76 output->setReadOnly( true );
@@ -80,78 +80,77 @@ InstallDlgImpl::InstallDlgImpl( QList<InstallData> &packageList, DataManager *da
80 80
81 81
82 // setup destination data 82 // setup destination data
83 int defIndex = 0; 83 int defIndex = 0;
84 int i; 84 int i;
85 QListIterator<Destination> dit( dataMgr->getDestinationList() ); 85 QListIterator<Destination> dit( dataMgr->getDestinationList() );
86 for ( i = 0; dit.current(); ++dit, ++i ) 86 for ( i = 0; dit.current(); ++dit, ++i )
87 { 87 {
88 destination->insertItem( dit.current()->getDestinationName() ); 88 destination->insertItem( dit.current()->getDestinationName() );
89 if ( dit.current()->getDestinationName() == defaultDest ) 89 if ( dit.current()->getDestinationName() == defaultDest )
90 defIndex = i; 90 defIndex = i;
91 } 91 }
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
146InstallDlgImpl::~InstallDlgImpl() 145InstallDlgImpl::~InstallDlgImpl()
147{ 146{
148 if ( pIpkg ) 147 if ( pIpkg )
149 delete pIpkg; 148 delete pIpkg;
150} 149}
151 150
152void InstallDlgImpl :: init( bool displayextrainfo ) 151void InstallDlgImpl :: init( bool displayextrainfo )
153{ 152{
154 QGridLayout *layout = new QGridLayout( this ); 153 QGridLayout *layout = new QGridLayout( this );
155 layout->setSpacing( 4 ); 154 layout->setSpacing( 4 );
156 layout->setMargin( 4 ); 155 layout->setMargin( 4 );
157 156
@@ -247,72 +246,78 @@ void InstallDlgImpl :: installSelected()
247 displayText( tr( "**** Process Aborted ****" ) ); 246 displayText( tr( "**** Process Aborted ****" ) );
248 } 247 }
249 248
250 btnInstall->setText( tr( "Close" ) ); 249 btnInstall->setText( tr( "Close" ) );
251 btnInstall->setIconSet( Resource::loadPixmap( "enter" ) ); 250 btnInstall->setIconSet( Resource::loadPixmap( "enter" ) );
252 return; 251 return;
253 } 252 }
254 else if ( btnInstall->text() == tr( "Close" ) ) 253 else if ( btnInstall->text() == tr( "Close" ) )
255 { 254 {
256 emit reloadData( this ); 255 emit reloadData( this );
257 return; 256 return;
258 } 257 }
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;
307 312
308 pIpkg->setFlags( tmpFlags, infoLevel ); 313 pIpkg->setFlags( tmpFlags, infoLevel );
309 pIpkg->runIpkg(); 314 pIpkg->runIpkg();
310 } 315 }
311 316
312 pIpkg->setOption( "install" ); 317 pIpkg->setOption( "install" );
313 pIpkg->setDestination( dest ); 318 pIpkg->setDestination( dest );
314 pIpkg->setDestinationDir( destDir ); 319 pIpkg->setDestinationDir( destDir );
315 pIpkg->setFlags( instFlags, infoLevel ); 320 pIpkg->setFlags( instFlags, infoLevel );
316 QListIterator<InstallData> it2( installList ); 321 QListIterator<InstallData> it2( installList );
317 for ( ; it2.current(); ++it2 ) 322 for ( ; it2.current(); ++it2 )
318 { 323 {
@@ -321,82 +326,141 @@ void InstallDlgImpl :: installSelected()
321 } 326 }
322 327
323 flags |= FORCE_REINSTALL; 328 flags |= FORCE_REINSTALL;
324 QListIterator<InstallData> it3( updateList ); 329 QListIterator<InstallData> it3( updateList );
325 for ( ; it3.current() ; ++it3 ) 330 for ( ; it3.current() ; ++it3 )
326 { 331 {
327 idata = it3.current(); 332 idata = it3.current();
328 if ( idata->option == "R" ) 333 if ( idata->option == "R" )
329 pIpkg->setOption( "reinstall" ); 334 pIpkg->setOption( "reinstall" );
330 else 335 else
331 pIpkg->setOption( "upgrade" ); 336 pIpkg->setOption( "upgrade" );
332 pIpkg->setDestination( idata->destination->getDestinationName() ); 337 pIpkg->setDestination( idata->destination->getDestinationName() );
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);
369 output->setText( newtext ); 364 output->setText( newtext );
370 output->setCursorPosition( output->numLines(), 0 ); 365 output->setCursorPosition( output->numLines(), 0 );
371} 366}
372 367
373 368
374void InstallDlgImpl :: displayAvailableSpace( const QString &text ) 369void InstallDlgImpl :: displayAvailableSpace( const QString &text )
375{ 370{
376 Destination *d = dataMgr->getDestination( text ); 371 Destination *d = dataMgr->getDestination( text );
377 QString destDir = d->getDestinationPath(); 372 QString destDir = d->getDestinationPath();
378 373
379 long blockSize = 0; 374 long blockSize = 0;
380 long totalBlocks = 0; 375 long totalBlocks = 0;
381 long availBlocks = 0; 376 long availBlocks = 0;
382 QString space; 377 QString space;
383 if ( Utils::getStorageSpace( (const char *)destDir, &blockSize, &totalBlocks, &availBlocks ) ) 378 if ( Utils::getStorageSpace( (const char *)destDir, &blockSize, &totalBlocks, &availBlocks ) )
384 { 379 {
385 long mult = blockSize / 1024; 380 long mult = blockSize / 1024;
386 long div = 1024 / blockSize; 381 long div = 1024 / blockSize;
387 382
388 if ( !mult ) mult = 1; 383 if ( !mult ) mult = 1;
389 if ( !div ) div = 1; 384 if ( !div ) div = 1;
390// long total = totalBlocks * mult / div; 385// long total = totalBlocks * mult / div;
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