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<ProcessError*>(
"ProcessError*");
73 qRegisterMetaType<DownloadsList*>(
"DownloadsList*");
74 qDBusRegisterMetaType<StringMap>();
75 qDBusRegisterMetaType<DownloadStruct>();
76 qDBusRegisterMetaType<GroupDownloadStruct>();
77 qDBusRegisterMetaType<StructList>();
78 qDBusRegisterMetaType<AuthErrorStruct>();
79 qDBusRegisterMetaType<HttpErrorStruct>();
80 qDBusRegisterMetaType<NetworkErrorStruct>();
81 qDBusRegisterMetaType<ProcessErrorStruct>();
85 ManagerImpl::getDownloadForId(
const QString&
id) {
86 Logger::log(
Logger::Debug, QString(
"Manager getDownloadForId(%1)").arg(
id));
87 auto down =
new DownloadImpl(_conn, _servicePath, QDBusObjectPath(
id));
92 ManagerImpl::createDownload(DownloadStruct downStruct) {
93 Logger::log(
Logger::Debug,
"Manager createDownload(%1)", downStruct);
95 createDownload(downStruct, cb, cb);
99 ManagerImpl::createDownload(DownloadStruct downStruct,
102 QDBusPendingCall call =
103 _dbusInterface->createDownload(downStruct);
104 auto watcher =
new DownloadManagerPCW(_conn,
105 _servicePath, call, cb, errCb,
this);
106 auto connected = connect(watcher, &DownloadManagerPCW::callbackExecuted,
107 this, &ManagerImpl::onWatcherDone);
110 "Could not connect to signal &DownloadManagerPCW::callbackExecuted,");
115 ManagerImpl::createDownload(StructList downs,
116 const QString& algorithm,
118 const QVariantMap& metadata,
120 GroupCb cb = [](GroupDownload*) {};
121 createDownload(downs, algorithm, allowed3G, metadata, headers, cb, cb);
125 ManagerImpl::createDownload(StructList downs,
126 const QString& algorithm,
128 const QVariantMap& metadata,
132 QDBusPendingCall call =
133 _dbusInterface->createDownloadGroup(downs,
134 algorithm, allowed3G, metadata, headers);
135 auto watcher =
new GroupManagerPCW(_conn, _servicePath,
136 call, cb, errCb,
this);
137 auto connected = connect(watcher, &GroupManagerPCW::callbackExecuted,
138 this, &ManagerImpl::onWatcherDone);
141 "Could not connect to signal &GroupManagerPCW::callbackExecuted");
146 ManagerImpl::getAllDownloads() {
149 getAllDownloads(cb, cb);
155 QDBusPendingCall call = _dbusInterface->getAllDownloads();
156 auto watcher =
new DownloadsListManagerPCW(
157 _conn, _servicePath, call, cb, errCb,
this);
158 auto connected = connect(watcher, &GroupManagerPCW::callbackExecuted,
159 this, &ManagerImpl::onWatcherDone);
162 "Could not connect to signal");
167 ManagerImpl::getAllDownloadsWithMetadata(
const QString &name,
168 const QString &value) {
170 QString(
"Manager getAllDownloadsWithMetadata(%1, %2)").arg(name).arg(value));
172 [](
const QString&,
const QString&, DownloadsList*){};
173 getAllDownloadsWithMetadata(name, value, cb, cb);
177 ManagerImpl::getAllDownloadsWithMetadata(
const QString &name,
178 const QString &value,
182 QString(
"Manager getAllDownloadsWithMetadata(%1, %2)").arg(name).arg(value));
183 QDBusPendingCall call = _dbusInterface->getAllDownloadsWithMetadata(
185 auto watcher =
new MetadataDownloadsListManagerPCW(
186 _conn, _servicePath, call, name, value, cb, errCb,
this);
187 auto connected = connect(watcher, &GroupManagerPCW::callbackExecuted,
188 this, &ManagerImpl::onWatcherDone);
195 ManagerImpl::isError()
const {
200 ManagerImpl::lastError()
const {
205 ManagerImpl::setLastError(
const QDBusError& err) {
207 if (_lastError !=
nullptr) {
210 _lastError =
new DBusError(err);
215 ManagerImpl::allowMobileDataDownload(
bool allowed) {
217 QString(
"Manager allowMobileDataDownload(%1)").arg(allowed));
218 QDBusPendingReply<> reply =
219 _dbusInterface->allowGSMDownload(allowed);
221 reply.waitForFinished();
222 if (reply.isError()) {
223 auto err = reply.error();
230 ManagerImpl::isMobileDataDownload() {
231 Logger::log(
Logger::Debug,
"Manager isMobileDataDownload()");
232 QDBusPendingReply<bool> reply =
233 _dbusInterface->isGSMDownloadAllowed();
235 reply.waitForFinished();
236 if (reply.isError()) {
237 auto err = reply.error();
238 Logger::log(
Logger::Error,
"Error getting if mobile data is enabled");
242 return reply.value();
247 ManagerImpl::defaultThrottle() {
249 QDBusPendingReply<qulonglong> reply =
250 _dbusInterface->defaultThrottle();
252 reply.waitForFinished();
253 if (reply.isError()) {
254 auto err = reply.error();
255 Logger::log(
Logger::Error,
"Error getting the default throttle");
259 return reply.value();
264 ManagerImpl::setDefaultThrottle(qulonglong speed) {
266 QString(
"Manager setDefaultThrottle(%1)").arg(speed));
267 QDBusPendingReply<> reply =
268 _dbusInterface->setDefaultThrottle(speed);
270 reply.waitForFinished();
271 if (reply.isError()) {
272 auto err = reply.error();
273 Logger::log(
Logger::Error,
"Error setting default throttle");
279 ManagerImpl::exit() {
281 QDBusPendingReply<> reply =
282 _dbusInterface->exit();
284 reply.waitForFinished();
285 if (reply.isError()) {
286 auto err = reply.error();
287 Logger::log(
Logger::Error,
"Error setting killing the daemon");
293 ManagerImpl::onWatcherDone() {
294 auto senderObj = sender();
295 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