File indexing completed on 2023-09-24 09:25:00

0001 /*
0002     SPDX-FileCopyrightText: 2006-2007 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 /**
0007   @file
0008   This file is part of the API for handling @ref MIME data and
0009   defines the ContentIndex class.
0010 
0011   @brief
0012   Defines the ContentIndex class.
0013 
0014   @authors Volker Krause \<vkrause@kde.org\>
0015 
0016   @glossary @anchor RFC3501 @anchor rfc3501 @b RFC @b 3501:
0017   RFC that defines the <a href="https://tools.ietf.org/html/rfc3501">
0018   Internet Message Access Protocol (IMAP)</a>.
0019 */
0020 
0021 #pragma once
0022 
0023 #include "kmime_export.h"
0024 
0025 #include <QSharedDataPointer>
0026 #include <QString>
0027 #include <QMetaType>
0028 
0029 namespace KMime
0030 {
0031 
0032 /**
0033   @brief
0034   A class to uniquely identify message parts (Content) in a hierarchy.
0035 
0036   This class is implicitly shared.
0037 
0038   Based on @ref RFC3501 section 6.4.5 and thus compatible with @acronym IMAP.
0039 */
0040 class KMIME_EXPORT ContentIndex
0041 {
0042 public:
0043     /**
0044       Creates an empty content index.
0045     */
0046     ContentIndex();
0047 
0048     /**
0049       Creates a content index based on the specified string representation.
0050 
0051       @param index is a string representation of a message part index according
0052       to @ref RFC3501 section 6.4.5.
0053     */
0054     explicit ContentIndex(const QString &index);
0055 
0056     /**
0057       Copy constructor.
0058     */
0059     ContentIndex(const ContentIndex &other);
0060 
0061     /**
0062       Destructor.
0063     */
0064     ~ContentIndex();
0065 
0066     /**
0067       Returns true if this index is non-empty (valid).
0068     */
0069     Q_REQUIRED_RESULT bool isValid() const;
0070 
0071     /**
0072       Removes and returns the top-most index. Used to recursively
0073       descend into the message part hierarchy.
0074 
0075       @see push(), up().
0076     */
0077     Q_REQUIRED_RESULT unsigned int pop();
0078 
0079     /**
0080       Adds @p index to the content index. Used when ascending the message
0081       part hierarchy.
0082 
0083       @param index is the top-most content index part.
0084 
0085       @see pop(), up().
0086     */
0087     void push(unsigned int index);
0088 
0089     /**
0090       Removes and returns the bottom-most index. Used to navigate to
0091       the parent part.
0092 
0093       @see push(), pop().
0094     */
0095     unsigned int up();
0096 
0097     /**
0098       Returns a string representation of this content index according
0099       to @ref RFC3501 section 6.4.5.
0100     */
0101     Q_REQUIRED_RESULT QString toString() const;
0102 
0103     /**
0104       Compares this with @p index for equality.
0105 
0106       @param index is the content index to compare.
0107     */
0108     Q_REQUIRED_RESULT bool operator==(const ContentIndex &index) const;
0109 
0110     /**
0111       Compares this with @p index for inequality.
0112 
0113       @param index is the content index to compare.
0114     */
0115     Q_REQUIRED_RESULT bool operator!=(const ContentIndex &index) const;
0116 
0117     /**
0118       Assignment operator.
0119     */
0120     ContentIndex &operator=(const ContentIndex &other);
0121 
0122 private:
0123     //@cond PRIVATE
0124     class Private;
0125     QSharedDataPointer<Private> d;
0126     //@endcond
0127 };
0128 
0129 KMIME_EXPORT uint qHash(const KMime::ContentIndex &);
0130 
0131 }  //namespace KMime
0132 
0133 Q_DECLARE_METATYPE(KMime::ContentIndex)
0134