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 }