cleanup
[fapman] / package.cpp
1 /*
2         This file is part of Faster Application Manager.
3
4         Faster Application Manager is free software: you can redistribute it and/or modify
5         it under the terms of the GNU General Public License as published by
6         the Free Software Foundation, either version 3 of the License, or
7         (at your option) any later version.
8
9         Faster Application Manager is distributed in the hope that it will be useful,
10         but WITHOUT ANY WARRANTY; without even the implied warranty of
11         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12         GNU General Public License for more details.
13
14         You should have received a copy of the GNU General Public License
15         along with Faster Application Manager.  If not, see <http://www.gnu.org/licenses/>.
16
17         (C) Heikki Holstila 2010
18 */
19
20 #include <QtGui>
21 #include "package.h"
22 #include "repository.h"
23 #include "aaptinterface.h"
24 #include "apt-src/debversion.h"
25 #include "blacklistselect.h"
26
27 Package::Package(QByteArray name_, AAptInterface *apt_)
28 {
29         iAptInterface = apt_;
30         iName = name_;
31         iIsInstalled = false;
32         iMarkedForOperation = false;
33         iSize = 0;
34         iInstalledSize = 0;
35         iMarkedOperation = PkgOpNone;
36         iPkgStatus = PkgStatUnknown;
37         iIcon = 0;
38         iBlacklist = BlacklistSelect::BlacklistNone;
39 }
40
41 Package::~Package()
42 {
43         if( iIcon != 0 )
44                 delete iIcon;
45 }
46
47 QString Package::displayName()
48 {
49         QString pkgname = name();
50         if( iMaemoDisplayName!="" )
51                 pkgname = maemoDisplayName();
52         QString n( pkgname.at(0) );
53         n = n.toUpper();
54         pkgname.replace(0,1,n);
55         return pkgname;
56 }
57
58 QString Package::fileName()
59 {
60         if( iFullFileNames.count()>0 ) {
61                 return iFullFileNames.at(0).mid( iFullFileNames.at(0).lastIndexOf('/')+1 );
62         } else {
63                 qDebug() << "Warning: package has no file name information";
64                 return "unknown_filename";
65         }
66 }
67
68 void Package::setMarkedForOperation(operation op_)
69 {
70         if( iMarkedOperation != op_ ) {
71                 if( op_==PkgOpNone ) {
72                         if( iAptInterface )
73                                 iAptInterface->setNumSelectedPackages( iAptInterface->numSelectedPackages()-1 );
74                 } else if( iMarkedOperation==PkgOpNone ) {
75                         if( iAptInterface )
76                                 iAptInterface->setNumSelectedPackages( iAptInterface->numSelectedPackages()+1 );
77                 }
78         }
79
80         iMarkedOperation = op_;
81
82         if( op_ == PkgOpNone )
83                 iMarkedForOperation = false;
84         else
85                 iMarkedForOperation = true;
86 }
87
88 void Package::convertIcon()
89 {
90         if( iIconData.length() > 0 && iIcon == 0 ) {
91                 iIcon = new QPixmap();
92                 iIconData = QByteArray::fromBase64( iIconData );
93                 if( !iIcon->loadFromData( iIconData ) ) {
94                         qDebug() << "Warning: Package" << iName << "has invalid icon data";
95                 }
96         }
97
98 }
99
100 bool Package::isUpgradeable()
101 {
102         if( iSection=="user/hidden" )
103                 return false;
104
105         if( iIsInstalled )
106         {
107                 QString newer = upgradeableVersion();
108                 //qDebug() << newer << iVersion << versionCompare(newer,iVersion);
109                 return versionCompare(newer,iVersion);
110         }
111
112         return false;
113 }
114
115 QString Package::upgradeableVersion()
116 {
117         QString ver="";
118         if( isInstalled() ) {
119                 Package* newer = iAptInterface->packagesAvailable()->value(iName,0);
120                 if( newer )
121                         ver = newer->version();
122         }
123         return ver;
124 }
125
126 Package* Package::availablePackage()
127 {
128         if( !isInstalled() )
129                 return 0;
130
131         Package* newer = iAptInterface->packagesAvailable()->value(iName,0);
132
133         return newer;
134 }
135
136 void Package::updateStatus()
137 {
138         if( iIsInstalled ) {
139                 iPkgStatus = PkgStatInstalled;
140                 if( isUpgradeable() )
141                         iPkgStatus = PkgStatUpgradeable;
142         } else {
143                 iPkgStatus = PkgStatNotInstalled;
144         }
145 }
146
147 Package::packageStatus Package::status()
148 {
149         updateStatus(); // not optimal, but it's here just in case
150         return iPkgStatus;
151 }
152
153 bool Package::hasIconData()
154 {
155         if( iIconData.length()>0 )
156                 return true;
157         else
158                 return false;
159 }
160
161 bool Package::versionCompare(QString isNewer, QString compare)
162 {
163         //int res=0;
164         int res = debVS.CmpVersion(isNewer.toStdString(), compare.toStdString());
165         //qDebug() << isNewer << compare << res;
166
167         if( res > 0 )
168                 return true;
169
170         return false;
171 }
172
173 void Package::appendDepends(QByteArray line_)
174 {
175         iDepends << line_.split(',');
176 }
177
178 void Package::appendConflicts(QByteArray line_)
179 {
180         iConflicts << line_.split(',');
181 }
182
183 void Package::appendPreDepends(QByteArray line_)
184 {
185         iPreDepends << line_.split(',');
186 }
187
188 void Package::appendProvides(QByteArray line_)
189 {
190         iProvides << line_.split(',');
191 }
192
193 void Package::appendReplaces(QByteArray line_)
194 {
195         iReplaces << line_.split(',');
196 }
197
198 void Package::appendBreaks(QByteArray line_)
199 {
200         iBreaks << line_.split(',');
201 }
202
203 void Package::appendRecommends(QByteArray line_)
204 {
205         iRecommends << line_.split(',');
206 }
207
208 void Package::appendSuggests(QByteArray line_)
209 {
210         iSuggests << line_.split(',');
211 }
212
213 QStringList Package::dependsRichText()
214 {
215         //qDebug() << iName;
216         //qDebug() << iDepends;
217
218         QStringList list;
219
220         for(int i=0; i<iDepends.count(); i++)
221         {
222                 QString s = iDepends.at(i).trimmed();
223                 s.replace('<',"&lt;");
224                 s.replace('>',"&gt;");
225                 list << s;
226         }
227
228         return list;
229 }
230
231 QStringList Package::conflictsRichText()
232 {
233         QStringList list;
234
235         for(int i=0; i<iConflicts.count(); i++)
236         {
237                 QString s = iConflicts.at(i).trimmed();
238                 s.replace('<',"&lt;");
239                 s.replace('>',"&gt;");
240                 list << s;
241         }
242
243         return list;
244 }
245
246 QStringList Package::preDependsRichText()
247 {
248         QStringList list;
249
250         for(int i=0; i<iPreDepends.count(); i++)
251         {
252                 QString s = iPreDepends.at(i).trimmed();
253                 s.replace('<',"&lt;");
254                 s.replace('>',"&gt;");
255                 list << s;
256         }
257
258         return list;
259 }
260
261 QStringList Package::providesRichText()
262 {
263         QStringList list;
264
265         for(int i=0; i<iProvides.count(); i++)
266         {
267                 QString s = iProvides.at(i).trimmed();
268                 s.replace('<',"&lt;");
269                 s.replace('>',"&gt;");
270                 list << s;
271         }
272
273         return list;
274 }
275
276 QStringList Package::replacesRichText()
277 {
278         QStringList list;
279
280         for(int i=0; i<iReplaces.count(); i++)
281         {
282                 QString s = iReplaces.at(i).trimmed();
283                 s.replace('<',"&lt;");
284                 s.replace('>',"&gt;");
285                 list << s;
286         }
287
288         return list;
289 }
290
291 QStringList Package::breaksRichText()
292 {
293         QStringList list;
294
295         for(int i=0; i<iBreaks.count(); i++)
296         {
297                 QString s = iBreaks.at(i).trimmed();
298                 s.replace('<',"&lt;");
299                 s.replace('>',"&gt;");
300                 list << s;
301         }
302
303         return list;
304 }
305
306 QStringList Package::recommendsRichText()
307 {
308         QStringList list;
309
310         for(int i=0; i<iRecommends.count(); i++)
311         {
312                 QString s = iRecommends.at(i).trimmed();
313                 s.replace('<',"&lt;");
314                 s.replace('>',"&gt;");
315                 list << s;
316         }
317
318         return list;
319 }
320
321 QStringList Package::suggestsRichText()
322 {
323         QStringList list;
324
325         for(int i=0; i<iSuggests.count(); i++)
326         {
327                 QString s = iSuggests.at(i).trimmed();
328                 s.replace('<',"&lt;");
329                 s.replace('>',"&gt;");
330                 list << s;
331         }
332
333         return list;
334 }