27
27
#include <kmimetype.h>
28
28
#include <kprotocolmanager.h>
33
namespace ArchiveUtils {
35
bool fileItemIsArchive(const KFileItem& item) {
36
KMimeType::Ptr mimeType = item.determineMimeType();
37
return !ArchiveUtils::protocolForMimeType(mimeType->name()).isEmpty();
40
bool fileItemIsDirOrArchive(const KFileItem& item) {
41
return item.isDir() || fileItemIsArchive(item);
44
QString protocolForMimeType(const QString& mimeType) {
45
static QHash<QString, QString> cache;
46
QHash<QString, QString>::ConstIterator it = cache.constFind(mimeType);
47
if (it != cache.constEnd()) {
51
QString protocol = KProtocolManager::protocolForArchiveMimetype(mimeType);
52
if (protocol.isEmpty()) {
53
// No protocol, try with mimeType parents. This is useful for .cbz for
55
KMimeType::Ptr ptr = KMimeType::mimeType(mimeType);
57
Q_FOREACH(const QString& parentMimeType, ptr->allParentMimeTypes()) {
58
protocol = KProtocolManager::protocolForArchiveMimetype(parentMimeType);
59
if (!protocol.isEmpty()) {
66
cache.insert(mimeType, protocol);
33
namespace ArchiveUtils
36
bool fileItemIsArchive(const KFileItem& item)
38
KMimeType::Ptr mimeType = item.determineMimeType();
39
return !ArchiveUtils::protocolForMimeType(mimeType->name()).isEmpty();
42
bool fileItemIsDirOrArchive(const KFileItem& item)
44
return item.isDir() || fileItemIsArchive(item);
47
QString protocolForMimeType(const QString& mimeType)
49
static QHash<QString, QString> cache;
50
QHash<QString, QString>::ConstIterator it = cache.constFind(mimeType);
51
if (it != cache.constEnd()) {
55
QString protocol = KProtocolManager::protocolForArchiveMimetype(mimeType);
56
if (protocol.isEmpty()) {
57
// No protocol, try with mimeType parents. This is useful for .cbz for
59
KMimeType::Ptr ptr = KMimeType::mimeType(mimeType);
61
Q_FOREACH(const QString & parentMimeType, ptr->allParentMimeTypes()) {
62
protocol = KProtocolManager::protocolForArchiveMimetype(parentMimeType);
63
if (!protocol.isEmpty()) {
70
cache.insert(mimeType, protocol);
70
74
} // namespace ArchiveUtils