#include "apt-src/debversion.h"
#include "blacklistselect.h"
-Package::Package(QByteArray name_, AAptInterface *apt_)
+Package::Package(QByteArray name_, AAptInterface *apt_):
+ iAptInterface(apt_), iName(name_), iIsInstalled(false), iMarkedForOperation(false),
+ iPkgStatus(PkgStatUnknown), iSize(0), iInstalledSize(0), iMarkedOperation(PkgOpNone),
+ iBlacklist(BlacklistSelect::BlacklistNone), iIcon(0)
{
- iAptInterface = apt_;
- iName = name_;
- iIsInstalled = false;
- iMarkedForOperation = false;
- iSize = 0;
- iInstalledSize = 0;
- iMarkedOperation = PkgOpNone;
- iPkgStatus = PkgStatUnknown;
- iIcon = 0;
- iBlacklist = BlacklistSelect::BlacklistNone;
}
Package::~Package()
return false;
}
-void Package::appendDepends(QByteArray line_)
+QStringList Package::toTrimmedRichTextList(QList<QByteArray> list_in)
{
- iDepends << line_.split(',');
-}
-
-void Package::appendConflicts(QByteArray line_)
-{
- iConflicts << line_.split(',');
-}
-
-void Package::appendPreDepends(QByteArray line_)
-{
- iPreDepends << line_.split(',');
-}
-
-void Package::appendProvides(QByteArray line_)
-{
- iProvides << line_.split(',');
-}
-
-void Package::appendReplaces(QByteArray line_)
-{
- iReplaces << line_.split(',');
-}
-
-void Package::appendBreaks(QByteArray line_)
-{
- iBreaks << line_.split(',');
-}
-
-void Package::appendRecommends(QByteArray line_)
-{
- iRecommends << line_.split(',');
-}
-
-void Package::appendSuggests(QByteArray line_)
-{
- iSuggests << line_.split(',');
-}
-
-QStringList Package::dependsRichText()
-{
- //qDebug() << iName;
- //qDebug() << iDepends;
+ QStringList list_out;
- QStringList list;
-
- for(int i=0; i<iDepends.count(); i++)
+ for(int i=0; i<list_in.count(); i++)
{
- QString s = iDepends.at(i).trimmed();
+ QString s = list_in.at(i).trimmed();
s.replace('<',"<");
s.replace('>',">");
- list << s;
+ list_out << s;
}
- return list;
+ return list_out;
}
-QStringList Package::conflictsRichText()
+QStringList Package::checkConflicts_RichText()
{
QStringList list;
+ if( iConflicts.count() == 0 )
+ return list;
+
for(int i=0; i<iConflicts.count(); i++)
{
QString s = iConflicts.at(i).trimmed();
- s.replace('<',"<");
- s.replace('>',">");
- list << s;
- }
-
- return list;
-}
-
-QStringList Package::preDependsRichText()
-{
- QStringList list;
-
- for(int i=0; i<iPreDepends.count(); i++)
- {
- QString s = iPreDepends.at(i).trimmed();
- s.replace('<',"<");
- s.replace('>',">");
- list << s;
- }
-
- return list;
-}
-
-QStringList Package::providesRichText()
-{
- QStringList list;
-
- for(int i=0; i<iProvides.count(); i++)
- {
- QString s = iProvides.at(i).trimmed();
- s.replace('<',"<");
- s.replace('>',">");
- list << s;
- }
-
- return list;
-}
-
-QStringList Package::replacesRichText()
-{
- QStringList list;
-
- for(int i=0; i<iReplaces.count(); i++)
- {
- QString s = iReplaces.at(i).trimmed();
- s.replace('<',"<");
- s.replace('>',">");
- list << s;
- }
-
- return list;
-}
-
-QStringList Package::breaksRichText()
-{
- QStringList list;
-
- for(int i=0; i<iBreaks.count(); i++)
- {
- QString s = iBreaks.at(i).trimmed();
- s.replace('<',"<");
- s.replace('>',">");
- list << s;
- }
-
- return list;
-}
+ QString name = s;
+ QString ver = "";
+ int pos = s.indexOf('(');
+ bool confl = false;
+ if( pos != -1 ) {
+ name = s.left(pos).trimmed();
+ ver = s.mid(pos).trimmed();
+ }
+ Package* p_inst = iAptInterface->packagesInstalled()->value(name,0);
+ Package* p_avail = iAptInterface->packagesAvailable()->value(name,0);
-QStringList Package::recommendsRichText()
-{
- QStringList list;
+ if( p_inst && p_inst->isInstalled() ) {
+ confl = versionConflicts(ver, p_inst->version());
+ }
+ if( p_avail && p_avail->markedOperation()==Package::PkgOpInstallUpgrade ) {
+ if( !confl )
+ confl = versionConflicts(ver, p_avail->version());
+ }
- for(int i=0; i<iRecommends.count(); i++)
- {
- QString s = iRecommends.at(i).trimmed();
- s.replace('<',"<");
- s.replace('>',">");
- list << s;
+ if( confl )
+ {
+ qDebug() << "package" << iName << "conflicts:" << name << ver;
+ s.replace('<',"<");
+ s.replace('>',">");
+ list << s;
+ }
}
return list;
}
-QStringList Package::suggestsRichText()
+bool Package::versionConflicts(QString conflictVer, QString operVer)
{
- QStringList list;
+ if( conflictVer=="" )
+ return true;
- for(int i=0; i<iSuggests.count(); i++)
- {
- QString s = iSuggests.at(i).trimmed();
- s.replace('<',"<");
- s.replace('>',">");
- list << s;
+ bool confl = false;
+ conflictVer.remove('(');
+ conflictVer.remove(')');
+
+ if( conflictVer.startsWith("<<") ) {
+ conflictVer = conflictVer.mid(2).trimmed();
+ int res = debVS.CmpVersion(conflictVer.toStdString(), operVer.toStdString());
+ if( res < 0 )
+ confl = true;
+ } else if( conflictVer.startsWith("<=") ) {
+ conflictVer = conflictVer.mid(2).trimmed();
+ int res = debVS.CmpVersion(conflictVer.toStdString(), operVer.toStdString());
+ if( res <= 0 )
+ confl = true;
+ } else if( conflictVer.startsWith("=") ) {
+ conflictVer = conflictVer.mid(1).trimmed();
+ int res = debVS.CmpVersion(conflictVer.toStdString(), operVer.toStdString());
+ if( res == 0 )
+ confl = true;
+ } else if( conflictVer.startsWith(">=") ) {
+ conflictVer = conflictVer.mid(2).trimmed();
+ int res = debVS.CmpVersion(conflictVer.toStdString(), operVer.toStdString());
+ if( res >= 0 )
+ confl = true;
+ } else if( conflictVer.startsWith(">>") ) {
+ conflictVer = conflictVer.mid(2).trimmed();
+ int res = debVS.CmpVersion(conflictVer.toStdString(), operVer.toStdString());
+ if( res > 0 )
+ confl = true;
}
- return list;
+ return confl;
}