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();