summaryrefslogtreecommitdiff
path: root/noncore/settings/aqpkg/networkpkgmgr.cpp
Unidiff
Diffstat (limited to 'noncore/settings/aqpkg/networkpkgmgr.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/settings/aqpkg/networkpkgmgr.cpp77
1 files changed, 34 insertions, 43 deletions
diff --git a/noncore/settings/aqpkg/networkpkgmgr.cpp b/noncore/settings/aqpkg/networkpkgmgr.cpp
index c209589..b4b6475 100644
--- a/noncore/settings/aqpkg/networkpkgmgr.cpp
+++ b/noncore/settings/aqpkg/networkpkgmgr.cpp
@@ -6,42 +6,38 @@
6 email : andy.qua@blueyonder.co.uk 6 email : andy.qua@blueyonder.co.uk
7 ***************************************************************************/ 7 ***************************************************************************/
8 8
9/*************************************************************************** 9/***************************************************************************
10 * * 10 * *
11 * This program is free software; you can redistribute it and/or modify * 11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by * 12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or * 13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. * 14 * (at your option) any later version. *
15 * * 15 * *
16 ***************************************************************************/ 16 ***************************************************************************/
17 17
18#include <fstream>
19#include <iostream>
20using namespace std;
21
22#include <unistd.h> 18#include <unistd.h>
23#include <stdlib.h>
24#include <linux/limits.h>
25 19
26#ifdef QWS 20#ifdef QWS
27#include <qpe/qpeapplication.h> 21#include <qpe/qpeapplication.h>
28#include <qpe/qcopenvelope_qws.h> 22#include <qpe/qcopenvelope_qws.h>
29#include <qpe/config.h> 23#include <qpe/config.h>
24#include <qpe/resource.h>
30#else 25#else
31#include <qapplication.h> 26#include <qapplication.h>
32#endif 27#endif
33#include <qlabel.h> 28#include <qlabel.h>
34#include <qfile.h> 29#include <qfile.h>
35#include <qmessagebox.h> 30#include <qmessagebox.h>
31#include <qwhatsthis.h>
36 32
37#include "datamgr.h" 33#include "datamgr.h"
38#include "networkpkgmgr.h" 34#include "networkpkgmgr.h"
39#include "installdlgimpl.h" 35#include "installdlgimpl.h"
40#include "ipkg.h" 36#include "ipkg.h"
41#include "inputdlg.h" 37#include "inputdlg.h"
42#include "letterpushbutton.h" 38#include "letterpushbutton.h"
43#include "categoryfilterimpl.h" 39#include "categoryfilterimpl.h"
44 40
45#include "global.h" 41#include "global.h"
46 42
47extern int compareVersions( const char *v1, const char *v2 ); 43extern int compareVersions( const char *v1, const char *v2 );
@@ -88,25 +84,25 @@ void NetworkPackageManager :: updateData()
88 int i; 84 int i;
89 QString serverName; 85 QString serverName;
90 for ( i = 0, it = dataMgr->getServerList().begin() ; it != dataMgr->getServerList().end() ; ++it, ++i ) 86 for ( i = 0, it = dataMgr->getServerList().begin() ; it != dataMgr->getServerList().end() ; ++it, ++i )
91 { 87 {
92 serverName = it->getServerName(); 88 serverName = it->getServerName();
93 emit progressSetMessage( tr( "Building server list:\n\t%1" ).arg( serverName ) ); 89 emit progressSetMessage( tr( "Building server list:\n\t%1" ).arg( serverName ) );
94 emit progressUpdate( i ); 90 emit progressUpdate( i );
95 qApp->processEvents(); 91 qApp->processEvents();
96 92
97// cout << "Adding " << it->getServerName() << " to combobox" << endl; 93// cout << "Adding " << it->getServerName() << " to combobox" << endl;
98 if ( !it->isServerActive() ) 94 if ( !it->isServerActive() )
99 { 95 {
100 cout << serverName << " is not active" << endl; 96// cout << serverName << " is not active" << endl;
101 i--; 97 i--;
102 continue; 98 continue;
103 } 99 }
104 100
105 serversList->insertItem( serverName ); 101 serversList->insertItem( serverName );
106 if ( serverName == currentlySelectedServer ) 102 if ( serverName == currentlySelectedServer )
107 activeItem = i; 103 activeItem = i;
108 } 104 }
109 105
110 // set selected server to be active server 106 // set selected server to be active server
111 if ( activeItem != -1 ) 107 if ( activeItem != -1 )
112 serversList->setCurrentItem( activeItem ); 108 serversList->setCurrentItem( activeItem );
@@ -136,26 +132,32 @@ void NetworkPackageManager :: selectLocalPackage( const QString &pkg )
136 item->setOn( true ); 132 item->setOn( true );
137 break; 133 break;
138 } 134 }
139 } 135 }
140} 136}
141 137
142 138
143void NetworkPackageManager :: initGui() 139void NetworkPackageManager :: initGui()
144{ 140{
145 QLabel *l = new QLabel( tr( "Servers" ), this ); 141 QLabel *l = new QLabel( tr( "Servers" ), this );
146 serversList = new QComboBox( this ); 142 serversList = new QComboBox( this );
147 connect( serversList, SIGNAL(activated( int )), this, SLOT(serverSelected( int ))); 143 connect( serversList, SIGNAL(activated( int )), this, SLOT(serverSelected( int )));
144 QWhatsThis::add( serversList, tr( "Click here to select a package feed." ) );
145
146 installedIcon = Resource::loadPixmap( "aqpkg/installed" );
147 updatedIcon = Resource::loadPixmap( "aqpkg/updated" );
148 148
149 packagesList = new QListView( this ); 149 packagesList = new QListView( this );
150 packagesList->addColumn( tr( "Packages" ), 225 );
151 QWhatsThis::add( packagesList, tr( "This is a listing of all packages for the server feed selected above.\n\nA blue dot next to the package name indicates that the package is currently installed.\n\nA blue dot with a star indicates that a newer version of the package is available from the server feed.\n\nClick inside the box at the left to select a package." ) );
150 152
151 QVBoxLayout *vbox = new QVBoxLayout( this, 0, -1 ); 153 QVBoxLayout *vbox = new QVBoxLayout( this, 0, -1 );
152 QHBoxLayout *hbox1 = new QHBoxLayout( vbox, -1 ); 154 QHBoxLayout *hbox1 = new QHBoxLayout( vbox, -1 );
153 hbox1->addWidget( l ); 155 hbox1->addWidget( l );
154 hbox1->addWidget( serversList ); 156 hbox1->addWidget( serversList );
155 157
156 QHBoxLayout *hbox3 = new QHBoxLayout( vbox, -1 ); 158 QHBoxLayout *hbox3 = new QHBoxLayout( vbox, -1 );
157 QHBoxLayout *hbox4 = new QHBoxLayout( vbox, -1 ); 159 QHBoxLayout *hbox4 = new QHBoxLayout( vbox, -1 );
158 160
159 161
160 if ( showJumpTo ) 162 if ( showJumpTo )
161 { 163 {
@@ -165,36 +167,38 @@ void NetworkPackageManager :: initGui()
165 { 167 {
166 text[0] = 'A' + i; 168 text[0] = 'A' + i;
167 LetterPushButton *b = new LetterPushButton( text, this ); 169 LetterPushButton *b = new LetterPushButton( text, this );
168 connect( b, SIGNAL( released( QString ) ), this, SLOT( letterPushed( QString ) ) ); 170 connect( b, SIGNAL( released( QString ) ), this, SLOT( letterPushed( QString ) ) );
169 if ( i < 13 ) 171 if ( i < 13 )
170 hbox3->addWidget( b ); 172 hbox3->addWidget( b );
171 else 173 else
172 hbox4->addWidget( b ); 174 hbox4->addWidget( b );
173 } 175 }
174 } 176 }
175 177
176 vbox->addWidget( packagesList ); 178 vbox->addWidget( packagesList );
177 packagesList->addColumn( tr( "Packages" ) );
178 179
179 downloadEnabled = TRUE; 180 downloadEnabled = TRUE;
180} 181}
181 182
182void NetworkPackageManager :: serverSelected( int index ) 183void NetworkPackageManager :: serverSelected( int index )
183{ 184{
184 serverSelected( index, TRUE ); 185 serverSelected( index, TRUE );
185} 186}
186 187
187void NetworkPackageManager :: serverSelected( int, bool raiseProgress ) 188void NetworkPackageManager :: serverSelected( int, bool raiseProgress )
188{ 189{
190 QPixmap nullIcon( installedIcon.size() );
191 nullIcon.fill( colorGroup().base() );
192
189 // display packages 193 // display packages
190 QString serverName = serversList->currentText(); 194 QString serverName = serversList->currentText();
191 currentlySelectedServer = serverName; 195 currentlySelectedServer = serverName;
192 196
193 vector<Server>::iterator s = dataMgr->getServer( serverName ); 197 vector<Server>::iterator s = dataMgr->getServer( serverName );
194 198
195 vector<Package> &list = s->getPackageList(); 199 vector<Package> &list = s->getPackageList();
196 vector<Package>::iterator it; 200 vector<Package>::iterator it;
197 201
198 // Display progress widget while loading list 202 // Display progress widget while loading list
199 bool doProgress = ( list.size() > 200 ); 203 bool doProgress = ( list.size() > 200 );
200 if ( doProgress ) 204 if ( doProgress )
@@ -251,56 +255,59 @@ void NetworkPackageManager :: serverSelected( int, bool raiseProgress )
251 // Apply the section filter 255 // Apply the section filter
252 if ( categoryFilterEnabled && categoryFilter != "" ) 256 if ( categoryFilterEnabled && categoryFilter != "" )
253 { 257 {
254 if ( it->getSection() == "" || categoryFilter.find( it->getSection().lower() ) == -1 ) 258 if ( it->getSection() == "" || categoryFilter.find( it->getSection().lower() ) == -1 )
255 continue; 259 continue;
256 } 260 }
257 261
258 // If the local server, only display installed packages 262 // If the local server, only display installed packages
259 if ( serverName == LOCAL_SERVER && !it->isInstalled() ) 263 if ( serverName == LOCAL_SERVER && !it->isInstalled() )
260 continue; 264 continue;
261 265
262 266
263 text.append( it->getPackageName() ); 267 QCheckListItem *item = new QCheckListItem( packagesList, it->getPackageName(), QCheckListItem::CheckBox );
268
264 if ( it->isInstalled() ) 269 if ( it->isInstalled() )
265 { 270 {
266 text.append( " (installed)" ); 271 // If a different version of package is available, show update available icon
267 272 // Otherwise, show installed icon
268 // If a different version of package is available, postfix it with an * 273 if ( it->getVersion() != it->getInstalledVersion() &&
269 if ( it->getVersion() != it->getInstalledVersion() ) 274 compareVersions( it->getInstalledVersion(), it->getVersion() ) == 1)
270 { 275 {
271 276
272 if ( compareVersions( it->getInstalledVersion(), it->getVersion() ) == 1 ) 277 item->setPixmap( 0, updatedIcon );
273 text.append( "*" );
274 } 278 }
279 else
280 {
281 item->setPixmap( 0, installedIcon );
275 } 282 }
276 283
277 QCheckListItem *item = new QCheckListItem( packagesList, text, QCheckListItem::CheckBox );
278
279 if ( it->isInstalled() )
280 {
281 QString destName = ""; 284 QString destName = "";
282 if ( it->getLocalPackage() ) 285 if ( it->getLocalPackage() )
283 { 286 {
284 if ( it->getLocalPackage()->getInstalledTo() ) 287 if ( it->getLocalPackage()->getInstalledTo() )
285 destName = it->getLocalPackage()->getInstalledTo()->getDestinationName(); 288 destName = it->getLocalPackage()->getInstalledTo()->getDestinationName();
286 } 289 }
287 else 290 else
288 { 291 {
289 if ( it->getInstalledTo() ) 292 if ( it->getInstalledTo() )
290 destName = it->getInstalledTo()->getDestinationName(); 293 destName = it->getInstalledTo()->getDestinationName();
291 } 294 }
292 if ( destName != "" ) 295 if ( destName != "" )
293 new QCheckListItem( item, QString( tr( "Installed To - %1" ).arg( destName ) ) ); 296 new QCheckListItem( item, QString( tr( "Installed To - %1" ).arg( destName ) ) );
294 } 297 }
298 else
299 {
300 item->setPixmap( 0, nullIcon );
301 }
295 302
296 if ( !it->isPackageStoredLocally() ) 303 if ( !it->isPackageStoredLocally() )
297 { 304 {
298 new QCheckListItem( item, QString( tr( "Description - %1" ).arg( it->getDescription() ) ) ); 305 new QCheckListItem( item, QString( tr( "Description - %1" ).arg( it->getDescription() ) ) );
299 new QCheckListItem( item, QString( tr( "Size - %1" ).arg( it->getPackageSize() ) ) ); 306 new QCheckListItem( item, QString( tr( "Size - %1" ).arg( it->getPackageSize() ) ) );
300 new QCheckListItem( item, QString( tr( "Section - %1" ).arg( it->getSection() ) ) ); 307 new QCheckListItem( item, QString( tr( "Section - %1" ).arg( it->getSection() ) ) );
301 } 308 }
302 else 309 else
303 new QCheckListItem( item, QString( tr( "Filename - %1" ).arg( it->getFilename() ) ) ); 310 new QCheckListItem( item, QString( tr( "Filename - %1" ).arg( it->getFilename() ) ) );
304 311
305 if ( serverName == LOCAL_SERVER ) 312 if ( serverName == LOCAL_SERVER )
306 { 313 {
@@ -499,34 +506,25 @@ void NetworkPackageManager :: downloadSelectedPackages()
499 // Download each package 506 // Download each package
500 Ipkg ipkg; 507 Ipkg ipkg;
501 connect( &ipkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &))); 508 connect( &ipkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &)));
502 509
503 ipkg.setOption( "download" ); 510 ipkg.setOption( "download" );
504 ipkg.setRuntimeDirectory( dir ); 511 ipkg.setRuntimeDirectory( dir );
505 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); 512 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
506 item != 0 ; 513 item != 0 ;
507 item = (QCheckListItem *)item->nextSibling() ) 514 item = (QCheckListItem *)item->nextSibling() )
508 { 515 {
509 if ( item->isOn() ) 516 if ( item->isOn() )
510 { 517 {
511 QString name = item->text(); 518 ipkg.setPackage( item->text() );
512 int pos = name.find( "*" );
513 name.truncate( pos );
514
515 // if (there is a (installed), remove it
516 pos = name.find( "(installed)" );
517 if ( pos > 0 )
518 name.truncate( pos - 1 );
519
520 ipkg.setPackage( name );
521 ipkg.runIpkg( ); 519 ipkg.runIpkg( );
522 } 520 }
523 } 521 }
524} 522}
525 523
526void NetworkPackageManager :: downloadRemotePackage() 524void NetworkPackageManager :: downloadRemotePackage()
527{ 525{
528 // Display dialog 526 // Display dialog
529 bool ok; 527 bool ok;
530 QString package = InputDialog::getText( tr( "Install Remote Package" ), tr( "Enter package location" ), "http://", &ok, this ); 528 QString package = InputDialog::getText( tr( "Install Remote Package" ), tr( "Enter package location" ), "http://", &ok, this );
531 if ( !ok || package.isEmpty() ) 529 if ( !ok || package.isEmpty() )
532 return; 530 return;
@@ -605,31 +603,24 @@ void NetworkPackageManager :: applyChanges()
605 e << lf; 603 e << lf;
606#endif 604#endif
607} 605}
608 606
609// decide what to do - either remove, upgrade or install 607// decide what to do - either remove, upgrade or install
610// Current rules: 608// Current rules:
611// If not installed - install 609// If not installed - install
612// If installed and different version available - upgrade 610// If installed and different version available - upgrade
613// If installed and version up to date - remove 611// If installed and version up to date - remove
614InstallData NetworkPackageManager :: dealWithItem( QCheckListItem *item ) 612InstallData NetworkPackageManager :: dealWithItem( QCheckListItem *item )
615{ 613{
616 QString name = item->text(); 614 QString name = item->text();
617 int pos = name.find( "*" );
618 name.truncate( pos );
619
620 // if (there is a (installed), remove it
621 pos = name.find( "(installed)" );
622 if ( pos > 0 )
623 name.truncate( pos - 1 );
624 615
625 // Get package 616 // Get package
626 vector<Server>::iterator s = dataMgr->getServer( serversList->currentText() ); 617 vector<Server>::iterator s = dataMgr->getServer( serversList->currentText() );
627 Package *p = s->getPackage( name ); 618 Package *p = s->getPackage( name );
628 619
629 // If the package has a filename then it is a local file 620 // If the package has a filename then it is a local file
630 if ( p->isPackageStoredLocally() ) 621 if ( p->isPackageStoredLocally() )
631 name = p->getFilename(); 622 name = p->getFilename();
632 623
633 QString option; 624 QString option;
634 QString dest = "root"; 625 QString dest = "root";
635 if ( !p->isInstalled() ) 626 if ( !p->isInstalled() )
@@ -642,26 +633,26 @@ InstallData NetworkPackageManager :: dealWithItem( QCheckListItem *item )
642 else 633 else
643 { 634 {
644 InstallData item; 635 InstallData item;
645 item.option = "D"; 636 item.option = "D";
646 if ( !p->isPackageStoredLocally() ) 637 if ( !p->isPackageStoredLocally() )
647 item.packageName = p->getInstalledPackageName(); 638 item.packageName = p->getInstalledPackageName();
648 else 639 else
649 item.packageName = name; 640 item.packageName = name;
650 641
651 if ( p->getInstalledTo() ) 642 if ( p->getInstalledTo() )
652 { 643 {
653 item.destination = p->getInstalledTo(); 644 item.destination = p->getInstalledTo();
654 cout << "dest - " << p->getInstalledTo()->getDestinationName() << endl; 645// cout << "dest - " << p->getInstalledTo()->getDestinationName() << endl;
655 cout << "dest - " << p->getInstalledTo()->getDestinationPath() << endl; 646// cout << "dest - " << p->getInstalledTo()->getDestinationPath() << endl;
656 } 647 }
657 else 648 else
658 { 649 {
659 item.destination = p->getLocalPackage()->getInstalledTo(); 650 item.destination = p->getLocalPackage()->getInstalledTo();
660 } 651 }
661 652
662 // Now see if version is newer or not 653 // Now see if version is newer or not
663 int val = compareVersions( p->getInstalledVersion(), p->getVersion() ); 654 int val = compareVersions( p->getInstalledVersion(), p->getVersion() );
664 655
665 // If the version requested is older and user selected a local ipk file, then reinstall the file 656 // If the version requested is older and user selected a local ipk file, then reinstall the file
666 if ( p->isPackageStoredLocally() && val == -1 ) 657 if ( p->isPackageStoredLocally() && val == -1 )
667 val = 0; 658 val = 0;
@@ -725,27 +716,27 @@ InstallData NetworkPackageManager :: dealWithItem( QCheckListItem *item )
725 716
726 // Check if we are reinstalling the same version 717 // Check if we are reinstalling the same version
727 if ( item.option != "R" ) 718 if ( item.option != "R" )
728 item.recreateLinks = true; 719 item.recreateLinks = true;
729 else 720 else
730 item.recreateLinks = false; 721 item.recreateLinks = false;
731 722
732 // User hit cancel (on dlg - assume remove) 723 // User hit cancel (on dlg - assume remove)
733 return item; 724 return item;
734 } 725 }
735} 726}
736 727
737void NetworkPackageManager :: displayText( const QString &t ) 728void NetworkPackageManager :: displayText( const QString &/*t*/ )
738{ 729{
739 cout << t << endl; 730// cout << t << endl;
740} 731}
741 732
742 733
743void NetworkPackageManager :: letterPushed( QString t ) 734void NetworkPackageManager :: letterPushed( QString t )
744{ 735{
745 QCheckListItem *top = (QCheckListItem *)packagesList->firstChild(); 736 QCheckListItem *top = (QCheckListItem *)packagesList->firstChild();
746 QCheckListItem *start = (QCheckListItem *)packagesList->currentItem(); 737 QCheckListItem *start = (QCheckListItem *)packagesList->currentItem();
747 if ( packagesList->firstChild() == 0 ) 738 if ( packagesList->firstChild() == 0 )
748 return; 739 return;
749 740
750 QCheckListItem *item; 741 QCheckListItem *item;
751 if ( start == 0 ) 742 if ( start == 0 )
@@ -769,41 +760,41 @@ void NetworkPackageManager :: letterPushed( QString t )
769 760
770 item = (QCheckListItem *)item->nextSibling(); 761 item = (QCheckListItem *)item->nextSibling();
771 if ( !item ) 762 if ( !item )
772 item = (QCheckListItem *)packagesList->firstChild(); 763 item = (QCheckListItem *)packagesList->firstChild();
773 } while ( item != start); 764 } while ( item != start);
774} 765}
775 766
776 767
777void NetworkPackageManager :: searchForPackage( const QString &text ) 768void NetworkPackageManager :: searchForPackage( const QString &text )
778{ 769{
779 if ( !text.isEmpty() ) 770 if ( !text.isEmpty() )
780 { 771 {
781 cout << "searching for " << text << endl; 772// cout << "searching for " << text << endl;
782 // look through package list for text startng at current position 773 // look through package list for text startng at current position
783 vector<InstallData> workingPackages; 774 vector<InstallData> workingPackages;
784 QCheckListItem *start = (QCheckListItem *)packagesList->currentItem(); 775 QCheckListItem *start = (QCheckListItem *)packagesList->currentItem();
785 if ( start != 0 ) 776 if ( start != 0 )
786 start = (QCheckListItem *)start->nextSibling(); 777 start = (QCheckListItem *)start->nextSibling();
787 778
788 if ( start == 0 ) 779 if ( start == 0 )
789 start = (QCheckListItem *)packagesList->firstChild(); 780 start = (QCheckListItem *)packagesList->firstChild();
790 781
791 for ( QCheckListItem *item = start; item != 0 ; 782 for ( QCheckListItem *item = start; item != 0 ;
792 item = (QCheckListItem *)item->nextSibling() ) 783 item = (QCheckListItem *)item->nextSibling() )
793 { 784 {
794 cout << "checking " << item->text().lower() << endl; 785// cout << "checking " << item->text().lower() << endl;
795 if ( item->text().lower().find( text ) != -1 ) 786 if ( item->text().lower().find( text ) != -1 )
796 { 787 {
797 cout << "matched " << item->text() << endl; 788// cout << "matched " << item->text() << endl;
798 packagesList->ensureItemVisible( item ); 789 packagesList->ensureItemVisible( item );
799 packagesList->setCurrentItem( item ); 790 packagesList->setCurrentItem( item );
800 break; 791 break;
801 } 792 }
802 } 793 }
803 } 794 }
804} 795}
805 796
806void NetworkPackageManager :: showOnlyUninstalledPackages( bool val ) 797void NetworkPackageManager :: showOnlyUninstalledPackages( bool val )
807{ 798{
808 showUninstalledPkgs = val; 799 showUninstalledPkgs = val;
809 if ( val ) 800 if ( val )