1 /* Copyright (C) 2006 - 2014 Jan Kundrát <jkt@flaska.net> 2 3 This file is part of the Trojita Qt IMAP e-mail client, 4 http://trojita.flaska.net/ 5 6 This program is free software; you can redistribute it and/or 7 modify it under the terms of the GNU General Public License as 8 published by the Free Software Foundation; either version 2 of 9 the License or (at your option) version 3 or any later version 10 accepted by the membership of KDE e.V. (or its successor approved 11 by the membership of KDE e.V.), which shall act as a proxy 12 defined in Section 14 of version 3 of the license. 13 14 This program is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with this program. If not, see <http://www.gnu.org/licenses/>. 21 */ 22 23 #ifndef TROJITA_IMAPACCESS_H 24 #define TROJITA_IMAPACCESS_H 25 26 #include <QObject> 27 #include <QSslError> 28 29 #include "Common/ConnectionMethod.h" 30 #include "Common/Logging.h" 31 #include "Imap/Model/NetworkPolicy.h" 32 #include "UiUtils/Formatting.h" 33 34 class QModelIndex; 35 class QNetworkAccessManager; 36 class QSettings; 37 38 namespace Plugins { 39 class PluginManager; 40 } 41 42 namespace UiUtils { 43 class PasswordWatcher; 44 } 45 46 namespace Imap { 47 48 namespace Mailbox { 49 class MailboxModel; 50 class Model; 51 class MsgListModel; 52 class NetworkWatcher; 53 class OneMessageModel; 54 class SubtreeModelOfMailboxModel; 55 class ThreadingMsgListModel; 56 class VisibleTasksModel; 57 } 58 59 class ImapAccess : public QObject 60 { 61 Q_OBJECT 62 63 Q_PROPERTY(bool isConfigured READ isConfigured NOTIFY modelsChanged) 64 Q_PROPERTY(QObject *imapModel READ imapModel NOTIFY modelsChanged) 65 Q_PROPERTY(QObject *mailboxModel READ mailboxModel NOTIFY modelsChanged) 66 Q_PROPERTY(QObject *msgListModel READ msgListModel NOTIFY modelsChanged) 67 Q_PROPERTY(QObject *threadingMsgListModel READ threadingMsgListModel NOTIFY modelsChanged) 68 Q_PROPERTY(QObject *visibleTasksModel READ visibleTasksModel NOTIFY modelsChanged) 69 Q_PROPERTY(QObject *oneMessageModel READ oneMessageModel NOTIFY modelsChanged) 70 Q_PROPERTY(QObject *networkWatcher READ networkWatcher NOTIFY modelsChanged) 71 Q_PROPERTY(QObject *msgQNAM READ msgQNAM NOTIFY modelsChanged) 72 Q_PROPERTY(UiUtils::PasswordWatcher *passwordWatcher READ passwordWatcher NOTIFY modelsChanged) 73 Q_PROPERTY(QString server READ server WRITE setServer NOTIFY serverChanged) 74 Q_PROPERTY(int port READ port WRITE setPort NOTIFY portChanged) 75 Q_PROPERTY(QString username READ username WRITE setUsername NOTIFY usernameChanged) 76 Q_PROPERTY(QString sslMode READ sslMode WRITE setSslMode NOTIFY connMethodChanged) 77 Q_PROPERTY(QString sslInfoTitle READ sslInfoTitle NOTIFY checkSslPolicy) 78 Q_PROPERTY(QString sslInfoMessage READ sslInfoMessage NOTIFY checkSslPolicy) 79 Q_PROPERTY(int numberRefreshInterval READ numberRefreshInterval WRITE setNumberRefreshInterval NOTIFY numberRefreshIntervalChanged) 80 Q_ENUMS(Imap::ImapAccess::ConnectionMethod) 81 82 public: 83 ImapAccess(QObject *parent, QSettings *settings, Plugins::PluginManager *pluginManager, const QString &accountName); 84 85 bool isConfigured() const; 86 QAbstractItemModel *imapModel() const; 87 QAbstractItemModel *mailboxModel() const; 88 QAbstractItemModel *msgListModel() const; 89 QAbstractItemModel *visibleTasksModel() const; 90 QObject *oneMessageModel() const; 91 QObject *networkWatcher() const; 92 QAbstractItemModel *threadingMsgListModel() const; 93 QObject *msgQNAM() const; 94 UiUtils::PasswordWatcher *passwordWatcher() const; 95 96 QString server() const; 97 void setServer(const QString &server); 98 int port() const; 99 void setPort(const int port); 100 QString username() const; 101 void setUsername(const QString &username); 102 QString password() const; 103 void setPassword(const QString &password); 104 QString sslMode() const; 105 void setSslMode(const QString &sslMode); 106 int numberRefreshInterval() const; 107 void setNumberRefreshInterval(const int interval); 108 109 QString accountName() const; 110 111 Common::ConnectionMethod connectionMethod() const; 112 void setConnectionMethod(const Common::ConnectionMethod mode); 113 114 Imap::Mailbox::NetworkPolicy preferredNetworkPolicy() const; 115 116 Q_INVOKABLE void doConnect(); 117 118 QString sslInfoTitle() const; 119 QString sslInfoMessage() const; 120 UiUtils::Formatting::IconType sslInfoIcon() const; 121 122 Q_INVOKABLE void openMessage(const QString &mailbox, const uint uid); 123 Q_INVOKABLE void setSslPolicy(bool accept); 124 Q_INVOKABLE void forgetSslCertificate(); 125 126 Q_INVOKABLE void nukeCache(); 127 128 Q_INVOKABLE QString mailboxListShortMailboxName() const; 129 Q_INVOKABLE QString mailboxListMailboxName() const; 130 131 Q_INVOKABLE QModelIndex deproxifiedIndex(const QModelIndex index); 132 Q_INVOKABLE void markMessageDeleted(const QModelIndex &message, bool marked); 133 signals: 134 void serverChanged(); 135 void portChanged(); 136 void usernameChanged(); 137 void connMethodChanged(); 138 void modelsChanged(); 139 void checkSslPolicy(); 140 void cacheError(const QString &message); 141 void numberRefreshIntervalChanged(); 142 143 public slots: 144 void alertReceived(const QString &message); 145 void imapError(const QString &message); 146 void networkError(const QString &message); 147 void onCacheError(const QString &message); 148 void slotLogged(uint parserId, const Common::LogMessage &message); 149 void slotSslErrors(const QList<QSslCertificate> &sslCertificateChain, const QList<QSslError> &sslErrors); 150 void reloadConfiguration(); 151 152 private slots: 153 void onRequireStartTlsInFuture(); 154 void desiredNetworkPolicyChanged(const Imap::Mailbox::NetworkPolicy policy); 155 156 private: 157 QSettings *m_settings; 158 Imap::Mailbox::Model *m_imapModel; 159 Imap::Mailbox::MailboxModel *m_mailboxModel; 160 Imap::Mailbox::SubtreeModelOfMailboxModel *m_mailboxSubtreeModel; 161 Imap::Mailbox::MsgListModel *m_msgListModel; 162 Imap::Mailbox::ThreadingMsgListModel *m_threadingMsgListModel; 163 Imap::Mailbox::VisibleTasksModel *m_visibleTasksModel; 164 Imap::Mailbox::OneMessageModel *m_oneMessageModel; 165 Imap::Mailbox::NetworkWatcher *m_netWatcher; 166 QNetworkAccessManager *m_msgQNAM; 167 Plugins::PluginManager *m_pluginManager; 168 UiUtils::PasswordWatcher *m_passwordWatcher; 169 170 QString m_server; 171 int m_port; 172 QString m_username; 173 QString m_password; 174 Common::ConnectionMethod m_connectionMethod; 175 176 QList<QSslCertificate> m_sslChain; 177 QList<QSslError> m_sslErrors; 178 QString m_sslInfoTitle; 179 QString m_sslInfoMessage; 180 UiUtils::Formatting::IconType m_sslInfoIcon; 181 182 QString m_accountName; 183 QString m_cacheDir; 184 }; 185 186 } 187 188 #endif // TROJITA_IMAPACCESS_H 189