File: exportmailfolderattributejobimpl.cpp

package info (click to toggle)
pim-data-exporter 4%3A22.12.3-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 7,780 kB
  • sloc: cpp: 14,067; xml: 197; makefile: 6; sh: 3
file content (76 lines) | stat: -rw-r--r-- 2,951 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
   SPDX-FileCopyrightText: 2022 Laurent Montel <montel@kde.org>

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

#include "exportmailfolderattributejobimpl.h"
#include "exportmailjobinterface.h"
#include "pimdataexportcore_debug.h"
#include <Akonadi/CollectionFetchJob>
#include <Akonadi/CollectionFetchScope>
#include <Akonadi/EntityDisplayAttribute>
#include <Akonadi/FavoriteCollectionAttribute>
#include <Akonadi/MessageFolderAttribute>
#include <MailCommon/ExpireCollectionAttribute>

ExportMailFolderAttributeJobImpl::ExportMailFolderAttributeJobImpl(QObject *parent)
    : ExportMailFolderAttributeJob{parent}
{
}

ExportMailFolderAttributeJobImpl::~ExportMailFolderAttributeJobImpl() = default;

void ExportMailFolderAttributeJobImpl::fetchAttributes()
{
    auto job = new Akonadi::CollectionFetchJob(Akonadi::Collection::root(), Akonadi::CollectionFetchJob::Recursive, this);
    job->fetchScope().fetchAttribute<MailCommon::ExpireCollectionAttribute>();
    job->fetchScope().fetchAttribute<Akonadi::EntityDisplayAttribute>();
    job->fetchScope().fetchAttribute<Akonadi::FavoriteCollectionAttribute>();
    job->fetchScope().fetchAttribute<Akonadi::MessageFolderAttribute>();
    job->fetchScope().setContentMimeTypes({QStringLiteral("message/rfc822")});
    connect(job, &Akonadi::CollectionFetchJob::result, this, &ExportMailFolderAttributeJobImpl::slotFetchFinished);
}

void ExportMailFolderAttributeJobImpl::slotFetchFinished(KJob *job)
{
    if (job->error()) {
        Q_EMIT failed();
        deleteLater();
        return;
    }

    auto list = static_cast<Akonadi::CollectionFetchJob *>(job);
    const Akonadi::Collection::List cols = list->collections();
    if (cols.isEmpty()) {
        Q_EMIT successed();
        qCWarning(PIMDATAEXPORTERCORE_LOG) << "It seems wierd that there is not collection.";
        deleteLater();
        return;
    }
    QMap<QString, ImportExportMailUtil::AttributeInfo> lstAttributeInfo;
    for (const auto &col : cols) {
        ImportExportMailUtil::AttributeInfo info;

        const auto *attr = col.attribute<MailCommon::ExpireCollectionAttribute>();
        if (attr) {
            info.expireAttribute = attr->serialized();
        }
        const auto *attrDisplay = col.attribute<Akonadi::EntityDisplayAttribute>();
        if (attrDisplay) {
            info.expireAttribute = attrDisplay->serialized();
        }
        const auto *attrFavorite = col.attribute<Akonadi::FavoriteCollectionAttribute>();
        if (attrFavorite) {
            info.favoriteAttribute = attrFavorite->serialized();
        }
        const auto *attrFolder = col.attribute<Akonadi::MessageFolderAttribute>();
        if (attrFolder) {
            info.folderAttribute = attrFolder->serialized();
        }
        if (info.isValid()) {
            lstAttributeInfo.insert(mInterface->convertToFullCollectionPath(col.id()), info);
        }
    }
    storeFileFolderAttribute(lstAttributeInfo);
}