File indexing completed on 2024-09-22 04:52:51

0001 /* Copyright (C) 2006 - 2014 Jan Kundrát <jkt@flaska.net>
0002 
0003    This file is part of the Trojita Qt IMAP e-mail client,
0004    http://trojita.flaska.net/
0005 
0006    This program is free software; you can redistribute it and/or
0007    modify it under the terms of the GNU General Public License as
0008    published by the Free Software Foundation; either version 2 of
0009    the License or (at your option) version 3 or any later version
0010    accepted by the membership of KDE e.V. (or its successor approved
0011    by the membership of KDE e.V.), which shall act as a proxy
0012    defined in Section 14 of version 3 of the license.
0013 
0014    This program is distributed in the hope that it will be useful,
0015    but WITHOUT ANY WARRANTY; without even the implied warranty of
0016    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0017    GNU General Public License for more details.
0018 
0019    You should have received a copy of the GNU General Public License
0020    along with this program.  If not, see <http://www.gnu.org/licenses/>.
0021 */
0022 
0023 #ifndef IMAP_PARSER_THREADINGNODE
0024 #define IMAP_PARSER_THREADINGNODE
0025 
0026 #include <QDataStream>
0027 #include <QMetaType>
0028 #include <QVector>
0029 
0030 namespace Imap
0031 {
0032 namespace Responses
0033 {
0034 
0035 /** @short Structure for keeping track of the message hierarchy, or threading */
0036 struct ThreadingNode {
0037     /** @short Message sequence number or UID number
0038 
0039     Which of the two allowed numbering schemes would be used depends on
0040     the command which triggered this reply, if it was plain THREAD, it
0041     will use message sequence numbers, if it was an UID THREAD command,
0042     it uses UIDs.
0043 
0044     Special value 0 means "parent is present and its existence can be
0045     proved, but it doesn't match the search criteria or it isn't in the
0046     mailbox.
0047     */
0048     uint num;
0049     /** @short Recursive data structure storing numbers of all messages which are children of the current one */
0050     QVector<ThreadingNode> children;
0051     ThreadingNode(const uint num=0, const QVector<ThreadingNode> &children=QVector<ThreadingNode>()):
0052         num(num), children(children)
0053     {
0054     }
0055 };
0056 
0057 bool operator==(const ThreadingNode &n1, const ThreadingNode &n2);
0058 bool operator!=(const ThreadingNode &n1, const ThreadingNode &n2);
0059 
0060 QDataStream &operator>>(QDataStream &s, ThreadingNode &n);
0061 QDataStream &operator<<(QDataStream &s, const ThreadingNode &n);
0062 
0063 }
0064 }
0065 
0066 Q_DECLARE_METATYPE(Imap::Responses::ThreadingNode);
0067 
0068 
0069 #endif // IMAP_PARSER_THREADINGNODE