summaryrefslogtreecommitdiff
authordrw <drw>2004-04-21 15:57:19 (UTC)
committer drw <drw>2004-04-21 15:57:19 (UTC)
commit5ac20617216e4592685940ede23f135d86e8d2cd (patch) (side-by-side diff)
tree17a2ba8adc06eed219b3b77e42d46e5e0c714630
parent4e6c1ec2758d337d772af3af49a1b74f737cd57f (diff)
downloadopie-5ac20617216e4592685940ede23f135d86e8d2cd.zip
opie-5ac20617216e4592685940ede23f135d86e8d2cd.tar.gz
opie-5ac20617216e4592685940ede23f135d86e8d2cd.tar.bz2
Implement saving of ipkg config information and re-initialization of libipkg after config info changed
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/packagemanager/oipkg.cpp72
1 files changed, 71 insertions, 1 deletions
diff --git a/noncore/settings/packagemanager/oipkg.cpp b/noncore/settings/packagemanager/oipkg.cpp
index 5c79ba9..b9c82df 100644
--- a/noncore/settings/packagemanager/oipkg.cpp
+++ b/noncore/settings/packagemanager/oipkg.cpp
@@ -107,48 +107,117 @@ OConfItemList *OIpkg::configItems()
OConfItemList *OIpkg::servers()
{
// Retrieve only servers
return filterConfItems( OConfItem::Source );
}
OConfItemList *OIpkg::destinations()
{
// Retrieve only destinations
return filterConfItems( OConfItem::Destination );
}
OConfItemList *OIpkg::options()
{
// Retrieve only destinations
return filterConfItems( OConfItem::Option );
}
void OIpkg::setConfigItems( OConfItemList *configList )
{
if ( m_confInfo )
delete m_confInfo;
m_confInfo = configList;
+
+ // Write out new /etc/ipkg.conf
+ QFile confFile( IPKG_CONF );
+ if ( confFile.open( IO_WriteOnly ) )
+ {
+ QTextStream confStream( &confFile );
+ confStream << "# Generated by Opie Package Manager\n\n";
+
+ OConfItemListIterator it( *m_confInfo );
+ for ( ; it.current(); ++it )
+ {
+ OConfItem *item = it.current();
+
+ // Only write out valid conf items
+ if ( item->type() != OConfItem::NotDefined )
+ {
+ QString confLine;
+ if ( !item->active() )
+ confLine = "#";
+
+ switch ( item->type() )
+ {
+ case OConfItem::Source : 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;
+ default : break;
+ };
+
+ confStream << confLine << " " << item->name() << " " << item->value() << "\n";
+ }
+ }
+
+ confFile.close();
+ }
+ else
+ {
+ // Problem writing to /etc/ipkg.conf, exit before removing other conf files
+ return;
+ }
+
+ // Delete /etc/ipkg/*.conf files (/etc/ipkg.conf should now have all settings
+ QStringList confFiles;
+ QDir confDir( IPKG_CONF_DIR );
+ if ( confDir.exists() )
+ {
+ confDir.setNameFilter( "*.conf" );
+ confDir.setFilter( QDir::Files );
+ confFiles = confDir.entryList( "*.conf", QDir::Files );
+
+ QStringList::Iterator lastFile = confFiles.end();
+ for ( QStringList::Iterator it = confFiles.begin(); it != lastFile; ++it )
+ {
+ // Create absolute file path if necessary
+ QString absFile = (*it);
+ if ( !absFile.startsWith( "/" ) )
+ absFile.prepend( QString( IPKG_CONF_DIR ) + "/" );
+
+ // Delete file
+printf( "Deleting: \'%s\'\n", absFile.latin1() );
+ QFile::remove( absFile );
+ }
+ }
+
+ // Reinitialize libipkg to pick up new configuration
+ ipkg_deinit( &m_ipkgArgs );
+ ipkg_init( &fsignalIpkgMessage, &fIpkgResponse, &m_ipkgArgs );
+ m_ipkgArgs.noaction = false;
+ m_ipkgArgs.force_defaults = true;
}
void OIpkg::saveSettings()
{
// Save Ipkg execution options to application configuration file
if ( m_config )
{
m_config->setGroup( "Ipkg" );
m_config->writeEntry( "ExecOptions", m_ipkgExecOptions );
m_config->writeEntry( "Verbosity", m_ipkgExecVerbosity );
}
}
OPackageList *OIpkg::availablePackages( const QString &server )
{
// Load Ipkg configuration info if not already cached
if ( !m_confInfo )
loadConfiguration();
// Build new server list (caller is responsible for deleting)
OPackageList *pl = new OPackageList;
// Open package list file
QFile f( IPKG_PKG_PATH + "/" + server );
@@ -383,49 +452,50 @@ void OIpkg::ipkgStatus( char *status )
}
void OIpkg::ipkgList( char *filelist )
{
emit signalIpkgList( filelist );
}
void OIpkg::loadConfiguration()
{
if ( m_confInfo )
delete m_confInfo;
// Load configuration item list
m_confInfo = new OConfItemList();
QStringList confFiles;
QDir confDir( IPKG_CONF_DIR );
if ( confDir.exists() )
{
confDir.setNameFilter( "*.conf" );
confDir.setFilter( QDir::Files );
confFiles = confDir.entryList( "*.conf", QDir::Files );
confFiles << IPKG_CONF;
- for ( QStringList::Iterator it = confFiles.begin(); it != confFiles.end(); ++it )
+ QStringList::Iterator lastFile = confFiles.end();
+ for ( QStringList::Iterator it = confFiles.begin(); it != lastFile; ++it )
{
// Create absolute file path if necessary
QString absFile = (*it);
if ( !absFile.startsWith( "/" ) )
absFile.prepend( QString( IPKG_CONF_DIR ) + "/" );
// Read in file
QFile f( absFile );
if ( f.open( IO_ReadOnly ) )
{
QTextStream s( &f );
while ( !s.eof() )
{
QString line = s.readLine().simplifyWhiteSpace();
// 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" ) )