File indexing completed on 2024-05-05 16:09:02

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"