File indexing completed on 2024-05-12 05:22:20

0001 /*
0002  * SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com>
0003  * SPDX-FileCopyrightText: 2019 David Barchiesi <david@barchie.si>
0004  *
0005  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006  */
0007 
0008 #include "filesearchquery.h"
0009 #include "utils.h"
0010 
0011 #include <QDateTime>
0012 #include <QString>
0013 
0014 using namespace KGAPI2;
0015 using namespace KGAPI2::Drive;
0016 
0017 QString FileSearchQuery::fieldToString(Field field)
0018 {
0019     switch (field) {
0020     case Title:
0021         return QStringLiteral("title");
0022     case FullText:
0023         return QStringLiteral("fullText");
0024     case MimeType:
0025         return QStringLiteral("mimeType");
0026     case ModifiedDate:
0027         return QStringLiteral("modifiedDate");
0028     case LastViewedByMeDate:
0029         return QStringLiteral("lastViewedByMeDate");
0030     case Trashed:
0031         return QStringLiteral("trashed");
0032     case Starred:
0033         return QStringLiteral("starred");
0034     case Parents:
0035         return QStringLiteral("parents");
0036     case Owners:
0037         return QStringLiteral("owners");
0038     case Writers:
0039         return QStringLiteral("writers");
0040     case Readers:
0041         return QStringLiteral("readers");
0042     case SharedWithMe:
0043         return QStringLiteral("sharedWithMe");
0044     }
0045 
0046     Q_ASSERT(false);
0047     return QString();
0048 }
0049 
0050 QString FileSearchQuery::valueToString(FileSearchQuery::Field field, const QVariant &var)
0051 {
0052     switch (field) {
0053     case Title:
0054     case FullText:
0055     case MimeType:
0056     case Parents:
0057     case Owners:
0058     case Writers:
0059     case Readers:
0060         return QStringLiteral("'%1'").arg(var.toString().replace(QLatin1Char('\''), QLatin1StringView("\\\'")));
0061     case ModifiedDate:
0062     case LastViewedByMeDate:
0063         return QStringLiteral("'%1'").arg(var.toDateTime().toUTC().toString(QStringLiteral("yyyy-MM-ddThh:mm:ss")));
0064     case Trashed:
0065     case Starred:
0066     case SharedWithMe:
0067         return Utils::bool2Str(var.toBool());
0068     }
0069 
0070     Q_ASSERT(false);
0071     return QString();
0072 }
0073 
0074 void FileSearchQuery::addQuery(FileSearchQuery::Field field, FileSearchQuery::CompareOperator op, const QVariant &value)
0075 {
0076     switch (field) {
0077     case Title:
0078     case MimeType:
0079         Q_ASSERT(op == Contains || op == Equals || op == NotEquals);
0080         Q_ASSERT(value.canConvert<QString>());
0081         break;
0082     case FullText:
0083         Q_ASSERT(op == Contains);
0084         Q_ASSERT(value.canConvert<QString>());
0085         break;
0086     case ModifiedDate:
0087     case LastViewedByMeDate:
0088         Q_ASSERT(op == LessOrEqual || op == Less || op == Equals || op == NotEquals || op == Greater || op == GreaterOrEqual);
0089         Q_ASSERT(value.canConvert<QDateTime>());
0090         break;
0091     case Trashed:
0092     case Starred:
0093     case SharedWithMe:
0094         Q_ASSERT(op == Equals || op == NotEquals);
0095         Q_ASSERT(value.canConvert<bool>());
0096         break;
0097     case Parents:
0098     case Owners:
0099     case Writers:
0100     case Readers:
0101         Q_ASSERT(op == In);
0102         Q_ASSERT(value.canConvert<QString>());
0103         break;
0104     }
0105 
0106     SearchQuery::addQuery(fieldToString(field), op, valueToString(field, value));
0107 }