From a3205d9bf5570af8441ed81cd6d9eeadf22319c9 Mon Sep 17 00:00:00 2001 From: tille Date: Tue, 23 Apr 2002 11:16:45 +0000 Subject: ... mostly rewritten. --- (limited to 'noncore/unsupported/oipkg') diff --git a/noncore/unsupported/oipkg/.cvsignore b/noncore/unsupported/oipkg/.cvsignore index 36653ed..9d22b66 100644 --- a/noncore/unsupported/oipkg/.cvsignore +++ b/noncore/unsupported/oipkg/.cvsignore @@ -1,10 +1,5 @@ +.cvsignore Makefile* moc_* -pkfind.cpp -pkfind.h -pksettings.cpp -pksettings.h -pkdesc.cpp -pkdesc.h -packagemanagerbase.cpp -packagemanagerbase.h +*~ +*.kdev* diff --git a/noncore/unsupported/oipkg/TODO b/noncore/unsupported/oipkg/TODO new file mode 100644 index 0000000..714baa4 --- a/dev/null +++ b/noncore/unsupported/oipkg/TODO @@ -0,0 +1,8 @@ +* search +* parse "to install" and "to remove" from status +* Settings Class +* Dialog to display ipkg output live +* install local file +* make oipkg determine dest of to remove apps +* error handling +* manage links diff --git a/noncore/unsupported/oipkg/debug.h b/noncore/unsupported/oipkg/debug.h new file mode 100644 index 0000000..c53e36c --- a/dev/null +++ b/noncore/unsupported/oipkg/debug.h @@ -0,0 +1,20 @@ +#ifndef _DEBUG_H_ +#define _DEBUG_H_ + +#include + +extern int debugLevel; + +#define HACK + + +#define pvDebug(I, S) \ +if ( debugLevel < 3 ) \ +{ \ + if ( I <= debugLevel ) qDebug(S);\ +}else{\ + if ( I <= debugLevel ) \ + printf("# %s \t\t(Level: %i)\n",QString(S).latin1(),I);\ +} + +#endif \ No newline at end of file diff --git a/noncore/unsupported/oipkg/main.cpp b/noncore/unsupported/oipkg/main.cpp new file mode 100644 index 0000000..264fd55 --- a/dev/null +++ b/noncore/unsupported/oipkg/main.cpp @@ -0,0 +1,19 @@ + +#include "mainwindow.h" + +#include +#include +int debugLevel; + +int main( int argc, char ** argv ) +{ + debugLevel = 1; + if (argc > 2) + { + debugLevel = QString ( argv[1] ).toInt(); + } + QPEApplication a( argc, argv ); + MainWindow mw; + a.showMainDocumentWidget( &mw ); + return a.exec(); +} diff --git a/noncore/unsupported/oipkg/mainwindow.cpp b/noncore/unsupported/oipkg/mainwindow.cpp new file mode 100644 index 0000000..b485a03 --- a/dev/null +++ b/noncore/unsupported/oipkg/mainwindow.cpp @@ -0,0 +1,264 @@ +// adadpted form qpe/qipkg + + +#include "mainwindow.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "pksettingsbase.h" +#include "packagelistitem.h" + +MainWindow::MainWindow( QWidget *parent, const char *name, WFlags f = 0 ) : + QMainWindow( parent, name, f ) +{ + setCaption( tr("Package Manager") ); + table = new PackageWindow( this,0,0 ); + setCentralWidget( table ); + makeMenu(); + + QFontMetrics fm = fontMetrics(); + int w0 = fm.width(tr("Package"))+30; + int w2 = fm.width("00000")+4; + table->ListViewPackages->setColumnWidth(0,w0); + table->ListViewPackages->setColumnWidth(1,228-w2-w0); // ### screen-biased + table->ListViewPackages->setColumnWidth(2,w2); + table->ListViewPackages->setColumnWidthMode(0,QListView::Manual); + table->ListViewPackages->setColumnWidthMode(1,QListView::Manual); + table->ListViewPackages->setColumnWidthMode(2,QListView::Manual); + table->ListViewPackages->setSelectionMode( QListView::Multi ); + + connect( table->section, SIGNAL( activated(int) ), + this, SLOT( sectionChanged() ) ); + connect( table->subsection, SIGNAL(activated(int) ), + this, SLOT( subSectionChanged() ) ); + connect( table->ListViewPackages, SIGNAL( clicked( QListViewItem* ) ), + this, SLOT( setCurrent( QListViewItem* ) ) ); + + settings = new PackageManagerSettings(this,0,TRUE); + + ipkg = new PmIpkg( settings, this ); + packageList.setSettings( settings ); + newList(); + setSections(); + setSubSections(); + displayList(); +} + +void MainWindow::makeMenu() +{ + + QPEToolBar *toolBar = new QPEToolBar( this ); + QPEMenuBar *menuBar = new QPEMenuBar( toolBar ); + QPopupMenu *srvMenu = new QPopupMenu( menuBar ); + QPopupMenu *cfgMenu = new QPopupMenu( menuBar ); + // QPopupMenu *sectMenu = new QPopupMenu( menuBar ); + + contextMenu = new QPopupMenu( this ); + + setToolBarsMovable( false ); + toolBar->setHorizontalStretchable( true ); + menuBar->insertItem( tr( "Package" ), srvMenu ); + menuBar->insertItem( tr( "Settings" ), cfgMenu ); + // menuBar->insertItem( tr( "Sections" ), sectMenu ); + + toolBar->setStretchableWidget (srvMenu); + + + runAction = new QAction( tr( "Run" ), + Resource::loadPixmap( "oipkg/install" ), + QString::null, 0, this, 0 ); + connect( runAction, SIGNAL( activated() ), + this, SLOT( runIpkg() ) ); + runAction->addTo( toolBar ); + runAction->addTo( srvMenu ); + + srvMenu->insertSeparator (); + + updateAction = new QAction( tr( "Update" ), + Resource::loadIconSet( "oipkg/repeat" ), + QString::null, 0, this, 0 ); + connect( updateAction, SIGNAL( activated() ), + this , SLOT( updateList() ) ); + updateAction->addTo( toolBar ); + updateAction->addTo( srvMenu ); + + // detailsAction = new QAction( tr( "Details" ), + // Resource::loadIconSet( "oipkg/details" ), + // QString::null, 0, this, 0 ); + // connect( detailsAction, SIGNAL( activated() ), + // this , SLOT( showDetails() ) ); + // detailsAction->addTo( toolBar ); + // detailsAction->addTo( srvMenu ); + + QAction *cfgact; + + cfgact = new QAction( tr( "Setups" ), + Resource::loadIconSet( "" ), + QString::null, 0, this, 0 ); + connect( cfgact, SIGNAL( activated() ), + SLOT( showSettings() ) ); + cfgact->addTo( cfgMenu ); + + cfgact = new QAction( tr( "Servers" ), + Resource::loadIconSet( "" ), + QString::null, 0, this, 0 ); + connect( cfgact, SIGNAL( activated() ), + SLOT( showSettingsSrv() ) ); + cfgact->addTo( cfgMenu ); + cfgact = new QAction( tr( "Destinations" ), + Resource::loadIconSet( "" ), + QString::null, 0, this, 0 ); + connect( cfgact, SIGNAL( activated() ), + SLOT( showSettingsDst() ) ); + cfgact->addTo( cfgMenu ); + +} + +MainWindow::~MainWindow() +{ +} + +void MainWindow::runIpkg() +{ + ipkg->commit( packageList ); + ipkg->runIpkg("update"); + packageList.update(); +} + +void MainWindow::updateList() +{ + ipkg->runIpkg("update"); + packageList.update(); +} + +void MainWindow::newList() +{ + packageList.update(); +} + +void MainWindow::filterList() +{ + packageList.filterPackages(); +} + +void MainWindow::displayList() +{ + table->ListViewPackages->clear(); + Package *pack = packageList.first(); + while( pack ) + { + if ( pack && (pack->name() != "") ) + { + table->ListViewPackages->insertItem( + new PackageListItem( table->ListViewPackages, pack ) ); + } + pack = packageList.next(); + } +} + +void MainWindow::sectionChanged() +{ + disconnect( table->section, SIGNAL( activated(int) ), + this, SLOT( sectionChanged() ) ); + disconnect( table->subsection, SIGNAL(activated(int) ), + this, SLOT( subSectionChanged() ) ); + table->subsection->clear(); + packageList.setSection( table->section->currentText() ); + setSubSections(); + filterList(); + connect( table->section, SIGNAL( activated(int) ), + this, SLOT( sectionChanged() ) ); + connect( table->subsection, SIGNAL(activated(int) ), + this, SLOT( subSectionChanged() ) ); + displayList(); +} + +void MainWindow::subSectionChanged() +{ + disconnect( table->section, SIGNAL( activated(int) ), + this, SLOT( sectionChanged() ) ); + disconnect( table->subsection, SIGNAL(activated(int) ), + this, SLOT( subSectionChanged() ) ); + packageList.setSubSection( table->subsection->currentText() ); + filterList(); + connect( table->section, SIGNAL( activated(int) ), + this, SLOT( sectionChanged() ) ); + connect( table->subsection, SIGNAL(activated(int) ), + this, SLOT( subSectionChanged() ) ); + displayList(); +} + +void MainWindow::setSections() +{ + table->section->clear(); + table->section->insertStringList( packageList.getSections() ); +} + +void MainWindow::setSubSections() +{ + table->subsection->clear(); + table->subsection->insertStringList( packageList.getSubSections() ); +} + + +void MainWindow::showSettings() +{ + if ( settings->showDialog( 0 ) ) + newList(); +} +void MainWindow::showSettingsSrv() +{ + if ( settings->showDialog( 1 ) ) + newList(); +} +void MainWindow::showSettingsDst() +{ + if ( settings->showDialog( 2 ) ) + newList(); +} + + +void MainWindow::showDetails() +{ + if ( activePackage ) return; + if ( details ) + { + details = new PackageDetails( this ); + connect( details->install, SIGNAL(clicked()), SLOT( toggleActivePackage() ) ); + connect( details->remove, SIGNAL(clicked()), SLOT( toggleActivePackage() ) ); + connect( details->ignore, SIGNAL(clicked()), details, SLOT(close())); + details->description->setTextFormat(RichText); + } + + details->setCaption("Package: " + activePackage->name()); + details->description->setText(activePackage->details() ); + details->install->setEnabled(!activePackage->installed()); + details->remove->setEnabled(activePackage->installed()); + details->showMaximized(); +} + +void MainWindow::toggleActivePackage() +{ + activePackage->toggleProcess(); + if ( details ) details->close(); +} + +void MainWindow::setCurrent( QListViewItem* p ) +{ + pvDebug(2, "MainWindow::setCurrent "); + //+((Package*)p)->name()); + activePackage = (Package*)p; +} diff --git a/noncore/unsupported/oipkg/mainwindow.h b/noncore/unsupported/oipkg/mainwindow.h new file mode 100644 index 0000000..77604fd --- a/dev/null +++ b/noncore/unsupported/oipkg/mainwindow.h @@ -0,0 +1,62 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include + +#include "packagelist.h" +#include "pmipkg.h" +#include "pksettings.h" +#include "pkdesc.h" + +#include "pkwindow.h" + +class MainWindow : public QMainWindow +{ + Q_OBJECT + + +public: + MainWindow( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); + ~MainWindow(); + + +protected: + PackageWindow *table; + + +protected slots: + void runIpkg(); + void newList(); + void updateList(); + void filterList(); + void displayList(); + void subSectionChanged(); + void sectionChanged(); + void showSettings(); + void showSettingsSrv(); + void showSettingsDst(); + +public slots: + void showDetails(); + void toggleActivePackage(); + void setCurrent( QListViewItem* ); + +private: + void makeMenu(); + void setSections(); + void setSubSections(); + + PmIpkg* ipkg; + PackageManagerSettings *settings; + PackageDetails* details; + PackageList packageList; + Package *activePackage; + QAction *runAction; + QAction *detailsAction; + QAction *updateAction; + QPopupMenu *contextMenu; +}; + +#endif diff --git a/noncore/unsupported/oipkg/oipkg.pro b/noncore/unsupported/oipkg/oipkg.pro new file mode 100644 index 0000000..9c2cb8d --- a/dev/null +++ b/noncore/unsupported/oipkg/oipkg.pro @@ -0,0 +1,28 @@ +DESTDIR = $(OPIEDIR)/bin +TEMPLATE = app +CONFIG = qt warn_on release +#CONFIG = qt warn_on debug +HEADERS = mainwindow.h \ + pksettings.h \ + pmipkg.h \ + packagelistitem.h \ + packagelist.h \ + package.h +SOURCES = main.cpp \ + mainwindow.cpp \ + pksettings.cpp \ + pmipkg.cpp \ + packagelistitem.cpp \ + packagelist.cpp \ + package.cpp +INCLUDEPATH += $(OPIEDIR)/include +DEPENDPATH += $(OPIEDIR)/include +LIBS += -lqpe +LIBS += -ljpeg +INTERFACES = pkdesc.ui \ + pkfind.ui \ + runwindow.ui \ + pkwindow.ui \ + pksettingsbase.ui +TARGET = oipkg + diff --git a/noncore/unsupported/oipkg/opie-oipkg.control b/noncore/unsupported/oipkg/opie-oipkg.control new file mode 100644 index 0000000..89cc0b4 --- a/dev/null +++ b/noncore/unsupported/oipkg/opie-oipkg.control @@ -0,0 +1,9 @@ +Files: bin/oipkg apps/Settings/oipkg.desktop pics/oipkg/ +Priority: optional +Section: opie/settings +Maintainer: Patrick S. Vogt +Architecture: arm +Version: $QPE_VERSION-$SUB_VERSION +Depends: opie-base ($QPE_VERSION) +Description: Package Manager + A GUI front-end to ipkg for the Opie environment. diff --git a/noncore/unsupported/oipkg/package.cpp b/noncore/unsupported/oipkg/package.cpp new file mode 100644 index 0000000..82ea1c8 --- a/dev/null +++ b/noncore/unsupported/oipkg/package.cpp @@ -0,0 +1,255 @@ +#include "package.h" + +#include +#include + +#include "debug.h" + +Package::~Package() +{ +} + +Package::Package() +{ + _size = ""; + _section = ""; + _subsection = ""; + _shortDesc = ""; + _desc = ""; + _name = ""; + _toProcess = true; + _status = ""; +} + +Package::Package( QStringList pack ) +{ + Package(); + parsePackage( pack ); + _toProcess = false; +} + +Package::Package( QString n ) +{ + Package(); + _name = QString( n ); + _toProcess = false; +} + +Package::Package( Package *pi ) +{ + Package(); + copyValues( pi ); + _toProcess = false; +} + + +void Package::setValue( QString n, QString t ) +{ + if ( n == "Status" && installed() ) return; + if ( n == "Package" ) + { + _name = QString( t ); + } + if ( n == "Installed-Size" ) + { + _size = t; + } + if ( n == "Priority") + { + + } + if ( n == "Section") + { + setSection( t ); + } + if ( n == "Maintainer") + { + + } + if ( n == "Architecture") + { + + } + if ( n == "Version") + { + + } + if ( n == "Pre-Depends") + { + + } + if ( n == "Depends") + { + + }else if ( n == "Filename") + { + + }else if ( n == "Size") + { + + }else if ( n == "MD5Sum") + { + + } + if ( n == "Description") + { + setDesc( t ); + } + if ( n == "Status") + { + if ( installed() ) return; + _status = t; + } + if ( t == "Essential") + { + + } +}; + +QString Package::name() +{ + return _name; +} + +bool Package::installed() +{ + return _status.contains("installed"); +} + +void Package::setDesc( QString s ) +{ + _desc = s; + _shortDesc = s.left( s.find("\n") ); +} + +QString Package::desc() +{ + return _desc; +} + +QString Package::shortDesc() +{ + return _shortDesc; +} + +QString Package::size() +{ + return _size; +} + +bool Package::toProcess() +{ + return _toProcess; +} + +bool Package::toRemove() +{ + if ( _toProcess && installed() ) return true; + else return false; +} + +bool Package::toInstall() +{ + if ( _toProcess && !installed() ) return true; + else return false; +} + +void Package::toggleProcess() +{ + _toProcess = !(_toProcess); +} + + + +void Package::copyValues( Package* pack ) +{ + if (_size.isEmpty() && !pack->_size.isEmpty()) _size = QString( pack->_size ); + if (_section.isEmpty() && !pack->_section.isEmpty()) _section = QString( pack->_section ); + if (_subsection.isEmpty()&& !pack->_subsection.isEmpty()) _subsection = QString( pack->_subsection ); + if (_shortDesc.isEmpty() && !pack->_shortDesc.isEmpty()) _shortDesc = QString( pack->_shortDesc ); + if (_desc.isEmpty() && !pack->_desc.isEmpty()) _desc = QString( pack->_desc ); + if (_name.isEmpty() && !pack->_name.isEmpty()) _name = QString( pack->_name ); + if (!installed() && _status.isEmpty() && !pack->_status.isEmpty()) _status = QString( pack->_status ); +} + +QString Package::getSection() +{ + return _section; +} + +void Package::setSection( QString s) +{ + int i = s.find("/"); + if ( i > 0 ) + { + _section = s.left(i); + _subsection = s.mid(i+1); + }else{ + _section = s; + _subsection = ""; + } +} + +QString Package::getSubSection() +{ + return _subsection; +} + +void Package::parsePackage( QStringList pack ) +{ + if ( pack.isEmpty() ) return; + int count = pack.count(); + for( int i = 0; i < count; i++ ) + { + QString line = pack[i]; + int sep = line.find( QRegExp(":[\t ]+") ); + if ( sep >= 0 ) + { + QString tag = line.left(sep); + QString value = line.mid(sep+2).simplifyWhiteSpace(); + setValue( tag, value ); + }else{ + } + } + return; +} + +QString Package::details() +{ + QString status; + Process ipkg_status(QStringList() << "ipkg" << "info" << name() ); + QString description; + if ( ipkg_status.exec("",status) ) + { + QStringList lines = QStringList::split('\n',status,TRUE); + for (QStringList::Iterator it = lines.begin(); it!=lines.end(); ++it) { + QString line = *it; + if ( line == " ." ) + { + description.append("

"); + } else + if ( line[0] == ' ' || line[0] == '\t' ) + { + // continuation + description.append(" "); + description.append(Qtopia::escapeString(line)); + } else { + int sep = line.find(QRegExp(":[\t ]+")); + if ( sep >= 0 ) + { + QString tag = line.left(sep); + description.append("
"); + description.append(""); + description.append(Qtopia::escapeString(tag)); + description.append(": "); + description.append(Qtopia::escapeString(line.mid(sep+2))); + } else { + description.append(" "); + description.append(Qtopia::escapeString(line)); + } + } + } + } + return description; +} + diff --git a/noncore/unsupported/oipkg/package.h b/noncore/unsupported/oipkg/package.h new file mode 100644 index 0000000..08d0c57 --- a/dev/null +++ b/noncore/unsupported/oipkg/package.h @@ -0,0 +1,54 @@ +#ifndef PK_ITEM_H +#define PK_ITEM_H + +#include +#include +#include +#include +#include +#include + +class Package //: public QObject +{ + // Q_OBJECT + public: + Package(); + ~Package(); + Package( QStringList ); + Package( QString ); + Package( Package* ); + + void setValue( QString, QString ); + void copyValues( Package* ); + + QString name() ; + bool installed(); + + void setDesc( QString ); + QString shortDesc(); + QString desc(); + QString size(); + void setSection( QString ); + QString getSection(); + QString getSubSection(); + QString details(); + bool toProcess(); + bool toInstall(); + bool toRemove(); +public slots: + void toggleProcess(); + +private: + QString _name; + bool _toProcess; + QString _status; + QString _size; + QString _section; + QString _subsection; + QString _shortDesc; + QString _desc; + void parsePackage( QStringList ); +}; + + +#endif diff --git a/noncore/unsupported/oipkg/packagelist.cpp b/noncore/unsupported/oipkg/packagelist.cpp new file mode 100644 index 0000000..d72ef75 --- a/dev/null +++ b/noncore/unsupported/oipkg/packagelist.cpp @@ -0,0 +1,215 @@ +#include "packagelist.h" + +#include +#include +#include +#include +#include + +#include "debug.h" + +PackageList::PackageList() + : packageIter( packageList ) +{ + empty=true; + { + Config cfg( "oipkg", Config::User ); + cfg.setGroup( "Common" ); + statusDir = cfg.readEntry( "statusDir", "" ); + listsDir = cfg.readEntry( "listsDir", "" ); + if ( statusDir=="" || ! QFileInfo(statusDir+"/status").isFile() ) + { + statusDir="/usr/lib/ipkg/"; + listsDir="/usr/lib/ipkg/lists/"; + cfg.writeEntry( "statusDir", statusDir ); + cfg.writeEntry( "listsDir", listsDir ); + } + } + pvDebug( 5, "PackageList::PackageList statusDir "+statusDir); + pvDebug( 5, "PackageList::PackageList listsDir "+listsDir); + sections << "All"; + subSections.insert("All", new QStringList() ); + QStringList *ss = subSections["All"]; + *ss << "All"; + aktSection = "All"; + aktSubSection = "All"; +} + +PackageList::PackageList( PackageManagerSettings* s) + : packageIter( packageList ) +{ + settings = s; + PackageList(); +} + +PackageList::~PackageList() +{ +} + +/** Inserts a package into the list */ +void PackageList::insertPackage( Package* pack ) +{ + Package* p = packageList.find( pack->name() ); + if ( p ) + { + p->copyValues( pack ); + delete pack; + pack = p; + }else{ + packageList.insert( pack->name(), pack ); + origPackageList.insert( pack->name(), pack ); + empty=false; + }; + updateSections( pack ); +} + +void PackageList::filterPackages() +{ + packageList.clear(); + QDictIterator filterIter( origPackageList ); + filterIter.toFirst(); + Package *pack= filterIter.current() ; + while ( pack ) + { + if ( ((aktSection=="All")||(pack->getSection()==aktSection)) && + ((aktSubSection=="All")||(pack->getSubSection()==aktSubSection)) ) + { + packageList.insert( pack->name(), pack ); + } + ++filterIter; + pack = filterIter.current(); + } +} + +Package* PackageList::find( QString n ) +{ + return packageList.find( n ); +} + +Package* PackageList::first() +{ + packageIter.toFirst(); + return packageIter.current(); +} + +Package* PackageList::next() +{ + ++packageIter; + return packageIter.current(); +} + +QStringList PackageList::getSections() +{ + sections.sort(); + return sections; +} + +QStringList PackageList::getSubSections() +{ + QStringList ss; + if ( !subSections[aktSection] ) return ss; + ss = *subSections[aktSection]; + ss.sort(); + return ss; +} + +void PackageList::setSection( QString sec ) +{ + aktSection = sec; +} + +void PackageList::setSubSection( QString ssec ) +{ + aktSubSection = ssec; +} + +void PackageList::updateSections( Package* pack ) +{ + QString s = pack->getSection(); + if ( s.isEmpty() || s == "") return; + if ( sections.contains(s) ) return; + sections += s; + QString ss = pack->getSubSection(); + if ( ss.isEmpty() || ss == "" ) return; + if ( !subSections[s] ) { + subSections.insert( s, new QStringList() ); + QStringList *subsecs = subSections[s]; + *subsecs += "All"; + } + QStringList *subsecs = subSections[s]; + *subsecs += ss; + if ( !subSections["All"] ) subSections.insert( "All", new QStringList() ); + subsecs = subSections["All"]; + *subsecs += ss; +} + + + +/** No descriptions */ +void PackageList::parseStatus() +{ + QStringList dests = settings->getDestinationUrls(); + for ( QStringList::Iterator it = dests.begin(); it != dests.end(); ++it ) + { + pvDebug( 2,"Status Dir: "+*it+statusDir+"/status"); + readFileEntries( *it+statusDir+"/status" ); + }; +} + +void PackageList::parseList() +{ + QStringList srvs = settings->getActiveServers(); + + for ( QStringList::Iterator it = srvs.begin(); it != srvs.end(); ++it ) + { + pvDebug( 2, "List Dir: "+listsDir+"/"+*it); + readFileEntries( listsDir+"/"+*it ); + } +} + +void PackageList::readFileEntries( QString filename ) +{ + QStringList packEntry; + QFile f( filename ); + if ( !f.open(IO_ReadOnly) ) return; + QTextStream *statusStream = new QTextStream( &f ); + while ( !statusStream ->eof() ) + { + QString line = statusStream->readLine(); + if ( line.find(QRegExp("[\n\t ]*")) || line == "" ) + { + //end of package + if ( ! packEntry.isEmpty() ) + { + Package *p = new Package( packEntry ); + if ( p ) + { + insertPackage( p ); + packEntry.clear(); + } + } + }else{ + packEntry << line; + }; + } + return; +} + + +void PackageList::update() +{ + pvDebug( 3, "parseStatus"); + parseStatus(); + pvDebug( 3, "parseList"); + parseList(); + pvDebug( 3, "finished parsing"); +} + + + +/** No descriptions */ +void PackageList::setSettings( PackageManagerSettings *s ) +{ + settings = s; +} + diff --git a/noncore/unsupported/oipkg/packagelist.h b/noncore/unsupported/oipkg/packagelist.h new file mode 100644 index 0000000..eda8d22 --- a/dev/null +++ b/noncore/unsupported/oipkg/packagelist.h @@ -0,0 +1,63 @@ +#ifndef PACKAGELIST_H +#define PACKAGELIST_H + +#include +#include "package.h" +#include "pksettings.h" +#include "debug.h" + +#define HACK +#ifdef HACK + static QString listsDir="/usr/lib/ipkg/"; + static QString statusDir="/usr/lib/ipkg/"; +#endif + +class PackageList { +public: + PackageList(); + PackageList( PackageManagerSettings* ); + ~PackageList(); + void insertPackage( Package* ); + Package* find( QString ); + Package* next(); + Package* first(); + + QStringList getSections(); + QStringList getSubSections(); + void setSettings( PackageManagerSettings* ); + void filterPackages(); + +public slots: + void setSection(QString); + void setSubSection(QString); + void update(); + +private: + int currentPackage; + int packageCount; + + PackageManagerSettings *settings; + QDict packageList; + QDict origPackageList; + QDictIterator packageIter; + + bool empty; +#ifndef HACK + QString listsDir; + QString statusDir; +#endif + QString aktSection; + QString aktSubSection; + QStringList sections; + QDict subSections; + QDict sectionsDict; + + + void updateSections( Package* ); + void parseStatus(); + void parseList(); + void readFileEntries( QString ); +}; + + +#endif diff --git a/noncore/unsupported/oipkg/packagelistitem.cpp b/noncore/unsupported/oipkg/packagelistitem.cpp new file mode 100644 index 0000000..5d08bb1 --- a/dev/null +++ b/noncore/unsupported/oipkg/packagelistitem.cpp @@ -0,0 +1,97 @@ +#include "packagelistitem.h" + +#include + +static QPixmap *pm_uninstalled=0; +static QPixmap *pm_installed=0; +static QPixmap *pm_uninstall=0; +static QPixmap *pm_install=0; + +PackageListItem::PackageListItem(QListView* lv, Package *pi) + : QCheckListItem(lv,pi->name(),CheckBox) +{ + package = pi; + if (!pm_uninstalled) { + pm_uninstalled = new QPixmap(Resource::loadPixmap("oipkg/uninstalled")); + pm_installed = new QPixmap(Resource::loadPixmap("oipkg/installed")); + pm_install = new QPixmap(Resource::loadPixmap("oipkg/install")); + pm_uninstall = new QPixmap(Resource::loadPixmap("oipkg/uninstall")); + } + setText(1, package->shortDesc() ); + setText(2, package->size() ); +} + +void PackageListItem::paintCell( QPainter *p, const QColorGroup & cg, + int column, int width, int alignment ) +{ + if ( !p ) + return; + + p->fillRect( 0, 0, width, height(), + isSelected()? cg.highlight() : cg.base() ); + + if ( column != 0 ) { + // The rest is text + QListViewItem::paintCell( p, cg, column, width, alignment ); + return; + } + + QListView *lv = listView(); + if ( !lv ) + return; + int marg = lv->itemMargin(); + int r = marg; + + QPixmap pm = statePixmap(); + p->drawPixmap(marg,(height()-pm.height())/2,pm); + r += pm.width()+1; + + p->translate( r, 0 ); + QListViewItem::paintCell( p, cg, column, width - r, alignment ); +} + + +void PackageListItem::paintFocus( QPainter *p, const QColorGroup & cg, + const QRect & r ) +{ + // Skip QCheckListItem + // (makes you wonder what we're getting from QCheckListItem) + QListViewItem::paintFocus(p,cg,r); +} + +QPixmap PackageListItem::statePixmap() const +{ + bool installed = package->installed(); + if ( !package->toProcess() ) { + if ( !installed ) + return *pm_uninstalled; + else + return *pm_installed; + } else { + if ( !installed ) + return *pm_install; + else + return *pm_uninstall; + } +} + +QString PackageListItem::key( int column, bool ascending ) const +{ + if ( column == 2 ) { + QString t = text(2); + double bytes=t.toDouble(); + if ( t.contains('M') ) bytes*=1024*1024; + else if ( t.contains('K') || t.contains('k') ) bytes*=1024; + if ( !ascending ) bytes=999999999-bytes; + return QString().sprintf("%09d",(int)bytes); + } else { + return QListViewItem::key(column,ascending); + } +} + +void PackageListItem::setOn( bool b ) +{ + QCheckListItem::setOn( b ); + package->toggleProcess(); + repaint(); +} diff --git a/noncore/unsupported/oipkg/packagelistitem.h b/noncore/unsupported/oipkg/packagelistitem.h new file mode 100644 index 0000000..6983e58 --- a/dev/null +++ b/noncore/unsupported/oipkg/packagelistitem.h @@ -0,0 +1,31 @@ +#ifndef PK_LISTITEM_H +#define PK_LISTITEM_H + +#include "package.h" + +#include +#include +#include +#include +#include + +class PackageListItem +: public QCheckListItem +{ +public: + PackageListItem(QListView*, Package* ); + void paintCell( QPainter*, const QColorGroup&, int, int, int ); + void paintFocus( QPainter*, const QColorGroup&, const QRect& ); + QPixmap statePixmap() const; + QString key( int, bool ) const; + Package* getPackage() { return package; } ; + QString getName() { return package->name(); } ; + bool isInstalled(){ return package->installed(); }; + virtual void setOn ( bool ); + +private: + Package *package; +}; + + +#endif diff --git a/noncore/unsupported/oipkg/pkdesc.ui b/noncore/unsupported/oipkg/pkdesc.ui new file mode 100644 index 0000000..494d3d6 --- a/dev/null +++ b/noncore/unsupported/oipkg/pkdesc.ui @@ -0,0 +1,96 @@ + +PackageDetails + + QDialog + + name + Form7 + + + geometry + + 0 + 0 + 221 + 291 + + + + caption + (pkgname) + + + layoutMargin + + + layoutSpacing + + + + margin + 6 + + + spacing + 3 + + + QTextView + + name + description + + + + QLayoutWidget + + name + Layout4 + + + + margin + 0 + + + spacing + 6 + + + QToolButton + + name + install + + + text + Install + + + + QToolButton + + name + remove + + + text + Remove + + + + QToolButton + + name + ignore + + + text + Ignore + + + + + + + diff --git a/noncore/unsupported/oipkg/pkfind.ui b/noncore/unsupported/oipkg/pkfind.ui new file mode 100644 index 0000000..7a24c00 --- a/dev/null +++ b/noncore/unsupported/oipkg/pkfind.ui @@ -0,0 +1,51 @@ + +Search + + QDialog + + name + Form5 + + + geometry + + 0 + 0 + 196 + 55 + + + + caption + Search Packages + + + + margin + 11 + + + spacing + 6 + + + QLabel + + name + TextLabel4 + + + text + Find: + + + + QLineEdit + + name + pattern + + + + + diff --git a/noncore/unsupported/oipkg/pksettings.cpp b/noncore/unsupported/oipkg/pksettings.cpp new file mode 100644 index 0000000..32224b5 --- a/dev/null +++ b/noncore/unsupported/oipkg/pksettings.cpp @@ -0,0 +1,487 @@ +#include "pksettings.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include "debug.h" + +PackageManagerSettings::PackageManagerSettings( QWidget* parent, const char* name, WFlags fl ) + : PackageManagerSettingsBase( parent, name, fl ) +{ + connect( newserver, SIGNAL(clicked()), this, SLOT(newServer()) ); + connect( removeserver, SIGNAL(clicked()), this, SLOT(removeServer()) ); + connect( servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) ); + connect( newdestination, SIGNAL(clicked()), this, SLOT(newDestination()) ); + connect( removedestination, SIGNAL(clicked()), this, SLOT(removeDestination()) ); + connect( destinations, SIGNAL(highlighted(int)), this, SLOT(editDestination(int)) ); + // connect( CheckBoxLink, SIGNAL(toggled(bool)), + // activeLinkDestination, SLOT(setEnabled(bool)) ); + + connect( settingName, SIGNAL(activated(int)), this, SLOT(installationSettingChange(int)) ); + connect( settingName, SIGNAL(textChanged(const QString &)), this, SLOT(installationSettingSetName(const QString &)) ); + connect( newsetting, SIGNAL(clicked()), this, SLOT(newInstallationSetting()) ); + connect( renamesetting, SIGNAL(clicked()), this, SLOT(renameInstallationSetting()) ); + connect( removesetting, SIGNAL(clicked()), this, SLOT(removeInstallationSetting()) ); + servername->setEnabled(FALSE); + serverurl->setEnabled(FALSE); + serverurlDic.setAutoDelete(TRUE); + destinationname->setEnabled(FALSE); + destinationurl->setEnabled(FALSE); + destinationurlDic.setAutoDelete(TRUE); + readSettings(); +} + +PackageManagerSettings::~PackageManagerSettings() +{ +} + + +void PackageManagerSettings::newServer() +{ + int i = servers->count(); + if ( servername->isEnabled() || serverurl->text().isEmpty() ) { + serverurlDic.insert(i,new QString("http://")); + servers->insertItem(tr("New")); + activeServers->insertItem(tr("New")); + } else { + // allows one-level undo + serverurlDic.insert(i,new QString(serverurl->text())); + servers->insertItem(servername->text()); + activeServers->insertItem(servername->text()); + } + servers->setSelected(i,TRUE); + editServer(i); +} + +void PackageManagerSettings::newDestination() +{ + int i = destinations->count(); + if ( destinationname->isEnabled() || destinationurl->text().isEmpty() ) { + destinationurlDic.insert(i,new QString("/")); + destinations->insertItem(tr("New")); + activeDestination->insertItem(tr("New")); + activeLinkDestination->insertItem(tr("New")); + } else { + // allows one-level undo + destinationurlDic.insert(i,new QString(destinationurl->text())); + destinations->insertItem(destinationname->text()); + activeDestination->insertItem(destinationname->text()); + activeLinkDestination->insertItem(destinationname->text()); + } + destinations->setSelected(i,TRUE); + editDestination(i); +} + + +void PackageManagerSettings::editServer(int i) +{ + if ( servername->isEnabled() ) { + disconnect( servername, SIGNAL(textChanged(const QString&)), this, SLOT(serverNameChanged(const QString&)) ); + disconnect( serverurl, SIGNAL(textChanged(const QString&)), this, SLOT(serverUrlChanged(const QString&)) ); + } else { + servername->setEnabled(TRUE); + serverurl->setEnabled(TRUE); + } + + servername->setText( servers->text(i) ); + serverurl->setText( *serverurlDic[i] ); + + editedserver = i; + + connect( servername, SIGNAL(textChanged(const QString&)), this, SLOT(serverNameChanged(const QString&)) ); + connect( serverurl, SIGNAL(textChanged(const QString&)), this, SLOT(serverUrlChanged(const QString&)) ); +} + + +void PackageManagerSettings::editDestination(int i) +{ + if ( destinationname->isEnabled() ) { + disconnect( destinationname, SIGNAL(textChanged(const QString&)), this, SLOT(destNameChanged(const QString&)) ); + disconnect( destinationurl, SIGNAL(textChanged(const QString&)), this, SLOT(destUrlChanged(const QString&)) ); + } else { + destinationname->setEnabled(TRUE); + destinationurl->setEnabled(TRUE); + } + + destinationname->setText( destinations->text(i) ); + destinationurl->setText( *destinationurlDic[i] ); + + editeddestination = i; + + connect( destinationname, SIGNAL(textChanged(const QString&)), this, SLOT(destNameChanged(const QString&)) ); + connect( destinationurl, SIGNAL(textChanged(const QString&)), this, SLOT(destUrlChanged(const QString&)) ); +} + +void PackageManagerSettings::removeServer() +{ + disconnect( servername, SIGNAL(textChanged(const QString&)), this, SLOT(serverNameChanged(const QString&)) ); + disconnect( serverurl, SIGNAL(textChanged(const QString&)), this, SLOT(serverUrlChanged(const QString&)) ); + servername->setText(servers->text(editedserver)); + serverurl->setText(*serverurlDic[editedserver]); + disconnect( servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) ); + servers->removeItem(editedserver); + activeServers->removeItem(editedserver); + connect( servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) ); + servername->setEnabled(FALSE); + serverurl->setEnabled(FALSE); +} + +void PackageManagerSettings::removeDestination() +{ + disconnect( destinationname, SIGNAL(textChanged(const QString&)), this, SLOT(destNameChanged(const QString&)) ); + disconnect( destinationurl, SIGNAL(textChanged(const QString&)), this, SLOT(destUrlChanged(const QString&)) ); + destinationname->setText(destinations->text(editedserver)); + destinationurl->setText(*destinationurlDic[editedserver]); + disconnect( destinations, SIGNAL(highlighted(int)), this, SLOT(editDestination(int)) ); + destinations->removeItem(editeddestination); + activeDestination->removeItem(editeddestination); + activeLinkDestination->removeItem(editeddestination); + connect( destinations, SIGNAL(highlighted(int)), this, SLOT(editDestination(int)) ); + destinationname->setEnabled(FALSE); + destinationurl->setEnabled(FALSE); +} + +void PackageManagerSettings::serverNameChanged(const QString& t) +{ + disconnect( servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) ); + servers->changeItem( t, editedserver ); + activeServers->changeItem( t, editedserver ); + connect( servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) ); +} + +void PackageManagerSettings::destNameChanged(const QString& t) +{ + disconnect( destinations, SIGNAL(highlighted(int)), this, SLOT(editDestination(int)) ); + destinations->changeItem( t, editeddestination ); + activeDestination->changeItem( t, editeddestination ); + activeLinkDestination->changeItem( t, editeddestination ); + connect( destinations, SIGNAL(highlighted(int)), this, SLOT(editDestination(int)) ); +} + +void PackageManagerSettings::serverUrlChanged(const QString& t) +{ + serverurlDic.replace(editedserver, new QString(t)); +} + +void PackageManagerSettings::destUrlChanged(const QString& t) +{ + destinationurlDic.replace(editeddestination, new QString(t)); +} + +void PackageManagerSettings::writeIpkgConfig(const QString& conffile) +{ + QFile conf(conffile); + if ( ! conf.open(IO_WriteOnly) ) return; + QTextStream s(&conf); + s << "# Written by qpie Package Manager\n"; + for (int i=0; i<(int)activeServers->count(); i++) + { + QString url = serverurlDic[i] ? *serverurlDic[i] : QString("???"); + if ( !activeServers->isSelected(i) ) + s << "#"; + s << "src " << activeServers->text(i) << " " << url << "\n"; + } + for (int i=0; i<(int)destinations->count(); i++) + { + QString url = destinationurlDic[i] ? *destinationurlDic[i] : QString("???"); + s << "dest " << destinations->text(i) << " " << url << "\n"; + } + conf.close(); +} + + +void PackageManagerSettings::readInstallationSettings() +{ + Config cfg( "oipkg", Config::User ); + cfg.setGroup( "Settings" ); + installationSettingsCount = cfg.readNumEntry( "count", -1 ); + currentSetting = cfg.readNumEntry( "current", 0 );// o should be -1 + + for (int i = 0; i < installationSettingsCount; i++) + { + cfg.setGroup( "Setting_" + QString::number(i) ); + settingName->insertItem( cfg.readEntry( "name", "???" ), i ); + }; + readInstallationSetting( currentSetting ); +} + + + +/** + * remove from conf file + */ +void PackageManagerSettings::removeInstallationSetting() +{ + settingName->removeItem( settingName->currentItem() ); + Config cfg( "oipkg", Config::User ); + cfg.setGroup( "Setting_" + QString::number( installationSettingsCount ) ); + cfg.clearGroup(); + installationSettingsCount--; + changed = true; + settingName->setEditable( false ); +} + +/** + * write to confgile + */ +void PackageManagerSettings::newInstallationSetting() +{ + installationSettingsCount++; + settingName->insertItem( "New", installationSettingsCount ); + settingName->setCurrentItem( installationSettingsCount ); + settingName->setEditable( true ); + changed = true; +} + +void PackageManagerSettings::installationSettingChange(int cs) +{ + writeCurrentInstallationSetting(); + currentSetting = cs; + readInstallationSetting( cs ); +} + +void PackageManagerSettings::writeInstallationSettings() +{ + if ( ! changed ) return ; + { + Config cfg( "oipkg", Config::User ); + cfg.setGroup( "Settings" ); + cfg.writeEntry( "count", installationSettingsCount ); + cfg.writeEntry( "current", currentSetting ); + } + writeCurrentInstallationSetting(); +} + + +void PackageManagerSettings::readInstallationSetting(int setting) +{ + if ( setting < 0 ) return; + Config cfg( "oipkg", Config::User ); + cfg.setGroup( "Setting_" + QString::number( setting ) ); + CheckBoxLink->setChecked( cfg.readBoolEntry( "link", false ) ); + QString dest = cfg.readEntry( "dest" ); + QString linkdest = cfg.readEntry( "linkdest" ); + pvDebug(3, "dest="+dest); + pvDebug(3, "linkdest="+linkdest); + + for ( int i = 0; i < activeDestination->count(); i++) + { + if ( activeDestination->text( i ) == dest ) + activeDestination->setCurrentItem( i ); + if ( activeLinkDestination->text( i ) == linkdest ) + activeLinkDestination->setCurrentItem( i ); + } +} + +void PackageManagerSettings::writeCurrentInstallationSetting() +{ + Config cfg( "oipkg", Config::User ); + changed = false; + cfg.setGroup( "Setting_" + QString::number(currentSetting) ); + cfg.writeEntry( "link", CheckBoxLink->isChecked() ); + cfg.writeEntry( "dest", getDestinationName() ); + cfg.writeEntry( "linkdest" , getLinkDestinationName() ); + QStringList sers = getActiveServers(); + int srvc = 0; + for ( QStringList::Iterator it = sers.begin(); it != sers.end(); ++it ) { + cfg.writeEntry( "server_" + QString::number(srvc++), *it ); + } + cfg.writeEntry( "server_count", srvc ); +} + +void PackageManagerSettings::renameInstallationSetting() +{ + settingName->setEditable( true ); + changed = true; +} + +void PackageManagerSettings::installationSettingSetName(const QString &name) +{ + settingName->changeItem( name, settingName->currentItem() ); + changed = true; +} + + +bool PackageManagerSettings::readIpkgConfig(const QString& conffile) +{ + QFile conf(conffile); + if ( conf.open(IO_ReadOnly) ) { + QTextStream s(&conf); + servers->clear(); + activeServers->clear(); + activeDestination->clear(); + activeLinkDestination->clear(); + serverurlDic.clear(); + destinationurlDic.clear(); + ipkg_old=0; + int currentserver=0; + while ( !s.atEnd() ) { + QString l = s.readLine(); + QStringList token = QStringList::split(' ', l); + if ( token[0] == "src" || token[0] == "#src" ) { + currentserver=servers->count(); + serverurlDic.insert(servers->count(),new QString(token[2])); + int a = token[0] == "src" ? 1 : 0; + int i = servers->count(); + servers->insertItem(token[1]); + activeServers->insertItem( token[1] ); + activeServers->setSelected(i,a); + } else if ( token[0] == "dest" ) { + currentserver=destinations->count(); + destinationurlDic.insert(destinations->count(),new QString(token[2])); + destinations->insertItem(token[1]); + activeDestination->insertItem( token[1] ); + activeLinkDestination->insertItem( token[1] ); + + } else if ( token[0] == "option" ) { + // ### somehow need to use the settings from netsetup + // if ( token[1] == "http_proxy" ) + // http->setText(token[2]); + // else if ( token[1] == "ftp_proxy" ) + // ftp->setText(token[2]); + // else if ( token[1] == "proxy_username" ) + // username->setText(token[2]); + // else if ( token[1] == "proxy_password" ) + // password->setText(token[2]); + } else { + // Old style? + int eq = l.find('='); + if ( eq >= 0 ) { + QString v = l.mid(eq+1).stripWhiteSpace(); + if ( v[0] == '"' || v[0] == '\'' ) { + int cl=v.find(v[0],1); + if ( cl >= 0 ) + v = v.mid(1,cl-1); + } + if ( l.left(12) == "IPKG_SOURCE=" ) { + ipkg_old=1; + currentserver=servers->count(); + serverurlDic.insert(servers->count(),new QString(v)); + servers->insertItem(v); + } else if ( l.left(13) == "#IPKG_SOURCE=" ) { + serverurlDic.insert(servers->count(),new QString(v)); + servers->insertItem(v); + } else if ( l.left(10) == "IPKG_ROOT=" ) { + // ### no UI + // } else if ( l.left(20) == "IPKG_PROXY_USERNAME=" ) { + // username->setText(v); + // } else if ( l.left(20) == "IPKG_PROXY_PASSWORD=" ) { + // password->setText(v); + // } else if ( l.left(16) == "IPKG_PROXY_HTTP=" ) { + // http->setText(v); + // } else if ( l.left(16) == "IPKG_PROXY_FTP=" ) { + // ftp->setText(v); + } + } + } + } + if ( ipkg_old ) { + servers->setSelectionMode(QListBox::Single); + servers->setSelected(currentserver,TRUE); + } + return TRUE; + } else { + return FALSE; + } +} + + +/** + * read from config file(s) + */ +void PackageManagerSettings::readSettings() +{ + readIpkgConfig("/etc/ipkg.conf"); + readInstallationSettings(); +} + +void PackageManagerSettings::writeSettings() +{ + writeIpkgConfig("/etc/ipkg.conf"); + writeInstallationSettings(); +} +/** shows the setting dialog */ +bool PackageManagerSettings::showDialog( int i ) +{ + TabWidget->setCurrentPage( i ); + showMaximized(); + bool ret = exec(); + if ( ret ) writeSettings(); + else readSettings(); + return ret; +} +/** Returns the installation destination */ +QString PackageManagerSettings::getDestinationName() +{ + return activeDestination->currentText(); +} +/** Returns the link destination */ +QString PackageManagerSettings::getLinkDestinationName() +{ + return activeLinkDestination->currentText(); +} +/** Returns the URL of the active destination */ +QString PackageManagerSettings::getDestinationUrl() +{ + int dnr = activeDestination->currentItem(); + return *destinationurlDic.find(dnr); +} +/** Should oipkg create links form install destination to link destination */ +bool PackageManagerSettings::createLinks() +{ + return CheckBoxLink->isChecked(); +} +/** get the servers that are active */ +QStringList PackageManagerSettings::getActiveServers() +{ + QStringList sl; + for (int i=0; i<(int)activeServers->count(); i++) + { + if ( activeServers->isSelected(i) ) + sl += activeServers->text(i); + } + return sl; +} +/** returns the destination listed in ipkg.conf */ +QStringList PackageManagerSettings::getDestinationUrls() +{ + QStringList sl; + for (int i=0; i<(int)destinations->count(); i++) + { + sl += *destinationurlDic[i]; + } + return sl; +} + +void PackageManagerSettings::linkEnabled( bool b ) +{ + changed = true; + activeLinkDestination->setEnabled( b ); +} diff --git a/noncore/unsupported/oipkg/pksettings.h b/noncore/unsupported/oipkg/pksettings.h new file mode 100644 index 0000000..cda352a --- a/dev/null +++ b/noncore/unsupported/oipkg/pksettings.h @@ -0,0 +1,62 @@ +#ifndef PACKAGEMANAGERSETTINGS_H +#define PACKAGEMANAGERSETTINGS_H + +#include "pksettingsbase.h" +#include + + +class PackageManagerSettings : private PackageManagerSettingsBase +{ +// Q_OBJECT +public: + PackageManagerSettings( QWidget* , const char* , WFlags ); + ~PackageManagerSettings(); + + bool showDialog( int ) ; + QString getDestinationUrl(); + QString getDestinationName(); + QString getLinkDestinationName(); + bool createLinks(); + QStringList getActiveServers(); + QStringList getDestinationUrls(); + +private: + QIntDict serverurlDic; + QIntDict destinationurlDic; + int ipkg_old; + int editedserver; + int editeddestination; + int currentSetting; + int installationSettingsCount; + bool changed; + + bool readIpkgConfig(const QString&); + void writeIpkgConfig(const QString&); + void writeSettings(); + void readSettings(); + +public slots: + void writeInstallationSettings(); + void readInstallationSettings(); + void writeCurrentInstallationSetting(); + void readInstallationSetting(int); + void installationSettingSetName(const QString &); + + void newServer(); + void editServer(int); + void removeDestination(); + void newDestination(); + void editDestination(int); + void linkEnabled(bool); + void removeServer(); + void serverNameChanged(const QString&); + void serverUrlChanged(const QString&); + void destNameChanged(const QString&); + void destUrlChanged(const QString&); + void installationSettingChange(int); + void newInstallationSetting(); + void removeInstallationSetting(); + void renameInstallationSetting(); +}; + +#endif diff --git a/noncore/unsupported/oipkg/pksettingsbase.ui b/noncore/unsupported/oipkg/pksettingsbase.ui new file mode 100644 index 0000000..2efd2f3 --- a/dev/null +++ b/noncore/unsupported/oipkg/pksettingsbase.ui @@ -0,0 +1,744 @@ + +PackageManagerSettingsBase + + QDialog + + name + Form4 + + + geometry + + 0 + 0 + 357 + 454 + + + + caption + Package Servers + + + layoutMargin + + + layoutSpacing + + + + margin + 3 + + + spacing + 3 + + + QTabWidget + + name + TabWidget + + + enabled + true + + + layoutMargin + + + layoutSpacing + + + QWidget + + name + tab + + + title + Settings + + + + margin + 3 + + + spacing + 3 + + + QLayoutWidget + + name + Layout3_2 + + + + margin + 0 + + + spacing + 6 + + + QLabel + + name + Settings + + + text + Installation Setups + + + + + name + Spacer2_2_2 + + + orientation + Horizontal + + + sizeType + Expanding + + + sizeHint + + 20 + 20 + + + + + + + QLayoutWidget + + name + Layout8 + + + + margin + 0 + + + spacing + 6 + + + QLabel + + name + TextLabel1 + + + text + Install destination: + + + + QComboBox + + name + activeDestination + + + + + + QLayoutWidget + + name + Layout9 + + + + margin + 0 + + + spacing + 6 + + + QCheckBox + + name + CheckBoxLink + + + text + Link Destination: + + + + QComboBox + + name + activeLinkDestination + + + enabled + false + + + + + + QLayoutWidget + + name + Layout13 + + + + margin + 0 + + + spacing + 6 + + + QLabel + + name + TextLabel1_2 + + + text + Used servers: + + + + + name + Spacer4 + + + orientation + Horizontal + + + sizeType + Expanding + + + sizeHint + + 20 + 20 + + + + + + + QListBox + + name + activeServers + + + enabled + true + + + selectionMode + Multi + + + + QComboBox + + name + settingName + + + enabled + true + + + focusPolicy + NoFocus + + + editable + false + + + + QLayoutWidget + + name + Layout11 + + + + margin + 0 + + + spacing + 6 + + + QPushButton + + name + newsetting + + + enabled + true + + + text + New + + + autoDefault + false + + + + QPushButton + + name + renamesetting + + + enabled + true + + + text + Rename + + + + QPushButton + + name + removesetting + + + enabled + true + + + text + Remove + + + autoDefault + false + + + + + + + + QWidget + + name + tab + + + title + Servers + + + + margin + 3 + + + spacing + 3 + + + QLayoutWidget + + name + Layout4 + + + + margin + 0 + + + spacing + 6 + + + QLineEdit + + name + servername + + + + QLabel + + name + TextLabel1_3 + + + text + Name: + + + + QLineEdit + + name + serverurl + + + + QLabel + + name + TextLabel2_3 + + + text + URL: + + + + + + QLayoutWidget + + name + Layout2 + + + + margin + 0 + + + spacing + 6 + + + QLabel + + name + Servers + + + text + Servers + + + + + name + Spacer2 + + + orientation + Horizontal + + + sizeType + Expanding + + + sizeHint + + 20 + 20 + + + + + + + QListBox + + name + servers + + + selectionMode + Extended + + + + QPushButton + + name + removeserver + + + enabled + true + + + text + Remove + + + autoDefault + false + + + + QPushButton + + name + newserver + + + enabled + true + + + text + New + + + autoDefault + false + + + + + + QWidget + + name + tab + + + title + Destinations + + + + margin + 3 + + + spacing + 3 + + + QLayoutWidget + + name + Layout3 + + + + margin + 0 + + + spacing + 6 + + + QLabel + + name + Destinations + + + text + Destinations + + + + + name + Spacer2_2 + + + orientation + Horizontal + + + sizeType + Expanding + + + sizeHint + + 20 + 20 + + + + + + + QListBox + + name + destinations + + + selectionMode + Single + + + + QLayoutWidget + + name + Layout5 + + + + margin + 0 + + + spacing + 6 + + + QPushButton + + name + newdestination + + + enabled + true + + + text + New + + + autoDefault + false + + + + QPushButton + + name + removedestination + + + enabled + true + + + text + Remove + + + autoDefault + false + + + + + + QLayoutWidget + + name + Layout11 + + + layoutMargin + + + layoutSpacing + + + + margin + 3 + + + spacing + 3 + + + QLabel + + name + TextLabel1_3_2_2 + + + text + URL: + + + + QLineEdit + + name + destinationname + + + + QLineEdit + + name + destinationurl + + + + QLabel + + name + TextLabel1_3_2 + + + text + Name: + + + + + + + + + + + + CheckBoxLink + toggled(bool) + Form4 + linkEnabled(bool) + + destNameChanged(const QString&) + destUrlChanged(const QString&) + editDestination(int) + editServer(int) + installationSettingChange(int) + installationSettingSetName(const QString &) + linkEnabled(bool) + newDestination() + newInstallationSetting() + newServer() + removeDestination() + removeInstallationSetting() + removeServer() + renameInstallationSetting() + serverNameChanged(const QString&) + serverUrlChanged(const QString&) + + diff --git a/noncore/unsupported/oipkg/pkwindow.ui b/noncore/unsupported/oipkg/pkwindow.ui new file mode 100644 index 0000000..9e44338 --- a/dev/null +++ b/noncore/unsupported/oipkg/pkwindow.ui @@ -0,0 +1,147 @@ + +PackageWindow + + QWidget + + name + PackageWindow + + + geometry + + 0 + 0 + 254 + 298 + + + + caption + PackageWindow + + + layoutMargin + + + layoutSpacing + + + + margin + 2 + + + spacing + 2 + + + QLayoutWidget + + name + Layout5 + + + layoutSpacing + + + + margin + 0 + + + spacing + 1 + + + QLabel + + name + LabelSection + + + text + Section: + + + + QComboBox + + name + section + + + sizePolicy + + 0 + 0 + + + + + QComboBox + + name + subsection + + + sizePolicy + + 0 + 0 + + + + + + + QListView + + + text + Package + + + clickable + true + + + resizeable + true + + + + + text + Description + + + clickable + true + + + resizeable + true + + + + + text + Size + + + clickable + true + + + resizeable + true + + + + name + ListViewPackages + + + + + diff --git a/noncore/unsupported/oipkg/pmipkg.cpp b/noncore/unsupported/oipkg/pmipkg.cpp new file mode 100644 index 0000000..528365e --- a/dev/null +++ b/noncore/unsupported/oipkg/pmipkg.cpp @@ -0,0 +1,183 @@ +#include "pmipkg.h" +#include "pkdesc.h" +#include "pkfind.h" +#include "pksettings.h" +#include "package.h" +#include "packagelistitem.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "mainwindow.h" +#include "runwindow.h" + + +PmIpkg::PmIpkg( PackageManagerSettings* s, QWidget* p, const char * name, WFlags f ) + : RunWindow ( p, name, f ) + // : QObject ( p ) +{ + settings = s; + + linkDest = new QCopChannel( "QPE/MakeLinks", this ); + connect( linkDest, SIGNAL(received(const QCString &, const QByteArray &)), + this, SLOT(linkDestination( const QString &, const QString&)) ); +} + +PmIpkg::~PmIpkg() +{ +} + +int PmIpkg::runIpkg(const QString& args) +{ + pvDebug(4,"PmIpkg::runIpkg"); + QString cmd = "/usr/bin/ipkg "; + cmd += " -dest "+settings->getDestinationName(); + cmd += " -force-defaults "; + + outPut->setText( outPut->text()+"

Starting to "+ args+"
\n"); + QString redirect = "/tmp/ipkg.pipe"; + cmd += args+" | tee "+redirect+" 2>&1&"; + + outPut->setText( outPut->text() + "running:
\n"+cmd+"
\n" ); + pvDebug( 0, "Execute >"+cmd+"<" ); + int r = system(cmd.latin1()); + QFile f( redirect ); + if ( f.open(IO_ReadOnly) ) { + QTextStream t( &f ); + QString fp; + while ( !t.eof() ) + { + outPut->setText( outPut->text() + t.readLine() +"\n
" ); + } + } + f.close(); + outPut->setText( outPut->text() + "\n

Finished!"); + outPut->setContentsPos(0,outPut->contentsHeight()); + + if ( r == 0 ) + { + QString param = args.left( args.find(" ") ); + QString file = args.right( args.length() - args.find(" ") ); + if ( param == "install" && settings->createLinks() ) + makeLinks( file); + } + + return r; +} + +void PmIpkg::makeLinks(QString file) +{ + outPut->setText( outPut->text() + "
creating links
" ); + QString dest = settings->getDestinationUrl(); + system(("ipkg -d "+dest+" files "+file+"> /tmp/oipkg.pipe").latin1()); + QFile f( "/tmp/oipkg.pipe" ); + if ( ! f.open(IO_ReadOnly) )return; + QTextStream t( &f ); + QString fp; + while ( !t.eof() ) + { + processLinkDir( t.readLine(), dest ); + } + f.close(); +} + +void PmIpkg::processLinkDir( QString file, QString dest ) +{ + QString destFile = file.right( file.length() - dest.length() ); + QFileInfo fileInfo( file ); + if ( fileInfo.isFile() ) + { + const char *instFile = strdup( (file).ascii() ); + const char *linkFile = strdup( (destFile).ascii()); + outPut->setText( outPut->text() + "linking: "+file+" -> "+destFile ); + symlink( instFile, linkFile ); + } + if ( fileInfo.isDir() ) + { + QDir destDir( destFile ); + destDir.mkdir( destFile, true ); + QDir d( file ); + d.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks ); + + const QFileInfoList *list = d.entryInfoList(); + QFileInfoListIterator it( *list ); + QFileInfo *fi; + while ( (fi=it.current()) ) { + processLinkDir( fi->absFilePath(), dest ); + ++it; + } + } +} + +void PmIpkg::commit( PackageList pl ) +{ + showMaximized(); + exec(); + outPut->setText( "Starting...
\n"); + QStringList to_remove, to_install; + + QString rem="To remove:
\n"; + QString inst="To install:
\n";; + for( Package *pack = pl.first();pack ; (pack = pl.next()) ) + { + if ( pack && (pack->name() != "") && pack) + { + if ( pack->toInstall() ) + { + to_install.append( pack->name() ); + inst += pack->name()+"\n"; + } + if ( pack->toRemove() ) + { + to_remove.append( pack->name() ); + rem += pack->name()+"\n"; + } + } + } + + outPut->setText( outPut->text()+inst+rem); + bool ok=TRUE; + + qDebug("to remove=%i; to install=%i",to_remove.count(),to_install.count()); + + int jobs = to_remove.count()+to_install.count(); + if ( jobs < 1 ) return; + + if ( to_remove.count() ) + for (QStringList::ConstIterator it=to_remove.begin(); it!=to_remove.end(); ++it) + if ( runIpkg("remove " + *it) != 0 ) ok = false; + if ( to_install.count() ) + for (QStringList::ConstIterator it=to_install.begin(); it!=to_install.end(); ++it) + if ( runIpkg("install " + *it) != 0 ) ok = false; + + // ##### If we looked in the list of files, we could send out accurate + // ##### messages. But we don't bother yet, and just do an "all". + QCopEnvelope e("QPE/System", "linkChanged(QString)"); + QString lf = QString::null; + e << lf; +} + +void PmIpkg::linkDestination( QString src, QString dest ) +{ + QDir d( src ); + d.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks ); + if (! d.exists() ) return; + const QFileInfoList *list = d.entryInfoList(); + QFileInfoListIterator it( *list ); + QFileInfo *fi; + while ( (fi=it.current()) ) { + processLinkDir( fi->absFilePath(), dest ); + ++it; + } +} diff --git a/noncore/unsupported/oipkg/pmipkg.h b/noncore/unsupported/oipkg/pmipkg.h new file mode 100644 index 0000000..98efaa6 --- a/dev/null +++ b/noncore/unsupported/oipkg/pmipkg.h @@ -0,0 +1,42 @@ +#ifndef PMIPKG_H +#define PMIPKG_H + + +#include +#include +#include +#include "pksettings.h" +#include "runwindow.h" +#include "packagelist.h" +#include "debug.h" + + +#include + +class PmIpkg : public RunWindow +//class PmIpkg : public QObject +{ + Q_OBJECT +public: + PmIpkg( PackageManagerSettings* , QWidget* p=0, const char * name=0, WFlags f=0 ); + // PmIpkg( QObject*, PackageManagerSettings* ); + ~PmIpkg(); + + PackageList* getPackageList(); + +private: + PackageManagerSettings* settings; + QCopChannel *linkDest; + void processLinkDir( QString, QString ); + + +public: + void makeLinks(QString); + int runIpkg(const QString& args); + void commit( PackageList ); + +public slots: + void linkDestination( QString, QString ); +}; + +#endif diff --git a/noncore/unsupported/oipkg/runwindow.ui b/noncore/unsupported/oipkg/runwindow.ui new file mode 100644 index 0000000..23f58cf --- a/dev/null +++ b/noncore/unsupported/oipkg/runwindow.ui @@ -0,0 +1,63 @@ + +RunWindow + + QDialog + + name + RunWindow + + + geometry + + 0 + 0 + 201 + 291 + + + + caption + running... + + + layoutMargin + + + layoutSpacing + + + + margin + 5 + + + spacing + 2 + + + QProgressBar + + name + progress + + + progress + 0 + + + + QTextView + + name + outPut + + + font + + 6 + + + + + + diff --git a/noncore/unsupported/oipkg/settings.cpp b/noncore/unsupported/oipkg/settings.cpp new file mode 100644 index 0000000..2b324be --- a/dev/null +++ b/noncore/unsupported/oipkg/settings.cpp @@ -0,0 +1,436 @@ +#include "pksettings.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +PackageManagerSettings::PackageManagerSettings( QWidget* parent, const char* name, WFlags fl ) + : PackageManagerSettingsBase( parent, name, fl ) +{ + connect( newserver, SIGNAL(clicked()), this, SLOT(newServer()) ); + connect( removeserver, SIGNAL(clicked()), this, SLOT(removeServer()) ); + connect( servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) ); + connect( newdestination, SIGNAL(clicked()), this, SLOT(newDestination()) ); + connect( removedestination, SIGNAL(clicked()), this, SLOT(removeDestination()) ); + connect( destinations, SIGNAL(highlighted(int)), this, SLOT(editDestination(int)) ); + // connect( CheckBoxLink, SIGNAL(toggled(bool)), + // activeLinkDestination, SLOT(setEnabled(bool)) ); + + connect( settingName, SIGNAL(activated(int)), this, SLOT(installationSettingChange(int)) ); + connect( settingName, SIGNAL(textChanged(const QString &)), this, SLOT(installationSettingSetName(const QString &)) ); + connect( newsetting, SIGNAL(clicked()), this, SLOT(newInstallationSetting()) ); + connect( renamesetting, SIGNAL(clicked()), this, SLOT(renameInstallationSetting()) ); + connect( removesetting, SIGNAL(clicked()), this, SLOT(removeInstallationSetting()) ); + servername->setEnabled(FALSE); + serverurl->setEnabled(FALSE); + serverurlDic.setAutoDelete(TRUE); + destinationname->setEnabled(FALSE); + destinationurl->setEnabled(FALSE); + destinationurlDic.setAutoDelete(TRUE); + readSettings(); +} + +PackageManagerSettings::~PackageManagerSettings() +{ +} + + +void PackageManagerSettings::newServer() +{ + int i = servers->count(); + if ( servername->isEnabled() || serverurl->text().isEmpty() ) { + serverurlDic.insert(i,new QString("http://")); + servers->insertItem(tr("New")); + activeServers->insertItem(tr("New")); + } else { + // allows one-level undo + serverurlDic.insert(i,new QString(serverurl->text())); + servers->insertItem(servername->text()); + activeServers->insertItem(servername->text()); + } + servers->setSelected(i,TRUE); + editServer(i); +} + +void PackageManagerSettings::newDestination() +{ + int i = destinations->count(); + if ( destinationname->isEnabled() || destinationurl->text().isEmpty() ) { + destinationurlDic.insert(i,new QString("/")); + destinations->insertItem(tr("New")); + activeDestination->insertItem(tr("New")); + activeLinkDestination->insertItem(tr("New")); + } else { + // allows one-level undo + destinationurlDic.insert(i,new QString(destinationurl->text())); + destinations->insertItem(destinationname->text()); + activeDestination->insertItem(destinationname->text()); + activeLinkDestination->insertItem(destinationname->text()); + } + destinations->setSelected(i,TRUE); + editDestination(i); +} + + +void PackageManagerSettings::editServer(int i) +{ + if ( servername->isEnabled() ) { + disconnect( servername, SIGNAL(textChanged(const QString&)), this, SLOT(serverNameChanged(const QString&)) ); + disconnect( serverurl, SIGNAL(textChanged(const QString&)), this, SLOT(serverUrlChanged(const QString&)) ); + } else { + servername->setEnabled(TRUE); + serverurl->setEnabled(TRUE); + } + + servername->setText( servers->text(i) ); + serverurl->setText( *serverurlDic[i] ); + + editedserver = i; + + connect( servername, SIGNAL(textChanged(const QString&)), this, SLOT(serverNameChanged(const QString&)) ); + connect( serverurl, SIGNAL(textChanged(const QString&)), this, SLOT(serverUrlChanged(const QString&)) ); +} + + +void PackageManagerSettings::editDestination(int i) +{ + if ( destinationname->isEnabled() ) { + disconnect( destinationname, SIGNAL(textChanged(const QString&)), this, SLOT(destNameChanged(const QString&)) ); + disconnect( destinationurl, SIGNAL(textChanged(const QString&)), this, SLOT(destUrlChanged(const QString&)) ); + } else { + destinationname->setEnabled(TRUE); + destinationurl->setEnabled(TRUE); + } + + destinationname->setText( destinations->text(i) ); + destinationurl->setText( *destinationurlDic[i] ); + + editeddestination = i; + + connect( destinationname, SIGNAL(textChanged(const QString&)), this, SLOT(destNameChanged(const QString&)) ); + connect( destinationurl, SIGNAL(textChanged(const QString&)), this, SLOT(destUrlChanged(const QString&)) ); +} + +void PackageManagerSettings::removeServer() +{ + disconnect( servername, SIGNAL(textChanged(const QString&)), this, SLOT(serverNameChanged(const QString&)) ); + disconnect( serverurl, SIGNAL(textChanged(const QString&)), this, SLOT(serverUrlChanged(const QString&)) ); + servername->setText(servers->text(editedserver)); + serverurl->setText(*serverurlDic[editedserver]); + disconnect( servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) ); + servers->removeItem(editedserver); + activeServers->removeItem(editedserver); + connect( servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) ); + servername->setEnabled(FALSE); + serverurl->setEnabled(FALSE); +} + +void PackageManagerSettings::removeDestination() +{ + disconnect( destinationname, SIGNAL(textChanged(const QString&)), this, SLOT(destNameChanged(const QString&)) ); + disconnect( destinationurl, SIGNAL(textChanged(const QString&)), this, SLOT(destUrlChanged(const QString&)) ); + destinationname->setText(destinations->text(editedserver)); + destinationurl->setText(*destinationurlDic[editedserver]); + disconnect( destinations, SIGNAL(highlighted(int)), this, SLOT(editDestination(int)) ); + destinations->removeItem(editeddestination); + activeDestination->removeItem(editeddestination); + activeLinkDestination->removeItem(editeddestination); + connect( destinations, SIGNAL(highlighted(int)), this, SLOT(editDestination(int)) ); + destinationname->setEnabled(FALSE); + destinationurl->setEnabled(FALSE); +} + +void PackageManagerSettings::serverNameChanged(const QString& t) +{ + disconnect( servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) ); + servers->changeItem( t, editedserver ); + activeServers->changeItem( t, editedserver ); + connect( servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) ); +} + +void PackageManagerSettings::destNameChanged(const QString& t) +{ + disconnect( destinations, SIGNAL(highlighted(int)), this, SLOT(editDestination(int)) ); + destinations->changeItem( t, editeddestination ); + activeDestination->changeItem( t, editeddestination ); + activeLinkDestination->changeItem( t, editeddestination ); + connect( destinations, SIGNAL(highlighted(int)), this, SLOT(editDestination(int)) ); +} + +void PackageManagerSettings::serverUrlChanged(const QString& t) +{ + serverurlDic.replace(editedserver, new QString(t)); +} + +void PackageManagerSettings::destUrlChanged(const QString& t) +{ + destinationurlDic.replace(editeddestination, new QString(t)); +} + +void PackageManagerSettings::writeIpkgConfig(const QString& conffile) +{ + QFile conf(conffile); + if ( ! conf.open(IO_WriteOnly) ) return; + QTextStream s(&conf); + s << "# Written by qpie Package Manager\n"; + for (int i=0; i<(int)activeServers->count(); i++) + { + QString url = serverurlDic[i] ? *serverurlDic[i] : QString("???"); + if ( !activeServers->isSelected(i) ) + s << "#"; + s << "src " << activeServers->text(i) << " " << url << "\n"; + } + for (int i=0; i<(int)destinations->count(); i++) + { + QString url = destinationurlDic[i] ? *destinationurlDic[i] : QString("???"); + s << "dest " << destinations->text(i) << " " << url << "\n"; + } + conf.close(); +} + + +void PackageManagerSettings::readInstallationSettings() +{ + Config cfg( "oipkg", Config::User ); + cfg.setGroup( "Settings" ); + installationSettingsCount = cfg.readNumEntry( "count", -1 ); + currentSetting = cfg.readNumEntry( "current", 0 ); + + for (int i = 0; i < installationSettingsCount; i++) + { + cfg.setGroup( "Setting_" + QString::number(i) ); + settingName->insertItem( cfg.readEntry( "name", "???" ), i ); + }; + readInstallationSetting( currentSetting ); +} + + +void PackageManagerSettings::removeInstallationSetting() +{ + settingName->removeItem( settingName->currentItem() ); + Config cfg( "oipkg", Config::User ); + cfg.setGroup( "Setting_" + QString::number( installationSettingsCount ) ); + cfg.clearGroup(); + installationSettingsCount--; + settingName->setEditable( false ); +} + +void PackageManagerSettings::newInstallationSetting() +{ + installationSettingsCount++; + settingName->insertItem( "New", installationSettingsCount ); + settingName->setCurrentItem( installationSettingsCount ); + settingName->setEditable( true ); +} + +void PackageManagerSettings::installationSettingChange(int cs) +{ + writeCurrentInstallationSetting(); + currentSetting = cs; + readInstallationSetting( cs ); +} + +void PackageManagerSettings::writeInstallationSettings() +{ + { + Config cfg( "oipkg", Config::User ); + cfg.setGroup( "Settings" ); + cfg.writeEntry( "count", installationSettingsCount ); + cfg.writeEntry( "current", currentSetting ); + writeCurrentInstallationSetting(); + } +} + + +void PackageManagerSettings::readInstallationSetting(int setting) +{ + if ( setting < 0 ) return; + Config cfg( "oipkg", Config::User ); + cfg.setGroup( "Setting_" + QString::number( setting ) ); + CheckBoxLink->setChecked( cfg.readBoolEntry( "link", false ) ); + QString dest = cfg.readEntry( "dest" ); + QString linkdest = cfg.readEntry( "linkdest" ); + + for ( int i = 0; i < activeDestination->count(); i++) + { + QString name = cfg.readEntry( "name" ); + if ( activeDestination->text( i ) == name ) + activeDestination->setCurrentItem( i ); + if ( activeLinkDestination->text( i ) == name ) + activeLinkDestination->setCurrentItem( i ); + } +} + +void PackageManagerSettings::writeCurrentInstallationSetting() +{ + Config cfg( "oipkg", Config::User ); + cfg.setGroup( "Setting_" + QString::number(currentSetting) ); + cfg.writeEntry( "link", CheckBoxLink->isChecked() ); + cfg.writeEntry( "dest", getDestinationName() ); + cfg.writeEntry( "linkdest" , getLinkDestinationName() ); + QStringList sers = getActiveServers(); + int srvc = 0; + for ( QStringList::Iterator it = sers.begin(); it != sers.end(); ++it ) { + cfg.writeEntry( "server_" + QString::number(srvc++), *it ); + } + cfg.writeEntry( "server_count", srvc ); +} + +void PackageManagerSettings::renameInstallationSetting() +{ + settingName->setEditable( true ); +} + +void PackageManagerSettings::installationSettingSetName(const QString &name) +{ + settingName->changeItem( name, settingName->currentItem() ); +} + + +bool PackageManagerSettings::readIpkgConfig(const QString& conffile) +{ + QFile conf(conffile); + if ( conf.open(IO_ReadOnly) ) { + QTextStream s(&conf); + servers->clear(); + activeServers->clear(); + activeDestination->clear(); + activeLinkDestination->clear(); + serverurlDic.clear(); + destinationurlDic.clear(); + ipkg_old=0; + int currentserver=0; + while ( !s.atEnd() ) { + QString l = s.readLine(); + QStringList token = QStringList::split(' ', l); + if ( token[0] == "src" || token[0] == "#src" ) { + currentserver=servers->count(); + serverurlDic.insert(servers->count(),new QString(token[2])); + int a = token[0] == "src" ? 1 : 0; + int i = servers->count(); + servers->insertItem(token[1]); + activeServers->insertItem( token[1] ); + activeServers->setSelected(i,a); + } else if ( token[0] == "dest" ) { + currentserver=destinations->count(); + destinationurlDic.insert(destinations->count(),new QString(token[2])); + destinations->insertItem(token[1]); + activeDestination->insertItem( token[1] ); + activeLinkDestination->insertItem( token[1] ); + + } else if ( token[0] == "option" ) { + } else { + // Old style? + int eq = l.find('='); + if ( eq >= 0 ) { + QString v = l.mid(eq+1).stripWhiteSpace(); + if ( v[0] == '"' || v[0] == '\'' ) { + int cl=v.find(v[0],1); + if ( cl >= 0 ) + v = v.mid(1,cl-1); + } + if ( l.left(12) == "IPKG_SOURCE=" ) { + ipkg_old=1; + currentserver=servers->count(); + serverurlDic.insert(servers->count(),new QString(v)); + servers->insertItem(v); + } else if ( l.left(13) == "#IPKG_SOURCE=" ) { + serverurlDic.insert(servers->count(),new QString(v)); + servers->insertItem(v); + } else if ( l.left(10) == "IPKG_ROOT=" ) { + + } + } + } + } + if ( ipkg_old ) { + servers->setSelectionMode(QListBox::Single); + servers->setSelected(currentserver,TRUE); + } + return TRUE; + } else { + return FALSE; + } +} + +void PackageManagerSettings::readSettings() +{ + readIpkgConfig("/etc/ipkg.conf"); + readInstallationSettings(); +} + +void PackageManagerSettings::writeSettings() +{ + writeIpkgConfig("/etc/ipkg.conf"); + writeInstallationSettings(); +} + +bool PackageManagerSettings::showDialog( int i ) +{ + TabWidget->setCurrentPage( i ); + showMaximized(); + bool ret = exec(); + if ( ret ) writeSettings(); + else readSettings(); + return ret; +} + +QString PackageManagerSettings::getDestinationName() +{ + return activeDestination->currentText(); +} + +QString PackageManagerSettings::getLinkDestinationName() +{ + return activeLinkDestination->currentText(); +} + +/** Returns the URL of the active destination */ +QString PackageManagerSettings::getDestinationUrl() +{ + int dnr = activeDestination->currentItem(); + return *destinationurlDic.find(dnr); +} + +/** Should oipkg create links form install destination to link destination */ +bool PackageManagerSettings::createLinks() +{ + return CheckBoxLink->isChecked(); +} + +/** get the servers that are active */ +QStringList PackageManagerSettings::getActiveServers() +{ + QStringList sl; + for (int i=0; i<(int)activeServers->count(); i++) + { + if ( activeServers->isSelected(i) ) + sl += activeServers->text(i); + } + return sl; +} + +/** returns the destination listed in ipkg.conf */ +QStringList PackageManagerSettings::getDestinationUrls() +{ + QStringList sl; + for (int i=0; i<(int)destinations->count(); i++) + { + sl += *destinationurlDic[i]; + } + return sl; +} + +void PackageManagerSettings::linkEnabled( bool b ) +{ + activeLinkDestination->setEnabled( b ); +} diff --git a/noncore/unsupported/oipkg/settings.h b/noncore/unsupported/oipkg/settings.h new file mode 100644 index 0000000..d4b1072 --- a/dev/null +++ b/noncore/unsupported/oipkg/settings.h @@ -0,0 +1,62 @@ +#ifndef PACKAGEMANAGERSETTINGS_H +#define PACKAGEMANAGERSETTINGS_H + +#include "pksettingsbase.h" +#include + + +class PackageManagerSettings : private PackageManagerSettingsBase +{ + // Q_OBJECT +public: + PackageManagerSettings( QWidget* , const char* , WFlags ); + ~PackageManagerSettings(); + + bool showDialog( int ) ; + QString getDestinationUrl(); + QString getDestinationName(); + QString getLinkDestinationName(); + bool createLinks(); + QStringList getActiveServers(); + QStringList getDestinationUrls(); + +private: + QIntDict serverurlDic; + QIntDict destinationurlDic; + int ipkg_old; + int editedserver; + int editeddestination; + int currentSetting; + int installationSettingsCount; + bool changed; + + bool readIpkgConfig(const QString&); + void writeIpkgConfig(const QString&); + void writeSettings(); + void readSettings(); + +public slots: + void writeInstallationSettings(); + void readInstallationSettings(); + void writeCurrentInstallationSetting(); + void readInstallationSetting(int); + void installationSettingSetName(const QString &); + + void newServer(); + void editServer(int); + void removeDestination(); + void newDestination(); + void editDestination(int); + void linkEnabled(bool); + void removeServer(); + void serverNameChanged(const QString&); + void serverUrlChanged(const QString&); + void destNameChanged(const QString&); + void destUrlChanged(const QString&); + void installationSettingChange(int); + void newInstallationSetting(); + void removeInstallationSetting(); + void renameInstallationSetting(); +}; + +#endif -- cgit v0.9.0.2