File indexing completed on 2025-10-12 04:54:41
0001 /* 0002 SPDX-FileCopyrightText: 2015, 2016 Ivan Cukic <ivan.cukic(at)kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include "terms.h" 0008 #include "common/specialvalues.h" 0009 0010 #include <QDebug> 0011 0012 namespace KActivities 0013 { 0014 namespace Stats 0015 { 0016 // Term classes 0017 #define IMPLEMENT_TERM_CONSTRUCTORS(TYPE) \ 0018 Terms::TYPE::TYPE(QStringList values) \ 0019 : values(std::move(values)) \ 0020 { \ 0021 } \ 0022 \ 0023 Terms::TYPE::TYPE(QString value) \ 0024 : values(QStringList() << std::move(value)) \ 0025 { \ 0026 } 0027 0028 #define IMPLEMENT_SPECIAL_TERM_VALUE(TYPE, VALUE_NAME, VALUE) \ 0029 Terms::TYPE Terms::TYPE::VALUE_NAME() \ 0030 { \ 0031 return Terms::TYPE(VALUE); \ 0032 } 0033 0034 IMPLEMENT_TERM_CONSTRUCTORS(Type) 0035 IMPLEMENT_SPECIAL_TERM_VALUE(Type, any, ANY_TYPE_TAG) 0036 IMPLEMENT_SPECIAL_TERM_VALUE(Type, files, FILES_TYPE_TAG) 0037 IMPLEMENT_SPECIAL_TERM_VALUE(Type, directories, DIRECTORIES_TYPE_TAG) 0038 0039 IMPLEMENT_TERM_CONSTRUCTORS(Agent) 0040 IMPLEMENT_SPECIAL_TERM_VALUE(Agent, any, ANY_AGENT_TAG) 0041 IMPLEMENT_SPECIAL_TERM_VALUE(Agent, global, GLOBAL_AGENT_TAG) 0042 IMPLEMENT_SPECIAL_TERM_VALUE(Agent, current, CURRENT_AGENT_TAG) 0043 0044 IMPLEMENT_TERM_CONSTRUCTORS(Activity) 0045 IMPLEMENT_SPECIAL_TERM_VALUE(Activity, any, ANY_ACTIVITY_TAG) 0046 IMPLEMENT_SPECIAL_TERM_VALUE(Activity, global, GLOBAL_ACTIVITY_TAG) 0047 IMPLEMENT_SPECIAL_TERM_VALUE(Activity, current, CURRENT_ACTIVITY_TAG) 0048 0049 IMPLEMENT_TERM_CONSTRUCTORS(Url) 0050 IMPLEMENT_SPECIAL_TERM_VALUE(Url, localFile, QStringLiteral("/*")) 0051 IMPLEMENT_SPECIAL_TERM_VALUE(Url, 0052 file, 0053 QStringList() << QStringLiteral("/*") << QStringLiteral("smb:*") << QStringLiteral("fish:*") << QStringLiteral("sftp:*") 0054 << QStringLiteral("ftp:*")) 0055 0056 #undef IMPLEMENT_TERM_CONSTRUCTORS 0057 #undef IMPLEMENT_SPECIAL_TERM_VALUE 0058 0059 Terms::Limit::Limit(int value) 0060 : value(value) 0061 { 0062 } 0063 0064 Terms::Offset::Offset(int value) 0065 : value(value) 0066 { 0067 } 0068 0069 Terms::Date::Date(QDate value) 0070 : start(std::move(value)) 0071 { 0072 } 0073 0074 Terms::Date::Date(QDate start, QDate end) 0075 : start(std::move(start)) 0076 , end(std::move(end)) 0077 { 0078 } 0079 0080 Terms::Date Terms::Date::today() 0081 { 0082 return Date(QDate::currentDate()); 0083 } 0084 0085 Terms::Date Terms::Date::yesterday() 0086 { 0087 auto date = QDate::currentDate(); 0088 return Date(date.addDays(-1)); 0089 } 0090 0091 Terms::Date Terms::Date::currentWeek() 0092 { 0093 auto start = QDate::currentDate(); 0094 auto end = start.addDays(-7); 0095 return Date(start, end); 0096 } 0097 0098 Terms::Date Terms::Date::previousWeek() 0099 { 0100 auto start = QDate::currentDate().addDays(-7); 0101 auto end = start.addDays(-7); 0102 return Date(start, end); 0103 } 0104 0105 Terms::Date Terms::Date::fromString(QString string) 0106 { 0107 auto splitted = string.split(QStringLiteral(",")); 0108 if (splitted.count() == 2) { 0109 // date range case 0110 auto start = QDate::fromString(splitted[0], Qt::ISODate); 0111 auto end = QDate::fromString(splitted[1], Qt::ISODate); 0112 return Date(start, end); 0113 } else { 0114 auto date = QDate::fromString(string, Qt::ISODate); 0115 return Date(date); 0116 } 0117 } 0118 0119 Terms::Url Terms::Url::startsWith(const QString &prefix) 0120 { 0121 return Url(prefix + QStringLiteral("*")); 0122 } 0123 0124 Terms::Url Terms::Url::contains(const QString &infix) 0125 { 0126 return Url(QStringLiteral("*") + infix + QStringLiteral("*")); 0127 } 0128 0129 } // namespace Stats 0130 } // namespace KActivities 0131 0132 namespace KAStats = KActivities::Stats; 0133 0134 #define QDEBUG_TERM_OUT(TYPE, OUT) \ 0135 QDebug operator<<(QDebug dbg, const KAStats::Terms::TYPE &_) \ 0136 { \ 0137 using namespace KAStats::Terms; \ 0138 dbg.nospace() << #TYPE << ": " << (OUT); \ 0139 return dbg; \ 0140 } 0141 0142 QDEBUG_TERM_OUT(Order, 0143 _ == HighScoredFirst ? "HighScore" 0144 : _ == RecentlyUsedFirst ? "RecentlyUsed" 0145 : _ == RecentlyCreatedFirst ? "RecentlyCreated" 0146 : "Alphabetical") 0147 0148 QDEBUG_TERM_OUT(Select, _ == LinkedResources ? "LinkedResources" : _ == UsedResources ? "UsedResources" : "AllResources") 0149 0150 QDEBUG_TERM_OUT(Type, _.values) 0151 QDEBUG_TERM_OUT(Agent, _.values) 0152 QDEBUG_TERM_OUT(Activity, _.values) 0153 QDEBUG_TERM_OUT(Url, _.values) 0154 0155 QDEBUG_TERM_OUT(Limit, _.value) 0156 QDEBUG_TERM_OUT(Offset, _.value) 0157 QDEBUG_TERM_OUT(Date, _.end.isNull() ? _.start.toString(Qt::ISODate) : _.start.toString(Qt::ISODate) + QStringLiteral(",") + _.end.toString(Qt::ISODate)) 0158 0159 #undef QDEBUG_TERM_OUT