File indexing completed on 2024-11-10 04:40:38

0001 /*
0002     SPDX-FileCopyrightText: 2008 Kevin Krammer <kevin.krammer@gmx.at>
0003     SPDX-FileCopyrightText: 2009 Volker Krause <vkrause@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "collectionfetchscope.h"
0009 
0010 #include <QScopedPointer>
0011 #include <QString>
0012 
0013 namespace Akonadi
0014 {
0015 class CollectionFetchScopePrivate : public QSharedData
0016 {
0017 public:
0018     CollectionFetchScopePrivate()
0019         : ancestorDepth(CollectionFetchScope::None)
0020         , listFilter(CollectionFetchScope::Enabled)
0021     {
0022     }
0023 
0024     CollectionFetchScopePrivate(const CollectionFetchScopePrivate &other)
0025         : QSharedData(other)
0026         , resource(other.resource)
0027         , contentMimeTypes(other.contentMimeTypes)
0028         , ancestorDepth(other.ancestorDepth)
0029         , listFilter(other.listFilter)
0030         , attributes(other.attributes)
0031         , statistics(other.statistics)
0032         , fetchIdOnly(other.fetchIdOnly)
0033         , mIgnoreRetrievalErrors(other.mIgnoreRetrievalErrors)
0034     {
0035         if (!ancestorFetchScope && other.ancestorFetchScope) {
0036             ancestorFetchScope.reset(new CollectionFetchScope());
0037             *ancestorFetchScope = *other.ancestorFetchScope;
0038         } else if (ancestorFetchScope && !other.ancestorFetchScope) {
0039             ancestorFetchScope.reset(nullptr);
0040         }
0041     }
0042 
0043 public:
0044     QString resource;
0045     QStringList contentMimeTypes;
0046     CollectionFetchScope::AncestorRetrieval ancestorDepth;
0047     CollectionFetchScope::ListFilter listFilter;
0048     QSet<QByteArray> attributes;
0049     QScopedPointer<CollectionFetchScope> ancestorFetchScope;
0050     bool statistics = false;
0051     bool fetchIdOnly = true;
0052     bool mIgnoreRetrievalErrors = false;
0053 };
0054 
0055 CollectionFetchScope::CollectionFetchScope()
0056     : d(new CollectionFetchScopePrivate())
0057 {
0058 }
0059 
0060 CollectionFetchScope::CollectionFetchScope(const CollectionFetchScope &other)
0061     : d(other.d)
0062 {
0063 }
0064 
0065 CollectionFetchScope::~CollectionFetchScope()
0066 {
0067 }
0068 
0069 CollectionFetchScope &CollectionFetchScope::operator=(const CollectionFetchScope &other)
0070 {
0071     if (&other != this) {
0072         d = other.d;
0073     }
0074 
0075     return *this;
0076 }
0077 
0078 bool CollectionFetchScope::isEmpty() const
0079 {
0080     return d->resource.isEmpty() && d->contentMimeTypes.isEmpty() && !d->statistics && d->ancestorDepth == None && d->listFilter == Enabled;
0081 }
0082 
0083 bool CollectionFetchScope::includeStatistics() const
0084 {
0085     return d->statistics;
0086 }
0087 
0088 void CollectionFetchScope::setIncludeStatistics(bool include)
0089 {
0090     d->statistics = include;
0091 }
0092 
0093 QString CollectionFetchScope::resource() const
0094 {
0095     return d->resource;
0096 }
0097 
0098 void CollectionFetchScope::setResource(const QString &resource)
0099 {
0100     d->resource = resource;
0101 }
0102 
0103 QStringList CollectionFetchScope::contentMimeTypes() const
0104 {
0105     return d->contentMimeTypes;
0106 }
0107 
0108 void CollectionFetchScope::setContentMimeTypes(const QStringList &mimeTypes)
0109 {
0110     d->contentMimeTypes = mimeTypes;
0111 }
0112 
0113 CollectionFetchScope::AncestorRetrieval CollectionFetchScope::ancestorRetrieval() const
0114 {
0115     return d->ancestorDepth;
0116 }
0117 
0118 void CollectionFetchScope::setAncestorRetrieval(AncestorRetrieval ancestorDepth)
0119 {
0120     d->ancestorDepth = ancestorDepth;
0121 }
0122 
0123 CollectionFetchScope::ListFilter CollectionFetchScope::listFilter() const
0124 {
0125     return d->listFilter;
0126 }
0127 
0128 void CollectionFetchScope::setListFilter(CollectionFetchScope::ListFilter listFilter)
0129 {
0130     d->listFilter = listFilter;
0131 }
0132 
0133 QSet<QByteArray> CollectionFetchScope::attributes() const
0134 {
0135     return d->attributes;
0136 }
0137 
0138 void CollectionFetchScope::fetchAttribute(const QByteArray &type, bool fetch)
0139 {
0140     d->fetchIdOnly = false;
0141     if (fetch) {
0142         d->attributes.insert(type);
0143     } else {
0144         d->attributes.remove(type);
0145     }
0146 }
0147 
0148 void CollectionFetchScope::setFetchIdOnly(bool fetchIdOnly)
0149 {
0150     d->fetchIdOnly = fetchIdOnly;
0151 }
0152 
0153 bool CollectionFetchScope::fetchIdOnly() const
0154 {
0155     return d->fetchIdOnly;
0156 }
0157 
0158 void CollectionFetchScope::setIgnoreRetrievalErrors(bool enable)
0159 {
0160     d->mIgnoreRetrievalErrors = enable;
0161 }
0162 
0163 bool CollectionFetchScope::ignoreRetrievalErrors() const
0164 {
0165     return d->mIgnoreRetrievalErrors;
0166 }
0167 
0168 void CollectionFetchScope::setAncestorFetchScope(const CollectionFetchScope &scope)
0169 {
0170     *d->ancestorFetchScope = scope;
0171 }
0172 
0173 CollectionFetchScope CollectionFetchScope::ancestorFetchScope() const
0174 {
0175     if (!d->ancestorFetchScope) {
0176         return CollectionFetchScope();
0177     }
0178     return *d->ancestorFetchScope;
0179 }
0180 
0181 CollectionFetchScope &CollectionFetchScope::ancestorFetchScope()
0182 {
0183     if (!d->ancestorFetchScope) {
0184         d->ancestorFetchScope.reset(new CollectionFetchScope());
0185     }
0186     return *d->ancestorFetchScope;
0187 }
0188 
0189 } // namespace Akonadi