/* -*- mode: c++; c-basic-offset:4 -*-
    uiserver/verifychecksumscommand.cpp

    This file is part of Kleopatra, the KDE keymanager
    SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB

    SPDX-License-Identifier: GPL-2.0-or-later
*/

#include <config-kleopatra.h>

#include "verifychecksumscommand.h"

#ifndef QT_NO_DIRMODEL

#include <crypto/verifychecksumscontroller.h>

#include <Libkleo/KleoException>

#include <KLocalizedString>

using namespace Kleo;
using namespace Kleo::Crypto;

class VerifyChecksumsCommand::Private
{
private:
    friend class ::Kleo::VerifyChecksumsCommand;
    VerifyChecksumsCommand *const q;
public:
    explicit Private(VerifyChecksumsCommand *qq)
        : q(qq),
          controller()
    {

    }

private:
    void checkForErrors() const;

private:
    std::shared_ptr<VerifyChecksumsController> controller;
};

VerifyChecksumsCommand::VerifyChecksumsCommand()
    : AssuanCommandMixin<VerifyChecksumsCommand>(), d(new Private(this))
{

}

VerifyChecksumsCommand::~VerifyChecksumsCommand() {}

void VerifyChecksumsCommand::Private::checkForErrors() const
{

    if (!q->numFiles())
        throw Exception(makeError(GPG_ERR_ASS_NO_INPUT),
                        i18n("At least one FILE must be present"));

}

int VerifyChecksumsCommand::doStart()
{

    d->checkForErrors();

    d->controller.reset(new VerifyChecksumsController(shared_from_this()));

    d->controller->setFiles(fileNames());

    QObject::connect(d->controller.get(), &Controller::done, this, [this]() { done(); }, Qt::QueuedConnection);
    QObject::connect(d->controller.get(), &Controller::error, this, [this](int err, const QString &details) { done(err, details); }, Qt::QueuedConnection);

    d->controller->start();

    return 0;
}

void VerifyChecksumsCommand::doCanceled()
{
    if (d->controller) {
        d->controller->cancel();
    }
}

#endif // QT_NO_DIRMODEL
