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