File indexing completed on 2024-05-12 15:59:50
0001 /* 0002 * SPDX-FileCopyrightText: 2018 Boudewijn Rempt <boud@valdyas.org> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "KisResourceLoaderRegistry.h" 0008 0009 #include <QApplication> 0010 #include <QString> 0011 #include <QDebug> 0012 0013 #include <KisResourceCacheDb.h> 0014 #include <KisMimeDatabase.h> 0015 0016 struct KisResourceLoaderRegistry::Private 0017 { 0018 QMap<int, ResourceCacheFixup*> fixups; 0019 }; 0020 0021 KisResourceLoaderRegistry::KisResourceLoaderRegistry(QObject *parent) 0022 : QObject(parent), 0023 m_d(new Private) 0024 { 0025 } 0026 0027 KisResourceLoaderRegistry::~KisResourceLoaderRegistry() 0028 { 0029 qDeleteAll(values()); 0030 qDeleteAll(m_d->fixups); 0031 } 0032 0033 KisResourceLoaderRegistry* KisResourceLoaderRegistry::instance() 0034 { 0035 KisResourceLoaderRegistry *reg = qApp->findChild<KisResourceLoaderRegistry *>(QString()); 0036 if (!reg) { 0037 reg = new KisResourceLoaderRegistry(qApp); 0038 } 0039 return reg; 0040 } 0041 0042 void KisResourceLoaderRegistry::registerLoader(KisResourceLoaderBase *loader) 0043 { 0044 add(loader); 0045 } 0046 0047 KisResourceLoaderBase *KisResourceLoaderRegistry::loader(const QString &resourceType, const QString &mimetype) const 0048 { 0049 Q_FOREACH(KisResourceLoaderBase *loader, resourceTypeLoaders(resourceType)) { 0050 0051 if (loader->mimetypes().contains(mimetype)) { 0052 return loader; 0053 } 0054 } 0055 return 0; 0056 } 0057 0058 QVector<KisResourceLoaderBase *> KisResourceLoaderRegistry::resourceTypeLoaders(const QString &resourceType) const 0059 { 0060 QVector<KisResourceLoaderBase *> r; 0061 Q_FOREACH(KisResourceLoaderBase *loader, values()) { 0062 if (loader->resourceType() == resourceType) { 0063 r << loader; 0064 } 0065 } 0066 return r; 0067 } 0068 0069 void KisResourceLoaderRegistry::registerFixup(int priority, ResourceCacheFixup *fixup) 0070 { 0071 m_d->fixups.insert(priority, fixup); 0072 } 0073 0074 QStringList KisResourceLoaderRegistry::executeAllFixups() 0075 { 0076 QStringList errorMessages; 0077 0078 Q_FOREACH (ResourceCacheFixup *fixup, m_d->fixups) { 0079 errorMessages << fixup->executeFix(); 0080 } 0081 0082 return errorMessages; 0083 } 0084 0085 QStringList KisResourceLoaderRegistry::filters(const QString &resourceType) const 0086 { 0087 QStringList r; 0088 Q_FOREACH(KisResourceLoaderBase *loader, resourceTypeLoaders(resourceType)) { 0089 r.append(loader->filters()); 0090 } 0091 r.removeDuplicates(); 0092 r.sort(); 0093 return r; 0094 } 0095 0096 QStringList KisResourceLoaderRegistry::mimeTypes(const QString &resourceType) const 0097 { 0098 QStringList extensions = KisResourceLoaderRegistry::instance()->filters(resourceType); 0099 QStringList mimeTypes; 0100 Q_FOREACH(const QString &extension, extensions) { 0101 mimeTypes << KisMimeDatabase::mimeTypeForSuffix(extension); 0102 } 0103 mimeTypes.removeDuplicates(); 0104 mimeTypes.sort(); 0105 0106 return mimeTypes; 0107 } 0108 0109 0110 0111 QStringList KisResourceLoaderRegistry::resourceTypes() const 0112 { 0113 QStringList r; 0114 Q_FOREACH(KisResourceLoaderBase *loader, values()) { 0115 r << loader->resourceType(); 0116 } 0117 r.removeDuplicates(); 0118 r.sort(); 0119 0120 return r; 0121 }