summaryrefslogtreecommitdiff
path: root/noncore/settings/packagemanager/oipkg.cpp
authordrw <drw>2005-02-22 22:25:39 (UTC)
committer drw <drw>2005-02-22 22:25:39 (UTC)
commit504c5f59c082106028e3dbc9126d7b655908224f (patch) (side-by-side diff)
tree2cf4465cb2a46b0d13f909d073225585ad4e5092 /noncore/settings/packagemanager/oipkg.cpp
parenta2eea1c6273acd16fed2406493923c52fba19ebc (diff)
downloadopie-504c5f59c082106028e3dbc9126d7b655908224f.zip
opie-504c5f59c082106028e3dbc9126d7b655908224f.tar.gz
opie-504c5f59c082106028e3dbc9126d7b655908224f.tar.bz2
Add support for lists_dir ipkg configuration option, optimize ipkg configuration file read routine, update version to 0.6.2
Diffstat (limited to 'noncore/settings/packagemanager/oipkg.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/packagemanager/oipkg.cpp117
1 files changed, 71 insertions, 46 deletions
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
@@ -152,6 +152,7 @@ void OIpkg::setConfigItems( OConfItemList *configList )
if ( item->type() != OConfItem::NotDefined )
{
QString confLine;
+ QString name = item->name();
if ( !item->active() )
confLine = "#";
@@ -160,18 +161,28 @@ void OIpkg::setConfigItems( OConfItemList *configList )
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";
}
}
@@ -545,50 +556,64 @@ 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 ) );
- }
}
}