File indexing completed on 2025-02-02 05:08:35

0001 // SPDX-FileCopyrightText: 2023 Carl Schwan <carl@carlschwan.eu>
0002 // SPDX-License-Identifier: LGPL-2.0-or-later
0003 
0004 #include "ispdb/configurationmodel.h"
0005 #include <KLocalizedString>
0006 
0007 Configuration::Configuration(const Server &_incoming, std::optional<Server> _outgoing, const QString &_shortDisplayName)
0008     : shortDisplayName(_shortDisplayName)
0009     , incoming(_incoming)
0010     , outgoing(_outgoing)
0011 {
0012 }
0013 
0014 ConfigurationModel::ConfigurationModel(QObject *parent)
0015     : QAbstractListModel(parent)
0016 {
0017 }
0018 
0019 int ConfigurationModel::rowCount(const QModelIndex &parent) const
0020 {
0021     Q_UNUSED(parent)
0022     return m_configurations.size();
0023 }
0024 
0025 QVariant ConfigurationModel::data(const QModelIndex &index, int role) const
0026 {
0027     Q_ASSERT(checkIndex(index, QAbstractItemModel::CheckIndexOption::IndexIsValid));
0028 
0029     const auto &configuration = m_configurations[index.row()];
0030     const auto incomingServer = configuration.incoming;
0031     const auto outgoingServer = configuration.outgoing;
0032 
0033     switch (role) {
0034     case Qt::DisplayRole:
0035     case NameRole:
0036         return incomingServer.type == Server::Type::IMAP ? i18n("IMAP") : i18n("POP3");
0037     case DescriptionRole:
0038         return incomingServer.type == Server::Type::IMAP ? i18n("Keep your folders and emails synced on your server")
0039                                                          : i18n("Keep your folders and emails on your computer");
0040     case IncomingHostRole:
0041         return incomingServer.hostname;
0042     case IncomingTagsRole:
0043         return incomingServer.tags();
0044     case OutgoingHostRole:
0045         return outgoingServer ? outgoingServer->hostname : QString();
0046     case OutgoingTagsRole:
0047         return outgoingServer ? outgoingServer->tags() : QStringList();
0048     }
0049     return {};
0050 }
0051 
0052 QHash<int, QByteArray> ConfigurationModel::roleNames() const
0053 {
0054     return {
0055         {NameRole, "name"},
0056         {DescriptionRole, "description"},
0057         {IncomingTagsRole, "incomingTags"},
0058         {IncomingHostRole, "incomingHost"},
0059         {OutgoingTagsRole, "outgoingTags"},
0060         {OutgoingHostRole, "outgoingHost"},
0061     };
0062 }
0063 
0064 void ConfigurationModel::clear()
0065 {
0066     beginResetModel();
0067     m_configurations.clear();
0068     endResetModel();
0069 }
0070 
0071 void ConfigurationModel::setEmailProvider(const EmailProvider &emailProvider)
0072 {
0073     std::optional<Server> preferredOutgoingServer;
0074 
0075     for (const auto &server : emailProvider.smtpServers) {
0076         if (!preferredOutgoingServer || preferredOutgoingServer->socketType < server.socketType) {
0077             preferredOutgoingServer = server;
0078         }
0079     }
0080 
0081     beginResetModel();
0082     m_configurations.clear();
0083 
0084     for (const auto &server : emailProvider.imapServers) {
0085         m_configurations.emplace_back(server, preferredOutgoingServer, emailProvider.shortDisplayName);
0086     }
0087 
0088     for (const auto &server : emailProvider.popServers) {
0089         m_configurations.emplace_back(server, preferredOutgoingServer, emailProvider.shortDisplayName);
0090     }
0091 
0092     endResetModel();
0093 }