-rw-r--r-- | noncore/settings/packagemanager/ChangeLog | 7 | ||||
-rw-r--r-- | noncore/settings/packagemanager/README | 6 | ||||
-rw-r--r-- | noncore/settings/packagemanager/TODO | 6 | ||||
-rw-r--r-- | noncore/settings/packagemanager/oconfitem.h | 2 | ||||
-rw-r--r-- | noncore/settings/packagemanager/oipkg.cpp | 117 | ||||
-rw-r--r-- | noncore/settings/packagemanager/oipkgconfigdlg.cpp | 138 | ||||
-rw-r--r-- | noncore/settings/packagemanager/oipkgconfigdlg.h | 7 | ||||
-rw-r--r-- | noncore/settings/packagemanager/opie-packagemanager.control | 2 |
8 files changed, 177 insertions, 108 deletions
diff --git a/noncore/settings/packagemanager/ChangeLog b/noncore/settings/packagemanager/ChangeLog index 38756b1..92b542c 100644 --- a/noncore/settings/packagemanager/ChangeLog +++ b/noncore/settings/packagemanager/ChangeLog @@ -1,4 +1,11 @@ +2005-02-22 Dan Williams <drw@handhelds.org> + + * Released version 0.6.2 + * Added support for ipkg configuration option, 'lists_dir' + * Make app depend on libipkg-0.99.143, or greater + * Optimize ipkg configuration file read routine + 2005-02-16 Dan Williams <drw@handhelds.org> * Fixed stupid bug where last package in status file was not shown as installed when it should be * Removed printf's diff --git a/noncore/settings/packagemanager/README b/noncore/settings/packagemanager/README index ff6d113..9720cb4 100644 --- a/noncore/settings/packagemanager/README +++ b/noncore/settings/packagemanager/README @@ -1,16 +1,16 @@ /************************************************************************ /* /* Opie - Package Manager /* ======================== -/* Version 0.6.0 +/* Version 0.6.2 /* /* A package management client for Opie /* /************************************************************************ ------------------------------------------------------- - Release Notes for Opie-PackageManager - January, 2004 + Release Notes for Opie-PackageManager - February, 2004 ------------------------------------------------------- ====================== = To-do = @@ -43,9 +43,9 @@ the build system along with the appropriate headers. ====================== = Credits = ====================== -- Opie-PackageManager is (C) 2003-2004 Dan Williams +- Opie-PackageManager is (C) 2003-2005 Dan Williams ====================== = Links = ====================== diff --git a/noncore/settings/packagemanager/TODO b/noncore/settings/packagemanager/TODO index 2512624..dd70b11 100644 --- a/noncore/settings/packagemanager/TODO +++ b/noncore/settings/packagemanager/TODO @@ -1,15 +1,13 @@ /************************************************************************ /* /* Opie - Package Manager /* ======================== -/* Version 0.6.1 +/* Version 0.6.2 /* /* A package management client for Opie /* /************************************************************************ ----------------------------------------------- - To-do for Opie-PackageManager - January, 2005 + To-do for Opie-PackageManager - February, 2005 ----------------------------------------------- - -1. Re-work package download dialog diff --git a/noncore/settings/packagemanager/oconfitem.h b/noncore/settings/packagemanager/oconfitem.h index 9972c00..b306e93 100644 --- a/noncore/settings/packagemanager/oconfitem.h +++ b/noncore/settings/packagemanager/oconfitem.h @@ -37,9 +37,9 @@ _;:, .> :=|. This program is free software; you can class OConfItem { public: - enum Type { Source, Destination, Option, Arch, NotDefined }; + enum Type { Source, Destination, Option, Arch, Other, NotDefined }; OConfItem( Type type = NotDefined, const QString &name = QString::null, const QString &value = QString::null, const QString &features = QString::null, bool active = true ); diff --git a/noncore/settings/packagemanager/oipkg.cpp b/noncore/settings/packagemanager/oipkg.cpp index e7e292e..3d2c621 100644 --- a/noncore/settings/packagemanager/oipkg.cpp +++ b/noncore/settings/packagemanager/oipkg.cpp @@ -151,28 +151,39 @@ void OIpkg::setConfigItems( OConfItemList *configList ) // Only write out valid conf items if ( item->type() != OConfItem::NotDefined ) { QString confLine; + QString name = item->name(); if ( !item->active() ) confLine = "#"; switch ( item->type() ) { case OConfItem::Source : { if ( item->features().contains( "Compressed" ) ) - confLine.append( "src/gz " ); + confLine.append( "src/gz" ); else - confLine.append( "src " ); + confLine.append( "src" ); + } + break; + case OConfItem::Destination : confLine.append( "dest" ); break; + case OConfItem::Option : confLine.append( "option" ); break; + case OConfItem::Arch : confLine.append( "arch" ); break; + case OConfItem::Other : + { + // For options w/type = Other, the mapping is as follows: + // name = typeStr (e.g. "lists_dir") + // value = value + // features = name (from configuration file) + confLine.append( item->name() ); + name = item->features(); } break; - case OConfItem::Destination : confLine.append( "dest " ); break; - case OConfItem::Option : confLine.append( "option " ); break; - case OConfItem::Arch : confLine.append( "arch " ); break; default : break; }; - confStream << confLine << " " << item->name() << " " << item->value() << "\n"; + confStream << confLine << " " << name << " " << item->value() << "\n"; } } confFile.close(); @@ -544,52 +555,66 @@ void OIpkg::loadConfiguration() // Parse line and save info to the conf options list if ( !line.isEmpty() ) { - if ( !line.startsWith( "#" ) || - line.startsWith( "#src" ) || - line.startsWith( "#dest" ) || - line.startsWith( "#arch" ) || - line.startsWith( "#option" ) ) + // Strip leading comment marker if exists + bool comment = false; + if ( line.startsWith( "#" ) ) { - int pos = line.find( ' ', 1 ); - - // Type - QString typeStr = line.left( pos ); - OConfItem::Type type; - QString features; - if ( typeStr == "src" || typeStr == "#src" ) - type = OConfItem::Source; - else if ( typeStr == "src/gz" || typeStr == "#src/gz" ) - { - type = OConfItem::Source; - features = "Compressed"; - } - else if ( typeStr == "dest" || typeStr == "#dest" ) - type = OConfItem::Destination; - else if ( typeStr == "option" || typeStr == "#option" ) - type = OConfItem::Option; - else if ( typeStr == "arch" || typeStr == "#arch" ) - type = OConfItem::Arch; - else - type = OConfItem::NotDefined; - ++pos; - int endpos = line.find( ' ', pos ); - - // Name - QString name = line.mid( pos, endpos - pos ); - - // Value - QString value = ""; - if ( endpos > -1 ) - value = line.right( line.length() - endpos - 1 ); + line.remove( 0, 1 ); + line = line.simplifyWhiteSpace(); + comment = true; + } - // Active - bool active = !line.startsWith( "#" ); + bool recognizedOption = true; + int pos = line.find( ' ', 1 ) + 1; + int endpos = line.find( ' ', pos ); + + // Name + QString name = line.mid( pos, endpos - pos ); + + // Value + QString value = ""; + if ( endpos > -1 ) + value = line.right( line.length() - endpos - 1 ); + + // Active + bool active = !comment; + + // Type + // For options w/type = Other, the mapping is as follows: + // name = typeStr (e.g. "lists_dir") + // value = value + // features = name (from configuration file) + + QString typeStr = line.left( pos - 1 ); + OConfItem::Type type; + QString features; + if ( typeStr == "src" ) + type = OConfItem::Source; + else if ( typeStr == "src/gz" ) + { + type = OConfItem::Source; + features = "Compressed"; + } + else if ( typeStr == "dest" ) + type = OConfItem::Destination; + else if ( typeStr == "option" ) + type = OConfItem::Option; + else if ( typeStr == "arch" ) + type = OConfItem::Arch; + else if ( typeStr == "lists_dir" ) + { + type = OConfItem::Other; + features = name; + name = typeStr; + } + else + recognizedOption = false; - // Add to list + // Add to list + if ( recognizedOption ) m_confInfo->append( new OConfItem( type, name, value, features, active ) ); - } } } f.close(); diff --git a/noncore/settings/packagemanager/oipkgconfigdlg.cpp b/noncore/settings/packagemanager/oipkgconfigdlg.cpp index e6d6a81..7ee2d74 100644 --- a/noncore/settings/packagemanager/oipkgconfigdlg.cpp +++ b/noncore/settings/packagemanager/oipkgconfigdlg.cpp @@ -127,8 +127,15 @@ void OIpkgConfigDlg::accept() else m_configs->append( new OConfItem( OConfItem::Option, "proxy_password", m_proxyPassword->text() ) ); + confItem = m_ipkg->findConfItem( OConfItem::Other, "lists_dir" ); + if ( confItem ) + confItem->setValue( m_optSourceLists->text() ); + else + m_configs->append( new OConfItem( OConfItem::Other, "lists_dir", + m_optSourceLists->text(), "name" ) ); + m_ipkg->setConfigItems( m_configs ); } // Save options configuration @@ -182,9 +189,9 @@ void OIpkgConfigDlg::initServerWidget() m_serverEditBtn->setEnabled( false ); QWhatsThis::add( m_serverEditBtn, tr( "Tap here to edit the entry selected above." ) ); connect( m_serverEditBtn, SIGNAL(clicked()), this, SLOT(slotServerEdit()) ); layout->addWidget( m_serverEditBtn, 1, 1 ); - + m_serverDeleteBtn = new QPushButton( Resource::loadPixmap( "trash" ), tr( "Delete" ), container ); m_serverDeleteBtn->setEnabled( false ); QWhatsThis::add( m_serverDeleteBtn, tr( "Tap here to delete the entry selected above." ) ); connect( m_serverDeleteBtn, SIGNAL(clicked()), this, SLOT(slotServerDelete()) ); @@ -220,9 +227,9 @@ void OIpkgConfigDlg::initDestinationWidget() m_destEditBtn->setEnabled( false ); QWhatsThis::add( m_destEditBtn, tr( "Tap here to edit the entry selected above." ) ); connect( m_destEditBtn, SIGNAL(clicked()), this, SLOT(slotDestEdit()) ); layout->addWidget( m_destEditBtn, 1, 1 ); - + m_destDeleteBtn = new QPushButton( Resource::loadPixmap( "trash" ), tr( "Delete" ), container ); m_destDeleteBtn->setEnabled( false ); QWhatsThis::add( m_destDeleteBtn, tr( "Tap here to delete the entry selected above." ) ); connect( m_destDeleteBtn, SIGNAL(clicked()), this, SLOT(slotDestDelete()) ); @@ -296,37 +303,50 @@ void OIpkgConfigDlg::initOptionsWidget() sv->setResizePolicy( QScrollView::AutoOneFit ); sv->setFrameStyle( QFrame::NoFrame ); QWidget *container = new QWidget( sv->viewport() ); sv->addChild( container ); - QVBoxLayout *layout = new QVBoxLayout( container, 2, 4 ); + QGridLayout *layout = new QGridLayout( container, 8, 2, 2, 4 ); m_optForceDepends = new QCheckBox( tr( "Force Depends" ), container ); QWhatsThis::add( m_optForceDepends, tr( "Tap here to enable or disable the '-force-depends' option for Ipkg." ) ); - layout->addWidget( m_optForceDepends ); + layout->addMultiCellWidget( m_optForceDepends, 0, 0, 0, 1 ); m_optForceReinstall = new QCheckBox( tr( "Force Reinstall" ), container ); QWhatsThis::add( m_optForceReinstall, tr( "Tap here to enable or disable the '-force-reinstall' option for Ipkg." ) ); - layout->addWidget( m_optForceReinstall ); + layout->addMultiCellWidget( m_optForceReinstall, 1, 1, 0, 1 ); m_optForceRemove = new QCheckBox( tr( "Force Remove" ), container ); QWhatsThis::add( m_optForceRemove, tr( "Tap here to enable or disable the '-force-removal-of-dependent-packages' option for Ipkg." ) ); - layout->addWidget( m_optForceRemove ); + layout->addMultiCellWidget( m_optForceRemove, 2, 2, 0, 1 ); m_optForceOverwrite = new QCheckBox( tr( "Force Overwrite" ), container ); QWhatsThis::add( m_optForceOverwrite, tr( "Tap here to enable or disable the '-force-overwrite' option for Ipkg." ) ); - layout->addWidget( m_optForceOverwrite ); + layout->addMultiCellWidget( m_optForceOverwrite, 3, 3, 0, 1 ); - QLabel *l = new QLabel( tr( "Information Level" ), container ); + QLabel *l = new QLabel( tr( "Information level:" ), container ); QWhatsThis::add( l, tr( "Select information level for Ipkg." ) ); - layout->addWidget( l ); + layout->addMultiCellWidget( l, 4, 4, 0, 1 ); m_optVerboseIpkg = new QComboBox( container ); QWhatsThis::add( m_optVerboseIpkg, tr( "Select information level for Ipkg." ) ); m_optVerboseIpkg->insertItem( tr( "Errors only" ) ); m_optVerboseIpkg->insertItem( tr( "Normal messages" ) ); m_optVerboseIpkg->insertItem( tr( "Informative messages" ) ); m_optVerboseIpkg->insertItem( tr( "Troubleshooting output" ) ); - layout->addWidget( m_optVerboseIpkg ); + layout->addMultiCellWidget( m_optVerboseIpkg, 5, 5, 0, 1 ); + + l = new QLabel( tr( "Package source lists directory:" ), container ); + QWhatsThis::add( l, tr( "Enter the directory where package source feed information is stored." ) ); + layout->addMultiCellWidget( l, 6, 6, 0, 1 ); + + m_optSourceLists = new QLineEdit( container ); + QWhatsThis::add( m_optSourceLists, tr( "Enter the directory where package source feed information is stored." ) ); + layout->addWidget( m_optSourceLists, 7, 0 ); + QPushButton *btn = new QPushButton( Resource::loadPixmap( "folder" ), QString::null, container ); + btn->setMaximumWidth( btn->height() ); + QWhatsThis::add( btn, tr( "Tap here to select the directory where package source feed information is stored." ) ); + connect( btn, SIGNAL(clicked()), this, SLOT(slotOptSelectSourceListsPath()) ); + layout->addWidget( btn, 7, 1 ); layout->addItem( new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding ) ); } @@ -344,37 +364,44 @@ void OIpkgConfigDlg::initData() // Add configuration item to the appropriate dialog controls if ( config ) { - if ( config->type() == OConfItem::Source ) + switch ( config->type() ) { - m_serverList->insertItem( config->name() ); - } - else if ( config->type() == OConfItem::Destination ) - { - m_destList->insertItem( config->name() ); - } - else if ( config->type() == OConfItem::Option ) - { - if ( config->name() == "http_proxy" ) - { - m_proxyHttpServer->setText( config->value() ); - m_proxyHttpActive->setChecked( config->active() ); - } - else if ( config->name() == "ftp_proxy" ) - { - m_proxyFtpServer->setText( config->value() ); - m_proxyFtpActive->setChecked( config->active() ); - } - else if ( config->name() == "proxy_username" ) - { - m_proxyUsername->setText( config->value() ); - } - else if ( config->name() == "proxy_password" ) - { - m_proxyPassword->setText( config->value() ); - } - } + case OConfItem::Source : m_serverList->insertItem( config->name() ); break; + case OConfItem::Destination : m_destList->insertItem( config->name() ); break; + case OConfItem::Option : + { + if ( config->name() == "http_proxy" ) + { + m_proxyHttpServer->setText( config->value() ); + m_proxyHttpActive->setChecked( config->active() ); + } + else if ( config->name() == "ftp_proxy" ) + { + m_proxyFtpServer->setText( config->value() ); + m_proxyFtpActive->setChecked( config->active() ); + } + else if ( config->name() == "proxy_username" ) + { + m_proxyUsername->setText( config->value() ); + } + else if ( config->name() == "proxy_password" ) + { + m_proxyPassword->setText( config->value() ); + } + } + break; + case OConfItem::Other : + { + if ( config->name() == "lists_dir" ) + m_optSourceLists->setText( config->value() ); + else // TODO - use proper libipkg define + m_optSourceLists->setText( "/usr/lib/ipkg/lists" ); + } + break; + default : break; + }; } } } } @@ -395,18 +422,18 @@ void OIpkgConfigDlg::initData() void OIpkgConfigDlg::slotServerSelected( int index ) { m_serverCurrent = index; - + // Enable Edit and Delete buttons m_serverEditBtn->setEnabled( true ); m_serverDeleteBtn->setEnabled( true ); } void OIpkgConfigDlg::slotServerNew() { OConfItem *server = new OConfItem( OConfItem::Source ); - + OIpkgServerDlg dlg( server, this ); if ( QPEApplication::execDialog( &dlg ) == QDialog::Accepted ) { // Add to configuration option list @@ -455,18 +482,18 @@ void OIpkgConfigDlg::slotServerDelete() void OIpkgConfigDlg::slotDestSelected( int index ) { m_destCurrent = index; - + // Enable Edit and Delete buttons m_destEditBtn->setEnabled( true ); m_destDeleteBtn->setEnabled( true ); } void OIpkgConfigDlg::slotDestNew() { OConfItem *dest = new OConfItem( OConfItem::Destination ); - + OIpkgDestDlg dlg( dest, this ); if ( QPEApplication::execDialog( &dlg ) == QDialog::Accepted ) { // Add to configuration option list @@ -512,32 +539,41 @@ void OIpkgConfigDlg::slotDestDelete() m_destList->removeItem( m_destCurrent ); } } +void OIpkgConfigDlg::slotOptSelectSourceListsPath() +{ + QString path = Opie::Ui::OFileDialog::getDirectory( 0, m_optSourceLists->text() ); + if ( path.at( path.length() - 1 ) == '/' ) + path.truncate( path.length() - 1 ); + if ( !path.isNull() ) + m_optSourceLists->setText( path ); +} + OIpkgServerDlg::OIpkgServerDlg( OConfItem *server, QWidget *parent ) : QDialog( parent, QString::null, true, WStyle_ContextHelp ) , m_server( server ) { setCaption( tr( "Edit Server" ) ); - // Initialize UI + // Initialize UI QVBoxLayout *layout = new QVBoxLayout( this, 2, 4 ); m_active = new QCheckBox( tr( "Active" ), this ); QWhatsThis::add( m_active, tr( "Tap here to indicate whether this entry is active or not." ) ); layout->addWidget( m_active ); layout->addStretch(); - + QLabel *label = new QLabel( tr( "Name:" ), this ); QWhatsThis::add( label, tr( "Enter the name of this entry here." ) ); layout->addWidget( label ); m_name = new QLineEdit( this ); QWhatsThis::add( m_name, tr( "Enter the name of this entry here." ) ); layout->addWidget( m_name ); layout->addStretch(); - + label = new QLabel( tr( "Address:" ), this ); QWhatsThis::add( label, tr( "Enter the URL address of this entry here." ) ); layout->addWidget( label ); m_location = new QLineEdit( this ); @@ -548,9 +584,9 @@ OIpkgServerDlg::OIpkgServerDlg( OConfItem *server, QWidget *parent ) m_compressed = new QCheckBox( tr( "Compressed server feed" ), this ); QWhatsThis::add( m_compressed, tr( "Tap here to indicate whether the server support compressed archives or not." ) ); layout->addWidget( m_compressed ); - + // Populate initial information if ( m_server ) { m_name->setText( m_server->name() ); @@ -579,42 +615,42 @@ OIpkgDestDlg::OIpkgDestDlg( OConfItem *dest, QWidget *parent ) , m_dest( dest ) { setCaption( tr( "Edit Destination" ) ); - // Initialize UI + // Initialize UI QVBoxLayout *layout = new QVBoxLayout( this, 2, 4 ); m_active = new QCheckBox( tr( "Active" ), this ); QWhatsThis::add( m_active, tr( "Tap here to indicate whether this entry is active or not." ) ); layout->addWidget( m_active ); layout->addStretch(); - + QLabel *label = new QLabel( tr( "Name:" ), this ); QWhatsThis::add( label, tr( "Enter the name of this entry here." ) ); layout->addWidget( label ); m_name = new QLineEdit( this ); QWhatsThis::add( m_name, tr( "Enter the name of this entry here." ) ); layout->addWidget( m_name ); layout->addStretch(); - + label = new QLabel( tr( "Location:" ), this ); QWhatsThis::add( label, tr( "Enter the absolute directory path of this entry here." ) ); layout->addWidget( label ); QHBoxLayout *layout2 = new QHBoxLayout( this, 2, 4 ); layout->addLayout( layout2 ); - + m_location = new QLineEdit( this ); QWhatsThis::add( m_location, tr( "Enter the absolute directory path of this entry here." ) ); layout2->addWidget( m_location ); QPushButton *btn = new QPushButton( Resource::loadPixmap( "folder" ), QString::null, this ); btn->setMaximumWidth( btn->height() ); QWhatsThis::add( btn, tr( "Tap here to select the desired location." ) ); connect( btn, SIGNAL(clicked()), this, SLOT(slotSelectPath()) ); layout2->addWidget( btn ); - + // Populate initial information if ( m_dest ) { m_name->setText( m_dest->name() ); diff --git a/noncore/settings/packagemanager/oipkgconfigdlg.h b/noncore/settings/packagemanager/oipkgconfigdlg.h index 0fb2e16..9e23b62 100644 --- a/noncore/settings/packagemanager/oipkgconfigdlg.h +++ b/noncore/settings/packagemanager/oipkgconfigdlg.h @@ -98,8 +98,9 @@ private: QCheckBox *m_optForceReinstall; // Force reinstall ipkg option checkbox QCheckBox *m_optForceRemove; // Force remove ipkg option checkbox QCheckBox *m_optForceOverwrite; // Force overwrite ipkg option checkbox QComboBox *m_optVerboseIpkg; // Ipkg verbosity option selection + QLineEdit *m_optSourceLists; // Ipkg source lists destination directory void initServerWidget(); void initDestinationWidget(); void initProxyWidget(); @@ -116,8 +117,10 @@ private slots: void slotDestSelected( int index ); void slotDestNew(); void slotDestEdit(); void slotDestDelete(); + + void slotOptSelectSourceListsPath(); }; class OIpkgServerDlg : public QDialog { @@ -127,9 +130,9 @@ public: OIpkgServerDlg( OConfItem *server = 0l, QWidget *parent = 0l ); protected slots: void accept(); - + private: OConfItem *m_server; // UI controls @@ -147,9 +150,9 @@ public: OIpkgDestDlg( OConfItem *dest = 0l, QWidget *parent = 0l ); protected slots: void accept(); - + private: OConfItem *m_dest; // UI controls diff --git a/noncore/settings/packagemanager/opie-packagemanager.control b/noncore/settings/packagemanager/opie-packagemanager.control index 5da7a84..94348dd 100644 --- a/noncore/settings/packagemanager/opie-packagemanager.control +++ b/noncore/settings/packagemanager/opie-packagemanager.control @@ -6,5 +6,5 @@ Depends: task-opie-minimal, libopiecore2, libopieui2, libipkg (>=0.99.143) Replaces: packagemanager Architecture: arm Maintainer: Dan Williams (drw@handhelds.org) Description: Opie package management client -Version: 0.6.1$EXTRAVERSION +Version: 0.6.2$EXTRAVERSION |