File indexing completed on 2024-05-12 05:28:15

0001 // SPDX-FileCopyrightText: 2021 Carl Schwan <carlschwan@kde.org>
0002 // SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
0003 // SPDX-License-Identifier: LGPL-2.0-or-later
0004 
0005 #include "mailaccounts.h"
0006 
0007 #include <Akonadi/AgentInstanceModel>
0008 #include <Akonadi/AgentFilterProxyModel>
0009 #include <Akonadi/AgentConfigurationDialog>
0010 #include <KMime/Message>
0011 
0012 MailAccounts::MailAccounts(QObject *parent)
0013     : QObject{parent}
0014 {
0015 }
0016 
0017 Akonadi::AgentFilterProxyModel *MailAccounts::runningMailAgents()
0018 {
0019     if (m_runningMailAgents) {
0020         return m_runningMailAgents;
0021     }
0022     
0023     auto agentInstanceModel = new Akonadi::AgentInstanceModel(this);
0024     m_runningMailAgents = new Akonadi::AgentFilterProxyModel(this);
0025     
0026     m_runningMailAgents->addMimeTypeFilter(KMime::Message::mimeType());
0027     m_runningMailAgents->setSourceModel(agentInstanceModel);
0028     m_runningMailAgents->addCapabilityFilter(QStringLiteral("Resource"));
0029     m_runningMailAgents->excludeCapabilities(QStringLiteral("MailTransport"));
0030     m_runningMailAgents->excludeCapabilities(QStringLiteral("Notes"));
0031     return m_runningMailAgents;
0032 }
0033 
0034 void MailAccounts::remove(int index)
0035 {
0036     Akonadi::AgentManager::self()->removeInstance(instanceFromIndex(index));
0037 }
0038 
0039 void MailAccounts::openConfigWindow(int index)
0040 {
0041     auto agentInstance = instanceFromIndex(index);
0042     
0043     if (agentInstance.isValid()) {
0044         Akonadi::AgentConfigurationDialog *dlg = new Akonadi::AgentConfigurationDialog(agentInstance);
0045         dlg->exec();
0046         delete dlg;
0047     }
0048 }
0049 
0050 Akonadi::AgentInstance MailAccounts::instanceFromIndex(int index)
0051 {
0052     return runningMailAgents()->data(runningMailAgents()->index(index, 0), Akonadi::AgentInstanceModel::InstanceRole).value<Akonadi::AgentInstance>();
0053 }