/* * kdpkg.cpp * * Copyright (c) 2007 Fabian Wuertz * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "kdpkg.h" kdpkg::kdpkg( const TQString &url, TQWidget *parent, const char *name, const TQStringList &) :KdpkgDialog(parent, name) { if( !url ) path = KFileDialog::getOpenFileName( TQString(), TQString("*.deb|") + i18n("Debian Package (*.deb)"), this, i18n("Choose a Debian package file to open")); else path = url; this->shell = new Process(); // show fields this->shell->setCommand("dpkg -f "+path); this->shell->start(true); fields = TQStringList::split( "\n", this->shell->getBuffer().stripWhiteSpace() ); showFields(); // show files this->shell->setCommand("dpkg -c "+path); this->shell->start(true); TQStringList files = TQStringList::split( "\n", this->shell->getBuffer().stripWhiteSpace() ); TQString tmp; for(uint i = 0; i < files.count(); i++) tmp += TQStringList::split( ".", files[i])[1]+"
"; filesTextBrowser->setText( tmp ) ; } //----------------------------------------------------------------------------// //--- show info --------------------------------------------------------------// //----------------------------------------------------------------------------// void kdpkg::showFields() { // checkArchitecture //------------------- checkArchitecture( fields.grep("Architecture:")[0].mid(14) ); // common //-------- TQString pkgName = fields.grep("Package:")[0].mid(9); TQString pkgVersion = fields.grep("Version:")[0].mid(9); TQStringList versions = getVersions(fields.grep("Package:")[0].mid(9)); TQString sysVersion = versions[0]; TQString repVersion = versions[1]; package2TextLabel->setText( pkgName ); version2TextLabel->setText( pkgVersion+" (Package)
"+sysVersion+" (System)
"+repVersion+" (Repository)"); maintainer2TextLabel->setText( fields.grep("Maintainer:")[0].mid(12) ); section2TextLabel->setText( fields.grep("Section:")[0].mid(9)+" ("+fields.grep("Priority:")[0].mid(10)+")" ); size2TextLabel->setText( fields.grep("Installed-Size:")[0].mid(16)+" kb" ); // description //------------- TQStringList tmp = fields.grep( TQRegExp("^ ") ); TQString description = ""+fields.grep("Description:")[0].mid(13)+"

"; for(uint i = 0; i < tmp.count(); i++) { if( tmp[i] == " ." ) description += "
"; else description += tmp[i].mid(1)+"
"; } descriptionTextBrowser->setText(description ); // dependencies //-------------- types.append("Depends"); types.append("Recommends"); types.append("Suggests"); types.append("Enhances"); types.append("Pre-Depends"); types.append("Provides"); types.append("Conflicts"); types.append("Replaces"); for( TQStringList::Iterator it = types.begin(); it != types.end(); ++it ) dependencies.append(fields.grep(*it+":")[0]); showDependencies(0); } //----------------------------------------------------------------------------// //--- show dependencies ------------------------------------------------------// //----------------------------------------------------------------------------// void kdpkg::showDependencies(int i) { dependenciesListBox->clear(); if(i == 0) // all { for( TQStringList::Iterator it = dependencies.begin(); it != dependencies.end(); ++it ) { TQStringList tmp = TQStringList::split( ", ", *it ); TQString type = TQStringList::split( ":", tmp[0])[0]; tmp[0] = TQStringList::split( ": ", tmp[0] )[1]; for(uint i = 0; i < tmp.count(); i++) dependenciesListBox->insertItem( type+": "+tmp[i] ); } } else { TQString choice = types[i-1]; dependenciesListBox->insertStringList( TQStringList::split( ", ", dependencies.grep(choice+":")[0].mid(choice.length()+2) ) ); } } //----------------------------------------------------------------------------// //--- get --------------------------------------------------------------------// //----------------------------------------------------------------------------// TQStringList kdpkg::getVersions(TQString package) { this->shell->setCommand("apt-cache policy "+package); this->shell->start(true); TQStringList input = TQStringList::split( "\n", this->shell->getBuffer().stripWhiteSpace() ); TQString sysVersion = input[1]; sysVersion = TQStringList::split( ":", sysVersion)[1].replace(" ",""); if( sysVersion.contains("(") || sysVersion == "" ) sysVersion = i18n("not installed"); TQString repVersion = input[2]; repVersion = TQStringList::split( ":", repVersion)[1].replace(" ",""); if( repVersion.contains("(") || repVersion == "" ) repVersion = i18n("not available"); TQStringList versions; versions.append(sysVersion); versions.append(repVersion); return versions; } //----------------------------------------------------------------------------// //--- architecture -----------------------------------------------------------// //----------------------------------------------------------------------------// void kdpkg::checkArchitecture(TQString arch) { if(arch == "all") return; // get architecture this->shell->setCommand("dpkg --print-architecture"); this->shell->start(true); if( arch == this->shell->getBuffer().stripWhiteSpace() ) return; KMessageBox::information(this, i18n("The architecture of the package and the system doesn't match! You will not be able to install this package!")); installPushButton->setEnabled(FALSE); } //----------------------------------------------------------------------------// //--- about ------------------------------------------------------------------// //----------------------------------------------------------------------------// void kdpkg::about() { TDEAboutApplication* about = new TDEAboutApplication ( this ); about->show(); } //------------------------------------------------------------------------------ //--- install ------------------------------------------------------------------ //------------------------------------------------------------------------------ void kdpkg::install() { this->shell->setCommand("su-to-root -X -c \"kdpkg-install "+path+"\"&"); this->shell->start(true); close(); } #include "kdpkg.moc"