File indexing completed on 2024-05-05 03:54:40

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"