cleanup
[fapman] / aaptinterface.h
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 #ifndef AAPTINTERFACE_H
21 #define AAPTINTERFACE_H
22
23 #include <QtGui>
24 #include <QtNetwork>
25 #include "blacklistselect.h"
26
27
28 const QString KFapmanDir = "/root/.fapman";
29 const QString KLogFile = "/root/.fapman/lastlog.txt";
30 const QString KBlacklistFile = "/root/.fapman/black.list";
31 const QString KOwnRepoFile = "/root/.fapman/repos.list";
32 const QString KOwnRepoNamesFile = "/root/.fapman/repos.names";
33
34 const QString KHamRepoListFile = "/etc/apt/sources.list.d/hildon-application-manager.list";
35
36 const QString KLastUpdateFile = "/opt/fapman-cache/lastupdate";
37 const QString KDateCacheFile = "/opt/fapman-cache/dates.cache";
38 const QString KAptSourceList = "/opt/fapman-cache/sources.list";
39 const QString KAptListDir = "/opt/fapman-cache/lists";
40 const QString KAptArchivePartialDir = "/var/cache/apt/archives/partial";
41
42 const QString KDpkgStatusFile = "/var/lib/dpkg/status";
43 const QString KDpkgInfoDir = "/var/lib/dpkg/info";
44
45
46 class MainWindow;
47 class FileReadThread;
48 class DateFetchThread;
49 class dimmer;
50 class Package;
51 class Repository;
52 class Settings;
53
54
55 class AAptInterface : public QObject
56 {
57         Q_OBJECT
58
59 public:
60         enum interfaceMode { ModeNone, ModeReadPackages, ModeFetchDates, ModeAptGetUpdate,
61                                                  ModeAptGetSimulate, ModeAptGetInstall, ModeAptGetClean };
62         enum multiLine { MultiLineNone, MultiLineDesc, MultiLineIcon, MultiLineUpgradeDesc };
63
64         AAptInterface(QObject* parent);
65         ~AAptInterface();
66         void setSettings(Settings* s_) { iSettings = s_; }
67
68         void addQueuedOperation(interfaceMode mode_);
69         bool run(dimmer* uiDimmer);
70         void setProcessPackages(QStringList pkgs) { iProcessPackages=pkgs; iProcessPackagesOrig=pkgs; }
71         QStringList processPackages() { return iProcessPackages; }
72         QStringList processPackageVersions() { return iProcessPackageVersions; }
73
74         bool running();
75         bool cancel();
76
77         int numSelectedPackages() { return iNumSelectedPackages; }
78         void setNumSelectedPackages(int p_) { iNumSelectedPackages=p_; }
79
80         QHash<QString, Package*>* packagesAvailable() { return &iPackagesAvailable; }
81         QHash<QString, Package*>* packagesInstalled() { return &iPackagesInstalled; }
82         QList<Repository*>* repositories() { return  &iRepositories; }
83
84         QByteArray readLogFile();
85         void readRepositoryInfo();
86         bool writeRepositories();
87         bool needRepoRefresh();
88         void removeFromBlacklist(Package* pkg, BlacklistSelect::blackList oldstate);
89         void writeBlacklist();
90
91         bool dateCacheExists();
92
93         void setNeedRefresh(int repos, int lists, int dpkg, int dates);
94         void setSkipListAndDates() { iSkipRefreshListAndDates=true; }
95         bool needListOrDateRefresh();
96
97         bool loadInstallFiles(QStringList files_);
98
99 private:
100         void runNext();
101         void cleanAfterRunEach();
102         void cleanAfterRunAll();
103         void cleanAfterError();
104
105         bool startAptGetUpdate();
106         bool startAptGetSimulate();
107         bool startAptGetInstall();
108         bool startAptGetClean();
109
110         QString setQProcessErrorMessage(QProcess::ProcessError error);
111         QString finishProcessCommonErrorMessages(QByteArray& output);
112
113         void communicateStatusToUi(bool success, QString title="", QString msg="");
114         void logToFile( QString data, bool logtime=true );
115         void logToFile( QByteArray data, bool logtime=true );
116
117         void startPkgListRead();
118         void startFetchDates();
119
120         Package* ReadNextPackage(QFile& f, quint64& currentreaddata);
121         bool processPackageDataLine(Package*& pkg, QByteArray& line);
122
123         void readBlacklist();
124         void writeDateCache();
125         void readDateCache();
126
127 private slots:
128         void errorAptGetUpdate(QProcess::ProcessError error);
129         void errorAptGetSimulate(QProcess::ProcessError error);
130         void errorAptGetInstall(QProcess::ProcessError error);
131         void errorAptGetClean(QProcess::ProcessError error);
132
133         void finishedAptGetUpdate(int exitCode, QProcess::ExitStatus exitStatus);
134         void finishedAptGetSimulate(int exitCode, QProcess::ExitStatus exitStatus);
135         void finishedAptGetInstall(int exitCode, QProcess::ExitStatus exitStatus);
136         void finishedAptGetClean(int exitCode, QProcess::ExitStatus exitStatus);
137
138         void uiUpdaterAptGetUpdate();
139         void uiUpdaterAptGetInstall();
140         void progressCheckTimerCallback();
141
142         void dateFetchNetworkReply(QNetworkReply* reply);
143
144 private:
145         QHash<QString, Package*> iPackagesAvailable;
146         QHash<QString, Package*> iPackagesInstalled;
147         int iNumSelectedPackages;
148
149         QStringList iProcessPackages;
150         QStringList iProcessPackagesOrig;
151         QStringList iProcessPackageVersions;
152         QList<interfaceMode> iOperationsQueue;
153         QList<Repository*> iRepositories;
154         QStringList iQueueMessages;
155
156         MainWindow* iMainWindow;
157         Settings* iSettings;
158         interfaceMode iMode;
159         QList<interfaceMode> iModeLog;
160         dimmer* iUiDimmer;
161         bool iCanCancel;
162         bool iTerminated;
163         bool iErrorDone;
164         bool iNeedRepoRefresh;
165         bool iNeedListRefresh;
166         bool iNeedDpkgRefresh;
167         bool iNeedDateRefresh;
168         bool iSkipRefreshListAndDates;
169
170         QProcess* iProcAptGetUpdate;
171         QProcess* iProcAptGetSimulate;
172         QProcess* iProcAptGetInstall;
173         QProcess* iProcAptGetClean;
174         QByteArray iProcAptGetUpdateOutput;
175         QByteArray iProcAptGetInstallOutput;
176
177         int iAptGetDownloadCount;
178         int iAptGetInstallCount;
179         int iAptGetRemoveCount;
180         int iAptGetInstallTotal;
181         int iAptGetRemoveTotal;
182         qint64 iAptGetCurrentFileDownloadSize;
183         qint64 iAptGetCurrentFileTotalSize;
184         QString iAptGetCurrentDownloadFileName;
185         QTimer* iProgressCheckTimer;
186         int iSpeedKbps;
187         int iSpeedKbpsPrev;
188         bool iUpdateSpeed;
189
190         int iCatalogCounter;
191         int iCatalogsTotal;
192
193         QStringList iBlacklist;
194
195         multiLine iMultiLine;
196
197         int iDateRequestsWaiting;
198         int iDateRequestsSent;
199         int iDateRequestsReceived;
200         int iDateRequestErrors;
201         QNetworkReply::NetworkError iNetworkError;
202 };
203
204
205 #endif // AAPTINTERFACE_H