summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/packagemanager/ChangeLog3
-rw-r--r--noncore/settings/packagemanager/oipkg.cpp2
-rw-r--r--noncore/settings/packagemanager/opackagemanager.cpp101
-rw-r--r--noncore/settings/packagemanager/opackagemanager.h3
-rw-r--r--noncore/settings/packagemanager/opie-packagemanager.control2
-rw-r--r--noncore/settings/packagemanager/promptdlg.cpp2
6 files changed, 103 insertions, 10 deletions
diff --git a/noncore/settings/packagemanager/ChangeLog b/noncore/settings/packagemanager/ChangeLog
index 6ad724f..d53a2b3 100644
--- a/noncore/settings/packagemanager/ChangeLog
+++ b/noncore/settings/packagemanager/ChangeLog
@@ -1,11 +1,14 @@
2004-02-13 Dan Williams <drw@handhelds.org>
+ * Released version 0.3.0
* Fix handling of filtering options in View menu
+ * Do proper version string comparison
+ * Fix string alignment code in PromptDlg to eliminate QT warning messages
2004-02-12 Dan Williams <drw@handhelds.org>
* Package information dialog implemented
* What's This app icon enabled
* Changed all QDialog::exec() occurences to QPEApplication::execDialog()
2004-01-23 Dan Williams <drw@handhelds.org>
diff --git a/noncore/settings/packagemanager/oipkg.cpp b/noncore/settings/packagemanager/oipkg.cpp
index eb07a61..086e91b 100644
--- a/noncore/settings/packagemanager/oipkg.cpp
+++ b/noncore/settings/packagemanager/oipkg.cpp
@@ -26,17 +26,16 @@
If not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#include "oipkg.h"
-#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <qdir.h>
#include <qfile.h>
#include <qmessagebox.h>
#include <qtextstream.h>
@@ -64,17 +63,16 @@ int fIpkgStatus( char */*name*/, int /*status*/, char *desc, void */*userdata*/
{
oipkg->ipkgStatus( desc );
return 0;
}
int fIpkgFiles( char */*name*/, char *desc, char */*version*/, pkg_state_status_t /*status*/,
void */*userdata*/ )
{
-printf( "*****List*****\n%s\n", desc );
oipkg->ipkgList( desc );
return 0;
}
OIpkg::OIpkg( Config *config, QObject *parent, const char *name )
: QObject( parent, name )
, m_config( config )
, m_confInfo( NULL )
diff --git a/noncore/settings/packagemanager/opackagemanager.cpp b/noncore/settings/packagemanager/opackagemanager.cpp
index ad2fe02..3633e05 100644
--- a/noncore/settings/packagemanager/opackagemanager.cpp
+++ b/noncore/settings/packagemanager/opackagemanager.cpp
@@ -24,16 +24,18 @@
  -_. . .   )=.  = Library General Public License along with
    --        :-=` this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
+#include <ctype.h>
+
#include <qpe/qpeapplication.h>
#include "opackagemanager.h"
#include "oipkgconfigdlg.h"
OPackageManager::OPackageManager( Config *config, QObject *parent, const char *name )
: QObject( parent, name )
, m_config( config )
@@ -288,25 +290,38 @@ OConfItem *OPackageManager::findConfItem( OConfItem::Type type, const QString &n
}
OPackage *OPackageManager::findPackage( const QString &name )
{
return m_packages[ name ];
}
-int OPackageManager::compareVersions( const QString &version1, const QString &version2 )
+int OPackageManager::compareVersions( const QString &ver1, const QString &ver2 )
{
- // TODO - do proper compare!
- if ( version1 < version2 )
- return -1;
- else if ( version1 > version2 )
+ // TODO - should this be in OIpkg???
+
+ int epoch1, epoch2;
+ QString version1, revision1;
+ QString version2, revision2;
+
+ parseVersion( ver1, &epoch1, &version1, &revision1 );
+ parseVersion( ver2, &epoch2, &version2, &revision2 );
+
+ if ( epoch1 > epoch2 )
return 1;
+ else if ( epoch1 < epoch2 )
+ return -1;
- return 0;
+ int r = verrevcmp( version1.latin1(), version2.latin1() );
+ if (r)
+ return r;
+
+ r = verrevcmp( revision1.latin1(), revision2.latin1() );
+ return r;
}
bool OPackageManager::configureDlg( bool installOptions )
{
OIpkgConfigDlg dlg( &m_ipkg, installOptions, static_cast<QWidget *>(parent()) );
return ( QPEApplication::execDialog( &dlg ) == QDialog::Accepted );
}
@@ -316,8 +331,82 @@ void OPackageManager::saveSettings()
}
bool OPackageManager::executeCommand( OPackage::Command command, QStringList *packages,
const QString &destination, const QObject *receiver,
const char *slotOutput, bool rawOutput )
{
return m_ipkg.executeCommand( command, packages, destination, receiver, slotOutput, rawOutput );
}
+
+void OPackageManager::parseVersion( const QString &verstr, int *epoch, QString *version,
+ QString *revision )
+{
+ *epoch = 0;
+ *revision = QString::null;
+
+ // Version string is in the format "ee:vv-rv", where ee=epoch, vv=version, rv=revision
+
+ // Get epoch
+ int colonpos = verstr.find( ':' );
+ if ( colonpos > -1 )
+ {
+ *epoch = verstr.left( colonpos ).toInt();
+ }
+
+ // Get version and revision
+ int hyphenpos = verstr.find( '-', colonpos + 1 );
+ int verlen = verstr.length();
+ if ( hyphenpos > -1 )
+ {
+ *version = verstr.mid( colonpos + 1, hyphenpos - colonpos - 1 );
+ *revision = verstr.right( verlen - hyphenpos - 1 );
+ }
+ else
+ {
+ *version = verstr.right( verlen - colonpos );
+ }
+}
+
+/*
+ * libdpkg - Debian packaging suite library routines
+ * vercmp.c - comparison of version numbers
+ *
+ * Copyright (C) 1995 Ian Jackson <iwj10@cus.cam.ac.uk>
+ */
+int OPackageManager::verrevcmp( const char *val, const char *ref )
+{
+ int vc, rc;
+ long vl, rl;
+ const char *vp, *rp;
+ const char *vsep, *rsep;
+
+ if (!val) val= "";
+ if (!ref) ref= "";
+ for (;;) {
+ vp= val; while (*vp && !isdigit(*vp)) vp++;
+ rp= ref; while (*rp && !isdigit(*rp)) rp++;
+ for (;;) {
+ vc= (val == vp) ? 0 : *val++;
+ rc= (ref == rp) ? 0 : *ref++;
+ if (!rc && !vc) break;
+ if (vc && !isalpha(vc)) vc += 256; /* assumes ASCII character set */
+ if (rc && !isalpha(rc)) rc += 256;
+ if (vc != rc) return vc - rc;
+ }
+ val= vp;
+ ref= rp;
+ vl=0; if (isdigit(*vp)) vl= strtol(val,(char**)&val,10);
+ rl=0; if (isdigit(*rp)) rl= strtol(ref,(char**)&ref,10);
+ if (vl != rl) return vl - rl;
+
+ vc = *val;
+ rc = *ref;
+ vsep = strchr(".-", vc);
+ rsep = strchr(".-", rc);
+ if (vsep && !rsep) return -1;
+ if (!vsep && rsep) return +1;
+
+ if (!*val && !*ref) return 0;
+ if (!*val) return -1;
+ if (!*ref) return +1;
+ }
+}
diff --git a/noncore/settings/packagemanager/opackagemanager.h b/noncore/settings/packagemanager/opackagemanager.h
index 871af0c..b710a51 100644
--- a/noncore/settings/packagemanager/opackagemanager.h
+++ b/noncore/settings/packagemanager/opackagemanager.h
@@ -75,15 +75,18 @@ public:
const char *slotOutput = 0x0, bool rawOutput = true );
private:
Config *m_config; // Pointer to application configuration file
OIpkg m_ipkg; // OIpkg object to retrieve package/configuration information
QDict<OPackage> m_packages; // Global list of available packages
QStringList m_categories; // List of all categories
+ void parseVersion( const QString &verstr, int *epoch, QString *version, QString *revision );
+ int verrevcmp( const char *val, const char *ref );
+
signals:
void initStatus( int numSteps );
void statusText( const QString &status );
void statusBar( int currStep );
};
#endif
diff --git a/noncore/settings/packagemanager/opie-packagemanager.control b/noncore/settings/packagemanager/opie-packagemanager.control
index 095e3be..5a3908e 100644
--- a/noncore/settings/packagemanager/opie-packagemanager.control
+++ b/noncore/settings/packagemanager/opie-packagemanager.control
@@ -2,9 +2,9 @@ Package: opie-packagemanager
Files: plugins/application/libpackagemanager.so* bin/packagemanager pics/packagemanager apps/Settings/packagemanager.desktop
Priority: optional
Section: Settings
Depends: task-opie-minimal
Replaces: packagemanager
Architecture: arm
Maintainer: Dan Williams (drw@handhelds.org)
Description: Opie package management client
-Version: 0.2.0
+Version: 0.3.0
diff --git a/noncore/settings/packagemanager/promptdlg.cpp b/noncore/settings/packagemanager/promptdlg.cpp
index 128e88e..4e82ba9 100644
--- a/noncore/settings/packagemanager/promptdlg.cpp
+++ b/noncore/settings/packagemanager/promptdlg.cpp
@@ -40,17 +40,17 @@ PromptDlg::PromptDlg( const QString &caption, const QString &text, const QString
QWidget *parent )
: QWidget( parent, QString::null, WType_Modal | WType_TopLevel | WStyle_Dialog )
, m_btnClicked( -1 )
{
setCaption( caption );
QGridLayout *layout = new QGridLayout( this, 2, 2, 4, 2 );
QLabel *label = new QLabel( text, this );
- label->setAlignment( AlignCenter | AlignTop | WordBreak );
+ label->setAlignment( AlignCenter | WordBreak );
layout->addMultiCellWidget( label, 0, 0, 0, 1 );
QPushButton *btn = new QPushButton( btn1, this );
layout->addWidget( btn, 1, 0 );
connect( btn, SIGNAL(clicked()), this, SLOT(slotBtn1Clicked()) );
btn = new QPushButton( btn2, this );
layout->addWidget( btn, 1, 1 );