author | drw <drw> | 2005-03-22 22:57:07 (UTC) |
---|---|---|
committer | drw <drw> | 2005-03-22 22:57:07 (UTC) |
commit | 3011e3f1741057b9163c3658a8847c528da5da05 (patch) (unidiff) | |
tree | d4ddecfd5073465973cbeb92a3301a3247df5594 | |
parent | 63d19f6ef6eeeb362323e3301daab03df1588faa (diff) | |
download | opie-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
-rw-r--r-- | noncore/settings/packagemanager/oipkg.cpp | 7 |
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 | ||
392 | OConfItem *OIpkg::findConfItem( OConfItem::Type type, const QString &name ) | 392 | OConfItem *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 | ||
410 | bool OIpkg::executeCommand( OPackage::Command command, const QStringList ¶meters, const QString &destination, | 410 | bool OIpkg::executeCommand( OPackage::Command command, const QStringList ¶meters, 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 | ||
513 | void OIpkg::ipkgMessage( char *msg ) | 520 | void OIpkg::ipkgMessage( char *msg ) |
514 | { | 521 | { |
515 | emit signalIpkgMessage( msg ); | 522 | emit signalIpkgMessage( msg ); |
516 | } | 523 | } |
517 | 524 | ||
518 | void OIpkg::ipkgStatus( char *status ) | 525 | void OIpkg::ipkgStatus( char *status ) |
519 | { | 526 | { |
520 | emit signalIpkgStatus( status ); | 527 | emit signalIpkgStatus( status ); |
521 | } | 528 | } |
522 | 529 | ||
523 | void OIpkg::ipkgList( char *filelist ) | 530 | void OIpkg::ipkgList( char *filelist ) |
524 | { | 531 | { |
525 | emit signalIpkgList( filelist ); | 532 | emit signalIpkgList( filelist ); |
526 | } | 533 | } |
527 | 534 | ||
528 | void OIpkg::loadConfiguration() | 535 | void 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; |