27 const QString MANAGER_PATH =
"/";
32 namespace DownloadManager {
34 using namespace Logging;
36 ManagerImpl::ManagerImpl(
const QDBusConnection& conn,
42 _dbusInterface =
new ManagerInterface(path, MANAGER_PATH, conn);
47 ManagerImpl::ManagerImpl(
const QDBusConnection& conn,
49 ManagerInterface* interface,
54 _dbusInterface(interface) {
58 ManagerImpl::~ManagerImpl() {
60 delete _dbusInterface;
65 qRegisterMetaType<Download*>(
"Download*");
66 qRegisterMetaType<GroupDownload*>(
"GroupDownload*");
67 qRegisterMetaType<Error*>(
"Error*");
68 qRegisterMetaType<DBusError*>(
"DBusError*");
69 qRegisterMetaType<HttpError*>(
"HttpError*");
70 qRegisterMetaType<NetworkError*>(
"NetworkError*");
71 qRegisterMetaType<AuthError*>(
"AuthError*");
72 qRegisterMetaType<HashError*>(
"HashError*");
73 qRegisterMetaType<ProcessError*>(
"ProcessError*");
74 qRegisterMetaType<DownloadsList*>(
"DownloadsList*");
75 qDBusRegisterMetaType<StringMap>();
76 qDBusRegisterMetaType<DownloadStruct>();
77 qDBusRegisterMetaType<GroupDownloadStruct>();
78 qDBusRegisterMetaType<StructList>();
79 qDBusRegisterMetaType<AuthErrorStruct>();
80 qDBusRegisterMetaType<HashErrorStruct>();
81 qDBusRegisterMetaType<HttpErrorStruct>();
82 qDBusRegisterMetaType<NetworkErrorStruct>();
83 qDBusRegisterMetaType<ProcessErrorStruct>();
87 ManagerImpl::getDownloadForId(
const QString&
id) {
88 Logger::log(
Logger::Debug, QString(
"Manager getDownloadForId(%1)").arg(
id));
89 auto down =
new DownloadImpl(_conn, _servicePath, QDBusObjectPath(
id));
94 ManagerImpl::createDownload(DownloadStruct downStruct) {
95 Logger::log(
Logger::Debug,
"Manager createDownload(%1)", downStruct);
97 createDownload(downStruct, cb, cb);
101 ManagerImpl::createDownload(DownloadStruct downStruct,
104 QDBusPendingCall call =
105 _dbusInterface->createDownload(downStruct);
106 auto watcher =
new DownloadManagerPCW(_conn,
107 _servicePath, call, cb, errCb,
this);
108 auto connected = connect(watcher, &DownloadManagerPCW::callbackExecuted,
109 this, &ManagerImpl::onWatcherDone);
112 "Could not connect to signal &DownloadManagerPCW::callbackExecuted,");
117 ManagerImpl::createDownload(StructList downs,
118 const QString& algorithm,
120 const QVariantMap& metadata,
122 GroupCb cb = [](GroupDownload*) {};
123 createDownload(downs, algorithm, allowed3G, metadata, headers, cb, cb);
127 ManagerImpl::createDownload(StructList downs,
128 const QString& algorithm,
130 const QVariantMap& metadata,
134 QDBusPendingCall call =
135 _dbusInterface->createDownloadGroup(downs,
136 algorithm, allowed3G, metadata, headers);
137 auto watcher =
new GroupManagerPCW(_conn, _servicePath,
138 call, cb, errCb,
this);
139 auto connected = connect(watcher, &GroupManagerPCW::callbackExecuted,
140 this, &ManagerImpl::onWatcherDone);
143 "Could not connect to signal &GroupManagerPCW::callbackExecuted");
148 ManagerImpl::getAllDownloads(
const QString &appId,
bool uncollected) {
149 Logger::log(
Logger::Debug, QString(
"Manager getAllDownloads(%1, %2)").arg(appId).arg(uncollected));
151 getAllDownloads(appId, uncollected, cb, cb);
156 Logger::log(
Logger::Debug, QString(
"Manager getAllDownloads(%1, %2)").arg(appId).arg(uncollected));
157 QDBusPendingCall call = _dbusInterface->getAllDownloads(appId, uncollected);
158 auto watcher =
new DownloadsListManagerPCW(
159 _conn, _servicePath, call, cb, errCb,
this);
160 auto connected = connect(watcher, &GroupManagerPCW::callbackExecuted,
161 this, &ManagerImpl::onWatcherDone);
164 "Could not connect to signal");
169 ManagerImpl::getAllDownloadsWithMetadata(
const QString &name,
170 const QString &value) {
172 QString(
"Manager getAllDownloadsWithMetadata(%1, %2)").arg(name).arg(value));
174 [](
const QString&,
const QString&, DownloadsList*){};
175 getAllDownloadsWithMetadata(name, value, cb, cb);
179 ManagerImpl::getAllDownloadsWithMetadata(
const QString &name,
180 const QString &value,
184 QString(
"Manager getAllDownloadsWithMetadata(%1, %2)").arg(name).arg(value));
185 QDBusPendingCall call = _dbusInterface->getAllDownloadsWithMetadata(
187 auto watcher =
new MetadataDownloadsListManagerPCW(
188 _conn, _servicePath, call, name, value, cb, errCb,
this);
189 auto connected = connect(watcher, &GroupManagerPCW::callbackExecuted,
190 this, &ManagerImpl::onWatcherDone);
197 ManagerImpl::isError()
const {
202 ManagerImpl::lastError()
const {
207 ManagerImpl::setLastError(
const QDBusError& err) {
209 if (_lastError !=
nullptr) {
212 _lastError =
new DBusError(err);
217 ManagerImpl::allowMobileDataDownload(
bool allowed) {
219 QString(
"Manager allowMobileDataDownload(%1)").arg(allowed));
220 QDBusPendingReply<> reply =
221 _dbusInterface->allowGSMDownload(allowed);
223 reply.waitForFinished();
224 if (reply.isError()) {
225 auto err = reply.error();
232 ManagerImpl::isMobileDataDownload() {
233 Logger::log(
Logger::Debug,
"Manager isMobileDataDownload()");
234 QDBusPendingReply<bool> reply =
235 _dbusInterface->isGSMDownloadAllowed();
237 reply.waitForFinished();
238 if (reply.isError()) {
239 auto err = reply.error();
240 Logger::log(
Logger::Error,
"Error getting if mobile data is enabled");
244 return reply.value();
249 ManagerImpl::defaultThrottle() {
251 QDBusPendingReply<qulonglong> reply =
252 _dbusInterface->defaultThrottle();
254 reply.waitForFinished();
255 if (reply.isError()) {
256 auto err = reply.error();
257 Logger::log(
Logger::Error,
"Error getting the default throttle");
261 return reply.value();
266 ManagerImpl::setDefaultThrottle(qulonglong speed) {
268 QString(
"Manager setDefaultThrottle(%1)").arg(speed));
269 QDBusPendingReply<> reply =
270 _dbusInterface->setDefaultThrottle(speed);
272 reply.waitForFinished();
273 if (reply.isError()) {
274 auto err = reply.error();
275 Logger::log(
Logger::Error,
"Error setting default throttle");
281 ManagerImpl::exit() {
283 QDBusPendingReply<> reply =
284 _dbusInterface->exit();
286 reply.waitForFinished();
287 if (reply.isError()) {
288 auto err = reply.error();
289 Logger::log(
Logger::Error,
"Error setting killing the daemon");
295 ManagerImpl::onWatcherDone() {
296 auto senderObj = sender();
297 senderObj->deleteLater();
std::function< void(Download *)> DownloadCb
std::function< void(const QString &, const QString &, DownloadsList *)> MetadataDownloadsListCb
std::function< void(GroupDownload *)> GroupCb
std::function< void(DownloadsList *)> DownloadsListCb