summaryrefslogtreecommitdiff
authordrw <drw>2005-03-22 22:57:07 (UTC)
committer drw <drw>2005-03-22 22:57:07 (UTC)
commit3011e3f1741057b9163c3658a8847c528da5da05 (patch) (unidiff)
treed4ddecfd5073465973cbeb92a3301a3247df5594
parent63d19f6ef6eeeb362323e3301daab03df1588faa (diff)
downloadopie-3011e3f1741057b9163c3658a8847c528da5da05.zip
opie-3011e3f1741057b9163c3658a8847c528da5da05.tar.gz
opie-3011e3f1741057b9163c3658a8847c528da5da05.tar.bz2
Disconnect signals after command executes to prevent bug where messages show up multiple times in install dialog
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/packagemanager/oipkg.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/noncore/settings/packagemanager/oipkg.cpp b/noncore/settings/packagemanager/oipkg.cpp
index 417ee95..127204d 100644
--- a/noncore/settings/packagemanager/oipkg.cpp
+++ b/noncore/settings/packagemanager/oipkg.cpp
@@ -382,187 +382,194 @@ OPackageList *OIpkg::installedPackages( const QString &destName, const QString &
382 382
383 f.close(); 383 f.close();
384 384
385 // Make sure to add to list last entry 385 // Make sure to add to list last entry
386 if ( !name.isNull() && status.contains( " installed" ) ) 386 if ( !name.isNull() && status.contains( " installed" ) )
387 pl->append( new OPackage( name, QString::null, version, QString::null, destName ) ); 387 pl->append( new OPackage( name, QString::null, version, QString::null, destName ) );
388 388
389 return pl; 389 return pl;
390} 390}
391 391
392OConfItem *OIpkg::findConfItem( OConfItem::Type type, const QString &name ) 392OConfItem *OIpkg::findConfItem( OConfItem::Type type, const QString &name )
393{ 393{
394 // Find configuration item in list 394 // Find configuration item in list
395 OConfItemListIterator configIt( *m_confInfo ); 395 OConfItemListIterator configIt( *m_confInfo );
396 OConfItem *config = 0l; 396 OConfItem *config = 0l;
397 for ( ; configIt.current(); ++configIt ) 397 for ( ; configIt.current(); ++configIt )
398 { 398 {
399 config = configIt.current(); 399 config = configIt.current();
400 if ( config->type() == type && config->name() == name ) 400 if ( config->type() == type && config->name() == name )
401 break; 401 break;
402 } 402 }
403 403
404 if ( config && config->type() == type && config->name() == name ) 404 if ( config && config->type() == type && config->name() == name )
405 return config; 405 return config;
406 406
407 return 0l; 407 return 0l;
408} 408}
409 409
410bool OIpkg::executeCommand( OPackage::Command command, const QStringList &parameters, const QString &destination, 410bool OIpkg::executeCommand( OPackage::Command command, const QStringList &parameters, const QString &destination,
411 const QObject *receiver, const char *slotOutput, bool rawOutput ) 411 const QObject *receiver, const char *slotOutput, bool rawOutput )
412{ 412{
413 if ( command == OPackage::NotDefined ) 413 if ( command == OPackage::NotDefined )
414 return false; 414 return false;
415 415
416 // Set ipkg run-time options/arguments 416 // Set ipkg run-time options/arguments
417 m_ipkgArgs.force_depends = ( m_ipkgExecOptions & FORCE_DEPENDS ); 417 m_ipkgArgs.force_depends = ( m_ipkgExecOptions & FORCE_DEPENDS );
418 m_ipkgArgs.force_reinstall = ( m_ipkgExecOptions & FORCE_REINSTALL ); 418 m_ipkgArgs.force_reinstall = ( m_ipkgExecOptions & FORCE_REINSTALL );
419 // TODO m_ipkgArgs.force_remove = ( m_ipkgExecOptions & FORCE_REMOVE ); 419 // TODO m_ipkgArgs.force_remove = ( m_ipkgExecOptions & FORCE_REMOVE );
420 m_ipkgArgs.force_overwrite = ( m_ipkgExecOptions & FORCE_OVERWRITE ); 420 m_ipkgArgs.force_overwrite = ( m_ipkgExecOptions & FORCE_OVERWRITE );
421 m_ipkgArgs.verbosity = m_ipkgExecVerbosity; 421 m_ipkgArgs.verbosity = m_ipkgExecVerbosity;
422 if ( m_ipkgArgs.dest ) 422 if ( m_ipkgArgs.dest )
423 free( m_ipkgArgs.dest ); 423 free( m_ipkgArgs.dest );
424 if ( !destination.isNull() ) 424 if ( !destination.isNull() )
425 { 425 {
426 int len = destination.length() + 1; 426 int len = destination.length() + 1;
427 m_ipkgArgs.dest = (char *)malloc( len ); 427 m_ipkgArgs.dest = (char *)malloc( len );
428 strncpy( m_ipkgArgs.dest, destination, destination.length() ); 428 strncpy( m_ipkgArgs.dest, destination, destination.length() );
429 m_ipkgArgs.dest[ len - 1 ] = '\0'; 429 m_ipkgArgs.dest[ len - 1 ] = '\0';
430 } 430 }
431 else 431 else
432 m_ipkgArgs.dest = 0l; 432 m_ipkgArgs.dest = 0l;
433 433
434 // Connect output signal to widget 434 // Connect output signal to widget
435 435
436 if ( !rawOutput ) 436 if ( !rawOutput )
437 { 437 {
438 // TODO - connect to local slot and parse output before emitting signalIpkgMessage 438 // TODO - connect to local slot and parse output before emitting signalIpkgMessage
439 } 439 }
440 440
441 switch( command ) 441 switch( command )
442 { 442 {
443 case OPackage::Update : { 443 case OPackage::Update : {
444 connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput ); 444 connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput );
445 ipkg_lists_update( &m_ipkgArgs ); 445 ipkg_lists_update( &m_ipkgArgs );
446 disconnect( this, SIGNAL(signalIpkgMessage(const QString &)), 0, 0 );
446 }; 447 };
447 break; 448 break;
448 case OPackage::Upgrade : { 449 case OPackage::Upgrade : {
449 connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput ); 450 connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput );
450 ipkg_packages_upgrade( &m_ipkgArgs ); 451 ipkg_packages_upgrade( &m_ipkgArgs );
451 452
452 // Re-link non-root destinations to make sure everything is in sync 453 // Re-link non-root destinations to make sure everything is in sync
453 OConfItemList *destList = destinations(); 454 OConfItemList *destList = destinations();
454 OConfItemListIterator it( *destList ); 455 OConfItemListIterator it( *destList );
455 for ( ; it.current(); ++it ) 456 for ( ; it.current(); ++it )
456 { 457 {
457 OConfItem *dest = it.current(); 458 OConfItem *dest = it.current();
458 if ( dest->name() != "root" ) 459 if ( dest->name() != "root" )
459 linkPackageDir( dest->name() ); 460 linkPackageDir( dest->name() );
460 } 461 }
461 delete destList; 462 delete destList;
463 disconnect( this, SIGNAL(signalIpkgMessage(const QString &)), 0, 0 );
462 }; 464 };
463 break; 465 break;
464 case OPackage::Install : { 466 case OPackage::Install : {
465 connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput ); 467 connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput );
466 for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it ) 468 for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it )
467 { 469 {
468 ipkg_packages_install( &m_ipkgArgs, (*it) ); 470 ipkg_packages_install( &m_ipkgArgs, (*it) );
469 } 471 }
470 if ( destination != "root" ) 472 if ( destination != "root" )
471 linkPackageDir( destination ); 473 linkPackageDir( destination );
474 disconnect( this, SIGNAL(signalIpkgMessage(const QString &)), 0, 0 );
472 }; 475 };
473 break; 476 break;
474 case OPackage::Remove : { 477 case OPackage::Remove : {
475 connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput ); 478 connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput );
476 479
477 // Get list of destinations for unlinking of packages not installed to root 480 // Get list of destinations for unlinking of packages not installed to root
478 OConfItemList *destList = destinations(); 481 OConfItemList *destList = destinations();
479 482
480 for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it ) 483 for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it )
481 { 484 {
482 unlinkPackage( (*it), destList ); 485 unlinkPackage( (*it), destList );
483 ipkg_packages_remove( &m_ipkgArgs, (*it), true ); 486 ipkg_packages_remove( &m_ipkgArgs, (*it), true );
484 } 487 }
485 488
486 delete destList; 489 delete destList;
490 disconnect( this, SIGNAL(signalIpkgMessage(const QString &)), 0, 0 );
487 }; 491 };
488 break; 492 break;
489 case OPackage::Download : { 493 case OPackage::Download : {
490 connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput ); 494 connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput );
491 for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it ) 495 for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it )
492 { 496 {
493 ipkg_packages_download( &m_ipkgArgs, (*it) ); 497 ipkg_packages_download( &m_ipkgArgs, (*it) );
494 } 498 }
499 disconnect( this, SIGNAL(signalIpkgMessage(const QString &)), 0, 0 );
495 }; 500 };
496 break; 501 break;
497 case OPackage::Info : { 502 case OPackage::Info : {
498 connect( this, SIGNAL(signalIpkgStatus(const QString &)), receiver, slotOutput ); 503 connect( this, SIGNAL(signalIpkgStatus(const QString &)), receiver, slotOutput );
499 ipkg_packages_info( &m_ipkgArgs, (*parameters.begin()), &fIpkgStatus, 0l ); 504 ipkg_packages_info( &m_ipkgArgs, (*parameters.begin()), &fIpkgStatus, 0l );
505 disconnect( this, SIGNAL(signalIpkgStatus(const QString &)), 0, 0 );
500 }; 506 };
501 break; 507 break;
502 case OPackage::Files : { 508 case OPackage::Files : {
503 connect( this, SIGNAL(signalIpkgList(const QString &)), receiver, slotOutput ); 509 connect( this, SIGNAL(signalIpkgList(const QString &)), receiver, slotOutput );
504 ipkg_package_files( &m_ipkgArgs, (*parameters.begin()), &fIpkgFiles, 0l ); 510 ipkg_package_files( &m_ipkgArgs, (*parameters.begin()), &fIpkgFiles, 0l );
511 disconnect( this, SIGNAL(signalIpkgList(const QString &)), 0, 0 );
505 }; 512 };
506 break; 513 break;
507 default : break; 514 default : break;
508 }; 515 };
509 516
510 return true; 517 return true;
511} 518}
512 519
513void OIpkg::ipkgMessage( char *msg ) 520void OIpkg::ipkgMessage( char *msg )
514{ 521{
515 emit signalIpkgMessage( msg ); 522 emit signalIpkgMessage( msg );
516} 523}
517 524
518void OIpkg::ipkgStatus( char *status ) 525void OIpkg::ipkgStatus( char *status )
519{ 526{
520 emit signalIpkgStatus( status ); 527 emit signalIpkgStatus( status );
521} 528}
522 529
523void OIpkg::ipkgList( char *filelist ) 530void OIpkg::ipkgList( char *filelist )
524{ 531{
525 emit signalIpkgList( filelist ); 532 emit signalIpkgList( filelist );
526} 533}
527 534
528void OIpkg::loadConfiguration() 535void OIpkg::loadConfiguration()
529{ 536{
530 if ( m_confInfo ) 537 if ( m_confInfo )
531 delete m_confInfo; 538 delete m_confInfo;
532 539
533 // Load configuration item list 540 // Load configuration item list
534 m_confInfo = new OConfItemList(); 541 m_confInfo = new OConfItemList();
535 542
536 QStringList confFiles; 543 QStringList confFiles;
537 QDir confDir( IPKG_CONF_DIR ); 544 QDir confDir( IPKG_CONF_DIR );
538 if ( confDir.exists() ) 545 if ( confDir.exists() )
539 { 546 {
540 confDir.setNameFilter( "*.conf" ); 547 confDir.setNameFilter( "*.conf" );
541 confDir.setFilter( QDir::Files ); 548 confDir.setFilter( QDir::Files );
542 confFiles = confDir.entryList( "*.conf", QDir::Files ); 549 confFiles = confDir.entryList( "*.conf", QDir::Files );
543 } 550 }
544 confFiles << IPKG_CONF; 551 confFiles << IPKG_CONF;
545 552
546 QStringList::Iterator lastFile = confFiles.end(); 553 QStringList::Iterator lastFile = confFiles.end();
547 for ( QStringList::Iterator it = confFiles.begin(); it != lastFile; ++it ) 554 for ( QStringList::Iterator it = confFiles.begin(); it != lastFile; ++it )
548 { 555 {
549 // Create absolute file path if necessary 556 // Create absolute file path if necessary
550 QString absFile = (*it); 557 QString absFile = (*it);
551 if ( !absFile.startsWith( "/" ) ) 558 if ( !absFile.startsWith( "/" ) )
552 absFile.prepend( QString( IPKG_CONF_DIR ) + "/" ); 559 absFile.prepend( QString( IPKG_CONF_DIR ) + "/" );
553 560
554 // Read in file 561 // Read in file
555 QFile f( absFile ); 562 QFile f( absFile );
556 if ( f.open( IO_ReadOnly ) ) 563 if ( f.open( IO_ReadOnly ) )
557 { 564 {
558 QTextStream s( &f ); 565 QTextStream s( &f );
559 while ( !s.eof() ) 566 while ( !s.eof() )
560 { 567 {
561 568
562 QString line = s.readLine().simplifyWhiteSpace(); 569 QString line = s.readLine().simplifyWhiteSpace();
563 570
564 // Parse line and save info to the conf options list 571 // Parse line and save info to the conf options list
565 if ( !line.isEmpty() ) 572 if ( !line.isEmpty() )
566 { 573 {
567 // Strip leading comment marker if exists 574 // Strip leading comment marker if exists
568 bool comment = false; 575 bool comment = false;