File indexing completed on 2024-05-12 05:17:18

0001 /**
0002  * This file is part of the KDE project
0003  * SPDX-FileCopyrightText: 2009 Kevin Ottens <ervin@kde.org>
0004  *
0005  * SPDX-License-Identifier: LGPL-2.0-or-later
0006  */
0007 
0008 #include <QCoreApplication>
0009 #include <QDebug>
0010 
0011 #include "capabilitiesjob.h"
0012 #include "closejob.h"
0013 #include "idlejob.h"
0014 #include "loginjob.h"
0015 #include "logoutjob.h"
0016 #include "selectjob.h"
0017 #include "session.h"
0018 #include "sessionuiproxy.h"
0019 
0020 using namespace KIMAP;
0021 
0022 class UiProxy : public SessionUiProxy
0023 {
0024 public:
0025     bool ignoreSslError(const KSslErrorUiData &errorData) override
0026     {
0027         Q_UNUSED(errorData)
0028         return true;
0029     }
0030 };
0031 
0032 int main(int argc, char **argv)
0033 {
0034     QCoreApplication::setApplicationName(QStringLiteral("TestImapIdle"));
0035 
0036     if (argc < 4) {
0037         qCritical() << "Not enough parameters, expecting: <server> <user> <password>";
0038     }
0039 
0040     QString server = QString::fromLocal8Bit(argv[1]);
0041     int port = 143;
0042     if (server.count(QLatin1Char(':')) == 1) {
0043         const QStringList lstSplit = server.split(QLatin1Char(':'));
0044         port = lstSplit.last().toInt();
0045         server = lstSplit.first();
0046     }
0047     QString user = QString::fromLocal8Bit(argv[2]);
0048     QString password = QString::fromLocal8Bit(argv[3]);
0049 
0050     qDebug() << "Listening:" << server << port << user << password;
0051     qDebug();
0052 
0053     QCoreApplication app(argc, argv);
0054     Session session(server, port);
0055     auto proxy = new UiProxy();
0056     session.setUiProxy(UiProxy::Ptr(proxy));
0057 
0058     qDebug() << "Logging in...";
0059     auto login = new LoginJob(&session);
0060     login->setUserName(user);
0061     login->setPassword(password);
0062     login->exec();
0063     Q_ASSERT_X(login->error() == 0, "LoginJob", login->errorString().toLocal8Bit().constData());
0064     Q_ASSERT(session.state() == Session::Authenticated);
0065     qDebug();
0066 
0067     qDebug() << "Asking for capabilities:";
0068     auto capabilities = new CapabilitiesJob(&session);
0069     capabilities->exec();
0070     Q_ASSERT_X(capabilities->error() == 0, "CapabilitiesJob", capabilities->errorString().toLocal8Bit().constData());
0071     Q_ASSERT(session.state() == Session::Authenticated);
0072     qDebug() << capabilities->capabilities();
0073     qDebug();
0074 
0075     Q_ASSERT(capabilities->capabilities().contains(QLatin1StringView("IDLE")));
0076 
0077     qDebug() << "Selecting INBOX:";
0078     auto select = new SelectJob(&session);
0079     select->setMailBox(QStringLiteral("INBOX"));
0080     select->exec();
0081     Q_ASSERT_X(select->error() == 0, "SelectJob", select->errorString().toLocal8Bit().constData());
0082     Q_ASSERT(session.state() == Session::Selected);
0083     qDebug() << "Flags:" << select->flags();
0084     qDebug() << "Permanent flags:" << select->permanentFlags();
0085     qDebug() << "Total Number of Messages:" << select->messageCount();
0086     qDebug() << "Number of recent Messages:" << select->recentCount();
0087     qDebug() << "First Unseen Message Index:" << select->firstUnseenIndex();
0088     qDebug() << "UID validity:" << select->uidValidity();
0089     qDebug() << "Next UID:" << select->nextUid();
0090     qDebug();
0091 
0092     qDebug() << "Start idling...";
0093     auto idle = new IdleJob(&session);
0094     QObject::connect(idle, &KIMAP::IdleJob::mailBoxStats, idle, &KIMAP::IdleJob::stop);
0095     idle->exec();
0096     qDebug() << "Idling done for" << idle->lastMailBox() << "message count:" << idle->lastMessageCount() << "recent count:" << idle->lastRecentCount();
0097 
0098     qDebug() << "Closing INBOX:";
0099     auto close = new CloseJob(&session);
0100     close->exec();
0101     Q_ASSERT(session.state() == Session::Authenticated);
0102     qDebug();
0103 
0104     qDebug() << "Logging out...";
0105     auto logout = new LogoutJob(&session);
0106     logout->exec();
0107     Q_ASSERT_X(logout->error() == 0, "LogoutJob", logout->errorString().toLocal8Bit().constData());
0108     Q_ASSERT(session.state() == Session::Disconnected);
0109 
0110     return 0;
0111 }