File indexing completed on 2024-06-16 04:55:55

0001 /* -*- mode: c++; c-basic-offset:4 -*-
0002     crypto/controller.cpp
0003 
0004     This file is part of Kleopatra, the KDE keymanager
0005     SPDX-FileCopyrightText: 2008 Klarälvdalens Datakonsult AB
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #include <config-kleopatra.h>
0011 
0012 #include "controller.h"
0013 
0014 using namespace Kleo;
0015 using namespace Kleo::Crypto;
0016 
0017 class Controller::Private
0018 {
0019     friend class ::Kleo::Crypto::Controller;
0020     Controller *const q;
0021 
0022 public:
0023     explicit Private(Controller *qq)
0024         : q(qq)
0025     {
0026     }
0027 
0028 private:
0029     int lastError = 0;
0030     QString lastErrorString;
0031 };
0032 
0033 Controller::Controller(QObject *parent)
0034     : QObject(parent)
0035     , ExecutionContextUser()
0036     , d(new Private(this))
0037 {
0038 }
0039 
0040 Controller::Controller(const std::shared_ptr<const ExecutionContext> &ctx, QObject *parent)
0041     : QObject(parent)
0042     , ExecutionContextUser(ctx)
0043     , d(new Private(this))
0044 {
0045 }
0046 
0047 Controller::~Controller()
0048 {
0049 }
0050 
0051 void Controller::taskDone(const std::shared_ptr<const Task::Result> &result)
0052 {
0053     const Task *task = qobject_cast<const Task *>(sender());
0054     Q_ASSERT(task);
0055     doTaskDone(task, result);
0056 }
0057 
0058 void Controller::doTaskDone(const Task *, const std::shared_ptr<const Task::Result> &)
0059 {
0060 }
0061 
0062 void Controller::connectTask(const std::shared_ptr<Task> &task)
0063 {
0064     Q_ASSERT(task);
0065     connect(task.get(), &Task::result, this, &Controller::taskDone);
0066 }
0067 
0068 void Controller::setLastError(int err, const QString &msg)
0069 {
0070     d->lastError = err;
0071     d->lastErrorString = msg;
0072 }
0073 
0074 void Controller::emitDoneOrError()
0075 {
0076     if (d->lastError) {
0077         Q_EMIT error(d->lastError, d->lastErrorString, QPrivateSignal{});
0078         d->lastError = 0;
0079         d->lastErrorString = QString();
0080     } else {
0081         Q_EMIT done(QPrivateSignal{});
0082     }
0083 }
0084 
0085 #include "moc_controller.cpp"