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 }