fixes
[fapman] / package.cpp
index 233cb3a..19ba186 100644 (file)
 #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()
@@ -170,165 +163,97 @@ bool Package::versionCompare(QString isNewer, QString compare)
        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('<',"&lt;");
                s.replace('>',"&gt;");
-               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('<',"&lt;");
-               s.replace('>',"&gt;");
-               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('<',"&lt;");
-               s.replace('>',"&gt;");
-               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('<',"&lt;");
-               s.replace('>',"&gt;");
-               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('<',"&lt;");
-               s.replace('>',"&gt;");
-               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('<',"&lt;");
-               s.replace('>',"&gt;");
-               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('<',"&lt;");
-               s.replace('>',"&gt;");
-               list << s;
+               if( confl )
+               {
+                       qDebug() << "package" << iName << "conflicts:" << name << ver;
+                       s.replace('<',"&lt;");
+                       s.replace('>',"&gt;");
+                       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('<',"&lt;");
-               s.replace('>',"&gt;");
-               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;
 }