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

0001 /*
0002  * SPDX-FileCopyrightText: 2019 David Barchiesi <david@barchie.si>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005  */
0006 
0007 #include "drivessearchquery.h"
0008 #include "utils.h"
0009 
0010 #include <QDateTime>
0011 #include <QString>
0012 
0013 using namespace KGAPI2;
0014 using namespace KGAPI2::Drive;
0015 
0016 QString DrivesSearchQuery::fieldToString(Field field)
0017 {
0018     switch (field) {
0019     case Name:
0020         return QStringLiteral("name");
0021     case Hidden:
0022         return QStringLiteral("hidden");
0023     case CreatedDate:
0024         return QStringLiteral("createdDate");
0025     case MemberCount:
0026         return QStringLiteral("memberCount");
0027     case OrganizerCount:
0028         return QStringLiteral("organizerCount");
0029     }
0030 
0031     Q_ASSERT(false);
0032     return QString();
0033 }
0034 
0035 QString DrivesSearchQuery::valueToString(DrivesSearchQuery::Field field, const QVariant &var)
0036 {
0037     switch (field) {
0038     case Name:
0039         return QStringLiteral("'%1'").arg(var.toString().replace(QLatin1Char('\''), QLatin1StringView("\\\'")));
0040     case Hidden:
0041         return Utils::bool2Str(var.toBool());
0042     case MemberCount:
0043     case OrganizerCount:
0044         return var.toString();
0045     case CreatedDate:
0046         return QStringLiteral("'%1'").arg(var.toDateTime().toUTC().toString(QStringLiteral("yyyy-MM-ddThh:mm:ss")));
0047     }
0048 
0049     Q_ASSERT(false);
0050     return QString();
0051 }
0052 
0053 void DrivesSearchQuery::addQuery(DrivesSearchQuery::Field field, DrivesSearchQuery::CompareOperator op, const QVariant &value)
0054 {
0055     switch (field) {
0056     case Name:
0057         Q_ASSERT(op == Contains || op == Equals || op == NotEquals);
0058         Q_ASSERT(value.canConvert<QString>());
0059         break;
0060     case Hidden:
0061         Q_ASSERT(op == Equals || op == NotEquals);
0062         Q_ASSERT(value.canConvert<bool>());
0063         break;
0064     case MemberCount:
0065     case OrganizerCount:
0066         Q_ASSERT(op == LessOrEqual || op == Less || op == Equals || op == NotEquals || op == Greater || op == GreaterOrEqual);
0067         Q_ASSERT(value.canConvert<int>());
0068         break;
0069     case CreatedDate:
0070         Q_ASSERT(op == LessOrEqual || op == Less || op == Equals || op == NotEquals || op == Greater || op == GreaterOrEqual);
0071         Q_ASSERT(value.canConvert<QDateTime>());
0072         break;
0073     }
0074 
0075     SearchQuery::addQuery(fieldToString(field), op, valueToString(field, value));
0076 }