Index: src/core/kprotocolmanager.h =================================================================== --- src/core/kprotocolmanager.h +++ src/core/kprotocolmanager.h @@ -615,6 +615,19 @@ static bool isSourceProtocol(const QUrl &url); /** + * Returns which protocols handle this mimetype, if it's an archive mimetype. + * For instance tar:/ handles application/x-tar,application/x-bzip-compressed-tar etc. + * + * This is defined in the protocol description file using an entry like + * "archiveMimetype=application/x-tar,application/x-bzip-compressed-tar" + * + * @param mimetype the mimetype to check + * @return the protocol that can handle this archive mimetype, for instance "zip". + * @since 5.22 + */ + static QList protocolsForArchiveMimetype(const QString &mimeType); + + /** * Returns which protocol handles this mimetype, if it's an archive mimetype. * For instance zip:/ handles application/x-zip. * Index: src/core/kprotocolmanager.cpp =================================================================== --- src/core/kprotocolmanager.cpp +++ src/core/kprotocolmanager.cpp @@ -1301,7 +1301,7 @@ return prot->m_defaultMimetype; } -QString KProtocolManager::protocolForArchiveMimetype(const QString &mimeType) +QList KProtocolManager::protocolsForArchiveMimetype(const QString &mimeType) { PRIVATE_DATA; QMutexLocker lock(&d->mutex); @@ -1311,11 +1311,16 @@ it != allProtocols.end(); ++it) { const QStringList archiveMimetypes = (*it)->m_archiveMimeTypes; Q_FOREACH (const QString &mime, archiveMimetypes) { - d->protocolForArchiveMimetypes.insert(mime, (*it)->m_name); + d->protocolForArchiveMimetypes.insertMulti(mime, (*it)->m_name); } } } - return d->protocolForArchiveMimetypes.value(mimeType); + return d->protocolForArchiveMimetypes.values(mimeType); +} + +QString KProtocolManager::protocolForArchiveMimetype(const QString &mimeType) +{ + return protocolsForArchiveMimetype(mimeType).value(0); } QString KProtocolManager::charsetFor(const QUrl &url)