summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/aqpkg/global.h2
-rw-r--r--noncore/settings/aqpkg/networkpkgmgr.cpp20
-rw-r--r--noncore/settings/aqpkg/server.cpp8
3 files changed, 23 insertions, 7 deletions
diff --git a/noncore/settings/aqpkg/global.h b/noncore/settings/aqpkg/global.h
index 96ab46c..a4363b4 100644
--- a/noncore/settings/aqpkg/global.h
+++ b/noncore/settings/aqpkg/global.h
@@ -1,80 +1,80 @@
1/*************************************************************************** 1/***************************************************************************
2 global.h - description 2 global.h - description
3 ------------------- 3 -------------------
4 begin : Mon Aug 26 2002 4 begin : Mon Aug 26 2002
5 copyright : (C) 2002 by Andy Qua 5 copyright : (C) 2002 by Andy Qua
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#ifndef __GLOBAL_H 18#ifndef __GLOBAL_H
19#define __GLOBAL_H 19#define __GLOBAL_H
20 20
21#define VERSION_TEXT "AQPkg Version 0.7" 21#define VERSION_TEXT "AQPkg Version 0.8"
22 22
23// Uncomment the below line to run on a Linux box rather than a Zaurus 23// Uncomment the below line to run on a Linux box rather than a Zaurus
24// box this allows you to change where root is, and where to load config files from 24// box this allows you to change where root is, and where to load config files from
25// #define X86 25// #define X86
26 26
27// Sets up location of ipkg.conf and root directory 27// Sets up location of ipkg.conf and root directory
28#ifdef QWS 28#ifdef QWS
29 29
30#ifndef X86 30#ifndef X86
31 31
32// Running QT/Embedded on an arm processor 32// Running QT/Embedded on an arm processor
33#define IPKG_CONF "/etc/ipkg.conf" 33#define IPKG_CONF "/etc/ipkg.conf"
34#define ROOT "/" 34#define ROOT "/"
35#define IPKG_DIR "/usr/lib/ipkg/" 35#define IPKG_DIR "/usr/lib/ipkg/"
36 36
37#else 37#else
38 38
39// Running QT/Embedded on a X86 linux box 39// Running QT/Embedded on a X86 linux box
40#define IPKG_CONF "/home/andy/projects/aqpkg/aqpkg/data/ipkg.conf" 40#define IPKG_CONF "/home/andy/projects/aqpkg/aqpkg/data/ipkg.conf"
41#define ROOT "/home/andy/projects/aqpkg/aqpkg/data/root" 41#define ROOT "/home/andy/projects/aqpkg/aqpkg/data/root"
42#define IPKG_DIR "/home/andy/projects/aqpkg/aqpkg/data/" 42#define IPKG_DIR "/home/andy/projects/aqpkg/aqpkg/data/"
43 43
44#endif 44#endif
45 45
46#else 46#else
47 47
48// Running QT on a X86 linux box 48// Running QT on a X86 linux box
49#define IPKG_CONF "/home/andy/projects/aqpkg/aqpkg/data/ipkg.conf" 49#define IPKG_CONF "/home/andy/projects/aqpkg/aqpkg/data/ipkg.conf"
50#define ROOT "/home/andy/projects/aqpkg/aqpkg/data/root" 50#define ROOT "/home/andy/projects/aqpkg/aqpkg/data/root"
51#define IPKG_DIR "/home/andy/projects/aqpkg/aqpkg/data/" 51#define IPKG_DIR "/home/andy/projects/aqpkg/aqpkg/data/"
52 52
53#endif 53#endif
54 54
55 55
56// Uncomment the below line to turn on memory checking 56// Uncomment the below line to turn on memory checking
57//#define _DEBUG 1 57//#define _DEBUG 1
58 58
59#ifndef __MEMFILE_C 59#ifndef __MEMFILE_C
60#ifdef _DEBUG 60#ifdef _DEBUG
61void * operator new(unsigned int size,const char *file, int line); 61void * operator new(unsigned int size,const char *file, int line);
62void operator delete(void *p); 62void operator delete(void *p);
63#endif 63#endif
64 64
65#ifdef _DEBUG 65#ifdef _DEBUG
66#define DEBUG_NEW new(__FILE__, __LINE__) 66#define DEBUG_NEW new(__FILE__, __LINE__)
67//#define DEBUG_NEW new 67//#define DEBUG_NEW new
68#else 68#else
69#define DEBUG_NEW new 69#define DEBUG_NEW new
70#endif 70#endif
71 71
72#define new DEBUG_NEW 72#define new DEBUG_NEW
73#endif 73#endif
74 74
75 75
76void AddTrack(long addr, long asize, const char *fname, long lnum); 76void AddTrack(long addr, long asize, const char *fname, long lnum);
77void RemoveTrack(long addr); 77void RemoveTrack(long addr);
78void DumpUnfreed(); 78void DumpUnfreed();
79 79
80#endif 80#endif
diff --git a/noncore/settings/aqpkg/networkpkgmgr.cpp b/noncore/settings/aqpkg/networkpkgmgr.cpp
index 3d06aef..dee834e 100644
--- a/noncore/settings/aqpkg/networkpkgmgr.cpp
+++ b/noncore/settings/aqpkg/networkpkgmgr.cpp
@@ -325,328 +325,338 @@ void NetworkPackageManager :: updateServer()
325 dlg.showDlg(); 325 dlg.showDlg();
326 326
327 // Reload data 327 // Reload data
328 dataMgr->reloadServerData(); 328 dataMgr->reloadServerData();
329 serverSelected(-1); 329 serverSelected(-1);
330// delete progDlg; 330// delete progDlg;
331} 331}
332 332
333void NetworkPackageManager :: upgradePackages() 333void NetworkPackageManager :: upgradePackages()
334{ 334{
335 // We're gonna do an upgrade of all packages 335 // We're gonna do an upgrade of all packages
336 // First warn user that this isn't recommended 336 // First warn user that this isn't recommended
337 QString text = "WARNING: Upgrading while\nOpie/Qtopia is running\nis NOT recommended!\n\nAre you sure?\n"; 337 QString text = "WARNING: Upgrading while\nOpie/Qtopia is running\nis NOT recommended!\n\nAre you sure?\n";
338 QMessageBox warn("Warning", text, QMessageBox::Warning, 338 QMessageBox warn("Warning", text, QMessageBox::Warning,
339 QMessageBox::Yes, 339 QMessageBox::Yes,
340 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default , 340 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default ,
341 0, this ); 341 0, this );
342 warn.adjustSize(); 342 warn.adjustSize();
343 343
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 if ( download->text() == "Download" ) 365 if ( download->text() == "Download" )
366 { 366 {
367 // First, write out ipkg_conf file so that ipkg can use it 367 // First, write out ipkg_conf file so that ipkg can use it
368 dataMgr->writeOutIpkgConf(); 368 dataMgr->writeOutIpkgConf();
369 369
370 // Display dialog to user asking where to download the files to 370 // Display dialog to user asking where to download the files to
371 bool ok = FALSE; 371 bool ok = FALSE;
372 QString dir = ""; 372 QString dir = "";
373#ifdef QWS 373#ifdef QWS
374 // read download directory from config file 374 // read download directory from config file
375 Config cfg( "aqpkg" ); 375 Config cfg( "aqpkg" );
376 cfg.setGroup( "settings" ); 376 cfg.setGroup( "settings" );
377 dir = cfg.readEntry( "downloadDir", "/home/root/Documents/application/ipkg" ); 377 dir = cfg.readEntry( "downloadDir", "/home/root/Documents/application/ipkg" );
378#endif 378#endif
379 379
380 QString text = InputDialog::getText( tr( "Download to where" ), tr( "Enter path to download to" ), dir, &ok, this ); 380 QString text = InputDialog::getText( tr( "Download to where" ), tr( "Enter path to download to" ), dir, &ok, this );
381 if ( ok && !text.isEmpty() ) 381 if ( ok && !text.isEmpty() )
382 dir = text; // user entered something and pressed ok 382 dir = text; // user entered something and pressed ok
383 else 383 else
384 return; // user entered nothing or pressed cancel 384 return; // user entered nothing or pressed cancel
385 385
386#ifdef QWS 386#ifdef QWS
387 // Store download directory in config file 387 // Store download directory in config file
388 cfg.writeEntry( "downloadDir", dir ); 388 cfg.writeEntry( "downloadDir", dir );
389#endif 389#endif
390 390
391 // Get starting directory 391 // Get starting directory
392 char initDir[PATH_MAX]; 392 char initDir[PATH_MAX];
393 getcwd( initDir, PATH_MAX ); 393 getcwd( initDir, PATH_MAX );
394 394
395 // Download each package 395 // Download each package
396 Ipkg ipkg; 396 Ipkg ipkg;
397 connect( &ipkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &))); 397 connect( &ipkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &)));
398 398
399 ipkg.setOption( "download" ); 399 ipkg.setOption( "download" );
400 ipkg.setRuntimeDirectory( dir ); 400 ipkg.setRuntimeDirectory( dir );
401 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); 401 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
402 item != 0 ; 402 item != 0 ;
403 item = (QCheckListItem *)item->nextSibling() ) 403 item = (QCheckListItem *)item->nextSibling() )
404 { 404 {
405 if ( item->isOn() ) 405 if ( item->isOn() )
406 { 406 {
407 QString name = item->text(); 407 QString name = item->text();
408 int pos = name.find( "*" ); 408 int pos = name.find( "*" );
409 name.truncate( pos ); 409 name.truncate( pos );
410 410
411 // if (there is a (installed), remove it 411 // if (there is a (installed), remove it
412 pos = name.find( "(installed)" ); 412 pos = name.find( "(installed)" );
413 if ( pos > 0 ) 413 if ( pos > 0 )
414 name.truncate( pos - 1 ); 414 name.truncate( pos - 1 );
415 415
416 ipkg.setPackage( name ); 416 ipkg.setPackage( name );
417 ipkg.runIpkg( ); 417 ipkg.runIpkg( );
418 } 418 }
419 } 419 }
420 } 420 }
421 else if ( download->text() == "Remove" ) 421 else if ( download->text() == "Remove" )
422 { 422 {
423 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); 423 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
424 item != 0 ; 424 item != 0 ;
425 item = (QCheckListItem *)item->nextSibling() ) 425 item = (QCheckListItem *)item->nextSibling() )
426 { 426 {
427 if ( item->isOn() ) 427 if ( item->isOn() )
428 { 428 {
429 QString name = item->text(); 429 QString name = item->text();
430 int pos = name.find( "*" ); 430 int pos = name.find( "*" );
431 name.truncate( pos ); 431 name.truncate( pos );
432 432
433 // if (there is a (installed), remove it 433 // if (there is a (installed), remove it
434 pos = name.find( "(installed)" ); 434 pos = name.find( "(installed)" );
435 if ( pos > 0 ) 435 if ( pos > 0 )
436 name.truncate( pos - 1 ); 436 name.truncate( pos - 1 );
437 437
438 Package *p = dataMgr->getServer( serversList->currentText() )->getPackage( name ); 438 Package *p = dataMgr->getServer( serversList->currentText() )->getPackage( name );
439 QFile f( p->getFilename() ); 439 QFile f( p->getFilename() );
440 f.remove(); 440 f.remove();
441 } 441 }
442 } 442 }
443 } 443 }
444 444
445 dataMgr->reloadServerData(); 445 dataMgr->reloadServerData();
446 serverSelected( -1 ); 446 serverSelected( -1 );
447} 447}
448 448
449 449
450void NetworkPackageManager :: applyChanges() 450void NetworkPackageManager :: applyChanges()
451{ 451{
452 stickyOption = ""; 452 stickyOption = "";
453 453
454 // First, write out ipkg_conf file so that ipkg can use it 454 // First, write out ipkg_conf file so that ipkg can use it
455 dataMgr->writeOutIpkgConf(); 455 dataMgr->writeOutIpkgConf();
456 456
457 // Now for each selected item 457 // Now for each selected item
458 // deal with it 458 // deal with it
459 459
460 vector<InstallData> workingPackages; 460 vector<InstallData> workingPackages;
461 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); 461 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
462 item != 0 ; 462 item != 0 ;
463 item = (QCheckListItem *)item->nextSibling() ) 463 item = (QCheckListItem *)item->nextSibling() )
464 { 464 {
465 if ( item->isOn() ) 465 if ( item->isOn() )
466 { 466 {
467 InstallData data = dealWithItem( item ); 467 InstallData data = dealWithItem( item );
468 workingPackages.push_back( data ); 468 workingPackages.push_back( data );
469 } 469 }
470 } 470 }
471 471
472 if ( workingPackages.size() == 0 ) 472 if ( workingPackages.size() == 0 )
473 { 473 {
474 // Nothing to do 474 // Nothing to do
475 QMessageBox::information( this, "Nothing to do", 475 QMessageBox::information( this, "Nothing to do",
476 "No packages selected", "OK" ); 476 "No packages selected", "OK" );
477 477
478 return; 478 return;
479 } 479 }
480 480
481 // do the stuff 481 // do the stuff
482 InstallDlgImpl dlg( workingPackages, dataMgr, this, "Install", true ); 482 InstallDlgImpl dlg( workingPackages, dataMgr, this, "Install", true );
483 dlg.showDlg(); 483 dlg.showDlg();
484 484
485 // Reload data 485 // Reload data
486 dataMgr->reloadServerData(); 486 dataMgr->reloadServerData();
487 serverSelected(-1); 487 serverSelected(-1);
488 488
489#ifdef QWS 489#ifdef QWS
490 // Finally let the main system update itself 490 // Finally let the main system update itself
491 QCopEnvelope e("QPE/System", "linkChanged(QString)"); 491 QCopEnvelope e("QPE/System", "linkChanged(QString)");
492 QString lf = QString::null; 492 QString lf = QString::null;
493 e << lf; 493 e << lf;
494#endif 494#endif
495} 495}
496 496
497// decide what to do - either remove, upgrade or install 497// decide what to do - either remove, upgrade or install
498// Current rules: 498// Current rules:
499// If not installed - install 499// If not installed - install
500// If installed and different version available - upgrade 500// If installed and different version available - upgrade
501// If installed and version up to date - remove 501// If installed and version up to date - remove
502InstallData NetworkPackageManager :: dealWithItem( QCheckListItem *item ) 502InstallData NetworkPackageManager :: dealWithItem( QCheckListItem *item )
503{ 503{
504 QString name = item->text(); 504 QString name = item->text();
505 int pos = name.find( "*" ); 505 int pos = name.find( "*" );
506 name.truncate( pos ); 506 name.truncate( pos );
507 507
508 // if (there is a (installed), remove it 508 // if (there is a (installed), remove it
509 pos = name.find( "(installed)" ); 509 pos = name.find( "(installed)" );
510 if ( pos > 0 ) 510 if ( pos > 0 )
511 name.truncate( pos - 1 ); 511 name.truncate( pos - 1 );
512 512
513 // Get package 513 // Get package
514 Server *s = dataMgr->getServer( serversList->currentText() ); 514 Server *s = dataMgr->getServer( serversList->currentText() );
515 Package *p = s->getPackage( name ); 515 Package *p = s->getPackage( name );
516 516
517 // If the package has a filename then it is a local file 517 // If the package has a filename then it is a local file
518 if ( p->isPackageStoredLocally() ) 518 if ( p->isPackageStoredLocally() )
519 name = p->getFilename(); 519 name = p->getFilename();
520
520 QString option; 521 QString option;
521 QString dest = "root"; 522 QString dest = "root";
522 if ( !p->isInstalled() ) 523 if ( !p->isInstalled() )
523 { 524 {
524 InstallData item; 525 InstallData item;
525 item.option = "I"; 526 item.option = "I";
526 item.packageName = name; 527 item.packageName = name;
527 return item; 528 return item;
528 } 529 }
529 else 530 else
530 { 531 {
531 InstallData item; 532 InstallData item;
532 item.option = "D"; 533 item.option = "D";
533 item.packageName = p->getInstalledPackageName(); 534 if ( !p->isPackageStoredLocally() )
535 item.packageName = p->getInstalledPackageName();
536 else
537 item.packageName = name;
538
534 if ( p->getInstalledTo() ) 539 if ( p->getInstalledTo() )
535 { 540 {
536 item.destination = p->getInstalledTo(); 541 item.destination = p->getInstalledTo();
537 cout << "dest - " << p->getInstalledTo()->getDestinationName() << endl; 542 cout << "dest - " << p->getInstalledTo()->getDestinationName() << endl;
538 cout << "dest - " << p->getInstalledTo()->getDestinationPath() << endl; 543 cout << "dest - " << p->getInstalledTo()->getDestinationPath() << endl;
539 } 544 }
540 else 545 else
541 { 546 {
542 item.destination = p->getLocalPackage()->getInstalledTo(); 547 item.destination = p->getLocalPackage()->getInstalledTo();
543 } 548 }
544 549
545 // Now see if version is newer or not 550 // Now see if version is newer or not
546 int val = compareVersions( p->getInstalledVersion(), p->getVersion() ); 551 int val = compareVersions( p->getInstalledVersion(), p->getVersion() );
552
553 // If the version requested is older and user selected a local ipk file, then reinstall the file
554 if ( p->isPackageStoredLocally() && val == -1 )
555 val = 0;
556
547 if ( val == -2 ) 557 if ( val == -2 )
548 { 558 {
549 // Error - should handle 559 // Error - should handle
550 } 560 }
551 else if ( val == -1 ) 561 else if ( val == -1 )
552 { 562 {
553 // Version available is older - remove only 563 // Version available is older - remove only
554 item.option = "D"; 564 item.option = "D";
555 } 565 }
556 else 566 else
557 { 567 {
558 QString caption; 568 QString caption;
559 QString text; 569 QString text;
560 QString secondButton; 570 QString secondButton;
561 QString secondOption; 571 QString secondOption;
562 if ( val == 0 ) 572 if ( val == 0 )
563 { 573 {
564 // Version available is the same - option to remove or reinstall 574 // Version available is the same - option to remove or reinstall
565 caption = "Do you wish to remove or reinstall\n%s?"; 575 caption = "Do you wish to remove or reinstall\n%s?";
566 text = "Remove or ReInstall"; 576 text = "Remove or ReInstall";
567 secondButton = "ReInstall"; 577 secondButton = "ReInstall";
568 secondOption = "R"; 578 secondOption = "R";
569 } 579 }
570 else if ( val == 1 ) 580 else if ( val == 1 )
571 { 581 {
572 // Version available is newer - option to remove or upgrade 582 // Version available is newer - option to remove or upgrade
573 caption = "Do you wish to remove or upgrade\n%s?"; 583 caption = "Do you wish to remove or upgrade\n%s?";
574 text = "Remove or Upgrade"; 584 text = "Remove or Upgrade";
575 secondButton = "Upgrade"; 585 secondButton = "Upgrade";
576 secondOption = "U"; 586 secondOption = "U";
577 } 587 }
578 588
579 // Sticky option not implemented yet, but will eventually allow 589 // Sticky option not implemented yet, but will eventually allow
580 // the user to say something like 'remove all' 590 // the user to say something like 'remove all'
581 if ( stickyOption == "" ) 591 if ( stickyOption == "" )
582 { 592 {
583 QString msgtext; 593 QString msgtext;
584 msgtext.sprintf( caption, (const char *)name ); 594 msgtext.sprintf( caption, (const char *)name );
585 switch( QMessageBox::information( this, text, 595 switch( QMessageBox::information( this, text,
586 msgtext, "Remove", secondButton ) ) 596 msgtext, "Remove", secondButton ) )
587 { 597 {
588 case 0: // Try again or Enter 598 case 0: // Try again or Enter
589 // option 0 = Remove 599 // option 0 = Remove
590 item.option = "D"; 600 item.option = "D";
591 break; 601 break;
592 case 1: // Quit or Escape 602 case 1: // Quit or Escape
593 item.option = secondOption; 603 item.option = secondOption;
594 break; 604 break;
595 } 605 }
596 } 606 }
597 else 607 else
598 { 608 {
599// item.option = stickyOption; 609// item.option = stickyOption;
600 } 610 }
601 } 611 }
602 612
603 613
604 // Check if we are reinstalling the same version 614 // Check if we are reinstalling the same version
605 if ( item.option != "R" ) 615 if ( item.option != "R" )
606 item.recreateLinks = true; 616 item.recreateLinks = true;
607 else 617 else
608 item.recreateLinks = false; 618 item.recreateLinks = false;
609 619
610 // User hit cancel (on dlg - assume remove) 620 // User hit cancel (on dlg - assume remove)
611 return item; 621 return item;
612 } 622 }
613} 623}
614 624
615void NetworkPackageManager :: displayText( const QString &t ) 625void NetworkPackageManager :: displayText( const QString &t )
616{ 626{
617 cout << t << endl; 627 cout << t << endl;
618} 628}
619 629
620 630
621void NetworkPackageManager :: letterPushed( QString t ) 631void NetworkPackageManager :: letterPushed( QString t )
622{ 632{
623 QCheckListItem *top = (QCheckListItem *)packagesList->firstChild(); 633 QCheckListItem *top = (QCheckListItem *)packagesList->firstChild();
624 QCheckListItem *start = (QCheckListItem *)packagesList->currentItem(); 634 QCheckListItem *start = (QCheckListItem *)packagesList->currentItem();
625 if ( packagesList->firstChild() == 0 ) 635 if ( packagesList->firstChild() == 0 )
626 return; 636 return;
627 637
628 QCheckListItem *item; 638 QCheckListItem *item;
629 if ( start == 0 ) 639 if ( start == 0 )
630 { 640 {
631 item = (QCheckListItem *)packagesList->firstChild(); 641 item = (QCheckListItem *)packagesList->firstChild();
632 start = top; 642 start = top;
633 } 643 }
634 else 644 else
635 item = (QCheckListItem *)start->nextSibling(); 645 item = (QCheckListItem *)start->nextSibling();
636 646
637 if ( item == 0 ) 647 if ( item == 0 )
638 item = (QCheckListItem *)packagesList->firstChild(); 648 item = (QCheckListItem *)packagesList->firstChild();
639 do 649 do
640 { 650 {
641 if ( item->text().lower().startsWith( t.lower() ) ) 651 if ( item->text().lower().startsWith( t.lower() ) )
642 { 652 {
643 packagesList->setSelected( item, true ); 653 packagesList->setSelected( item, true );
644 packagesList->ensureItemVisible( item ); 654 packagesList->ensureItemVisible( item );
645 break; 655 break;
646 } 656 }
647 657
648 item = (QCheckListItem *)item->nextSibling(); 658 item = (QCheckListItem *)item->nextSibling();
649 if ( !item ) 659 if ( !item )
650 item = (QCheckListItem *)packagesList->firstChild(); 660 item = (QCheckListItem *)packagesList->firstChild();
651 } while ( item != start); 661 } while ( item != start);
652} 662}
diff --git a/noncore/settings/aqpkg/server.cpp b/noncore/settings/aqpkg/server.cpp
index 8bca892..539ebf0 100644
--- a/noncore/settings/aqpkg/server.cpp
+++ b/noncore/settings/aqpkg/server.cpp
@@ -1,273 +1,279 @@
1/*************************************************************************** 1/***************************************************************************
2 server.cpp - description 2 server.cpp - description
3 ------------------- 3 -------------------
4 begin : Mon Aug 26 2002 4 begin : Mon Aug 26 2002
5 copyright : (C) 2002 by Andy Qua 5 copyright : (C) 2002 by Andy Qua
6 email : andy.qua@blueyonder.co.uk 6 email : andy.qua@blueyonder.co.uk
7 description : This class holds details about a server 7 description : This class holds details about a server
8 : e.g. all the packages that contained on the server 8 : e.g. all the packages that contained on the server
9 : the installation status 9 : the installation status
10 ***************************************************************************/ 10 ***************************************************************************/
11 11
12/*************************************************************************** 12/***************************************************************************
13 * * 13 * *
14 * This program is free software; you can redistribute it and/or modify * 14 * This program is free software; you can redistribute it and/or modify *
15 * it under the terms of the GNU General Public License as published by * 15 * it under the terms of the GNU General Public License as published by *
16 * the Free Software Foundation; either version 2 of the License, or * 16 * the Free Software Foundation; either version 2 of the License, or *
17 * (at your option) any later version. * 17 * (at your option) any later version. *
18 * * 18 * *
19 ***************************************************************************/ 19 ***************************************************************************/
20 20
21 21
22#include <stdio.h> 22#include <stdio.h>
23#include <string.h> 23#include <string.h>
24#include <stdlib.h> 24#include <stdlib.h>
25 25
26#include <iostream> 26#include <iostream>
27#include <fstream> 27#include <fstream>
28using namespace std; 28using namespace std;
29 29
30#include "server.h" 30#include "server.h"
31 31
32#ifdef QWS 32#ifdef QWS
33#include <qpe/global.h> 33#include <qpe/global.h>
34#include <qpe/applnk.h> 34#include <qpe/applnk.h>
35#include <qlist.h> 35#include <qlist.h>
36#endif 36#endif
37 37
38#include "utils.h" 38#include "utils.h"
39 39
40#include "global.h" 40#include "global.h"
41 41
42Server :: Server( const char *name, const char *url ) 42Server :: Server( const char *name, const char *url )
43{ 43{
44 serverName = name; 44 serverName = name;
45 serverUrl = url; 45 serverUrl = url;
46 packageFile = IPKG_DIR; 46 packageFile = IPKG_DIR;
47 packageFile += "lists/" + serverName; 47 packageFile += "lists/" + serverName;
48} 48}
49 49
50Server :: ~Server() 50Server :: ~Server()
51{ 51{
52 cleanUp(); 52 cleanUp();
53} 53}
54 54
55void Server :: cleanUp() 55void Server :: cleanUp()
56{ 56{
57 packageList.clear(); 57 packageList.clear();
58} 58}
59 59
60void Server :: readStatusFile( vector<Destination> &destList ) 60void Server :: readStatusFile( vector<Destination> &destList )
61{ 61{
62 cleanUp(); 62 cleanUp();
63 63
64 vector<Destination>::iterator dit; 64 vector<Destination>::iterator dit;
65 bool rootRead = false; 65 bool rootRead = false;
66 for ( dit = destList.begin() ; dit != destList.end() ; ++dit ) 66 for ( dit = destList.begin() ; dit != destList.end() ; ++dit )
67 { 67 {
68 bool installingToRoot = false; 68 bool installingToRoot = false;
69 69
70 QString path = dit->getDestinationPath(); 70 QString path = dit->getDestinationPath();
71 if ( path.right( 1 ) != "/" ) 71 if ( path.right( 1 ) != "/" )
72 path += "/"; 72 path += "/";
73 73
74 if ( path == "/" ) 74 if ( path == "/" )
75 { 75 {
76 rootRead = true; 76 rootRead = true;
77 installingToRoot = true; 77 installingToRoot = true;
78 } 78 }
79 79
80 packageFile = path + "usr/lib/ipkg/status"; 80 packageFile = path + "usr/lib/ipkg/status";
81 readPackageFile( 0, false, installingToRoot, dit ); 81 readPackageFile( 0, false, installingToRoot, dit );
82 } 82 }
83 83
84 // Ensure that the root status file is read 84 // Ensure that the root status file is read
85 if ( !rootRead ) 85 if ( !rootRead )
86 { 86 {
87 cout << "Reading status file " << "/usr/lib/ipkg/status" << endl; 87 cout << "Reading status file " << "/usr/lib/ipkg/status" << endl;
88 packageFile = "/usr/lib/ipkg/status"; 88 packageFile = "/usr/lib/ipkg/status";
89 readPackageFile( 0, false, true ); 89 readPackageFile( 0, false, true );
90 } 90 }
91} 91}
92 92
93void Server :: readLocalIpks( Server *local ) 93void Server :: readLocalIpks( Server *local )
94{ 94{
95 cleanUp(); 95 cleanUp();
96 96
97#ifdef QWS 97#ifdef QWS
98 // First, get any local IPKGs in the documents area 98 // First, get any local IPKGs in the documents area
99 // Only applicable to Qtopie/Opie 99 // Only applicable to Qtopie/Opie
100 100
101 DocLnkSet files; 101 DocLnkSet files;
102 Global::findDocuments( &files, "application/ipkg" ); 102 Global::findDocuments( &files, "application/ipkg" );
103 103
104 // Now add the items to the list 104 // Now add the items to the list
105 QListIterator<DocLnk> it( files.children() ); 105 QListIterator<DocLnk> it( files.children() );
106 106
107 for ( ; it.current() ; ++it ) 107 for ( ; it.current() ; ++it )
108 { 108 {
109 // OK, we have a local IPK file, I think the standard naming conventions 109 // OK, we have a local IPK file, I think the standard naming conventions
110 // for these are packagename_version_arm.ipk 110 // for these are packagename_version_arm.ipk
111 QString file = (*it)->file(); 111 QString file = (*it)->file();
112 112
113 QString packageName = Utils::getPackageNameFromIpkFilename( file ); 113 // Changed to display the filename (excluding the path)
114 QString packageName = Utils::getFilenameFromIpkFilename( file );
114 QString ver = Utils::getPackageVersionFromIpkFilename( file ); 115 QString ver = Utils::getPackageVersionFromIpkFilename( file );
115 packageList.push_back( Package( packageName ) ); 116 packageList.push_back( Package( packageName ) );
116 packageList.back().setVersion( ver ); 117 packageList.back().setVersion( ver );
117 packageList.back().setFilename( file ); 118 packageList.back().setFilename( file );
118 packageList.back().setPackageStoredLocally( true ); 119 packageList.back().setPackageStoredLocally( true );
119 120
120 } 121 }
121#else 122#else
122 QString names[] = { "advancedfm_0.9.1-20020811_arm.ipk", "libopie_0.9.1-20020811_arm.ipk", "libopieobex_0.9.1-20020811.1_arm.ipk", "opie-addressbook_0.9.1-20020811_arm.ipk" }; 123 QString names[] = { "advancedfm_0.9.1-20020811_arm.ipk", "libopie_0.9.1-20020811_arm.ipk", "libopieobex_0.9.1-20020811.1_arm.ipk", "opie-addressbook_0.9.1-20020811_arm.ipk" };
123 for ( int i = 0 ; i < 4 ; ++i ) 124 for ( int i = 0 ; i < 4 ; ++i )
124 { 125 {
125 // OK, we have a local IPK file, I think the standard naming conventions 126 // OK, we have a local IPK file, I think the standard naming conventions
126 // for these are packagename_version_arm.ipk 127 // for these are packagename_version_arm.ipk
127 QString file = names[i]; 128 QString file = names[i];
128 int p = file.find( "_" ); 129 int p = file.find( "_" );
129 QString tmp = file.mid( 0, p ); 130 QString tmp = file.mid( 0, p );
130 packageList.push_back( Package( tmp ) ); 131 packageList.push_back( Package( tmp ) );
131 int p2 = file.find( "_", p+1 ); 132 int p2 = file.find( "_", p+1 );
132 tmp = file.mid( p+1, p2-(p+1) ); 133 tmp = file.mid( p+1, p2-(p+1) );
133 packageList.back().setVersion( tmp ); 134 packageList.back().setVersion( tmp );
134 packageList.back().setPackageStoredLocally( true ); 135 packageList.back().setPackageStoredLocally( true );
135 } 136 }
136#endif 137#endif
137 138
138 // build local packages 139 // build local packages
139 buildLocalPackages( local ); 140 buildLocalPackages( local );
140} 141}
141 142
142void Server :: readPackageFile( Server *local, bool clearAll, bool installingToRoot, Destination *dest ) 143void Server :: readPackageFile( Server *local, bool clearAll, bool installingToRoot, Destination *dest )
143{ 144{
144 ifstream in( packageFile ); 145 ifstream in( packageFile );
145 if ( !in.is_open() ) 146 if ( !in.is_open() )
146 return; 147 return;
147 148
148 char line[1001]; 149 char line[1001];
149 char k[21]; 150 char k[21];
150 char v[1001]; 151 char v[1001];
151 QString key; 152 QString key;
152 QString value; 153 QString value;
153 154
154 if ( clearAll ) 155 if ( clearAll )
155 cleanUp(); 156 cleanUp();
156 Package *currPackage = 0; 157 Package *currPackage = 0;
157 158
158 bool newPackage = true; 159 bool newPackage = true;
159 do 160 do
160 { 161 {
161 in.getline( line, 1000 ); 162 in.getline( line, 1000 );
162 if ( in.eof() ) 163 if ( in.eof() )
163 continue; 164 continue;
164 165
165 k[0] = '\0'; 166 k[0] = '\0';
166 v[0] = '\0'; 167 v[0] = '\0';
167 168
168 sscanf( line, "%[^:]: %[^\n]", k, v ); 169 sscanf( line, "%[^:]: %[^\n]", k, v );
169 key = k; 170 key = k;
170 value = v; 171 value = v;
171 key = key.stripWhiteSpace(); 172 key = key.stripWhiteSpace();
172 value = value.stripWhiteSpace(); 173 value = value.stripWhiteSpace();
173 if ( key == "Package" && newPackage ) 174 if ( key == "Package" && newPackage )
174 { 175 {
175 newPackage = false; 176 newPackage = false;
176 177
177 currPackage = getPackage( value ); 178 currPackage = getPackage( value );
178 if ( !currPackage ) 179 if ( !currPackage )
179 { 180 {
180 packageList.push_back( Package( value ) ); 181 packageList.push_back( Package( value ) );
181 currPackage = &(packageList.back()); 182 currPackage = &(packageList.back());
182 currPackage->setInstalledTo( dest ); 183 currPackage->setInstalledTo( dest );
183 184
184 if ( installingToRoot ) 185 if ( installingToRoot )
185 currPackage->setInstalledToRoot( true ); 186 currPackage->setInstalledToRoot( true );
186 } 187 }
187 else 188 else
188 { 189 {
189 if (currPackage->getStatus().find( "deinstall" ) != -1 ) 190 if (currPackage->getStatus().find( "deinstall" ) != -1 )
190 currPackage->setInstalledTo( dest ); 191 currPackage->setInstalledTo( dest );
191 } 192 }
192 } 193 }
193 else if ( key == "Version" ) 194 else if ( key == "Version" )
194 { 195 {
195 if ( currPackage ) 196 if ( currPackage )
196 currPackage->setVersion( value ); 197 currPackage->setVersion( value );
197 } 198 }
198 else if ( key == "Status" ) 199 else if ( key == "Status" )
199 { 200 {
200 if ( currPackage ) 201 if ( currPackage )
201 currPackage->setStatus( value ); 202 currPackage->setStatus( value );
202 } 203 }
203 else if ( key == "Description" ) 204 else if ( key == "Description" )
204 { 205 {
205 if ( currPackage ) 206 if ( currPackage )
206 currPackage->setDescription( value ); 207 currPackage->setDescription( value );
207 } 208 }
208 else if ( key == "Filename" ) 209 else if ( key == "Filename" )
209 { 210 {
210 if ( currPackage ) 211 if ( currPackage )
211 currPackage->setFilename( value ); 212 currPackage->setFilename( value );
212 } 213 }
213 else if ( key == "" ) 214 else if ( key == "" )
214 { 215 {
215 newPackage = true; 216 newPackage = true;
216 } 217 }
217 } while ( !in.eof() ); 218 } while ( !in.eof() );
218 219
219 in.close(); 220 in.close();
220 221
221 // build local packages 222 // build local packages
222 buildLocalPackages( local ); 223 buildLocalPackages( local );
223} 224}
224 225
225void Server :: buildLocalPackages( Server *local ) 226void Server :: buildLocalPackages( Server *local )
226{ 227{
227 for ( unsigned int i = 0 ; i < packageList.size() ; ++i ) 228 for ( unsigned int i = 0 ; i < packageList.size() ; ++i )
228 { 229 {
229 QString name = packageList[i].getPackageName(); 230 QString name = packageList[i].getPackageName();
231
232 // If the package name is an ipk name, then convert the filename to a package name
233 if ( name.find( ".ipk" ) != -1 )
234 name = Utils::getPackageNameFromIpkFilename( packageList[i].getFilename() );
235
230 if ( local ) 236 if ( local )
231 packageList[i].setLocalPackage( local->getPackage( name ) ); 237 packageList[i].setLocalPackage( local->getPackage( name ) );
232 else 238 else
233 packageList[i].setLocalPackage( 0 ); 239 packageList[i].setLocalPackage( 0 );
234 } 240 }
235 241
236} 242}
237 243
238Package *Server :: getPackage( QString &name ) 244Package *Server :: getPackage( QString &name )
239{ 245{
240 return getPackage( (const char *)name ); 246 return getPackage( (const char *)name );
241} 247}
242 248
243Package *Server :: getPackage( const char *name ) 249Package *Server :: getPackage( const char *name )
244{ 250{
245 Package *ret = 0; 251 Package *ret = 0;
246 252
247 for ( unsigned int i = 0 ; i < packageList.size() && ret == 0; ++i ) 253 for ( unsigned int i = 0 ; i < packageList.size() && ret == 0; ++i )
248 { 254 {
249 if ( packageList[i].getPackageName() == name ) 255 if ( packageList[i].getPackageName() == name )
250 ret = &packageList[i]; 256 ret = &packageList[i];
251 } 257 }
252 258
253 return ret; 259 return ret;
254} 260}
255 261
256QString Server :: toString() 262QString Server :: toString()
257{ 263{
258 QString ret = "Server\n name - " + serverName + 264 QString ret = "Server\n name - " + serverName +
259 "\n url - " + serverUrl + 265 "\n url - " + serverUrl +
260 "\n"; 266 "\n";
261 267
262 for ( unsigned int i = 0 ; i < packageList.size() ; ++i ) 268 for ( unsigned int i = 0 ; i < packageList.size() ; ++i )
263 ret += "\n " + packageList[i].toString(); 269 ret += "\n " + packageList[i].toString();
264 270
265 271
266 return ret; 272 return ret;
267} 273}
268 274
269vector<Package> &Server::getPackageList() 275vector<Package> &Server::getPackageList()
270{ 276{
271 return packageList; 277 return packageList;
272} 278}
273 279