You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
4.3 KiB
117 lines
4.3 KiB
/* |
|
Copyright (C) 2013-2016 Montel Laurent <montel@kde.org> |
|
|
|
This program is free software; you can redistribute it and/or |
|
modify it under the terms of the GNU General Public |
|
License as published by the Free Software Foundation; either |
|
version 2 of the License, or (at your option) any later version. |
|
|
|
This program is distributed in the hope that it will be useful, |
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
General Public License for more details. |
|
|
|
You should have received a copy of the GNU General Public License |
|
along with this program; see the file COPYING. If not, write to |
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
|
Boston, MA 02110-1301, USA. |
|
*/ |
|
#include "folderarchiveagentjob.h" |
|
#include "folderarchiveaccountinfo.h" |
|
#include "folderarchiveagentcheckcollection.h" |
|
#include "folderarchivemanager.h" |
|
#include "folderarchivecache.h" |
|
|
|
#include "kmcommands.h" |
|
|
|
#include <AkonadiCore/ItemMoveJob> |
|
#include <AkonadiCore/CollectionFetchJob> |
|
|
|
#include <KLocalizedString> |
|
|
|
FolderArchiveAgentJob::FolderArchiveAgentJob(FolderArchiveManager *manager, FolderArchiveAccountInfo *info, const Akonadi::Item::List &lstItem, QObject *parent) |
|
: QObject(parent), |
|
mListItem(lstItem), |
|
mManager(manager), |
|
mInfo(info) |
|
{ |
|
} |
|
|
|
FolderArchiveAgentJob::~FolderArchiveAgentJob() |
|
{ |
|
} |
|
|
|
void FolderArchiveAgentJob::start() |
|
{ |
|
if (!mInfo->isValid()) { |
|
sendError(i18n("Archive folder not defined. Please verify settings for account %1", mInfo->instanceName())); |
|
return; |
|
} |
|
if (mListItem.isEmpty()) { |
|
sendError(i18n("No messages selected.")); |
|
return; |
|
} |
|
|
|
if (mInfo->folderArchiveType() == FolderArchiveAccountInfo::UniqueFolder) { |
|
Akonadi::CollectionFetchJob *fetchCollection = new Akonadi::CollectionFetchJob(Akonadi::Collection(mInfo->archiveTopLevel()), Akonadi::CollectionFetchJob::Base); |
|
connect(fetchCollection, &Akonadi::CollectionFetchJob::result, this, &FolderArchiveAgentJob::slotFetchCollection); |
|
} else { |
|
Akonadi::Collection::Id id = mManager->folderArchiveCache()->collectionId(mInfo); |
|
if (id != -1) { |
|
Akonadi::CollectionFetchJob *fetchCollection = new Akonadi::CollectionFetchJob(Akonadi::Collection(id), Akonadi::CollectionFetchJob::Base); |
|
connect(fetchCollection, &Akonadi::CollectionFetchJob::result, this, &FolderArchiveAgentJob::slotFetchCollection); |
|
} else { |
|
FolderArchiveAgentCheckCollection *checkCol = new FolderArchiveAgentCheckCollection(mInfo, this); |
|
connect(checkCol, &FolderArchiveAgentCheckCollection::collectionIdFound, this, &FolderArchiveAgentJob::slotCollectionIdFound); |
|
connect(checkCol, &FolderArchiveAgentCheckCollection::checkFailed, this, &FolderArchiveAgentJob::slotCheckFailed); |
|
checkCol->start(); |
|
} |
|
} |
|
} |
|
|
|
void FolderArchiveAgentJob::slotCheckFailed(const QString &message) |
|
{ |
|
sendError(i18n("Cannot fetch collection. %1", message)); |
|
} |
|
|
|
void FolderArchiveAgentJob::slotFetchCollection(KJob *job) |
|
{ |
|
if (job->error()) { |
|
sendError(i18n("Cannot fetch collection. %1", job->errorString())); |
|
return; |
|
} |
|
Akonadi::CollectionFetchJob *fetchCollectionJob = static_cast<Akonadi::CollectionFetchJob *>(job); |
|
Akonadi::Collection::List collections = fetchCollectionJob->collections(); |
|
if (collections.isEmpty()) { |
|
sendError(i18n("List of collections is empty. %1", job->errorString())); |
|
return; |
|
} |
|
sloMoveMailsToCollection(collections.at(0)); |
|
} |
|
|
|
void FolderArchiveAgentJob::slotCollectionIdFound(const Akonadi::Collection &col) |
|
{ |
|
mManager->folderArchiveCache()->addToCache(mInfo->instanceName(), col.id()); |
|
sloMoveMailsToCollection(col); |
|
} |
|
|
|
void FolderArchiveAgentJob::sloMoveMailsToCollection(const Akonadi::Collection &col) |
|
{ |
|
KMMoveCommand *command = new KMMoveCommand(col, mListItem, -1); |
|
connect(command, &KMMoveCommand::moveDone, this, &FolderArchiveAgentJob::slotMoveMessages); |
|
command->start(); |
|
} |
|
|
|
void FolderArchiveAgentJob::sendError(const QString &error) |
|
{ |
|
mManager->moveFailed(error); |
|
} |
|
|
|
void FolderArchiveAgentJob::slotMoveMessages(KMMoveCommand *command) |
|
{ |
|
if (command->result() == KMCommand::Failed) { |
|
sendError(i18n("Cannot move messages.")); |
|
return; |
|
} |
|
mManager->moveDone(); |
|
}
|
|
|