20 #include <glog/logging.h>
26 const QString MANAGER_PATH =
"/";
31 namespace DownloadManager {
33 ManagerImpl::ManagerImpl(
const QDBusConnection& conn,
39 _dbusInterface =
new ManagerInterface(path, MANAGER_PATH, conn);
44 ManagerImpl::ManagerImpl(
const QDBusConnection& conn,
46 ManagerInterface* interface,
51 _dbusInterface(interface) {
55 ManagerImpl::~ManagerImpl() {
57 delete _dbusInterface;
62 qRegisterMetaType<Download*>(
"Download*");
63 qRegisterMetaType<GroupDownload*>(
"GroupDownload*");
64 qRegisterMetaType<Error*>(
"Error*");
65 qRegisterMetaType<DBusError*>(
"DBusError*");
66 qRegisterMetaType<HttpError*>(
"HttpError*");
67 qRegisterMetaType<NetworkError*>(
"NetworkError*");
68 qRegisterMetaType<AuthError*>(
"AuthError*");
69 qRegisterMetaType<ProcessError*>(
"ProcessError*");
70 qRegisterMetaType<DownloadsList*>(
"DownloadsList*");
71 qDBusRegisterMetaType<StringMap>();
72 qDBusRegisterMetaType<DownloadStruct>();
73 qDBusRegisterMetaType<GroupDownloadStruct>();
74 qDBusRegisterMetaType<StructList>();
75 qDBusRegisterMetaType<AuthErrorStruct>();
76 qDBusRegisterMetaType<HttpErrorStruct>();
77 qDBusRegisterMetaType<NetworkErrorStruct>();
78 qDBusRegisterMetaType<ProcessErrorStruct>();
82 ManagerImpl::getDownloadForId(
const QString&
id) {
83 auto down =
new DownloadImpl(_conn, _servicePath, QDBusObjectPath(
id));
88 ManagerImpl::createDownload(DownloadStruct downStruct) {
90 createDownload(downStruct, cb, cb);
94 ManagerImpl::createDownload(DownloadStruct downStruct,
97 QDBusPendingCall call =
98 _dbusInterface->createDownload(downStruct);
99 auto watcher =
new DownloadManagerPCW(_conn,
100 _servicePath, call, cb, errCb,
this);
101 CHECK(connect(watcher, &DownloadManagerPCW::callbackExecuted,
102 this, &ManagerImpl::onWatcherDone)) <<
"Could not connect to signal";
106 ManagerImpl::createDownload(StructList downs,
107 const QString& algorithm,
109 const QVariantMap& metadata,
111 GroupCb cb = [](GroupDownload*) {};
112 createDownload(downs, algorithm, allowed3G, metadata, headers, cb, cb);
116 ManagerImpl::createDownload(StructList downs,
117 const QString& algorithm,
119 const QVariantMap& metadata,
123 QDBusPendingCall call =
124 _dbusInterface->createDownloadGroup(downs,
125 algorithm, allowed3G, metadata, headers);
126 auto watcher =
new GroupManagerPCW(_conn, _servicePath,
127 call, cb, errCb,
this);
128 CHECK(connect(watcher, &GroupManagerPCW::callbackExecuted,
129 this, &ManagerImpl::onWatcherDone)) <<
"Could not connect to signal";
133 ManagerImpl::getAllDownloads() {
135 getAllDownloads(cb, cb);
140 QDBusPendingCall call = _dbusInterface->getAllDownloads();
141 auto watcher =
new DownloadsListManagerPCW(
142 _conn, _servicePath, call, cb, errCb,
this);
143 CHECK(connect(watcher, &GroupManagerPCW::callbackExecuted,
144 this, &ManagerImpl::onWatcherDone)) <<
"Could not connect to signal";
148 ManagerImpl::getAllDownloadsWithMetadata(
const QString &name,
149 const QString &value) {
151 [](
const QString&,
const QString&, DownloadsList*){};
152 getAllDownloadsWithMetadata(name, value, cb, cb);
156 ManagerImpl::getAllDownloadsWithMetadata(
const QString &name,
157 const QString &value,
160 QDBusPendingCall call = _dbusInterface->getAllDownloadsWithMetadata(
162 auto watcher =
new MetadataDownloadsListManagerPCW(
163 _conn, _servicePath, call, name, value, cb, errCb,
this);
164 CHECK(connect(watcher, &GroupManagerPCW::callbackExecuted,
165 this, &ManagerImpl::onWatcherDone)) <<
"Could not connect to signal";
169 ManagerImpl::isError()
const {
174 ManagerImpl::lastError()
const {
179 ManagerImpl::setLastError(
const QDBusError& err) {
181 if (_lastError !=
nullptr) {
184 _lastError =
new DBusError(err);
189 ManagerImpl::allowMobileDataDownload(
bool allowed) {
190 QDBusPendingReply<> reply =
191 _dbusInterface->allowGSMDownload(allowed);
193 reply.waitForFinished();
194 if (reply.isError()) {
195 auto err = reply.error();
196 qCritical() <<
"Error setting mobile data" << err;
202 ManagerImpl::isMobileDataDownload() {
203 QDBusPendingReply<bool> reply =
204 _dbusInterface->isGSMDownloadAllowed();
206 reply.waitForFinished();
207 if (reply.isError()) {
208 auto err = reply.error();
209 qCritical() <<
"Error getting if mobile data is enabled"
214 return reply.value();
219 ManagerImpl::defaultThrottle() {
220 QDBusPendingReply<qulonglong> reply =
221 _dbusInterface->defaultThrottle();
223 reply.waitForFinished();
224 if (reply.isError()) {
225 auto err = reply.error();
226 qCritical() <<
"Error getting the default throttle" << err;
230 return reply.value();
235 ManagerImpl::setDefaultThrottle(qulonglong speed) {
236 QDBusPendingReply<> reply =
237 _dbusInterface->setDefaultThrottle(speed);
239 reply.waitForFinished();
240 if (reply.isError()) {
241 auto err = reply.error();
242 qCritical() <<
"Error setting default throttle" << err;
248 ManagerImpl::exit() {
249 QDBusPendingReply<> reply =
250 _dbusInterface->exit();
252 reply.waitForFinished();
253 if (reply.isError()) {
254 auto err = reply.error();
255 qCritical() <<
"Error setting killing the daemon" << err;
261 ManagerImpl::onWatcherDone() {
262 auto senderObj = sender();
263 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