File indexing completed on 2024-05-12 05:11:11

0001 /*
0002     SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB, a KDAB Group company, <info@kdab.com>
0003     SPDX-FileCopyrightText: 2010 Andras Mantia <andras@kdab.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-or-later
0006 */
0007 
0008 #include "movecommand.h"
0009 #include "util_p.h"
0010 
0011 #include <Akonadi/ItemDeleteJob>
0012 #include <Akonadi/ItemMoveJob>
0013 using namespace Akonadi;
0014 
0015 class Akonadi::MoveCommandPrivate
0016 {
0017 public:
0018     MoveCommandPrivate() = default;
0019 
0020     Akonadi::Collection mDestFolder;
0021     Akonadi::Item::List mMessages;
0022 };
0023 
0024 MoveCommand::MoveCommand(const Akonadi::Collection &destFolder, const Akonadi::Item::List &msgList, QObject *parent)
0025     : CommandBase(parent)
0026     , d(new Akonadi::MoveCommandPrivate())
0027 {
0028     d->mDestFolder = destFolder;
0029     d->mMessages = msgList;
0030 }
0031 
0032 MoveCommand::~MoveCommand() = default;
0033 
0034 void MoveCommand::execute()
0035 {
0036     if (d->mMessages.isEmpty()) {
0037         emitResult(OK);
0038         return;
0039     }
0040     if (d->mDestFolder.isValid()) {
0041         auto job = new Akonadi::ItemMoveJob(d->mMessages, d->mDestFolder, this);
0042         connect(job, &Akonadi::ItemMoveJob::result, this, &MoveCommand::slotMoveResult);
0043     } else {
0044         auto job = new Akonadi::ItemDeleteJob(d->mMessages, this);
0045         connect(job, &Akonadi::ItemDeleteJob::result, this, &MoveCommand::slotMoveResult);
0046     }
0047 }
0048 
0049 void MoveCommand::slotMoveResult(KJob *job)
0050 {
0051     if (job->error()) {
0052         // handle errors
0053         Util::showJobError(job);
0054         emitResult(Failed);
0055     } else {
0056         emitResult(OK);
0057     }
0058 }
0059 
0060 #include "moc_movecommand.cpp"