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

0001 /*
0002     SPDX-FileCopyrightText: 2009 Kevin Ottens <ervin@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <QByteArray>
0010 #include <QList>
0011 #include <QMetaType>
0012 
0013 namespace KIMAP
0014 {
0015 struct Response {
0016     class Part
0017     {
0018     public:
0019         enum Type { String = 0, List };
0020 
0021         explicit Part(const QByteArray &string)
0022             : m_type(String)
0023             , m_string(string)
0024         {
0025         }
0026         explicit Part(const QList<QByteArray> &list)
0027             : m_type(List)
0028             , m_list(list)
0029         {
0030         }
0031 
0032         inline Type type() const
0033         {
0034             return m_type;
0035         }
0036         inline QByteArray toString() const
0037         {
0038             return m_string;
0039         }
0040         inline QList<QByteArray> toList() const
0041         {
0042             return m_list;
0043         }
0044 
0045     private:
0046         Type m_type;
0047         QByteArray m_string;
0048         QList<QByteArray> m_list;
0049     };
0050 
0051     inline QByteArray toString() const
0052     {
0053         QByteArray result;
0054 
0055         for (const Part &part : std::as_const(content)) {
0056             if (part.type() == Part::List) {
0057                 result += '(';
0058                 const QList<QByteArray> lstBa = part.toList();
0059                 for (const QByteArray &item : lstBa) {
0060                     result += ' ';
0061                     result += item;
0062                 }
0063                 result += " ) ";
0064             } else {
0065                 result += part.toString() + ' ';
0066             }
0067         }
0068 
0069         if (!responseCode.isEmpty()) {
0070             result += "[ ";
0071             for (const Part &part : std::as_const(responseCode)) {
0072                 if (part.type() == Part::List) {
0073                     result += '(';
0074                     const QList<QByteArray> lstBa = part.toList();
0075                     for (const QByteArray &item : lstBa) {
0076                         result += ' ';
0077                         result += item;
0078                     }
0079                     result += " ) ";
0080                 } else {
0081                     result += part.toString() + ' ';
0082                 }
0083             }
0084             result += " ]";
0085         }
0086 
0087         return result;
0088     }
0089 
0090     QList<Part> content;
0091     QList<Part> responseCode;
0092 };
0093 
0094 }
0095 
0096 Q_DECLARE_METATYPE(KIMAP::Response)
0097 static const int _kimap_messageTypeId = qRegisterMetaType<KIMAP::Response>();