File indexing completed on 2024-05-26 05:14:13
0001 /* 0002 SPDX-FileCopyrightText: 2009 Kevin Krammer <kevin.krammer@gmx.at> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "mimetypechecker.h" 0008 0009 #include "mimetypechecker_p.h" 0010 0011 #include "collection.h" 0012 #include "item.h" 0013 0014 using namespace Akonadi; 0015 0016 MimeTypeChecker::MimeTypeChecker() 0017 : d(new MimeTypeCheckerPrivate()) 0018 { 0019 } 0020 0021 MimeTypeChecker::MimeTypeChecker(const MimeTypeChecker &other) 0022 : d(other.d) 0023 { 0024 } 0025 0026 MimeTypeChecker::~MimeTypeChecker() 0027 { 0028 } 0029 0030 MimeTypeChecker &MimeTypeChecker::operator=(const MimeTypeChecker &other) 0031 { 0032 if (&other != this) { 0033 d = other.d; 0034 } 0035 0036 return *this; 0037 } 0038 0039 QStringList MimeTypeChecker::wantedMimeTypes() const 0040 { 0041 return d->mWantedMimeTypes.values(); 0042 } 0043 0044 bool MimeTypeChecker::hasWantedMimeTypes() const 0045 { 0046 return !d->mWantedMimeTypes.isEmpty(); 0047 } 0048 0049 void MimeTypeChecker::setWantedMimeTypes(const QStringList &mimeTypes) 0050 { 0051 d->mWantedMimeTypes = QSet<QString>(mimeTypes.begin(), mimeTypes.end()); 0052 } 0053 0054 void MimeTypeChecker::addWantedMimeType(const QString &mimeType) 0055 { 0056 d->mWantedMimeTypes.insert(mimeType); 0057 } 0058 0059 void MimeTypeChecker::removeWantedMimeType(const QString &mimeType) 0060 { 0061 d->mWantedMimeTypes.remove(mimeType); 0062 } 0063 0064 bool MimeTypeChecker::isWantedItem(const Item &item) const 0065 { 0066 if (d->mWantedMimeTypes.isEmpty() || !item.isValid()) { 0067 return false; 0068 } 0069 0070 const QString mimeType = item.mimeType(); 0071 if (mimeType.isEmpty()) { 0072 return false; 0073 } 0074 0075 return d->isWantedMimeType(mimeType); 0076 } 0077 0078 bool MimeTypeChecker::isWantedCollection(const Collection &collection) const 0079 { 0080 if (d->mWantedMimeTypes.isEmpty() || !collection.isValid()) { 0081 return false; 0082 } 0083 0084 const QStringList contentMimeTypes = collection.contentMimeTypes(); 0085 if (contentMimeTypes.isEmpty()) { 0086 return false; 0087 } 0088 0089 for (const QString &mimeType : contentMimeTypes) { 0090 if (mimeType.isEmpty()) { 0091 continue; 0092 } 0093 0094 if (d->isWantedMimeType(mimeType)) { 0095 return true; 0096 } 0097 } 0098 0099 return false; 0100 } 0101 0102 bool MimeTypeChecker::isWantedItem(const Item &item, const QString &wantedMimeType) 0103 { 0104 if (wantedMimeType.isEmpty() || !item.isValid()) { 0105 return false; 0106 } 0107 0108 const QString mimeType = item.mimeType(); 0109 if (mimeType.isEmpty()) { 0110 return false; 0111 } 0112 0113 if (mimeType == wantedMimeType) { 0114 return true; 0115 } 0116 0117 QMimeDatabase db; 0118 const QMimeType mt = db.mimeTypeForName(mimeType); 0119 if (!mt.isValid()) { 0120 return false; 0121 } 0122 0123 return mt.inherits(wantedMimeType); 0124 } 0125 0126 bool MimeTypeChecker::isWantedCollection(const Collection &collection, const QString &wantedMimeType) 0127 { 0128 if (wantedMimeType.isEmpty() || !collection.isValid()) { 0129 return false; 0130 } 0131 0132 const QStringList contentMimeTypes = collection.contentMimeTypes(); 0133 if (contentMimeTypes.isEmpty()) { 0134 return false; 0135 } 0136 0137 for (const QString &mimeType : contentMimeTypes) { 0138 if (mimeType.isEmpty()) { 0139 continue; 0140 } 0141 0142 if (mimeType == wantedMimeType) { 0143 return true; 0144 } 0145 0146 QMimeDatabase db; 0147 const QMimeType mt = db.mimeTypeForName(mimeType); 0148 if (!mt.isValid()) { 0149 continue; 0150 } 0151 0152 if (mt.inherits(wantedMimeType)) { 0153 return true; 0154 } 0155 } 0156 0157 return false; 0158 } 0159 0160 bool MimeTypeChecker::isWantedMimeType(const QString &mimeType) const 0161 { 0162 return d->isWantedMimeType(mimeType); 0163 } 0164 0165 bool MimeTypeChecker::containsWantedMimeType(const QStringList &mimeTypes) const 0166 { 0167 for (const QString &mt : mimeTypes) { 0168 if (d->isWantedMimeType(mt)) { 0169 return true; 0170 } 0171 } 0172 return false; 0173 }