summaryrefslogtreecommitdiff
authorandyq <andyq>2002-11-09 14:30:46 (UTC)
committer andyq <andyq>2002-11-09 14:30:46 (UTC)
commit98a73d0b6feca9105a0ce8bb57a1308f0317badb (patch) (unidiff)
tree0a1af33c4d8e7eaff05e68fb3cd97ddca88c0a66
parent29758bfcaabf75a3155e8af140c11ca9ed014c42 (diff)
downloadopie-98a73d0b6feca9105a0ce8bb57a1308f0317badb.zip
opie-98a73d0b6feca9105a0ce8bb57a1308f0317badb.tar.gz
opie-98a73d0b6feca9105a0ce8bb57a1308f0317badb.tar.bz2
Added ability to install a remote package (one from the net)
Done by clicking the download button when no packages are selected. Currently can't do it from the LOCAL-IPKGS view.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/aqpkg/networkpkgmgr.cpp166
-rw-r--r--noncore/settings/aqpkg/networkpkgmgr.h2
2 files changed, 115 insertions, 53 deletions
diff --git a/noncore/settings/aqpkg/networkpkgmgr.cpp b/noncore/settings/aqpkg/networkpkgmgr.cpp
index a058285..76c7a9c 100644
--- a/noncore/settings/aqpkg/networkpkgmgr.cpp
+++ b/noncore/settings/aqpkg/networkpkgmgr.cpp
@@ -120,49 +120,49 @@ void NetworkPackageManager :: selectLocalPackage( const QString &pkg )
120 break; 120 break;
121 } 121 }
122 } 122 }
123 serverSelected( 0 ); 123 serverSelected( 0 );
124 124
125 // Now set the check box of the selected package 125 // Now set the check box of the selected package
126 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); 126 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
127 item != 0 ; 127 item != 0 ;
128 item = (QCheckListItem *)item->nextSibling() ) 128 item = (QCheckListItem *)item->nextSibling() )
129 { 129 {
130 if ( item->text().startsWith( pkg ) ) 130 if ( item->text().startsWith( pkg ) )
131 { 131 {
132 item->setOn( true ); 132 item->setOn( true );
133 break; 133 break;
134 } 134 }
135 } 135 }
136} 136}
137 137
138 138
139void NetworkPackageManager :: initGui() 139void NetworkPackageManager :: initGui()
140{ 140{
141 QLabel *l = new QLabel( "Servers", this ); 141 QLabel *l = new QLabel( "Servers", this );
142 serversList = new QComboBox( this ); 142 serversList = new QComboBox( this );
143 packagesList = new QListView( this ); 143 packagesList = new QListView( this );
144 update = new QPushButton( "Refresh List", this ); 144 update = new QPushButton( "Refresh Lists", this );
145 download = new QPushButton( "Download", this ); 145 download = new QPushButton( "Download", this );
146 upgrade = new QPushButton( "Upgrade", this ); 146 upgrade = new QPushButton( "Upgrade", this );
147 apply = new QPushButton( "Apply", this ); 147 apply = new QPushButton( "Apply", this );
148 148
149 QVBoxLayout *vbox = new QVBoxLayout( this, 0, -1, "VBox" ); 149 QVBoxLayout *vbox = new QVBoxLayout( this, 0, -1, "VBox" );
150 QHBoxLayout *hbox1 = new QHBoxLayout( vbox, -1, "HBox1" ); 150 QHBoxLayout *hbox1 = new QHBoxLayout( vbox, -1, "HBox1" );
151 hbox1->addWidget( l ); 151 hbox1->addWidget( l );
152 hbox1->addWidget( serversList ); 152 hbox1->addWidget( serversList );
153 153
154 QHBoxLayout *hbox3 = new QHBoxLayout( vbox, -1, "HBox1" ); 154 QHBoxLayout *hbox3 = new QHBoxLayout( vbox, -1, "HBox1" );
155 QHBoxLayout *hbox4 = new QHBoxLayout( vbox, -1, "HBox1" ); 155 QHBoxLayout *hbox4 = new QHBoxLayout( vbox, -1, "HBox1" );
156 156
157 157
158 if ( showJumpTo ) 158 if ( showJumpTo )
159 { 159 {
160 char text[2]; 160 char text[2];
161 text[1] = '\0'; 161 text[1] = '\0';
162 for ( int i = 0 ; i < 26 ; ++i ) 162 for ( int i = 0 ; i < 26 ; ++i )
163 { 163 {
164 text[0] = 'A' + i; 164 text[0] = 'A' + i;
165 LetterPushButton *b = new LetterPushButton( text, this ); 165 LetterPushButton *b = new LetterPushButton( text, this );
166 connect( b, SIGNAL( released( QString ) ), this, SLOT( letterPushed( QString ) ) ); 166 connect( b, SIGNAL( released( QString ) ), this, SLOT( letterPushed( QString ) ) );
167 if ( i < 13 ) 167 if ( i < 13 )
168 hbox3->addWidget( b ); 168 hbox3->addWidget( b );
@@ -264,50 +264,50 @@ void NetworkPackageManager :: serverSelected( int )
264 new QCheckListItem( item, QString( "Description - " ) + it->getDescription() ); 264 new QCheckListItem( item, QString( "Description - " ) + it->getDescription() );
265 else 265 else
266 new QCheckListItem( item, QString( "Filename - " ) + it->getFilename() ); 266 new QCheckListItem( item, QString( "Filename - " ) + it->getFilename() );
267 267
268 if ( serverName == LOCAL_SERVER ) 268 if ( serverName == LOCAL_SERVER )
269 { 269 {
270 new QCheckListItem( item, QString( "V. Installed - " ) + it->getVersion() ); 270 new QCheckListItem( item, QString( "V. Installed - " ) + it->getVersion() );
271 } 271 }
272 else 272 else
273 { 273 {
274 new QCheckListItem( item, QString( "V. Available - " ) + it->getVersion() ); 274 new QCheckListItem( item, QString( "V. Available - " ) + it->getVersion() );
275 if ( it->getLocalPackage() ) 275 if ( it->getLocalPackage() )
276 { 276 {
277 if ( it->isInstalled() ) 277 if ( it->isInstalled() )
278 new QCheckListItem( item, QString( "V. Installed - " ) + it->getInstalledVersion() ); 278 new QCheckListItem( item, QString( "V. Installed - " ) + it->getInstalledVersion() );
279 } 279 }
280 } 280 }
281 packagesList->insertItem( item ); 281 packagesList->insertItem( item );
282 } 282 }
283 283
284 // If the local server or the local ipkgs server disable the download button 284 // If the local server or the local ipkgs server disable the download button
285 if ( serverName == LOCAL_SERVER ) 285 if ( serverName == LOCAL_SERVER )
286 { 286 {
287 upgrade->setEnabled( false ); 287 upgrade->setEnabled( false );
288 download->setText( "Download" ); 288 download->setText( "Install Remote" );
289 download->setEnabled( false ); 289 download->setEnabled( true );
290 } 290 }
291 else if ( serverName == LOCAL_IPKGS ) 291 else if ( serverName == LOCAL_IPKGS )
292 { 292 {
293 upgrade->setEnabled( false ); 293 upgrade->setEnabled( false );
294 download->setEnabled( true ); 294 download->setEnabled( true );
295 download->setText( "Remove" ); 295 download->setText( "Remove" );
296 } 296 }
297 else 297 else
298 { 298 {
299 upgrade->setEnabled( true ); 299 upgrade->setEnabled( true );
300 download->setEnabled( true ); 300 download->setEnabled( true );
301 download->setText( "Download" ); 301 download->setText( "Download" );
302 } 302 }
303} 303}
304 304
305void NetworkPackageManager :: updateServer() 305void NetworkPackageManager :: updateServer()
306{ 306{
307 QString serverName = serversList->currentText(); 307 QString serverName = serversList->currentText();
308 308
309 // Update the current server 309 // Update the current server
310 // Display dialog 310 // Display dialog
311// ProgressDlg *progDlg = new ProgressDlg( this ); 311// ProgressDlg *progDlg = new ProgressDlg( this );
312// QString status = "Updating package lists..."; 312// QString status = "Updating package lists...";
313// progDlg->show(); 313// progDlg->show();
@@ -344,142 +344,202 @@ void NetworkPackageManager :: upgradePackages()
344 if ( warn.exec() == QMessageBox::Yes ) 344 if ( warn.exec() == QMessageBox::Yes )
345 { 345 {
346 // First, write out ipkg_conf file so that ipkg can use it 346 // First, write out ipkg_conf file so that ipkg can use it
347 dataMgr->writeOutIpkgConf(); 347 dataMgr->writeOutIpkgConf();
348 348
349 // Now run upgrade 349 // Now run upgrade
350 Ipkg ipkg; 350 Ipkg ipkg;
351 ipkg.setOption( "upgrade" ); 351 ipkg.setOption( "upgrade" );
352 352
353 InstallDlgImpl dlg( &ipkg, "Upgrading installed packages", this, "Upgrade", true ); 353 InstallDlgImpl dlg( &ipkg, "Upgrading installed packages", this, "Upgrade", true );
354 dlg.showDlg(); 354 dlg.showDlg();
355 355
356 // Reload data 356 // Reload data
357 dataMgr->reloadServerData(); 357 dataMgr->reloadServerData();
358 serverSelected(-1); 358 serverSelected(-1);
359 } 359 }
360} 360}
361 361
362 362
363void NetworkPackageManager :: downloadPackage() 363void NetworkPackageManager :: downloadPackage()
364{ 364{
365 bool doUpdate = true; 365 bool doUpdate = true;
366 if ( download->text() == "Download" ) 366 if ( download->text() == "Download" )
367 { 367 {
368 // First, write out ipkg_conf file so that ipkg can use it 368 // See if any packages are selected
369 dataMgr->writeOutIpkgConf(); 369 bool found = false;
370 370 if ( serversList->currentText() != LOCAL_SERVER )
371 // Display dialog to user asking where to download the files to
372 bool ok = FALSE;
373 QString dir = "";
374#ifdef QWS
375 // read download directory from config file
376 Config cfg( "aqpkg" );
377 cfg.setGroup( "settings" );
378 dir = cfg.readEntry( "downloadDir", "/home/root/Documents/application/ipkg" );
379#endif
380
381 QString text = InputDialog::getText( tr( "Download to where" ), tr( "Enter path to download to" ), dir, &ok, this );
382 if ( ok && !text.isEmpty() )
383 dir = text; // user entered something and pressed ok
384 else
385 return; // user entered nothing or pressed cancel
386
387#ifdef QWS
388 // Store download directory in config file
389 cfg.writeEntry( "downloadDir", dir );
390#endif
391
392 // Get starting directory
393 char initDir[PATH_MAX];
394 getcwd( initDir, PATH_MAX );
395
396 // Download each package
397 Ipkg ipkg;
398 connect( &ipkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &)));
399
400 ipkg.setOption( "download" );
401 ipkg.setRuntimeDirectory( dir );
402 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
403 item != 0 ;
404 item = (QCheckListItem *)item->nextSibling() )
405 { 371 {
406 if ( item->isOn() ) 372 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
373 item != 0 && !found;
374 item = (QCheckListItem *)item->nextSibling() )
407 { 375 {
408 QString name = item->text(); 376 if ( item->isOn() )
409 int pos = name.find( "*" ); 377 found = true;
410 name.truncate( pos );
411
412 // if (there is a (installed), remove it
413 pos = name.find( "(installed)" );
414 if ( pos > 0 )
415 name.truncate( pos - 1 );
416
417 ipkg.setPackage( name );
418 ipkg.runIpkg( );
419 } 378 }
420 } 379 }
380
381 // If user selected some packages then download the and store the locally
382 // otherwise, display dialog asking user what package to download from an http server
383 // and whether to install it
384 if ( found )
385 downloadSelectedPackages();
386 else
387 downloadRemotePackage();
388
421 } 389 }
422 else if ( download->text() == "Remove" ) 390 else if ( download->text() == "Remove" )
423 { 391 {
424 doUpdate = false; 392 doUpdate = false;
425 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); 393 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
426 item != 0 ; 394 item != 0 ;
427 item = (QCheckListItem *)item->nextSibling() ) 395 item = (QCheckListItem *)item->nextSibling() )
428 { 396 {
429 if ( item->isOn() ) 397 if ( item->isOn() )
430 { 398 {
431 QString name = item->text(); 399 QString name = item->text();
432 int pos = name.find( "*" ); 400 int pos = name.find( "*" );
433 name.truncate( pos ); 401 name.truncate( pos );
434 402
435 // if (there is a (installed), remove it 403 // if (there is a (installed), remove it
436 pos = name.find( "(installed)" ); 404 pos = name.find( "(installed)" );
437 if ( pos > 0 ) 405 if ( pos > 0 )
438 name.truncate( pos - 1 ); 406 name.truncate( pos - 1 );
439 407
440 Package *p = dataMgr->getServer( serversList->currentText() )->getPackage( name ); 408 Package *p = dataMgr->getServer( serversList->currentText() )->getPackage( name );
441 409
442 QString msgtext; 410 QString msgtext;
443 msgtext.sprintf( "Are you sure you wish to delete\n%s?", (const char *)p->getPackageName() ); 411 msgtext.sprintf( "Are you sure you wish to delete\n%s?", (const char *)p->getPackageName() );
444 if ( QMessageBox::information( this, "Are you sure?", 412 if ( QMessageBox::information( this, "Are you sure?",
445 msgtext, "No", "Yes" ) == 1 ) 413 msgtext, "No", "Yes" ) == 1 )
446 { 414 {
447 doUpdate = true; 415 doUpdate = true;
448 QFile f( p->getFilename() ); 416 QFile f( p->getFilename() );
449 f.remove(); 417 f.remove();
450 } 418 }
451 } 419 }
452 } 420 }
453 } 421 }
454 422
455 if ( doUpdate ) 423 if ( doUpdate )
456 { 424 {
457 dataMgr->reloadServerData(); 425 dataMgr->reloadServerData();
458 serverSelected( -1 ); 426 serverSelected( -1 );
459 } 427 }
460} 428}
461 429
430void NetworkPackageManager :: downloadSelectedPackages()
431{
432 // First, write out ipkg_conf file so that ipkg can use it
433 dataMgr->writeOutIpkgConf();
434
435 // Display dialog to user asking where to download the files to
436 bool ok = FALSE;
437 QString dir = "";
438#ifdef QWS
439 // read download directory from config file
440 Config cfg( "aqpkg" );
441 cfg.setGroup( "settings" );
442 dir = cfg.readEntry( "downloadDir", "/home/root/Documents/application/ipkg" );
443#endif
444
445 QString text = InputDialog::getText( tr( "Download to where" ), tr( "Enter path to download to" ), dir, &ok, this );
446 if ( ok && !text.isEmpty() )
447 dir = text; // user entered something and pressed ok
448 else
449 return; // user entered nothing or pressed cancel
450
451#ifdef QWS
452 // Store download directory in config file
453 cfg.writeEntry( "downloadDir", dir );
454#endif
455
456 // Get starting directory
457 char initDir[PATH_MAX];
458 getcwd( initDir, PATH_MAX );
459
460 // Download each package
461 Ipkg ipkg;
462 connect( &ipkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &)));
463
464 ipkg.setOption( "download" );
465 ipkg.setRuntimeDirectory( dir );
466 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
467 item != 0 ;
468 item = (QCheckListItem *)item->nextSibling() )
469 {
470 if ( item->isOn() )
471 {
472 QString name = item->text();
473 int pos = name.find( "*" );
474 name.truncate( pos );
475
476 // if (there is a (installed), remove it
477 pos = name.find( "(installed)" );
478 if ( pos > 0 )
479 name.truncate( pos - 1 );
480
481 ipkg.setPackage( name );
482 ipkg.runIpkg( );
483 }
484 }
485}
486
487void NetworkPackageManager :: downloadRemotePackage()
488{
489 // Display dialog
490 bool ok;
491 QString package = InputDialog::getText( "Install Remote Package", tr( "Enter package location" ), "http://", &ok, this );
492 if ( !ok || package.isEmpty() )
493 return;
494// DownloadRemoteDlgImpl dlg( this, "Install", true );
495// if ( dlg.exec() == QDialog::Rejected )
496// return;
497
498 // grab details from dialog
499// QString package = dlg.getPackageLocation();
500
501 InstallData item;
502 item.option = "I";
503 item.packageName = package;
504 vector<InstallData> workingPackages;
505 workingPackages.push_back( item );
506
507 InstallDlgImpl dlg2( workingPackages, dataMgr, this, "Install", true );
508 dlg2.showDlg();
509
510 // Reload data
511 dataMgr->reloadServerData();
512 serverSelected(-1);
513
514#ifdef QWS
515 // Finally let the main system update itself
516 QCopEnvelope e("QPE/System", "linkChanged(QString)");
517 QString lf = QString::null;
518 e << lf;
519#endif
520}
521
462 522
463void NetworkPackageManager :: applyChanges() 523void NetworkPackageManager :: applyChanges()
464{ 524{
465 stickyOption = ""; 525 stickyOption = "";
466 526
467 // First, write out ipkg_conf file so that ipkg can use it 527 // First, write out ipkg_conf file so that ipkg can use it
468 dataMgr->writeOutIpkgConf(); 528 dataMgr->writeOutIpkgConf();
469 529
470 // Now for each selected item 530 // Now for each selected item
471 // deal with it 531 // deal with it
472 532
473 vector<InstallData> workingPackages; 533 vector<InstallData> workingPackages;
474 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); 534 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
475 item != 0 ; 535 item != 0 ;
476 item = (QCheckListItem *)item->nextSibling() ) 536 item = (QCheckListItem *)item->nextSibling() )
477 { 537 {
478 if ( item->isOn() ) 538 if ( item->isOn() )
479 { 539 {
480 InstallData data = dealWithItem( item ); 540 InstallData data = dealWithItem( item );
481 workingPackages.push_back( data ); 541 workingPackages.push_back( data );
482 } 542 }
483 } 543 }
484 544
485 if ( workingPackages.size() == 0 ) 545 if ( workingPackages.size() == 0 )
@@ -687,25 +747,25 @@ void NetworkPackageManager :: searchForPackage( bool findNext )
687 { 747 {
688 cout << "searching for " << lastSearchText << endl; 748 cout << "searching for " << lastSearchText << endl;
689 // look through package list for text startng at current position 749 // look through package list for text startng at current position
690 vector<InstallData> workingPackages; 750 vector<InstallData> workingPackages;
691 QCheckListItem *start = (QCheckListItem *)packagesList->currentItem(); 751 QCheckListItem *start = (QCheckListItem *)packagesList->currentItem();
692 if ( start != 0 ) 752 if ( start != 0 )
693 start = (QCheckListItem *)start->nextSibling(); 753 start = (QCheckListItem *)start->nextSibling();
694 754
695 if ( start == 0 ) 755 if ( start == 0 )
696 start = (QCheckListItem *)packagesList->firstChild(); 756 start = (QCheckListItem *)packagesList->firstChild();
697 757
698 for ( QCheckListItem *item = start; item != 0 ; 758 for ( QCheckListItem *item = start; item != 0 ;
699 item = (QCheckListItem *)item->nextSibling() ) 759 item = (QCheckListItem *)item->nextSibling() )
700 { 760 {
701 cout << "checking " << item->text().lower() << endl; 761 cout << "checking " << item->text().lower() << endl;
702 if ( item->text().lower().find( lastSearchText ) != -1 ) 762 if ( item->text().lower().find( lastSearchText ) != -1 )
703 { 763 {
704 cout << "matched " << item->text() << endl; 764 cout << "matched " << item->text() << endl;
705 packagesList->ensureItemVisible( item ); 765 packagesList->ensureItemVisible( item );
706 packagesList->setCurrentItem( item ); 766 packagesList->setCurrentItem( item );
707 break; 767 break;
708 } 768 }
709 } 769 }
710 } 770 }
711} \ No newline at end of file 771}
diff --git a/noncore/settings/aqpkg/networkpkgmgr.h b/noncore/settings/aqpkg/networkpkgmgr.h
index 20f6e2d..66a8903 100644
--- a/noncore/settings/aqpkg/networkpkgmgr.h
+++ b/noncore/settings/aqpkg/networkpkgmgr.h
@@ -42,38 +42,40 @@ public:
42 void updateData(); 42 void updateData();
43 void searchForPackage( bool findNext ); 43 void searchForPackage( bool findNext );
44private: 44private:
45 DataManager *dataMgr; 45 DataManager *dataMgr;
46 46
47 QComboBox *serversList; 47 QComboBox *serversList;
48 QListView *packagesList; 48 QListView *packagesList;
49 QPushButton *update; 49 QPushButton *update;
50 QPushButton *upgrade; 50 QPushButton *upgrade;
51 QPushButton *download; 51 QPushButton *download;
52 QPushButton *apply; 52 QPushButton *apply;
53 53
54 ProgressDlg *progressDlg; 54 ProgressDlg *progressDlg;
55 QString currentlySelectedServer; 55 QString currentlySelectedServer;
56 QString lastSearchText; 56 QString lastSearchText;
57 57
58 bool showJumpTo; 58 bool showJumpTo;
59 int timerId; 59 int timerId;
60 60
61 void timerEvent ( QTimerEvent * ); 61 void timerEvent ( QTimerEvent * );
62 62
63 void initGui(); 63 void initGui();
64 void setupConnections(); 64 void setupConnections();
65 void showProgressDialog( char *initialText ); 65 void showProgressDialog( char *initialText );
66 void downloadSelectedPackages();
67 void downloadRemotePackage();
66 InstallData dealWithItem( QCheckListItem *item ); 68 InstallData dealWithItem( QCheckListItem *item );
67 QString stickyOption; 69 QString stickyOption;
68 70
69public slots: 71public slots:
70 void serverSelected( int index ); 72 void serverSelected( int index );
71 void applyChanges(); 73 void applyChanges();
72 void upgradePackages(); 74 void upgradePackages();
73 void downloadPackage(); 75 void downloadPackage();
74 void updateServer(); 76 void updateServer();
75 void displayText( const QString &t ); 77 void displayText( const QString &t );
76 void letterPushed( QString t ); 78 void letterPushed( QString t );
77}; 79};
78 80
79#endif 81#endif