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 }