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