File indexing completed on 2025-02-16 13:03:41
0001 /* 0002 SPDX-FileCopyrightText: 2012 Vishesh Handa <me@vhanda.in> 0003 SPDX-FileCopyrightText: 2012 Jörg Ehrichs <joerg.ehrichs@gmx.de> 0004 0005 SPDX-License-Identifier: LGPL-2.1-or-later 0006 */ 0007 0008 0009 #include "extractorplugin.h" 0010 0011 #include <QMimeDatabase> 0012 #include <QDebug> 0013 0014 using namespace KFileMetaData; 0015 0016 ExtractorPlugin::ExtractorPlugin(QObject* parent): QObject(parent) 0017 { 0018 } 0019 0020 ExtractorPlugin::~ExtractorPlugin() 0021 { 0022 } 0023 0024 // 0025 // Helper functions 0026 // 0027 0028 QDateTime ExtractorPlugin::dateTimeFromString(const QString& dateString) 0029 { 0030 QDateTime dateTime; 0031 0032 if (!dateTime.isValid()) { 0033 dateTime = QDateTime::fromString(dateString, QStringLiteral("yyyy-MM-dd")); 0034 dateTime.setTimeSpec(Qt::UTC); 0035 } 0036 if (!dateTime.isValid()) { 0037 dateTime = QDateTime::fromString(dateString, QStringLiteral("dd-MM-yyyy")); 0038 dateTime.setTimeSpec(Qt::UTC); 0039 } 0040 if (!dateTime.isValid()) { 0041 dateTime = QDateTime::fromString(dateString, QStringLiteral("yyyy-MM")); 0042 dateTime.setTimeSpec(Qt::UTC); 0043 } 0044 if (!dateTime.isValid()) { 0045 dateTime = QDateTime::fromString(dateString, QStringLiteral("MM-yyyy")); 0046 dateTime.setTimeSpec(Qt::UTC); 0047 } 0048 if (!dateTime.isValid()) { 0049 dateTime = QDateTime::fromString(dateString, QStringLiteral("yyyy.MM.dd")); 0050 dateTime.setTimeSpec(Qt::UTC); 0051 } 0052 if (!dateTime.isValid()) { 0053 dateTime = QDateTime::fromString(dateString, QStringLiteral("dd.MM.yyyy")); 0054 dateTime.setTimeSpec(Qt::UTC); 0055 } 0056 if (!dateTime.isValid()) { 0057 dateTime = QDateTime::fromString(dateString, QStringLiteral("dd MMMM yyyy")); 0058 dateTime.setTimeSpec(Qt::UTC); 0059 } 0060 if (!dateTime.isValid()) { 0061 dateTime = QDateTime::fromString(dateString, QStringLiteral("MM.yyyy")); 0062 dateTime.setTimeSpec(Qt::UTC); 0063 } 0064 if (!dateTime.isValid()) { 0065 dateTime = QDateTime::fromString(dateString, QStringLiteral("yyyy.MM")); 0066 dateTime.setTimeSpec(Qt::UTC); 0067 } 0068 if (!dateTime.isValid()) { 0069 dateTime = QDateTime::fromString(dateString, QStringLiteral("yyyy")); 0070 dateTime.setTimeSpec(Qt::UTC); 0071 } 0072 if (!dateTime.isValid()) { 0073 dateTime = QDateTime::fromString(dateString, QStringLiteral("yy")); 0074 dateTime.setTimeSpec(Qt::UTC); 0075 } 0076 if (!dateTime.isValid()) { 0077 dateTime = QDateTime::fromString(dateString, Qt::ISODate); 0078 } 0079 if (!dateTime.isValid()) { 0080 dateTime = QDateTime::fromString(dateString, QStringLiteral("dddd d MMM yyyy h':'mm':'ss AP")); 0081 dateTime.setTimeSpec(Qt::LocalTime); 0082 } 0083 if (!dateTime.isValid()) { 0084 dateTime = QDateTime::fromString(dateString, QStringLiteral("yyyy:MM:dd hh:mm:ss")); 0085 dateTime.setTimeSpec(Qt::LocalTime); 0086 } 0087 if (!dateTime.isValid()) { 0088 dateTime = QLocale().toDateTime(dateString, QLocale::ShortFormat); 0089 dateTime.setTimeSpec(Qt::UTC); 0090 } 0091 if (!dateTime.isValid()) { 0092 dateTime = QLocale().toDateTime(dateString, QLocale::LongFormat); 0093 dateTime.setTimeSpec(Qt::UTC); 0094 } 0095 if (!dateTime.isValid()) { 0096 qWarning() << "Could not determine correct datetime format from:" << dateString; 0097 return QDateTime(); 0098 } 0099 0100 return dateTime; 0101 } 0102 0103 QStringList ExtractorPlugin::contactsFromString(const QString& string) 0104 { 0105 QString cleanedString = string; 0106 cleanedString = cleanedString.remove(QLatin1Char('{')); 0107 cleanedString = cleanedString.remove(QLatin1Char('}')); 0108 0109 QStringList contactStrings = string.split(QLatin1Char(','), Qt::SkipEmptyParts); 0110 if (contactStrings.size() == 1) { 0111 contactStrings = string.split(QLatin1Char(';'), Qt::SkipEmptyParts); 0112 } 0113 0114 if (contactStrings.size() == 1) { 0115 contactStrings = string.split(QStringLiteral(" ft "), Qt::SkipEmptyParts); 0116 } 0117 0118 if (contactStrings.size() == 1) { 0119 contactStrings = string.split(QStringLiteral(" feat. "), Qt::SkipEmptyParts); 0120 } 0121 0122 if (contactStrings.size() == 1) { 0123 contactStrings = string.split(QStringLiteral(" feat "), Qt::SkipEmptyParts); 0124 } 0125 0126 QStringList list; 0127 list.reserve(contactStrings.count()); 0128 for (const QString& contactName : std::as_const(contactStrings)) { 0129 list << contactName.trimmed(); 0130 } 0131 0132 return list; 0133 } 0134 0135 QString ExtractorPlugin::getSupportedMimeType(const QString& mimetype) const 0136 { 0137 const QStringList allTypes = mimetypes(); 0138 if (allTypes.contains(mimetype)) { 0139 return mimetype; 0140 } 0141 0142 QMimeDatabase db; 0143 auto type = db.mimeTypeForName(mimetype); 0144 const QStringList ancestors = type.allAncestors(); 0145 for (auto ancestor : ancestors) { 0146 if (allTypes.contains(ancestor)) { 0147 return ancestor; 0148 } 0149 } 0150 0151 return QString(); 0152 } 0153 0154 #include "moc_extractorplugin.cpp"