summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/packagemanager/oconfitem.cpp47
-rw-r--r--noncore/settings/packagemanager/oconfitem.h14
-rw-r--r--noncore/settings/packagemanager/oipkg.cpp17
-rw-r--r--noncore/settings/packagemanager/oipkgconfigdlg.cpp15
4 files changed, 57 insertions, 36 deletions
diff --git a/noncore/settings/packagemanager/oconfitem.cpp b/noncore/settings/packagemanager/oconfitem.cpp
index a90730c..ffa936e 100644
--- a/noncore/settings/packagemanager/oconfitem.cpp
+++ b/noncore/settings/packagemanager/oconfitem.cpp
@@ -1,41 +1,42 @@
1/* 1/*
2                This file is part of the Opie Project 2 This file is part of the Opie Project
3 3
4              Copyright (c) 2003 Dan Williams <drw@handhelds.org> 4 Copyright (c) 2003 Dan Williams <drw@handhelds.org>
5 =. 5 =.
6 .=l. 6 .=l.
7           .>+-= 7 .>+-=
8 _;:,     .>    :=|. This program is free software; you can 8_;:, .> :=|. This program is free software; you can
9.> <`_,   >  .   <= redistribute it and/or modify it under 9.> <`_, > . <= redistribute it and/or modify it under
10:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 10:`=1 )Y*s>-.-- : the terms of the GNU Library General Public
11.="- .-=="i,     .._ License as published by the Free Software 11.="- .-=="i, .._ License as published by the Free Software
12 - .   .-<_>     .<> Foundation; either version 2 of the License, 12- . .-<_> .<> Foundation; either version 2 of the License,
13     ._= =}       : or (at your option) any later version. 13 ._= =} : or (at your option) any later version.
14    .%`+i>       _;_. 14 .%`+i> _;_.
15    .i_,=:_.      -<s. This program is distributed in the hope that 15 .i_,=:_. -<s. This program is distributed in the hope that
16     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 16 + . -:. = it will be useful, but WITHOUT ANY WARRANTY;
17    : ..    .:,     . . . without even the implied warranty of 17 : .. .:, . . . without even the implied warranty of
18    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 18 =_ + =;=|` MERCHANTABILITY or FITNESS FOR A
19  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 19 _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU
20..}^=.=       =       ; Library General Public License for more 20..}^=.= = ; Library General Public License for more
21++=   -.     .`     .: details. 21++= -. .` .: details.
22 :     =  ...= . :.=- 22: = ...= . :.=-
23 -.   .:....=;==+<; You should have received a copy of the GNU 23-. .:....=;==+<; You should have received a copy of the GNU
24  -_. . .   )=.  = Library General Public License along with 24 -_. . . )=. = Library General Public License along with
25    --        :-=` this library; see the file COPYING.LIB. 25 -- :-=` this library; see the file COPYING.LIB.
26 If not, write to the Free Software Foundation, 26 If not, write to the Free Software Foundation,
27 Inc., 59 Temple Place - Suite 330, 27 Inc., 59 Temple Place - Suite 330,
28 Boston, MA 02111-1307, USA. 28 Boston, MA 02111-1307, USA.
29 29
30*/ 30*/
31 31
32#include "oconfitem.h" 32#include "oconfitem.h"
33 33
34OConfItem::OConfItem( Type type, const QString &name, 34OConfItem::OConfItem( Type type, const QString &name, const QString &value,
35 const QString &value, bool active ) 35 const QString &features, bool active )
36 : m_type( type ) 36 : m_type( type )
37 , m_name( name ) 37 , m_name( name )
38 , m_value( value ) 38 , m_value( value )
39 , m_features( features )
39 , m_active( active ) 40 , m_active( active )
40{ 41{
41} 42}
diff --git a/noncore/settings/packagemanager/oconfitem.h b/noncore/settings/packagemanager/oconfitem.h
index 7c158c9..9972c00 100644
--- a/noncore/settings/packagemanager/oconfitem.h
+++ b/noncore/settings/packagemanager/oconfitem.h
@@ -1,92 +1,96 @@
1/* 1/*
2 This file is part of the Opie Project 2 This file is part of the Opie Project
3 3
4 Copyright (c) 2003 Dan Williams <drw@handhelds.org> 4 Copyright (c) 2003 Dan Williams <drw@handhelds.org>
5 =. 5 =.
6 .=l. 6 .=l.
7 .>+-= 7 .>+-=
8_;:, .> :=|. This program is free software; you can 8_;:, .> :=|. This program is free software; you can
9.> <`_, > . <= redistribute it and/or modify it under 9.> <`_, > . <= redistribute it and/or modify it under
10:`=1 )Y*s>-.-- : the terms of the GNU Library General Public 10:`=1 )Y*s>-.-- : the terms of the GNU Library General Public
11.="- .-=="i, .._ License as published by the Free Software 11.="- .-=="i, .._ License as published by the Free Software
12- . .-<_> .<> Foundation; either version 2 of the License, 12- . .-<_> .<> Foundation; either version 2 of the License,
13 ._= =} : or (at your option) any later version. 13 ._= =} : or (at your option) any later version.
14 .%`+i> _;_. 14 .%`+i> _;_.
15 .i_,=:_. -<s. This program is distributed in the hope that 15 .i_,=:_. -<s. This program is distributed in the hope that
16 + . -:. = it will be useful, but WITHOUT ANY WARRANTY; 16 + . -:. = it will be useful, but WITHOUT ANY WARRANTY;
17 : .. .:, . . . without even the implied warranty of 17 : .. .:, . . . without even the implied warranty of
18 =_ + =;=|` MERCHANTABILITY or FITNESS FOR A 18 =_ + =;=|` MERCHANTABILITY or FITNESS FOR A
19 _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU 19 _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU
20..}^=.= = ; Library General Public License for more 20..}^=.= = ; Library General Public License for more
21++= -. .` .: details. 21++= -. .` .: details.
22: = ...= . :.=- 22: = ...= . :.=-
23-. .:....=;==+<; You should have received a copy of the GNU 23-. .:....=;==+<; You should have received a copy of the GNU
24 -_. . . )=. = Library General Public License along with 24 -_. . . )=. = Library General Public License along with
25 -- :-=` this library; see the file COPYING.LIB. 25 -- :-=` this library; see the file COPYING.LIB.
26 If not, write to the Free Software Foundation, 26 If not, write to the Free Software Foundation,
27 Inc., 59 Temple Place - Suite 330, 27 Inc., 59 Temple Place - Suite 330,
28 Boston, MA 02111-1307, USA. 28 Boston, MA 02111-1307, USA.
29 29
30*/ 30*/
31 31
32#ifndef OCONFITEM_H 32#ifndef OCONFITEM_H
33#define OCONFITEM_H 33#define OCONFITEM_H
34 34
35#include <qlist.h> 35#include <qlist.h>
36#include <qstring.h> 36#include <qstring.h>
37 37
38class OConfItem 38class OConfItem
39{ 39{
40public: 40public:
41 enum Type { Source, Destination, Option, Arch, NotDefined }; 41 enum Type { Source, Destination, Option, Arch, NotDefined };
42 42
43 OConfItem( Type type = NotDefined, const QString &name = QString::null, 43 OConfItem( Type type = NotDefined, const QString &name = QString::null,
44 const QString &value = QString::null, bool active = true ); 44 const QString &value = QString::null, const QString &features = QString::null,
45 bool active = true );
45 46
46 Type type() { return m_type; } 47 Type type() { return m_type; }
47 const QString &name() { return m_name; } 48 const QString &name() { return m_name; }
48 const QString &value() { return m_value; } 49 const QString &value() { return m_value; }
50 const QString &features() { return m_features; }
49 bool active() { return m_active; } 51 bool active() { return m_active; }
50 52
51 void setType( Type type ) { m_type = type; } 53 void setType( Type type ) { m_type = type; }
52 void setName( const QString &name ) { m_name = name; } 54 void setName( const QString &name ) { m_name = name; }
53 void setValue( const QString &value ) { m_value = value; } 55 void setValue( const QString &value ) { m_value = value; }
54 void setActive( bool active ) { m_active = active; } 56 void setFeatures( const QString &features ) { m_features = features; }
57 void setActive( bool active ) { m_active = active; }
55 58
56private: 59private:
57 Type m_type; // Type of configuration item 60 Type m_type; // Type of configuration item
58 QString m_name; // Name of item 61 QString m_name; // Name of item
59 QString m_value; // Value of item 62 QString m_value; // Value of item
63 QString m_features; // Comma-deliminated list of features this item supports
60 bool m_active; // Indicates whether item is currently active 64 bool m_active; // Indicates whether item is currently active
61}; 65};
62 66
63class OConfItemList : public QList<OConfItem> 67class OConfItemList : public QList<OConfItem>
64{ 68{
65private: 69private:
66 70
67 int compareItems( QCollection::Item item1, QCollection::Item item2 ) 71 int compareItems( QCollection::Item item1, QCollection::Item item2 )
68 { 72 {
69 // Sort by OConfItem location then by type 73 // Sort by OConfItem location then by type
70 OConfItem::Type type1 = reinterpret_cast<OConfItem*>(item1)->type(); 74 OConfItem::Type type1 = reinterpret_cast<OConfItem*>(item1)->type();
71 OConfItem::Type type2 = reinterpret_cast<OConfItem*>(item2)->type(); 75 OConfItem::Type type2 = reinterpret_cast<OConfItem*>(item2)->type();
72 if ( type1 < type2 ) 76 if ( type1 < type2 )
73 return -1; 77 return -1;
74 else if ( type1 == type2 ) 78 else if ( type1 == type2 )
75 { 79 {
76 QString name1 = reinterpret_cast<OConfItem*>(item1)->name(); 80 QString name1 = reinterpret_cast<OConfItem*>(item1)->name();
77 QString name2 = reinterpret_cast<OConfItem*>(item2)->name(); 81 QString name2 = reinterpret_cast<OConfItem*>(item2)->name();
78 if ( name1 < name2 ) 82 if ( name1 < name2 )
79 return -1; 83 return -1;
80 else if ( name1 == name2 ) 84 else if ( name1 == name2 )
81 return 0; 85 return 0;
82 else /*if ( name1 > name2 )*/ 86 else /*if ( name1 > name2 )*/
83 return 1; 87 return 1;
84 } 88 }
85 else /*if ( type1 > type2 )*/ 89 else /*if ( type1 > type2 )*/
86 return 1; 90 return 1;
87 } 91 }
88}; 92};
89 93
90typedef QListIterator<OConfItem> OConfItemListIterator; 94typedef QListIterator<OConfItem> OConfItemListIterator;
91 95
92#endif 96#endif
diff --git a/noncore/settings/packagemanager/oipkg.cpp b/noncore/settings/packagemanager/oipkg.cpp
index b0cc94d..a66bd51 100644
--- a/noncore/settings/packagemanager/oipkg.cpp
+++ b/noncore/settings/packagemanager/oipkg.cpp
@@ -108,97 +108,104 @@ OConfItemList *OIpkg::configItems()
108} 108}
109 109
110OConfItemList *OIpkg::servers() 110OConfItemList *OIpkg::servers()
111{ 111{
112 // Retrieve only servers 112 // Retrieve only servers
113 return filterConfItems( OConfItem::Source ); 113 return filterConfItems( OConfItem::Source );
114} 114}
115 115
116OConfItemList *OIpkg::destinations() 116OConfItemList *OIpkg::destinations()
117{ 117{
118 // Retrieve only destinations 118 // Retrieve only destinations
119 return filterConfItems( OConfItem::Destination ); 119 return filterConfItems( OConfItem::Destination );
120} 120}
121 121
122OConfItemList *OIpkg::options() 122OConfItemList *OIpkg::options()
123{ 123{
124 // Retrieve only destinations 124 // Retrieve only destinations
125 return filterConfItems( OConfItem::Option ); 125 return filterConfItems( OConfItem::Option );
126} 126}
127 127
128void OIpkg::setConfigItems( OConfItemList *configList ) 128void OIpkg::setConfigItems( OConfItemList *configList )
129{ 129{
130 if ( m_confInfo ) 130 if ( m_confInfo )
131 delete m_confInfo; 131 delete m_confInfo;
132 132
133 m_confInfo = configList; 133 m_confInfo = configList;
134 134
135 // Write out new /etc/ipkg.conf 135 // Write out new /etc/ipkg.conf
136 QFile confFile( IPKG_CONF ); 136 QFile confFile( IPKG_CONF );
137 if ( confFile.open( IO_WriteOnly ) ) 137 if ( confFile.open( IO_WriteOnly ) )
138 { 138 {
139 QTextStream confStream( &confFile ); 139 QTextStream confStream( &confFile );
140 confStream << "# Generated by Opie Package Manager\n\n"; 140 confStream << "# Generated by Opie Package Manager\n\n";
141 141
142 OConfItemListIterator it( *m_confInfo ); 142 OConfItemListIterator it( *m_confInfo );
143 for ( ; it.current(); ++it ) 143 for ( ; it.current(); ++it )
144 { 144 {
145 OConfItem *item = it.current(); 145 OConfItem *item = it.current();
146 146
147 // Only write out valid conf items 147 // Only write out valid conf items
148 if ( item->type() != OConfItem::NotDefined ) 148 if ( item->type() != OConfItem::NotDefined )
149 { 149 {
150 QString confLine; 150 QString confLine;
151 if ( !item->active() ) 151 if ( !item->active() )
152 confLine = "#"; 152 confLine = "#";
153 153
154 switch ( item->type() ) 154 switch ( item->type() )
155 { 155 {
156 case OConfItem::Source : confLine.append( "src " ); break; 156 case OConfItem::Source :
157 {
158 if ( item->features().contains( "Compressed" ) )
159 confLine.append( "src/gz " );
160 else
161 confLine.append( "src " );
162 }
163 break;
157 case OConfItem::Destination : confLine.append( "dest " ); break; 164 case OConfItem::Destination : confLine.append( "dest " ); break;
158 case OConfItem::Option : confLine.append( "option " ); break; 165 case OConfItem::Option : confLine.append( "option " ); break;
159 case OConfItem::Arch : confLine.append( "arch " ); break; 166 case OConfItem::Arch : confLine.append( "arch " ); break;
160 default : break; 167 default : break;
161 }; 168 };
162 169
163 confStream << confLine << " " << item->name() << " " << item->value() << "\n"; 170 confStream << confLine << " " << item->name() << " " << item->value() << "\n";
164 } 171 }
165 } 172 }
166 173
167 confFile.close(); 174 confFile.close();
168 } 175 }
169 else 176 else
170 { 177 {
171 // Problem writing to /etc/ipkg.conf, exit before removing other conf files 178 // Problem writing to /etc/ipkg.conf, exit before removing other conf files
172 return; 179 return;
173 } 180 }
174 181
175 // Delete /etc/ipkg/*.conf files (/etc/ipkg.conf should now have all settings 182 // Delete /etc/ipkg/*.conf files (/etc/ipkg.conf should now have all settings
176 QStringList confFiles; 183 QStringList confFiles;
177 QDir confDir( IPKG_CONF_DIR ); 184 QDir confDir( IPKG_CONF_DIR );
178 if ( confDir.exists() ) 185 if ( confDir.exists() )
179 { 186 {
180 confDir.setNameFilter( "*.conf" ); 187 confDir.setNameFilter( "*.conf" );
181 confDir.setFilter( QDir::Files ); 188 confDir.setFilter( QDir::Files );
182 confFiles = confDir.entryList( "*.conf", QDir::Files ); 189 confFiles = confDir.entryList( "*.conf", QDir::Files );
183 190
184 QStringList::Iterator lastFile = confFiles.end(); 191 QStringList::Iterator lastFile = confFiles.end();
185 for ( QStringList::Iterator it = confFiles.begin(); it != lastFile; ++it ) 192 for ( QStringList::Iterator it = confFiles.begin(); it != lastFile; ++it )
186 { 193 {
187 // Create absolute file path if necessary 194 // Create absolute file path if necessary
188 QString absFile = (*it); 195 QString absFile = (*it);
189 if ( !absFile.startsWith( "/" ) ) 196 if ( !absFile.startsWith( "/" ) )
190 absFile.prepend( QString( IPKG_CONF_DIR ) + "/" ); 197 absFile.prepend( QString( IPKG_CONF_DIR ) + "/" );
191 198
192 // Delete file 199 // Delete file
193 QFile::remove( absFile ); 200 QFile::remove( absFile );
194 } 201 }
195 } 202 }
196 203
197 // Reinitialize libipkg to pick up new configuration 204 // Reinitialize libipkg to pick up new configuration
198 ipkg_deinit( &m_ipkgArgs ); 205 ipkg_deinit( &m_ipkgArgs );
199 ipkg_init( &fsignalIpkgMessage, &fIpkgResponse, &m_ipkgArgs ); 206 ipkg_init( &fsignalIpkgMessage, &fIpkgResponse, &m_ipkgArgs );
200 m_ipkgArgs.noaction = false; 207 m_ipkgArgs.noaction = false;
201 m_ipkgArgs.force_defaults = true; 208 m_ipkgArgs.force_defaults = true;
202} 209}
203 210
204void OIpkg::saveSettings() 211void OIpkg::saveSettings()
@@ -463,116 +470,122 @@ void OIpkg::loadConfiguration()
463 if ( m_confInfo ) 470 if ( m_confInfo )
464 delete m_confInfo; 471 delete m_confInfo;
465 472
466 // Load configuration item list 473 // Load configuration item list
467 m_confInfo = new OConfItemList(); 474 m_confInfo = new OConfItemList();
468 475
469 QStringList confFiles; 476 QStringList confFiles;
470 QDir confDir( IPKG_CONF_DIR ); 477 QDir confDir( IPKG_CONF_DIR );
471 if ( confDir.exists() ) 478 if ( confDir.exists() )
472 { 479 {
473 confDir.setNameFilter( "*.conf" ); 480 confDir.setNameFilter( "*.conf" );
474 confDir.setFilter( QDir::Files ); 481 confDir.setFilter( QDir::Files );
475 confFiles = confDir.entryList( "*.conf", QDir::Files ); 482 confFiles = confDir.entryList( "*.conf", QDir::Files );
476 } 483 }
477 confFiles << IPKG_CONF; 484 confFiles << IPKG_CONF;
478 485
479 QStringList::Iterator lastFile = confFiles.end(); 486 QStringList::Iterator lastFile = confFiles.end();
480 for ( QStringList::Iterator it = confFiles.begin(); it != lastFile; ++it ) 487 for ( QStringList::Iterator it = confFiles.begin(); it != lastFile; ++it )
481 { 488 {
482 // Create absolute file path if necessary 489 // Create absolute file path if necessary
483 QString absFile = (*it); 490 QString absFile = (*it);
484 if ( !absFile.startsWith( "/" ) ) 491 if ( !absFile.startsWith( "/" ) )
485 absFile.prepend( QString( IPKG_CONF_DIR ) + "/" ); 492 absFile.prepend( QString( IPKG_CONF_DIR ) + "/" );
486 493
487 // Read in file 494 // Read in file
488 QFile f( absFile ); 495 QFile f( absFile );
489 if ( f.open( IO_ReadOnly ) ) 496 if ( f.open( IO_ReadOnly ) )
490 { 497 {
491 QTextStream s( &f ); 498 QTextStream s( &f );
492 while ( !s.eof() ) 499 while ( !s.eof() )
493 { 500 {
494 501
495 QString line = s.readLine().simplifyWhiteSpace(); 502 QString line = s.readLine().simplifyWhiteSpace();
496 503
497 // Parse line and save info to the conf options list 504 // Parse line and save info to the conf options list
498 if ( !line.isEmpty() ) 505 if ( !line.isEmpty() )
499 { 506 {
500 if ( !line.startsWith( "#" ) || 507 if ( !line.startsWith( "#" ) ||
501 line.startsWith( "#src" ) || 508 line.startsWith( "#src" ) ||
502 line.startsWith( "#dest" ) || 509 line.startsWith( "#dest" ) ||
503 line.startsWith( "#arch" ) || 510 line.startsWith( "#arch" ) ||
504 line.startsWith( "#option" ) ) 511 line.startsWith( "#option" ) )
505 { 512 {
506 int pos = line.find( ' ', 1 ); 513 int pos = line.find( ' ', 1 );
507 514
508 // Type 515 // Type
509 QString typeStr = line.left( pos ); 516 QString typeStr = line.left( pos );
510 OConfItem::Type type; 517 OConfItem::Type type;
518 QString features;
511 if ( typeStr == "src" || typeStr == "#src" ) 519 if ( typeStr == "src" || typeStr == "#src" )
512 type = OConfItem::Source; 520 type = OConfItem::Source;
521 else if ( typeStr == "src/gz" || typeStr == "#src/gz" )
522 {
523 type = OConfItem::Source;
524 features = "Compressed";
525 }
513 else if ( typeStr == "dest" || typeStr == "#dest" ) 526 else if ( typeStr == "dest" || typeStr == "#dest" )
514 type = OConfItem::Destination; 527 type = OConfItem::Destination;
515 else if ( typeStr == "option" || typeStr == "#option" ) 528 else if ( typeStr == "option" || typeStr == "#option" )
516 type = OConfItem::Option; 529 type = OConfItem::Option;
517 else if ( typeStr == "arch" || typeStr == "#arch" ) 530 else if ( typeStr == "arch" || typeStr == "#arch" )
518 type = OConfItem::Arch; 531 type = OConfItem::Arch;
519 else 532 else
520 type = OConfItem::NotDefined; 533 type = OConfItem::NotDefined;
521 ++pos; 534 ++pos;
522 int endpos = line.find( ' ', pos ); 535 int endpos = line.find( ' ', pos );
523 536
524 // Name 537 // Name
525 QString name = line.mid( pos, endpos - pos ); 538 QString name = line.mid( pos, endpos - pos );
526 539
527 // Value 540 // Value
528 QString value = ""; 541 QString value = "";
529 if ( endpos > -1 ) 542 if ( endpos > -1 )
530 value = line.right( line.length() - endpos - 1 ); 543 value = line.right( line.length() - endpos - 1 );
531 544
532 // Active 545 // Active
533 bool active = !line.startsWith( "#" ); 546 bool active = !line.startsWith( "#" );
534 547
535 // Add to list 548 // Add to list
536 m_confInfo->append( new OConfItem( type, name, value, active ) ); 549 m_confInfo->append( new OConfItem( type, name, value, features, active ) );
537 } 550 }
538 } 551 }
539 } 552 }
540 553
541 f.close(); 554 f.close();
542 } 555 }
543 } 556 }
544 557
545 // Load Ipkg execution options from application configuration file 558 // Load Ipkg execution options from application configuration file
546 if ( m_config ) 559 if ( m_config )
547 { 560 {
548 m_config->setGroup( "Ipkg" ); 561 m_config->setGroup( "Ipkg" );
549 m_ipkgExecOptions = m_config->readNumEntry( "ExecOptions", m_ipkgExecOptions ); 562 m_ipkgExecOptions = m_config->readNumEntry( "ExecOptions", m_ipkgExecOptions );
550 m_ipkgExecVerbosity = m_config->readNumEntry( "Verbosity", m_ipkgExecVerbosity ); 563 m_ipkgExecVerbosity = m_config->readNumEntry( "Verbosity", m_ipkgExecVerbosity );
551 } 564 }
552} 565}
553 566
554OConfItemList *OIpkg::filterConfItems( OConfItem::Type typefilter ) 567OConfItemList *OIpkg::filterConfItems( OConfItem::Type typefilter )
555{ 568{
556 // Load Ipkg configuration info if not already cached 569 // Load Ipkg configuration info if not already cached
557 if ( !m_confInfo ) 570 if ( !m_confInfo )
558 loadConfiguration(); 571 loadConfiguration();
559 572
560 // Build new server list (caller is responsible for deleting) 573 // Build new server list (caller is responsible for deleting)
561 OConfItemList *sl = new OConfItemList; 574 OConfItemList *sl = new OConfItemList;
562 575
563 // If typefilter is empty, retrieve all items 576 // If typefilter is empty, retrieve all items
564 bool retrieveAll = ( typefilter == OConfItem::NotDefined ); 577 bool retrieveAll = ( typefilter == OConfItem::NotDefined );
565 578
566 // Parse configuration info for servers 579 // Parse configuration info for servers
567 OConfItemListIterator it( *m_confInfo ); 580 OConfItemListIterator it( *m_confInfo );
568 for ( ; it.current(); ++it ) 581 for ( ; it.current(); ++it )
569 { 582 {
570 OConfItem *item = it.current(); 583 OConfItem *item = it.current();
571 if ( retrieveAll || item->type() == typefilter ) 584 if ( retrieveAll || item->type() == typefilter )
572 { 585 {
573 sl->append( item ); 586 sl->append( item );
574 } 587 }
575 } 588 }
576 589
577 return sl; 590 return sl;
578} 591}
diff --git a/noncore/settings/packagemanager/oipkgconfigdlg.cpp b/noncore/settings/packagemanager/oipkgconfigdlg.cpp
index 886430f..d9a67f3 100644
--- a/noncore/settings/packagemanager/oipkgconfigdlg.cpp
+++ b/noncore/settings/packagemanager/oipkgconfigdlg.cpp
@@ -56,107 +56,109 @@ OIpkgConfigDlg::OIpkgConfigDlg( OIpkg *ipkg, bool installOptions, QWidget *paren
56 , m_destCurrent( -1 ) 56 , m_destCurrent( -1 )
57 , m_layout( this, 2, 4 ) 57 , m_layout( this, 2, 4 )
58 , m_tabWidget( this ) 58 , m_tabWidget( this )
59{ 59{
60 setCaption( tr( "Configuration" ) ); 60 setCaption( tr( "Configuration" ) );
61 61
62 // Initialize configuration widgets 62 // Initialize configuration widgets
63 if ( !installOptions ) 63 if ( !installOptions )
64 { 64 {
65 initServerWidget(); 65 initServerWidget();
66 initDestinationWidget(); 66 initDestinationWidget();
67 initProxyWidget(); 67 initProxyWidget();
68 } 68 }
69 initOptionsWidget(); 69 initOptionsWidget();
70 70
71 // Load configuration information 71 // Load configuration information
72 initData(); 72 initData();
73 73
74 // Setup tabs for all info 74 // Setup tabs for all info
75 m_layout.addWidget( &m_tabWidget ); 75 m_layout.addWidget( &m_tabWidget );
76 if ( !m_installOptions ) 76 if ( !m_installOptions )
77 { 77 {
78 m_tabWidget.addTab( m_serverWidget, "packagemanager/servertab", tr( "Servers" ) ); 78 m_tabWidget.addTab( m_serverWidget, "packagemanager/servertab", tr( "Servers" ) );
79 m_tabWidget.addTab( m_destWidget, "packagemanager/desttab", tr( "Destinations" ) ); 79 m_tabWidget.addTab( m_destWidget, "packagemanager/desttab", tr( "Destinations" ) );
80 m_tabWidget.addTab( m_proxyWidget, "packagemanager/proxytab", tr( "Proxies" ) ); 80 m_tabWidget.addTab( m_proxyWidget, "packagemanager/proxytab", tr( "Proxies" ) );
81 m_tabWidget.addTab( m_optionsWidget, "exec", tr( "Options" ) ); 81 m_tabWidget.addTab( m_optionsWidget, "exec", tr( "Options" ) );
82 m_tabWidget.setCurrentTab( tr( "Servers" ) ); 82 m_tabWidget.setCurrentTab( tr( "Servers" ) );
83 } 83 }
84 else 84 else
85 { 85 {
86 m_tabWidget.addTab( m_optionsWidget, "exec", tr( "Options" ) ); 86 m_tabWidget.addTab( m_optionsWidget, "exec", tr( "Options" ) );
87 } 87 }
88} 88}
89 89
90void OIpkgConfigDlg::accept() 90void OIpkgConfigDlg::accept()
91{ 91{
92 // Save server, destination and proxy configuration 92 // Save server, destination and proxy configuration
93 if ( !m_installOptions ) 93 if ( !m_installOptions )
94 { 94 {
95 // Update proxy information before saving settings 95 // Update proxy information before saving settings
96 OConfItem *confItem = findConfItem( OConfItem::Option, "http_proxy" ); 96 OConfItem *confItem = findConfItem( OConfItem::Option, "http_proxy" );
97 if ( confItem ) 97 if ( confItem )
98 { 98 {
99 confItem->setValue( m_proxyHttpServer->text() ); 99 confItem->setValue( m_proxyHttpServer->text() );
100 confItem->setActive( m_proxyHttpActive->isChecked() ); 100 confItem->setActive( m_proxyHttpActive->isChecked() );
101 } 101 }
102 else 102 else
103 m_configs->append( new OConfItem( OConfItem::Option, "http_proxy", 103 m_configs->append( new OConfItem( OConfItem::Option, "http_proxy",
104 m_proxyHttpServer->text(), m_proxyHttpActive->isChecked() ) ); 104 m_proxyHttpServer->text(), QString::null,
105 m_proxyHttpActive->isChecked() ) );
105 106
106 confItem = findConfItem( OConfItem::Option, "ftp_proxy" ); 107 confItem = findConfItem( OConfItem::Option, "ftp_proxy" );
107 if ( confItem ) 108 if ( confItem )
108 { 109 {
109 confItem->setValue( m_proxyFtpServer->text() ); 110 confItem->setValue( m_proxyFtpServer->text() );
110 confItem->setActive( m_proxyFtpActive->isChecked() ); 111 confItem->setActive( m_proxyFtpActive->isChecked() );
111 } 112 }
112 else 113 else
113 m_configs->append( new OConfItem( OConfItem::Option, "ftp_proxy", 114 m_configs->append( new OConfItem( OConfItem::Option, "ftp_proxy",
114 m_proxyFtpServer->text(), m_proxyFtpActive->isChecked() ) ); 115 m_proxyFtpServer->text(), QString::null,
116 m_proxyFtpActive->isChecked() ) );
115 117
116 confItem = findConfItem( OConfItem::Option, "proxy_username" ); 118 confItem = findConfItem( OConfItem::Option, "proxy_username" );
117 if ( confItem ) 119 if ( confItem )
118 confItem->setValue( m_proxyUsername->text() ); 120 confItem->setValue( m_proxyUsername->text() );
119 else 121 else
120 m_configs->append( new OConfItem( OConfItem::Option, "proxy_username", 122 m_configs->append( new OConfItem( OConfItem::Option, "proxy_username",
121 m_proxyUsername->text() ) ); 123 m_proxyUsername->text() ) );
122 124
123 confItem = findConfItem( OConfItem::Option, "proxy_password" ); 125 confItem = findConfItem( OConfItem::Option, "proxy_password" );
124 if ( confItem ) 126 if ( confItem )
125 confItem->setValue( m_proxyPassword->text() ); 127 confItem->setValue( m_proxyPassword->text() );
126 else 128 else
127 m_configs->append( new OConfItem( OConfItem::Option, "proxy_password", 129 m_configs->append( new OConfItem( OConfItem::Option, "proxy_password",
128 m_proxyPassword->text() ) ); 130 m_proxyPassword->text() ) );
129 131
130 m_ipkg->setConfigItems( m_configs ); 132 m_ipkg->setConfigItems( m_configs );
131 } 133 }
132 134
133 // Save options configuration 135 // Save options configuration
134 int options = 0; 136 int options = 0;
135 if ( m_optForceDepends->isChecked() ) 137 if ( m_optForceDepends->isChecked() )
136 options |= FORCE_DEPENDS; 138 options |= FORCE_DEPENDS;
137 if ( m_optForceReinstall->isChecked() ) 139 if ( m_optForceReinstall->isChecked() )
138 options |= FORCE_REINSTALL; 140 options |= FORCE_REINSTALL;
139 if ( m_optForceRemove->isChecked() ) 141 if ( m_optForceRemove->isChecked() )
140 options |= FORCE_REMOVE; 142 options |= FORCE_REMOVE;
141 if ( m_optForceOverwrite->isChecked() ) 143 if ( m_optForceOverwrite->isChecked() )
142 options |= FORCE_OVERWRITE; 144 options |= FORCE_OVERWRITE;
143 m_ipkg->setIpkgExecOptions( options ); 145 m_ipkg->setIpkgExecOptions( options );
144 m_ipkg->setIpkgExecVerbosity( m_optVerboseIpkg->currentItem() ); 146 m_ipkg->setIpkgExecVerbosity( m_optVerboseIpkg->currentItem() );
145 147
146 QDialog::accept(); 148 QDialog::accept();
147} 149}
148 150
149void OIpkgConfigDlg::reject() 151void OIpkgConfigDlg::reject()
150{ 152{
151 if ( m_configs ) 153 if ( m_configs )
152 delete m_configs; 154 delete m_configs;
153} 155}
154 156
155void OIpkgConfigDlg::initServerWidget() 157void OIpkgConfigDlg::initServerWidget()
156{ 158{
157 m_serverWidget = new QWidget( this ); 159 m_serverWidget = new QWidget( this );
158 160
159 // Initialize UI 161 // Initialize UI
160 QVBoxLayout *vb = new QVBoxLayout( m_serverWidget ); 162 QVBoxLayout *vb = new QVBoxLayout( m_serverWidget );
161 QScrollView *sv = new QScrollView( m_serverWidget ); 163 QScrollView *sv = new QScrollView( m_serverWidget );
162 vb->addWidget( sv, 0, 0 ); 164 vb->addWidget( sv, 0, 0 );
@@ -490,151 +492,152 @@ void OIpkgConfigDlg::slotServerNew()
490 m_serverName->setFocus(); 492 m_serverName->setFocus();
491} 493}
492 494
493void OIpkgConfigDlg::slotServerDelete() 495void OIpkgConfigDlg::slotServerDelete()
494{ 496{
495 // Find selected server in list 497 // Find selected server in list
496 OConfItem *server = findConfItem( OConfItem::Source, m_serverList->currentText() ); 498 OConfItem *server = findConfItem( OConfItem::Source, m_serverList->currentText() );
497 499
498 // Delete server 500 // Delete server
499 if ( server ) 501 if ( server )
500 { 502 {
501 m_configs->removeRef( server ); 503 m_configs->removeRef( server );
502 m_serverList->removeItem( m_serverCurrent ); 504 m_serverList->removeItem( m_serverCurrent );
503 } 505 }
504} 506}
505 507
506void OIpkgConfigDlg::slotServerUpdate() 508void OIpkgConfigDlg::slotServerUpdate()
507{ 509{
508 QString newName = m_serverName->text(); 510 QString newName = m_serverName->text();
509 511
510 // Convert any spaces to underscores 512 // Convert any spaces to underscores
511 newName.replace( QRegExp( " " ), "_" ); 513 newName.replace( QRegExp( " " ), "_" );
512 514
513 if ( !m_serverNew ) 515 if ( !m_serverNew )
514 { 516 {
515 // Find selected server in list 517 // Find selected server in list
516 OConfItem *server = findConfItem( OConfItem::Source, m_serverCurrName ); 518 OConfItem *server = findConfItem( OConfItem::Source, m_serverCurrName );
517 519
518 // Delete server 520 // Delete server
519 if ( server ) 521 if ( server )
520 { 522 {
521 // Update url 523 // Update url
522 server->setValue( m_serverLocation->text() ); 524 server->setValue( m_serverLocation->text() );
523 server->setActive( m_serverActive->isChecked() ); 525 server->setActive( m_serverActive->isChecked() );
524 526
525 // Check if server name has changed, if it has then we need to replace the key in the map 527 // Check if server name has changed, if it has then we need to replace the key in the map
526 if ( m_serverCurrName != newName ) 528 if ( m_serverCurrName != newName )
527 { 529 {
528 // Update server name 530 // Update server name
529 server->setName( newName ); 531 server->setName( newName );
530 532
531 // Update list box 533 // Update list box
532 m_serverList->changeItem( newName, m_serverCurrent ); 534 m_serverList->changeItem( newName, m_serverCurrent );
533 } 535 }
534 } 536 }
535 } 537 }
536 else 538 else
537 { 539 {
538 // Add new destination to configuration list 540 // Add new server to configuration list
539 m_configs->append( new OConfItem( OConfItem::Source, newName, 541 // TODO - support src/gz
540 m_serverLocation->text(), m_serverActive->isChecked() ) ); 542 m_configs->append( new OConfItem( OConfItem::Source, newName, m_serverLocation->text(),
543 QString::null, m_serverActive->isChecked() ) );
541 m_configs->sort(); 544 m_configs->sort();
542 545
543 m_serverList->insertItem( newName ); 546 m_serverList->insertItem( newName );
544 m_serverList->setCurrentItem( m_serverList->count() ); 547 m_serverList->setCurrentItem( m_serverList->count() );
545 m_serverNew = false; 548 m_serverNew = false;
546 } 549 }
547} 550}
548 551
549void OIpkgConfigDlg::slotDestEdit( int index ) 552void OIpkgConfigDlg::slotDestEdit( int index )
550{ 553{
551 m_destNew = false; 554 m_destNew = false;
552 m_destCurrent = index; 555 m_destCurrent = index;
553 556
554 // Find selected destination in list 557 // Find selected destination in list
555 OConfItem *destination = findConfItem( OConfItem::Destination, m_destList->currentText() ); 558 OConfItem *destination = findConfItem( OConfItem::Destination, m_destList->currentText() );
556 559
557 // Display destination details 560 // Display destination details
558 if ( destination ) 561 if ( destination )
559 { 562 {
560 m_destCurrName = destination->name(); 563 m_destCurrName = destination->name();
561 m_destName->setText( destination->name() ); 564 m_destName->setText( destination->name() );
562 m_destLocation->setText( destination->value() ); 565 m_destLocation->setText( destination->value() );
563 m_destActive->setChecked( destination->active() ); 566 m_destActive->setChecked( destination->active() );
564 m_destName->setFocus(); 567 m_destName->setFocus();
565 } 568 }
566} 569}
567 570
568void OIpkgConfigDlg::slotDestNew() 571void OIpkgConfigDlg::slotDestNew()
569{ 572{
570 m_destNew = true; 573 m_destNew = true;
571 574
572 m_destName->setText( QString::null ); 575 m_destName->setText( QString::null );
573 m_destLocation->setText( QString::null ); 576 m_destLocation->setText( QString::null );
574 m_destActive->setChecked( true ); 577 m_destActive->setChecked( true );
575 m_destName->setFocus(); 578 m_destName->setFocus();
576} 579}
577 580
578void OIpkgConfigDlg::slotDestDelete() 581void OIpkgConfigDlg::slotDestDelete()
579{ 582{
580 // Find selected destination in list 583 // Find selected destination in list
581 OConfItem *destination = findConfItem( OConfItem::Destination, m_destList->currentText() ); 584 OConfItem *destination = findConfItem( OConfItem::Destination, m_destList->currentText() );
582 585
583 // Delete destination 586 // Delete destination
584 if ( destination ) 587 if ( destination )
585 { 588 {
586 m_configs->removeRef( destination ); 589 m_configs->removeRef( destination );
587 m_destList->removeItem( m_destCurrent ); 590 m_destList->removeItem( m_destCurrent );
588 } 591 }
589} 592}
590 593
591void OIpkgConfigDlg::slotDestSelectPath() 594void OIpkgConfigDlg::slotDestSelectPath()
592{ 595{
593 QString path = Opie::Ui::OFileDialog::getDirectory( 0, m_destLocation->text() ); 596 QString path = Opie::Ui::OFileDialog::getDirectory( 0, m_destLocation->text() );
594 if ( path.at( path.length() - 1 ) == '/' ) 597 if ( path.at( path.length() - 1 ) == '/' )
595 path.truncate( path.length() - 1 ); 598 path.truncate( path.length() - 1 );
596 m_destLocation->setText( path ); 599 m_destLocation->setText( path );
597} 600}
598 601
599void OIpkgConfigDlg::slotDestUpdate() 602void OIpkgConfigDlg::slotDestUpdate()
600{ 603{
601 QString newName = m_destName->text(); 604 QString newName = m_destName->text();
602 605
603 // Convert any spaces to underscores 606 // Convert any spaces to underscores
604 newName.replace( QRegExp( " " ), "_" ); 607 newName.replace( QRegExp( " " ), "_" );
605 608
606 if ( !m_destNew ) 609 if ( !m_destNew )
607 { 610 {
608 // Find selected destination in list 611 // Find selected destination in list
609 OConfItem *destination = findConfItem( OConfItem::Destination, m_destCurrName ); 612 OConfItem *destination = findConfItem( OConfItem::Destination, m_destCurrName );
610 613
611 // Display destination details 614 // Display destination details
612 if ( destination ) 615 if ( destination )
613 { 616 {
614 // Update url 617 // Update url
615 destination->setValue( m_destLocation->text() ); 618 destination->setValue( m_destLocation->text() );
616 destination->setActive( m_destActive->isChecked() ); 619 destination->setActive( m_destActive->isChecked() );
617 620
618 // Check if destination name has changed, if it has then we need to replace the key in the map 621 // Check if destination name has changed, if it has then we need to replace the key in the map
619 if ( m_destCurrName != newName ) 622 if ( m_destCurrName != newName )
620 { 623 {
621 // Update destination name 624 // Update destination name
622 destination->setName( newName ); 625 destination->setName( newName );
623 626
624 // Update list box 627 // Update list box
625 m_destList->changeItem( newName, m_destCurrent ); 628 m_destList->changeItem( newName, m_destCurrent );
626 } 629 }
627 } 630 }
628 } 631 }
629 else 632 else
630 { 633 {
631 // Add new destination to configuration list 634 // Add new destination to configuration list
632 m_configs->append( new OConfItem( OConfItem::Destination, newName, 635 m_configs->append( new OConfItem( OConfItem::Destination, newName,
633 m_destLocation->text(), m_destActive->isChecked() ) ); 636 m_destLocation->text(), QString::null, m_destActive->isChecked() ) );
634 m_configs->sort(); 637 m_configs->sort();
635 638
636 m_destList->insertItem( newName ); 639 m_destList->insertItem( newName );
637 m_destList->setCurrentItem( m_destList->count() ); 640 m_destList->setCurrentItem( m_destList->count() );
638 m_destNew = false; 641 m_destNew = false;
639 } 642 }
640} 643}