summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/packagemanager/ChangeLog7
-rw-r--r--noncore/settings/packagemanager/oipkg.cpp12
-rw-r--r--noncore/settings/packagemanager/opackagemanager.cpp7
3 files changed, 16 insertions, 10 deletions
diff --git a/noncore/settings/packagemanager/ChangeLog b/noncore/settings/packagemanager/ChangeLog
index 608cd98..38756b1 100644
--- a/noncore/settings/packagemanager/ChangeLog
+++ b/noncore/settings/packagemanager/ChangeLog
@@ -1,31 +1,36 @@
12005-02-16 Dan Williams <drw@handhelds.org>
2
3 * Fixed stupid bug where last package in status file was not shown as installed when it should be
4 * Removed printf's
5
12005-01-02 Dan Williams <drw@handhelds.org> 62005-01-02 Dan Williams <drw@handhelds.org>
2 7
3 * Released version 0.6.1 8 * Released version 0.6.1
4 * Implemented native package linking code to remove need for ipkg-link 9 * Implemented native package linking code to remove need for ipkg-link
5 * Implement package in OIpkg (removed from InstallDlg) as this is ipkg specific 10 * Implement package in OIpkg (removed from InstallDlg) as this is ipkg specific
6 * Many small code tweaks 11 * Many small code tweaks
7 12
82004-12-21 Dan Williams <drw@handhelds.org> 132004-12-21 Dan Williams <drw@handhelds.org>
9 14
10 * Released version 0.6.0 15 * Released version 0.6.0
11 * Added support for Ipkg 'src/gz' feeds 16 * Added support for Ipkg 'src/gz' feeds
12 * Improve server and destination tabs UI's in configuration dialog 17 * Improve server and destination tabs UI's in configuration dialog
13 * Fix app linking to link all dependent packages as well as selected packages 18 * Fix app linking to link all dependent packages as well as selected packages
14 * Hide 'Retrive File List' button once list is retrieved in Package Info dialog 19 * Hide 'Retrive File List' button once list is retrieved in Package Info dialog
15 20
162004-11-18 Dan Williams <drw@handhelds.org> 212004-11-18 Dan Williams <drw@handhelds.org>
17 22
18 * Released version 0.5.0 23 * Released version 0.5.0
19 * All v1.0 functionality implemented 24 * All v1.0 functionality implemented
20 * Implemented installation of local packages 25 * Implemented installation of local packages
21 * Implemented linking of non-root apps (using ipkg-link) 26 * Implemented linking of non-root apps (using ipkg-link)
22 * Many UI tweaks for installation and filter dialogs 27 * Many UI tweaks for installation and filter dialogs
23 28
242004-04-21 Dan Williams <drw@handhelds.org> 292004-04-21 Dan Williams <drw@handhelds.org>
25 30
26 * Released version 0.4.0 31 * Released version 0.4.0
27 * Added saving of ipkg configuration information 32 * Added saving of ipkg configuration information
28 * Re-initialize ipkg when configuration information changes 33 * Re-initialize ipkg when configuration information changes
29 * Added QWhatsThis for all UI controls 34 * Added QWhatsThis for all UI controls
30 * Remove Location from OConfItem as it is not used/needed 35 * Remove Location from OConfItem as it is not used/needed
31 * Re-ordered includes to follow Opie standards 36 * Re-ordered includes to follow Opie standards
diff --git a/noncore/settings/packagemanager/oipkg.cpp b/noncore/settings/packagemanager/oipkg.cpp
index f2d7e39..e7e292e 100644
--- a/noncore/settings/packagemanager/oipkg.cpp
+++ b/noncore/settings/packagemanager/oipkg.cpp
@@ -342,48 +342,52 @@ OPackageList *OIpkg::installedPackages( const QString &destName, const QString &
342 342
343 // Update package data 343 // Update package data
344 if ( key == "Package" ) 344 if ( key == "Package" )
345 name = value; 345 name = value;
346 else if ( key == "Version" ) 346 else if ( key == "Version" )
347 version = value; 347 version = value;
348 else if ( key == "Status" ) 348 else if ( key == "Status" )
349 status = value; 349 status = value;
350 else if ( key.isEmpty() && value.isEmpty() ) 350 else if ( key.isEmpty() && value.isEmpty() )
351 newPackage = true; 351 newPackage = true;
352 352
353 // Skip past all description lines 353 // Skip past all description lines
354 if ( key == "Description" ) 354 if ( key == "Description" )
355 { 355 {
356 line = t.readLine(); 356 line = t.readLine();
357 while ( !line.isEmpty() && line.find( ':', 0 ) == -1 && !t.eof() ) 357 while ( !line.isEmpty() && line.find( ':', 0 ) == -1 && !t.eof() )
358 line = t.readLine(); 358 line = t.readLine();
359 } 359 }
360 else 360 else
361 line = t.readLine(); 361 line = t.readLine();
362 } 362 }
363 363
364 f.close(); 364 f.close();
365 365
366 // Make sure to add to list last entry
367 if ( !name.isNull() && status.contains( " installed" ) )
368 pl->append( new OPackage( name, QString::null, version, QString::null, destName ) );
369
366 return pl; 370 return pl;
367} 371}
368 372
369OConfItem *OIpkg::findConfItem( OConfItem::Type type, const QString &name ) 373OConfItem *OIpkg::findConfItem( OConfItem::Type type, const QString &name )
370{ 374{
371 // Find configuration item in list 375 // Find configuration item in list
372 OConfItemListIterator configIt( *m_confInfo ); 376 OConfItemListIterator configIt( *m_confInfo );
373 OConfItem *config = 0l; 377 OConfItem *config = 0l;
374 for ( ; configIt.current(); ++configIt ) 378 for ( ; configIt.current(); ++configIt )
375 { 379 {
376 config = configIt.current(); 380 config = configIt.current();
377 if ( config->type() == type && config->name() == name ) 381 if ( config->type() == type && config->name() == name )
378 break; 382 break;
379 } 383 }
380 384
381 if ( config && config->type() == type && config->name() == name ) 385 if ( config && config->type() == type && config->name() == name )
382 return config; 386 return config;
383 387
384 return 0l; 388 return 0l;
385} 389}
386 390
387bool OIpkg::executeCommand( OPackage::Command command, const QStringList &parameters, const QString &destination, 391bool OIpkg::executeCommand( OPackage::Command command, const QStringList &parameters, const QString &destination,
388 const QObject *receiver, const char *slotOutput, bool rawOutput ) 392 const QObject *receiver, const char *slotOutput, bool rawOutput )
389{ 393{
@@ -432,49 +436,49 @@ bool OIpkg::executeCommand( OPackage::Command command, const QStringList &parame
432 for ( ; it.current(); ++it ) 436 for ( ; it.current(); ++it )
433 { 437 {
434 OConfItem *dest = it.current(); 438 OConfItem *dest = it.current();
435 if ( dest->name() != "root" ) 439 if ( dest->name() != "root" )
436 linkPackageDir( dest->name() ); 440 linkPackageDir( dest->name() );
437 } 441 }
438 delete destList; 442 delete destList;
439 }; 443 };
440 break; 444 break;
441 case OPackage::Install : { 445 case OPackage::Install : {
442 connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput ); 446 connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput );
443 for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it ) 447 for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it )
444 { 448 {
445 ipkg_packages_install( &m_ipkgArgs, (*it) ); 449 ipkg_packages_install( &m_ipkgArgs, (*it) );
446 } 450 }
447 if ( destination != "root" ) 451 if ( destination != "root" )
448 linkPackageDir( destination ); 452 linkPackageDir( destination );
449 }; 453 };
450 break; 454 break;
451 case OPackage::Remove : { 455 case OPackage::Remove : {
452 connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput ); 456 connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput );
453 457
454 // Get list of destinations for unlinking of packages not installed to root 458 // Get list of destinations for unlinking of packages not installed to root
455 OConfItemList *destList = destinations(); 459 OConfItemList *destList = destinations();
456 460
457 for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it ) 461 for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it )
458 { 462 {
459 unlinkPackage( (*it), destList ); 463 unlinkPackage( (*it), destList );
460 ipkg_packages_remove( &m_ipkgArgs, (*it), true ); 464 ipkg_packages_remove( &m_ipkgArgs, (*it), true );
461 } 465 }
462 466
463 delete destList; 467 delete destList;
464 }; 468 };
465 break; 469 break;
466 case OPackage::Download : { 470 case OPackage::Download : {
467 connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput ); 471 connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput );
468 for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it ) 472 for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it )
469 { 473 {
470 ipkg_packages_download( &m_ipkgArgs, (*it) ); 474 ipkg_packages_download( &m_ipkgArgs, (*it) );
471 } 475 }
472 }; 476 };
473 break; 477 break;
474 case OPackage::Info : { 478 case OPackage::Info : {
475 connect( this, SIGNAL(signalIpkgStatus(const QString &)), receiver, slotOutput ); 479 connect( this, SIGNAL(signalIpkgStatus(const QString &)), receiver, slotOutput );
476 ipkg_packages_info( &m_ipkgArgs, (*parameters.begin()), &fIpkgStatus, 0l ); 480 ipkg_packages_info( &m_ipkgArgs, (*parameters.begin()), &fIpkgStatus, 0l );
477 }; 481 };
478 break; 482 break;
479 case OPackage::Files : { 483 case OPackage::Files : {
480 connect( this, SIGNAL(signalIpkgList(const QString &)), receiver, slotOutput ); 484 connect( this, SIGNAL(signalIpkgList(const QString &)), receiver, slotOutput );
@@ -624,137 +628,137 @@ OConfItemList *OIpkg::filterConfItems( OConfItem::Type typefilter )
624 } 628 }
625 } 629 }
626 630
627 return sl; 631 return sl;
628} 632}
629 633
630const QString &OIpkg::rootPath() 634const QString &OIpkg::rootPath()
631{ 635{
632 if ( m_rootPath.isEmpty() ) 636 if ( m_rootPath.isEmpty() )
633 { 637 {
634 OConfItem *rootDest = findConfItem( OConfItem::Destination, "root" ); 638 OConfItem *rootDest = findConfItem( OConfItem::Destination, "root" );
635 rootDest ? m_rootPath = rootDest->value() 639 rootDest ? m_rootPath = rootDest->value()
636 : m_rootPath = '/'; 640 : m_rootPath = '/';
637 if ( m_rootPath.right( 1 ) == '/' ) 641 if ( m_rootPath.right( 1 ) == '/' )
638 m_rootPath.truncate( m_rootPath.length() - 1 ); 642 m_rootPath.truncate( m_rootPath.length() - 1 );
639 } 643 }
640 return m_rootPath; 644 return m_rootPath;
641} 645}
642 646
643void OIpkg::linkPackageDir( const QString &dest ) 647void OIpkg::linkPackageDir( const QString &dest )
644{ 648{
645 if ( !dest.isNull() ) 649 if ( !dest.isNull() )
646 { 650 {
647 OConfItem *destConfItem = findConfItem( OConfItem::Destination, dest ); 651 OConfItem *destConfItem = findConfItem( OConfItem::Destination, dest );
648 652
649 emit signalIpkgMessage( tr( "Linking packages installed in: %1" ).arg( dest ) ); 653 emit signalIpkgMessage( tr( "Linking packages installed in: %1" ).arg( dest ) );
650 654
651 // Set package destination directory 655 // Set package destination directory
652 QString destDir = destConfItem->value(); 656 QString destDir = destConfItem->value();
653 QString destInfoDir = destDir; 657 QString destInfoDir = destDir;
654 if ( destInfoDir.right( 1 ) != '/' ) 658 if ( destInfoDir.right( 1 ) != '/' )
655 destInfoDir.append( '/' ); 659 destInfoDir.append( '/' );
656 destInfoDir.append( IPKG_INFO_PATH ); 660 destInfoDir.append( IPKG_INFO_PATH );
657 661
658 // Get list of installed packages in destination 662 // Get list of installed packages in destination
659 QDir packageDir( destInfoDir ); 663 QDir packageDir( destInfoDir );
660 QStringList packageFiles; 664 QStringList packageFiles;
661 if ( packageDir.exists() ) 665 if ( packageDir.exists() )
662 { 666 {
663 packageDir.setNameFilter( "*.list" ); 667 packageDir.setNameFilter( "*.list" );
664 packageDir.setFilter( QDir::Files ); 668 packageDir.setFilter( QDir::Files );
665 packageFiles = packageDir.entryList( "*.list", QDir::Files ); 669 packageFiles = packageDir.entryList( "*.list", QDir::Files );
666 } 670 }
667 671
668 // Link all files for every package installed in desination 672 // Link all files for every package installed in desination
669 QStringList::Iterator lastFile = packageFiles.end(); 673 QStringList::Iterator lastFile = packageFiles.end();
670 for ( QStringList::Iterator it = packageFiles.begin(); it != lastFile; ++it ) 674 for ( QStringList::Iterator it = packageFiles.begin(); it != lastFile; ++it )
671 { 675 {
672 //emit signalIpkgMessage( QString( "Processing: %1/%2" ).arg( destInfoDir ).arg (*it) ); 676 //emit signalIpkgMessage( QString( "Processing: %1/%2" ).arg( destInfoDir ).arg (*it) );
673 QString packageFileName = destInfoDir; 677 QString packageFileName = destInfoDir;
674 packageFileName.append( '/' ); 678 packageFileName.append( '/' );
675 packageFileName.append( (*it) ); 679 packageFileName.append( (*it) );
676 QFile packageFile( packageFileName ); 680 QFile packageFile( packageFileName );
677 if ( packageFile.open( IO_ReadOnly ) ) 681 if ( packageFile.open( IO_ReadOnly ) )
678 { 682 {
679 QTextStream t( &packageFile ); 683 QTextStream t( &packageFile );
680 QString linkFile; 684 QString linkFile;
681 while ( !t.eof() ) 685 while ( !t.eof() )
682 { 686 {
683 // Get the name of the file to link and build the sym link filename 687 // Get the name of the file to link and build the sym link filename
684 linkFile = t.readLine(); 688 linkFile = t.readLine();
685 QString linkDest( linkFile.right( linkFile.length() - destDir.length() ) ); 689 QString linkDest( linkFile.right( linkFile.length() - destDir.length() ) );
686 linkDest.prepend( rootPath() ); 690 linkDest.prepend( rootPath() );
687 691
688 // If file installed file is actually symbolic link, use actual file for linking 692 // If file installed file is actually symbolic link, use actual file for linking
689 QFileInfo fileInfo( linkFile ); 693 QFileInfo fileInfo( linkFile );
690 if ( fileInfo.isSymLink() && !fileInfo.readLink().isEmpty() ) 694 if ( fileInfo.isSymLink() && !fileInfo.readLink().isEmpty() )
691 linkFile = fileInfo.readLink(); 695 linkFile = fileInfo.readLink();
692 696
693 // See if directory exists in 'root', if not, create 697 // See if directory exists in 'root', if not, create
694 fileInfo.setFile( linkDest ); 698 fileInfo.setFile( linkDest );
695 QString linkDestDirName = fileInfo.dirPath( true ); 699 QString linkDestDirName = fileInfo.dirPath( true );
696 QDir linkDestDir( linkDestDirName ); 700 QDir linkDestDir( linkDestDirName );
697 if ( !linkDestDir.exists() ) 701 if ( !linkDestDir.exists() )
698 { 702 {
699 linkDestDir.mkdir( linkDestDirName ); 703 linkDestDir.mkdir( linkDestDirName );
700 } 704 }
701 else 705 else
702 { 706 {
703 // Remove any previous link to make sure we will be pointing to the current version 707 // Remove any previous link to make sure we will be pointing to the current version
704 if ( QFile::exists( linkDest ) ) 708 if ( QFile::exists( linkDest ) )
705 QFile::remove( linkDest ); 709 QFile::remove( linkDest );
706 } 710 }
707 711
708 // Link the file 712 // Link the file
709 //emit signalIpkgMessage( QString( "Linking '%1' to '%2'" ).arg( linkFile ).arg( linkDest ) ); 713 //emit signalIpkgMessage( QString( "Linking '%1' to '%2'" ).arg( linkFile ).arg( linkDest ) );
710 if ( symlink( linkFile, linkDest ) == -1 ) 714 if ( symlink( linkFile, linkDest ) == -1 )
711 emit signalIpkgMessage( tr( "Error linkling '%1' to '%2'" ) 715 emit signalIpkgMessage( tr( "Error linkling '%1' to '%2'" )
712 .arg( linkFile ) 716 .arg( linkFile )
713 .arg( linkDest ) ); 717 .arg( linkDest ) );
714 } 718 }
715 packageFile.close(); 719 packageFile.close();
716 } 720 }
717 } 721 }
718 } 722 }
719} 723}
720 724
721void OIpkg::unlinkPackage( const QString &package, OConfItemList *destList ) 725void OIpkg::unlinkPackage( const QString &package, OConfItemList *destList )
722{ 726{
723 if ( !package.isNull() ) 727 if ( !package.isNull() )
724 { 728 {
725 // Find destination package is installed in 729 // Find destination package is installed in
726 if ( destList ) 730 if ( destList )
727 { 731 {
728 OConfItemListIterator it( *destList ); 732 OConfItemListIterator it( *destList );
729 for ( ; it.current(); ++it ) 733 for ( ; it.current(); ++it )
730 { 734 {
731 OConfItem *dest = it.current(); 735 OConfItem *dest = it.current();
732 QString destInfoFileName = QString( "%1/%2/%3.list" ).arg( dest->value() ) 736 QString destInfoFileName = QString( "%1/%2/%3.list" ).arg( dest->value() )
733 .arg( IPKG_INFO_PATH ) 737 .arg( IPKG_INFO_PATH )
734 .arg( package ); 738 .arg( package );
735 //emit signalIpkgMessage( QString( "Looking for '%1'" ).arg ( destInfoFileName ) ); 739 //emit signalIpkgMessage( QString( "Looking for '%1'" ).arg ( destInfoFileName ) );
736 740
737 // If found and destination is not 'root', remove symbolic links 741 // If found and destination is not 'root', remove symbolic links
738 if ( QFile::exists( destInfoFileName ) && dest->name() != "root" ) 742 if ( QFile::exists( destInfoFileName ) && dest->name() != "root" )
739 { 743 {
740 QFile destInfoFile( destInfoFileName ); 744 QFile destInfoFile( destInfoFileName );
741 if ( destInfoFile.open( IO_ReadOnly ) ) 745 if ( destInfoFile.open( IO_ReadOnly ) )
742 { 746 {
743 QTextStream t( &destInfoFile ); 747 QTextStream t( &destInfoFile );
744 QString linkFile; 748 QString linkFile;
745 while ( !t.eof() ) 749 while ( !t.eof() )
746 { 750 {
747 // Get the name of the file to link and build the sym link filename 751 // Get the name of the file to link and build the sym link filename
748 linkFile = t.readLine(); 752 linkFile = t.readLine();
749 QString linkDest( linkFile.right( linkFile.length() - 753 QString linkDest( linkFile.right( linkFile.length() -
750 dest->value().length() ) ); 754 dest->value().length() ) );
751 linkDest.prepend( rootPath() ); 755 linkDest.prepend( rootPath() );
752 756
753 //emit signalIpkgMessage( QString( "Deleting: '%1'" ).arg( linkDest ) ); 757 //emit signalIpkgMessage( QString( "Deleting: '%1'" ).arg( linkDest ) );
754 QFile::remove( linkDest ); 758 QFile::remove( linkDest );
755 } 759 }
756 destInfoFile.close(); 760 destInfoFile.close();
757 } 761 }
758 762
759 emit signalIpkgMessage( tr( "Links removed for: %1" ).arg( package ) ); 763 emit signalIpkgMessage( tr( "Links removed for: %1" ).arg( package ) );
760 return; 764 return;
diff --git a/noncore/settings/packagemanager/opackagemanager.cpp b/noncore/settings/packagemanager/opackagemanager.cpp
index ac16954..c9fdec1 100644
--- a/noncore/settings/packagemanager/opackagemanager.cpp
+++ b/noncore/settings/packagemanager/opackagemanager.cpp
@@ -62,52 +62,51 @@ void OPackageManager::loadAvailablePackages()
62 62
63 for ( OConfItemListIterator serverIt( *serverList ); serverIt.current(); ++serverIt ) 63 for ( OConfItemListIterator serverIt( *serverList ); serverIt.current(); ++serverIt )
64 { 64 {
65 OConfItem *server = serverIt.current(); 65 OConfItem *server = serverIt.current();
66 66
67 // Process server only if it is active 67 // Process server only if it is active
68 if ( server->active() ) 68 if ( server->active() )
69 { 69 {
70 // Update status 70 // Update status
71 QString status = tr( "Reading available packages:\n\t" ); 71 QString status = tr( "Reading available packages:\n\t" );
72 status.append( server->name() ); 72 status.append( server->name() );
73 emit statusText( status ); 73 emit statusText( status );
74 ++serverCount; 74 ++serverCount;
75 emit statusBar( serverCount ); 75 emit statusBar( serverCount );
76 qApp->processEvents(); 76 qApp->processEvents();
77 77
78 OPackageList *packageList = m_ipkg.availablePackages( server->name() ); 78 OPackageList *packageList = m_ipkg.availablePackages( server->name() );
79 if ( packageList ) 79 if ( packageList )
80 { 80 {
81 for ( OPackageListIterator packageIt( *packageList ); packageIt.current(); ++packageIt ) 81 for ( OPackageListIterator packageIt( *packageList ); packageIt.current(); ++packageIt )
82 { 82 {
83 OPackage *package = packageIt.current(); 83 OPackage *package = packageIt.current();
84 84
85 // Load package info 85 // Load package info
86 if ( !m_packages.find( package->name() ) ) { 86 if ( !m_packages.find( package->name() ) )
87 printf( "ADD AVAILABLE '%s'\n", package->name().latin1());
88 m_packages.insert( package->name(), package ); 87 m_packages.insert( package->name(), package );
89 } else 88 else
90 { 89 {
91 // If new package is newer version, replace existing package 90 // If new package is newer version, replace existing package
92 OPackage *currPackage = m_packages[package->name()]; 91 OPackage *currPackage = m_packages[package->name()];
93 if ( compareVersions( package->version(), currPackage->version() ) == 1 ) 92 if ( compareVersions( package->version(), currPackage->version() ) == 1 )
94 m_packages.replace( package->name(), package ); 93 m_packages.replace( package->name(), package );
95 } 94 }
96 95
97 // Add category to list if it doesn't already exist 96 // Add category to list if it doesn't already exist
98 if ( m_categories.grep( package->category() ).isEmpty() ) 97 if ( m_categories.grep( package->category() ).isEmpty() )
99 { 98 {
100 m_categories << package->category(); 99 m_categories << package->category();
101 categoryAdded = true; 100 categoryAdded = true;
102 } 101 }
103 } 102 }
104 } 103 }
105 } 104 }
106 } 105 }
107 delete serverList; 106 delete serverList;
108 107
109 // Sort category list if categories were added 108 // Sort category list if categories were added
110 if ( categoryAdded ) 109 if ( categoryAdded )
111 m_categories.sort(); 110 m_categories.sort();
112 } 111 }
113} 112}
@@ -118,69 +117,67 @@ void OPackageManager::loadInstalledPackages()
118 117
119 if ( destList ) 118 if ( destList )
120 { 119 {
121 // Initialize status messaging 120 // Initialize status messaging
122 emit initStatus( destList->count() ); 121 emit initStatus( destList->count() );
123 int destCount = 0; 122 int destCount = 0;
124 123
125 bool categoryAdded = false; 124 bool categoryAdded = false;
126 125
127 for ( OConfItemListIterator destIt( *destList ); destIt.current(); ++destIt ) 126 for ( OConfItemListIterator destIt( *destList ); destIt.current(); ++destIt )
128 { 127 {
129 OConfItem *destination = destIt.current(); 128 OConfItem *destination = destIt.current();
130 129
131 // Process destination only if it is active 130 // Process destination only if it is active
132 if ( destination->active() ) 131 if ( destination->active() )
133 { 132 {
134 // Update status 133 // Update status
135 QString status = tr( "Reading installed packages:\n\t" ); 134 QString status = tr( "Reading installed packages:\n\t" );
136 status.append( destination->name() ); 135 status.append( destination->name() );
137 emit statusText( status ); 136 emit statusText( status );
138 ++destCount; 137 ++destCount;
139 emit statusBar( destCount ); 138 emit statusBar( destCount );
140 qApp->processEvents(); 139 qApp->processEvents();
141 140
142 printf( "DESGTINATION %s\n", destination->name().latin1());
143 OPackageList *packageList = m_ipkg.installedPackages( destination->name(), 141 OPackageList *packageList = m_ipkg.installedPackages( destination->name(),
144 destination->value() ); 142 destination->value() );
145 if ( packageList ) 143 if ( packageList )
146 { 144 {
147 for ( OPackageListIterator packageIt( *packageList ); packageIt.current(); ++packageIt ) 145 for ( OPackageListIterator packageIt( *packageList ); packageIt.current(); ++packageIt )
148 { 146 {
149 OPackage *package = packageIt.current(); 147 OPackage *package = packageIt.current();
150 OPackage *currPackage = m_packages[package->name()]; 148 OPackage *currPackage = m_packages[package->name()];
151 if ( currPackage ) 149 if ( currPackage )
152 { 150 {
153 // Package is in a current feed, update installed version, destination 151 // Package is in a current feed, update installed version, destination
154 currPackage->setVersionInstalled( package->versionInstalled() ); 152 currPackage->setVersionInstalled( package->versionInstalled() );
155 currPackage->setDestination( package->destination() ); 153 currPackage->setDestination( package->destination() );
156 154
157 delete package; 155 delete package;
158 } 156 }
159 else 157 else
160 { 158 {
161 // Package isn't in a current feed, add to list 159 // Package isn't in a current feed, add to list
162 printf( "ADD INSTALLED '%s'\n", package->name().latin1());
163 m_packages.insert( package->name(), package ); 160 m_packages.insert( package->name(), package );
164 161
165 // Add category to list if it doesn't already exist 162 // Add category to list if it doesn't already exist
166 if ( m_categories.grep( package->category() ).isEmpty() ) 163 if ( m_categories.grep( package->category() ).isEmpty() )
167 { 164 {
168 m_categories << package->category(); 165 m_categories << package->category();
169 categoryAdded = true; 166 categoryAdded = true;
170 } 167 }
171 } 168 }
172 } 169 }
173 } 170 }
174 } 171 }
175 } 172 }
176 delete destList; 173 delete destList;
177 174
178 // Sort category list if categories were added 175 // Sort category list if categories were added
179 if ( categoryAdded ) 176 if ( categoryAdded )
180 m_categories.sort(); 177 m_categories.sort();
181 } 178 }
182} 179}
183 180
184OPackageList *OPackageManager::packages() 181OPackageList *OPackageManager::packages()
185{ 182{
186 // TODO - look to see if list is loaded, if not, load available & installed 183 // TODO - look to see if list is loaded, if not, load available & installed