-rw-r--r-- | noncore/settings/aqpkg/datamgr.cpp | 29 | ||||
-rw-r--r-- | noncore/settings/aqpkg/datamgr.h | 8 | ||||
-rw-r--r-- | noncore/settings/aqpkg/global.h | 2 | ||||
-rw-r--r-- | noncore/settings/aqpkg/installdlgimpl.cpp | 2 | ||||
-rw-r--r-- | noncore/settings/aqpkg/ipkg.cpp | 1 | ||||
-rw-r--r-- | noncore/settings/aqpkg/letterpushbutton.cpp | 2 | ||||
-rw-r--r-- | noncore/settings/aqpkg/mainwin.cpp | 5 | ||||
-rw-r--r-- | noncore/settings/aqpkg/networkpkgmgr.cpp | 4 | ||||
-rw-r--r-- | noncore/settings/aqpkg/server.cpp | 2 | ||||
-rw-r--r-- | noncore/settings/aqpkg/settingsimpl.cpp | 23 |
10 files changed, 37 insertions, 41 deletions
diff --git a/noncore/settings/aqpkg/datamgr.cpp b/noncore/settings/aqpkg/datamgr.cpp index e7fb75a..96c28c0 100644 --- a/noncore/settings/aqpkg/datamgr.cpp +++ b/noncore/settings/aqpkg/datamgr.cpp @@ -1,224 +1,217 @@ /*************************************************************************** datamgr.cpp - description ------------------- begin : Thu Aug 29 2002 copyright : (C) 2002 by Andy Qua email : andy.qua@blueyonder.co.uk ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include <fstream> #include <iostream> using namespace std; #ifdef QWS #include <qpe/config.h> #endif #include <stdio.h> #include "datamgr.h" #include "global.h" QString DataManager::availableCategories = ""; DataManager::DataManager() { activeServer = ""; availableCategories = "#"; } DataManager::~DataManager() { } -Server *DataManager :: getServer( const char *name ) +vector<Server>::iterator DataManager :: getServer( const char *name ) { - Server *s = 0; - vector<Server>::iterator it = serverList.begin(); - while ( it != serverList.end() && s == 0 ) + vector<Server>::iterator it = serverList.begin(); + while ( it != serverList.end() ) { if ( it->getServerName() == name ) - s = &(*it); + return it; ++it; } - return s; + return serverList.end(); } -Destination *DataManager :: getDestination( const char *name ) +vector<Destination>::iterator DataManager :: getDestination( const char *name ) { - Destination *d = 0; vector<Destination>::iterator it = destList.begin(); - while ( it != destList.end() && d == 0 ) + while ( it != destList.end() ) { if ( it->getDestinationName() == name ) - d = &(*it); + return it; ++it; } - return d; + return destList.end(); } void DataManager :: loadServers() { // First add our local server - not really a server but // the local config (which packages are installed) serverList.push_back( Server( LOCAL_SERVER, "" ) ); serverList.push_back( Server( LOCAL_IPKGS, "" ) ); #ifdef QWS Config cfg( "aqpkg" ); cfg.setGroup( "destinations" ); #endif // Read file from /etc/ipkg.conf QString ipkg_conf = IPKG_CONF; FILE *fp; fp = fopen( ipkg_conf, "r" ); char line[130]; QString lineStr; if ( fp == NULL ) { cout << "Couldn't open " << ipkg_conf << "! err = " << fp << endl; return; } else { while ( fgets( line, sizeof line, fp) != NULL ) { lineStr = line; if ( lineStr.startsWith( "src" ) || lineStr.startsWith( "#src" ) || lineStr.startsWith( "# src" ) ) { char alias[20]; char url[100]; // Looks a little wierd but read up to the r of src (throwing it away), // then read up to the next space and throw that away, the alias // is next. // Should Handle #src, # src, src, and combinations of sscanf( lineStr, "%*[^r]%*[^ ] %s %s", alias, url ); Server s( alias, url ); if ( lineStr.startsWith( "src" ) ) s.setActive( true ); else s.setActive( false ); serverList.push_back( s ); } else if ( lineStr.startsWith( "dest" ) ) { char alias[20]; char path[50]; sscanf( lineStr, "%*[^ ] %s %s", alias, path ); Destination d( alias, path ); bool linkToRoot = true; #ifdef QWS QString key = alias; key += "_linkToRoot"; linkToRoot = cfg.readBoolEntry( key, true ); #endif d.linkToRoot( linkToRoot ); destList.push_back( d ); } else if ( lineStr.startsWith( "option" ) ) { char type[20]; char val[100]; sscanf( lineStr, "%*[^ ] %s %s", type, val ); if ( stricmp( type, "http_proxy" ) == 0 ) httpProxy = val; if ( stricmp( type, "ftp_proxy" ) == 0 ) ftpProxy = val; if ( stricmp( type, "proxy_username" ) == 0 ) proxyUsername = val; if ( stricmp( type, "proxy_password" ) == 0 ) proxyPassword = val; } } } fclose( fp ); - cout << "httpProxy = " << httpProxy << endl; - cout << "ftpProxy = " << ftpProxy << endl; - cout << "proxyUsername = " << proxyUsername << endl; - cout << "proxyPassword = " << proxyPassword << endl; - reloadServerData( ); } void DataManager :: reloadServerData( ) { vector<Server>::iterator it = serverList.begin(); for ( it = serverList.begin() ; it != serverList.end() ; ++it ) { // Now we've read the config file in we need to read the servers // The local server is a special case. This holds the contents of the // status files the number of which depends on how many destinations // we've set up // The other servers files hold the contents of the server package list if ( it->getServerName() == LOCAL_SERVER ) it->readStatusFile( destList ); else if ( it->getServerName() == LOCAL_IPKGS ) - it->readLocalIpks( getServer( LOCAL_SERVER ) ); + it->readLocalIpks( &( *getServer( LOCAL_SERVER ) ) ); else - it->readPackageFile( getServer( LOCAL_SERVER ) ); + it->readPackageFile( &( *getServer( LOCAL_SERVER ) ) ); } } void DataManager :: writeOutIpkgConf() { QString ipkg_conf = IPKG_CONF; ofstream out( ipkg_conf ); out << "# Written by AQPkg" << endl; out << "# Must have one or more source entries of the form:" << endl; out << "#" << endl; out << "# src <src-name> <source-url>" << endl; out << "#" << endl; out << "# and one or more destination entries of the form:" << endl; out << "#" << endl; out << "# dest <dest-name> <target-path>" << endl; out << "#" << endl; out << "# where <src-name> and <dest-names> are identifiers that" << endl; out << "# should match [a-zA-Z0-9._-]+, <source-url> should be a" << endl; out << "# URL that points to a directory containing a Familiar" << endl; out << "# Packages file, and <target-path> should be a directory" << endl; out << "# that exists on the target system." << endl << endl; // Write out servers vector<Server>::iterator it = serverList.begin(); while ( it != serverList.end() ) { QString alias = it->getServerName(); // Don't write out local as its a dummy if ( alias != LOCAL_SERVER && alias != LOCAL_IPKGS ) { QString url = it->getServerUrl();; if ( !it->isServerActive() ) out << "#"; out << "src " << alias << " " << url << endl; } it++; } out << endl; // Write out destinations vector<Destination>::iterator it2 = destList.begin(); while ( it2 != destList.end() ) { out << "dest " << it2->getDestinationName() << " " << it2->getDestinationPath() << endl; diff --git a/noncore/settings/aqpkg/datamgr.h b/noncore/settings/aqpkg/datamgr.h index 14b0b2f..41833df 100644 --- a/noncore/settings/aqpkg/datamgr.h +++ b/noncore/settings/aqpkg/datamgr.h @@ -1,73 +1,73 @@ /*************************************************************************** datamgr.h - description ------------------- begin : Thu Aug 29 2002 copyright : (C) 2002 by Andy Qua email : andy.qua@blueyonder.co.uk ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef DATAMGR_H #define DATAMGR_H #include <map> using namespace std; #include <qstring.h> #include "server.h" #include "destination.h" #define LOCAL_SERVER "Installed Pkgs" #define LOCAL_IPKGS "local IPKG" /** *@author Andy Qua */ class DataManager { public: DataManager(); - ~DataManager(); + ~DataManager(); void setActiveServer( const QString &act ) { activeServer = act; } QString &getActiveServer( ) { return activeServer; } - Server *getLocalServer() { return getServer( LOCAL_SERVER ); } + Server *getLocalServer() { return &( *getServer( LOCAL_SERVER ) ); } vector<Server> &getServerList() { return serverList; } - Server *getServer( const char *name ); + vector<Server>::iterator getServer( const char *name ); vector<Destination> &getDestinationList() { return destList; } - Destination *getDestination( const char *name ); + vector<Destination>::iterator getDestination( const char *name ); void loadServers(); void reloadServerData( ); void writeOutIpkgConf(); static QString getAvailableCategories() { return availableCategories; } static void setAvailableCategories( QString section ); private: static QString availableCategories; QString activeServer; QString httpProxy; QString ftpProxy; QString proxyUsername; QString proxyPassword; vector<Server> serverList; vector<Destination> destList; }; #endif diff --git a/noncore/settings/aqpkg/global.h b/noncore/settings/aqpkg/global.h index fcec643..ddfb3ac 100644 --- a/noncore/settings/aqpkg/global.h +++ b/noncore/settings/aqpkg/global.h @@ -1,69 +1,69 @@ /*************************************************************************** global.h - description ------------------- begin : Mon Aug 26 2002 copyright : (C) 2002 by Andy Qua email : andy.qua@blueyonder.co.uk ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef __GLOBAL_H #define __GLOBAL_H -#define VERSION_TEXT "AQPkg Version 1.3" +#define VERSION_TEXT "AQPkg Version 1.4" // Uncomment the below line to run on a Linux box rather than a Zaurus // box this allows you to change where root is, and where to load config files from // #define X86 // Sets up location of ipkg.conf and root directory #ifdef QWS #ifndef X86 // Running QT/Embedded on an arm processor #define IPKG_CONF "/etc/ipkg.conf" #define ROOT "/" #define IPKG_DIR "/usr/lib/ipkg/" #else // Running QT/Embedded on a X86 linux box #define IPKG_CONF "/home/andy/projects/aqpkg/aqpkg/data/ipkg.conf" #define ROOT "/home/andy/projects/aqpkg/aqpkg/data/root" #define IPKG_DIR "/home/andy/projects/aqpkg/aqpkg/data/" #endif #else // Running QT on a X86 linux box #define IPKG_CONF "/home/andy/projects/aqpkg/aqpkg/data/ipkg.conf" #define ROOT "/home/andy/projects/aqpkg/aqpkg/data/root" #define IPKG_DIR "/home/andy/projects/aqpkg/aqpkg/data/" #endif // Uncomment the below line to turn on memory checking //#define _DEBUG 1 #ifndef __MEMFILE_C #ifdef _DEBUG void * operator new(unsigned int size,const char *file, int line); void operator delete(void *p); #endif #ifdef _DEBUG #define DEBUG_NEW new(__FILE__, __LINE__) //#define DEBUG_NEW new #else #define DEBUG_NEW new diff --git a/noncore/settings/aqpkg/installdlgimpl.cpp b/noncore/settings/aqpkg/installdlgimpl.cpp index b297437..db9a259 100644 --- a/noncore/settings/aqpkg/installdlgimpl.cpp +++ b/noncore/settings/aqpkg/installdlgimpl.cpp @@ -120,97 +120,97 @@ bool InstallDlgImpl :: showDlg() bool ret = exec(); return ret; } void InstallDlgImpl :: optionsSelected() { InstallOptionsDlgImpl opt( flags, this, "Option", true ); opt.exec(); // set options selected from dialog flags = 0; if ( opt.forceDepends->isChecked() ) flags |= FORCE_DEPENDS; if ( opt.forceReinstall->isChecked() ) flags |= FORCE_REINSTALL; if ( opt.forceRemove->isChecked() ) flags |= FORCE_REMOVE; if ( opt.forceOverwrite->isChecked() ) flags |= FORCE_OVERWRITE; #ifdef QWS Config cfg( "aqpkg" ); cfg.setGroup( "settings" ); cfg.writeEntry( "installFlags", flags ); #endif } void InstallDlgImpl :: installSelected() { if ( btnInstall->text() == "Close" ) { done( 1 ); return; } btnInstall->setEnabled( false ); if ( pIpkg ) { output->setText( "" ); connect( pIpkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &))); pIpkg->runIpkg(); } else { output->setText( "" ); - Destination *d = dataMgr->getDestination( destination->currentText() ); + vector<Destination>::iterator d = dataMgr->getDestination( destination->currentText() ); QString dest = d->getDestinationName(); QString destDir = d->getDestinationPath(); int instFlags = flags; if ( d->linkToRoot() ) instFlags |= MAKE_LINKS; #ifdef QWS // Save settings Config cfg( "aqpkg" ); cfg.setGroup( "settings" ); cfg.writeEntry( "dest", dest ); #endif pIpkg = new Ipkg; connect( pIpkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &))); // First run through the remove list, then the install list then the upgrade list vector<InstallData>::iterator it; pIpkg->setOption( "remove" ); for ( it = removeList.begin() ; it != removeList.end() ; ++it ) { pIpkg->setDestination( it->destination->getDestinationName() ); pIpkg->setDestinationDir( it->destination->getDestinationPath() ); pIpkg->setPackage( it->packageName ); int tmpFlags = flags; if ( it->destination->linkToRoot() ) tmpFlags |= MAKE_LINKS; pIpkg->setFlags( tmpFlags ); pIpkg->runIpkg(); } pIpkg->setOption( "install" ); pIpkg->setDestination( dest ); pIpkg->setDestinationDir( destDir ); pIpkg->setFlags( instFlags ); for ( it = installList.begin() ; it != installList.end() ; ++it ) { pIpkg->setPackage( it->packageName ); pIpkg->runIpkg(); } flags |= FORCE_REINSTALL; for ( it = updateList.begin() ; it != updateList.end() ; ++it ) { if ( it->option == "R" ) pIpkg->setOption( "reinstall" ); diff --git a/noncore/settings/aqpkg/ipkg.cpp b/noncore/settings/aqpkg/ipkg.cpp index 452eca3..8de3c48 100644 --- a/noncore/settings/aqpkg/ipkg.cpp +++ b/noncore/settings/aqpkg/ipkg.cpp @@ -1,66 +1,67 @@ /*************************************************************************** ipkg.cpp - description ------------------- begin : Sat Aug 31 2002 copyright : (C) 2002 by Andy Qua email : andy.qua@blueyonder.co.uk ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include <fstream> +#include <iostream> using namespace std; #include <stdio.h> #include <unistd.h> #ifdef QWS #include <qpe/qpeapplication.h> #else #include <qapplication.h> #endif #include <qdir.h> #include <qtextstream.h> #include "utils.h" #include "ipkg.h" #include "global.h" Ipkg :: Ipkg() { } Ipkg :: ~Ipkg() { } // Option is what we are going to do - install, upgrade, download, reinstall // package is the package name to install - either a fully qualified path and ipk // file (if stored locally) or just the name of the package (for a network package) // packageName is the package name - (for a network package this will be the same as // package parameter) // dest is the destination alias (from ipk.conf) // destDir is the dir that the destination alias points to (used to link to root) // flags is the ipkg options flags // dir is the directory to run ipkg in (defaults to "") bool Ipkg :: runIpkg( ) { bool ret = false; QDir::setCurrent( "/tmp" ); QString cmd = ""; if ( runtimeDir != "" ) { cmd += "cd "; cmd += runtimeDir; cmd += " ; "; } cmd += "ipkg -force-defaults"; diff --git a/noncore/settings/aqpkg/letterpushbutton.cpp b/noncore/settings/aqpkg/letterpushbutton.cpp index afe25d8..ca96c6c 100644 --- a/noncore/settings/aqpkg/letterpushbutton.cpp +++ b/noncore/settings/aqpkg/letterpushbutton.cpp @@ -1,34 +1,34 @@ /*************************************************************************** letterpushbutton.cpp - description ------------------- begin : Wed Oct 16 2002 copyright : (C) 2002 by Andy Qua email : andy.qua@blueyonder.co.uk ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "letterpushbutton.h" -LetterPushButton :: LetterPushButton( const QString &text, QWidget *parent, const char *name=0 ) +LetterPushButton :: LetterPushButton( const QString &text, QWidget *parent, const char *name ) : QPushButton( text, parent, name ) { connect( this, SIGNAL(released()), this, SLOT(released_emmitor()) ); } LetterPushButton :: ~LetterPushButton() { } void LetterPushButton :: released_emmitor() { emit released( text() ); } diff --git a/noncore/settings/aqpkg/mainwin.cpp b/noncore/settings/aqpkg/mainwin.cpp index 0141359..3ddc582 100644 --- a/noncore/settings/aqpkg/mainwin.cpp +++ b/noncore/settings/aqpkg/mainwin.cpp @@ -1,102 +1,103 @@ /*************************************************************************** mainwin.cpp - description ------------------- begin : Mon Aug 26 13:32:30 BST 2002 copyright : (C) 2002 by Andy Qua email : andy.qua@blueyonder.co.uk ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include <iostream> +using namespace std; #include <qmenubar.h> #include <qpopupmenu.h> #include <qmessagebox.h> #include "mainwin.h" #include "datamgr.h" #include "networkpkgmgr.h" #include "settingsimpl.h" #include "helpwindow.h" #include "utils.h" #include "global.h" MainWindow :: MainWindow( QWidget *p, char *name ) : QMainWindow( p, name ) { #ifdef QWS showMaximized(); #endif setCaption( "AQPkg - Package Manager" ); // Create our menu help = new QPopupMenu( this ); help->insertItem( "&General", this, SLOT(displayHelp()), Qt::CTRL+Qt::Key_G ); help->insertItem( "&About", this, SLOT(displayAbout()), Qt::CTRL+Qt::Key_A ); settings = new QPopupMenu( this ); settings->insertItem( "&Settings", this, SLOT(displaySettings()), Qt::CTRL+Qt::Key_S ); edit = new QPopupMenu( this ); edit->insertItem( "&Find", this, SLOT(searchForPackage()), Qt::CTRL+Qt::Key_I ); edit->insertItem( "Find &Next", this, SLOT(repeatSearchForPackage()), Qt::CTRL+Qt::Key_N ); filter = new QPopupMenu( this ); - mnuShowUninstalledPkgsId = filter->insertItem( "Show &Uninstalled Packages", this, SLOT(filterUninstalledPackages()), Qt::CTRL+Qt::Key_U ); + mnuShowUninstalledPkgsId = filter->insertItem( "Show &Non-Installed Packages", this, SLOT(filterUninstalledPackages()), Qt::CTRL+Qt::Key_U ); mnuShowInstalledPkgsId = filter->insertItem( "Show In&stalled Packages", this, SLOT(filterInstalledPackages()), Qt::CTRL+Qt::Key_S ); mnuShowUpgradedPkgsId = filter->insertItem( "Show U&pdated Packages", this, SLOT(filterUpgradedPackages()), Qt::CTRL+Qt::Key_P ); filter->insertSeparator(); mnuFilterByCategory = filter->insertItem( "Filter By &Category", this, SLOT(filterCategory()), Qt::CTRL+Qt::Key_C ); mnuSetFilterCategory = filter->insertItem( "Set Filter C&ategory", this, SLOT(setFilterCategory()), Qt::CTRL+Qt::Key_A ); // Create the main menu menu = menuBar(); //new QMenuBar( this ); menu->insertItem( "&Settings", settings ); menu->insertItem( "&Edit", edit ); menu->insertItem( "&Filter", filter ); menu->insertItem( "&Help", help ); mgr = new DataManager(); mgr->loadServers(); stack = new QWidgetStack( this ); networkPkgWindow = new NetworkPackageManager( mgr, stack ); stack->addWidget( networkPkgWindow, 1 ); setCentralWidget( stack ); stack->raiseWidget( networkPkgWindow ); } MainWindow :: ~MainWindow() { delete networkPkgWindow; } void MainWindow :: setDocument( const QString &doc ) { // Remove path from package QString package = Utils::getPackageNameFromIpkFilename( doc ); std::cout << "Selecting package " << package << std::endl; networkPkgWindow->selectLocalPackage( package ); } void MainWindow :: displaySettings() { SettingsImpl *dlg = new SettingsImpl( mgr, this, "Settings", true ); if ( dlg->showDlg( 0 ) ) networkPkgWindow->updateData(); delete dlg; } void MainWindow :: displayHelp() { @@ -161,49 +162,49 @@ void MainWindow :: filterInstalledPackages() filter->setItemChecked( mnuShowUninstalledPkgsId, false ); networkPkgWindow->showOnlyUninstalledPackages( false ); filter->setItemChecked( mnuShowUpgradedPkgsId, false ); networkPkgWindow->showUpgradedPackages( false ); networkPkgWindow->showOnlyInstalledPackages( val ); } void MainWindow :: filterUpgradedPackages() { bool val; if ( filter->isItemChecked( mnuShowUpgradedPkgsId ) ) { val = false; filter->setItemChecked( mnuShowUpgradedPkgsId, false ); } else { val = true; filter->setItemChecked( mnuShowUpgradedPkgsId, true ); } filter->setItemChecked( mnuShowUninstalledPkgsId, false ); networkPkgWindow->showOnlyUninstalledPackages( false ); filter->setItemChecked( mnuShowInstalledPkgsId, false ); networkPkgWindow->showOnlyInstalledPackages( false ); networkPkgWindow->showUpgradedPackages( val ); } void MainWindow :: setFilterCategory() { if ( networkPkgWindow->setFilterCategory( ) ) filter->setItemChecked( mnuFilterByCategory, true ); } void MainWindow :: filterCategory() { if ( filter->isItemChecked( mnuFilterByCategory ) ) { networkPkgWindow->filterByCategory( false ); filter->setItemChecked( mnuFilterByCategory, false ); } else { if ( networkPkgWindow->filterByCategory( true ) ) filter->setItemChecked( mnuFilterByCategory, true ); } -}
\ No newline at end of file +} diff --git a/noncore/settings/aqpkg/networkpkgmgr.cpp b/noncore/settings/aqpkg/networkpkgmgr.cpp index d9e62b6..79a380e 100644 --- a/noncore/settings/aqpkg/networkpkgmgr.cpp +++ b/noncore/settings/aqpkg/networkpkgmgr.cpp @@ -172,97 +172,97 @@ void NetworkPackageManager :: initGui() else hbox4->addWidget( b ); } } vbox->addWidget( packagesList ); packagesList->addColumn( "Packages" ); QHBoxLayout *hbox2 = new QHBoxLayout( vbox, -1, "HBox2" ); hbox2->addWidget( update ); hbox2->addWidget( download ); hbox2->addWidget( upgrade ); hbox2->addWidget( apply ); } void NetworkPackageManager :: setupConnections() { connect( serversList, SIGNAL(activated( int )), this, SLOT(serverSelected( int ))); connect( apply, SIGNAL(released()), this, SLOT(applyChanges()) ); connect( download, SIGNAL(released()), this, SLOT(downloadPackage()) ); connect( upgrade, SIGNAL( released()), this, SLOT(upgradePackages()) ); connect( update, SIGNAL(released()), this, SLOT(updateServer()) ); } void NetworkPackageManager :: showProgressDialog( char *initialText ) { if ( !progressDlg ) progressDlg = new ProgressDlg( this, "Progress", false ); progressDlg->setText( initialText ); progressDlg->show(); } void NetworkPackageManager :: serverSelected( int ) { packagesList->clear(); // display packages QString serverName = serversList->currentText(); currentlySelectedServer = serverName; #ifdef QWS // read download directory from config file Config cfg( "aqpkg" ); cfg.setGroup( "settings" ); cfg.writeEntry( "selectedServer", currentlySelectedServer ); #endif - Server *s = dataMgr->getServer( serverName ); + vector<Server>::iterator s = dataMgr->getServer( serverName ); vector<Package> &list = s->getPackageList(); vector<Package>::iterator it; for ( it = list.begin() ; it != list.end() ; ++it ) { QString text = ""; // Apply show only uninstalled packages filter if ( showUninstalledPkgs && it->isInstalled() ) continue; // Apply show only installed packages filter if ( showInstalledPkgs && !it->isInstalled() ) continue; // Apply show only new installed packages filter if ( showUpgradedPkgs ) { if ( !it->isInstalled() || compareVersions( it->getInstalledVersion(), it->getVersion() ) != 1 ) continue; } // Apply the section filter if ( categoryFilterEnabled && categoryFilter != "" ) { if ( it->getSection() == "" || categoryFilter.find( it->getSection().lower() ) == -1 ) continue; } // If the local server, only display installed packages if ( serverName == LOCAL_SERVER && !it->isInstalled() ) continue; text += it->getPackageName(); if ( it->isInstalled() ) { text += " (installed)"; // If a different version of package is available, postfix it with an * if ( it->getVersion() != it->getInstalledVersion() ) { if ( compareVersions( it->getInstalledVersion(), it->getVersion() ) == 1 ) text += "*"; } @@ -567,97 +567,97 @@ void NetworkPackageManager :: applyChanges() { InstallData data = dealWithItem( item ); workingPackages.push_back( data ); } } if ( workingPackages.size() == 0 ) { // Nothing to do QMessageBox::information( this, "Nothing to do", "No packages selected", "OK" ); return; } // do the stuff InstallDlgImpl dlg( workingPackages, dataMgr, this, "Install", true ); dlg.showDlg(); // Reload data dataMgr->reloadServerData(); serverSelected(-1); #ifdef QWS // Finally let the main system update itself QCopEnvelope e("QPE/System", "linkChanged(QString)"); QString lf = QString::null; e << lf; #endif } // decide what to do - either remove, upgrade or install // Current rules: // If not installed - install // If installed and different version available - upgrade // If installed and version up to date - remove InstallData NetworkPackageManager :: dealWithItem( QCheckListItem *item ) { QString name = item->text(); int pos = name.find( "*" ); name.truncate( pos ); // if (there is a (installed), remove it pos = name.find( "(installed)" ); if ( pos > 0 ) name.truncate( pos - 1 ); // Get package - Server *s = dataMgr->getServer( serversList->currentText() ); + vector<Server>::iterator s = dataMgr->getServer( serversList->currentText() ); Package *p = s->getPackage( name ); // If the package has a filename then it is a local file if ( p->isPackageStoredLocally() ) name = p->getFilename(); QString option; QString dest = "root"; if ( !p->isInstalled() ) { InstallData item; item.option = "I"; item.packageName = name; return item; } else { InstallData item; item.option = "D"; if ( !p->isPackageStoredLocally() ) item.packageName = p->getInstalledPackageName(); else item.packageName = name; if ( p->getInstalledTo() ) { item.destination = p->getInstalledTo(); cout << "dest - " << p->getInstalledTo()->getDestinationName() << endl; cout << "dest - " << p->getInstalledTo()->getDestinationPath() << endl; } else { item.destination = p->getLocalPackage()->getInstalledTo(); } // Now see if version is newer or not int val = compareVersions( p->getInstalledVersion(), p->getVersion() ); // If the version requested is older and user selected a local ipk file, then reinstall the file if ( p->isPackageStoredLocally() && val == -1 ) val = 0; if ( val == -2 ) { // Error - should handle } else if ( val == -1 ) { diff --git a/noncore/settings/aqpkg/server.cpp b/noncore/settings/aqpkg/server.cpp index 58407d5..2cb0533 100644 --- a/noncore/settings/aqpkg/server.cpp +++ b/noncore/settings/aqpkg/server.cpp @@ -35,97 +35,97 @@ using namespace std; #include <qpe/applnk.h> #include <qlist.h> #endif #include "utils.h" #include "global.h" Server :: Server( const char *name, const char *url ) { serverName = name; serverUrl = url; packageFile = IPKG_DIR; active = true; packageFile += "lists/" + serverName; } Server :: ~Server() { cleanUp(); } void Server :: cleanUp() { packageList.clear(); } void Server :: readStatusFile( vector<Destination> &destList ) { cleanUp(); vector<Destination>::iterator dit; bool rootRead = false; for ( dit = destList.begin() ; dit != destList.end() ; ++dit ) { bool installingToRoot = false; QString path = dit->getDestinationPath(); if ( path.right( 1 ) != "/" ) path += "/"; if ( path == "/" ) { rootRead = true; installingToRoot = true; } packageFile = path + "usr/lib/ipkg/status"; - readPackageFile( 0, false, installingToRoot, dit ); + readPackageFile( 0, false, installingToRoot, &( *dit ) ); } // Ensure that the root status file is read if ( !rootRead ) { cout << "Reading status file " << "/usr/lib/ipkg/status" << endl; packageFile = "/usr/lib/ipkg/status"; readPackageFile( 0, false, true ); } } void Server :: readLocalIpks( Server *local ) { cleanUp(); #ifdef QWS // First, get any local IPKGs in the documents area // Only applicable to Qtopie/Opie DocLnkSet files; Global::findDocuments( &files, "application/ipkg" ); // Now add the items to the list QListIterator<DocLnk> it( files.children() ); for ( ; it.current() ; ++it ) { // OK, we have a local IPK file, I think the standard naming conventions // for these are packagename_version_arm.ipk QString file = (*it)->file(); // Changed to display the filename (excluding the path) QString packageName = Utils::getFilenameFromIpkFilename( file ); QString ver = Utils::getPackageVersionFromIpkFilename( file ); packageList.push_back( Package( packageName ) ); packageList.back().setVersion( ver ); packageList.back().setFilename( file ); packageList.back().setPackageStoredLocally( true ); } #else 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" }; for ( int i = 0 ; i < 4 ; ++i ) { // OK, we have a local IPK file, I think the standard naming conventions // for these are packagename_version_arm.ipk QString file = names[i]; int p = file.find( "_" ); diff --git a/noncore/settings/aqpkg/settingsimpl.cpp b/noncore/settings/aqpkg/settingsimpl.cpp index a18a178..9dd2206 100644 --- a/noncore/settings/aqpkg/settingsimpl.cpp +++ b/noncore/settings/aqpkg/settingsimpl.cpp @@ -1,245 +1,246 @@ /*************************************************************************** settingsimpl.cpp - description ------------------- begin : Thu Aug 29 2002 copyright : (C) 2002 by Andy Qua email : andy.qua@blueyonder.co.uk ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include <fstream> +#include <algorithm> using namespace std; #include <qlistbox.h> #include <qlineedit.h> #include <qpushbutton.h> #include <qtabwidget.h> #include <qcheckbox.h> #ifdef QWS #include <qpe/config.h> #endif #include "settingsimpl.h" #include "global.h" SettingsImpl :: SettingsImpl( DataManager *dataManager, QWidget * parent, const char* name, bool modal, WFlags fl ) : SettingsBase( parent, name, modal, fl ) { dataMgr = dataManager; setupData(); changed = false; newserver = false; newdestination = false; } SettingsImpl :: ~SettingsImpl() { } bool SettingsImpl :: showDlg( int i ) { TabWidget->setCurrentPage( i ); showMaximized(); exec(); if ( changed ) dataMgr->writeOutIpkgConf(); return changed; } void SettingsImpl :: setupData() { // add servers vector<Server>::iterator it; for ( it = dataMgr->getServerList().begin() ; it != dataMgr->getServerList().end() ; ++it ) { if ( it->getServerName() == LOCAL_SERVER || it->getServerName() == LOCAL_IPKGS ) continue; servers->insertItem( it->getServerName() ); } // add destinations vector<Destination>::iterator it2; for ( it2 = dataMgr->getDestinationList().begin() ; it2 != dataMgr->getDestinationList().end() ; ++it2 ) destinations->insertItem( it2->getDestinationName() ); #ifdef QWS Config cfg( "aqpkg" ); cfg.setGroup( "settings" ); jumpTo->setChecked( cfg.readBoolEntry( "showJumpTo", "true" ) ); #else jumpTo->setChecked( true ); #endif } //------------------ Servers tab ---------------------- void SettingsImpl :: editServer( int sel ) { currentSelectedServer = sel; - Server *s = dataMgr->getServer( servers->currentText() ); + vector<Server>::iterator s = dataMgr->getServer( servers->currentText() ); serverName = s->getServerName(); servername->setText( s->getServerName() ); serverurl->setText( s->getServerUrl() ); active->setChecked( s->isServerActive() ); } void SettingsImpl :: newServer() { newserver = true; servername->setText( "" ); serverurl->setText( "" ); servername->setFocus(); active->setChecked( true ); } void SettingsImpl :: removeServer() { - changed = true; - Server *s = dataMgr->getServer( servers->currentText() ); - dataMgr->getServerList().erase( s ); - servers->removeItem( currentSelectedServer ); + changed = true; + vector<Server>::iterator s = dataMgr->getServer( servers->currentText() ); + dataMgr->getServerList().erase( s ); + servers->removeItem( currentSelectedServer ); } void SettingsImpl :: changeServerDetails() { changed = true; QString newName = servername->text(); if ( !newserver ) { - Server *s = dataMgr->getServer( serverName ); + vector<Server>::iterator s = dataMgr->getServer( servers->currentText() ); // Update url s->setServerUrl( serverurl->text() ); s->setActive( active->isChecked() ); // Check if server name has changed, if it has then we need to replace the key in the map if ( serverName != newName ) { // Update server name s->setServerName( newName ); // See if this server is the active server // if ( dataMgr->getActiveServer() == serverName ) // dataMgr->setActiveServer( newName ); // Update list box servers->changeItem( newName, currentSelectedServer ); } } else { Server s( newName, serverurl->text() ); dataMgr->getServerList().push_back( Server( newName, serverurl->text() ) ); dataMgr->getServerList().end()->setActive( active->isChecked() ); servers->insertItem( newName ); servers->setCurrentItem( servers->count() ); newserver = false; } } //------------------ Destinations tab ---------------------- void SettingsImpl :: editDestination( int sel ) { currentSelectedDestination = sel; - Destination *d = dataMgr->getDestination( destinations->currentText() ); + vector<Destination>::iterator d = dataMgr->getDestination( destinations->currentText() ); destinationName = d->getDestinationName(); destinationname->setText( d->getDestinationName() ); destinationurl->setText( d->getDestinationPath() ); linkToRoot->setChecked( d->linkToRoot() ); } void SettingsImpl :: newDestination() { newdestination = true; destinationname->setText( "" ); destinationurl->setText( "" ); destinationname->setFocus(); linkToRoot->setChecked( true ); } void SettingsImpl :: removeDestination() { - changed = true; - Destination *d = dataMgr->getDestination( destinations->currentText() ); - dataMgr->getDestinationList().erase( d ); + changed = true; + vector<Destination>::iterator d = dataMgr->getDestination( destinations->currentText() ); + dataMgr->getDestinationList().erase( d ); destinations->removeItem( currentSelectedDestination ); } void SettingsImpl :: changeDestinationDetails() { changed = true; #ifdef QWS Config cfg( "aqpkg" ); cfg.setGroup( "destinations" ); #endif QString newName = destinationname->text(); if ( !newdestination ) { - Destination *d = dataMgr->getDestination( destinationName ); + vector<Destination>::iterator d = dataMgr->getDestination( destinations->currentText() ); // Update url d->setDestinationPath( destinationurl->text() ); d->linkToRoot( linkToRoot->isChecked() ); // Check if server name has changed, if it has then we need to replace the key in the map if ( destinationName != newName ) { // Update server name d->setDestinationName( newName ); // Update list box destinations->changeItem( newName, currentSelectedDestination ); } #ifdef QWS QString key = newName; key += "_linkToRoot"; int val = d->linkToRoot(); cfg.writeEntry( key, val ); #endif } else { dataMgr->getDestinationList().push_back( Destination( newName, destinationurl->text() ) ); destinations->insertItem( newName ); destinations->setCurrentItem( destinations->count() ); newdestination = false; #ifdef QWS QString key = newName; key += "_linkToRoot"; cfg.writeEntry( key, true ); #endif } } //------------------ General tab ---------------------- void SettingsImpl :: toggleJumpTo( bool val ) { #ifdef QWS Config cfg( "aqpkg" ); cfg.setGroup( "settings" ); cfg.writeEntry( "showJumpTo", val ); #endif } |