Warning, file /frameworks/kactivities-stats/src/terms.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
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::Limit Terms::Limit::all() 0065 { 0066 return Limit(0); 0067 } 0068 0069 Terms::Offset::Offset(int value) 0070 : value(value) 0071 { 0072 } 0073 0074 Terms::Date::Date(QDate value) 0075 : start(std::move(value)) 0076 { 0077 } 0078 0079 Terms::Date::Date(QDate start, QDate end) 0080 : start(std::move(start)) 0081 , end(std::move(end)) 0082 { 0083 } 0084 0085 Terms::Date Terms::Date::today() 0086 { 0087 return Date(QDate::currentDate()); 0088 } 0089 0090 Terms::Date Terms::Date::yesterday() 0091 { 0092 auto date = QDate::currentDate(); 0093 return Date(date.addDays(-1)); 0094 } 0095 0096 Terms::Date Terms::Date::currentWeek() 0097 { 0098 auto start = QDate::currentDate(); 0099 auto end = start.addDays(-7); 0100 return Date(start, end); 0101 } 0102 0103 Terms::Date Terms::Date::previousWeek() 0104 { 0105 auto start = QDate::currentDate().addDays(-7); 0106 auto end = start.addDays(-7); 0107 return Date(start, end); 0108 } 0109 0110 Terms::Date Terms::Date::fromString(QString string) 0111 { 0112 auto splitted = string.split(QStringLiteral(",")); 0113 if (splitted.count() == 2) { 0114 // date range case 0115 auto start = QDate::fromString(splitted[0], Qt::ISODate); 0116 auto end = QDate::fromString(splitted[1], Qt::ISODate); 0117 return Date(start, end); 0118 } else { 0119 auto date = QDate::fromString(string, Qt::ISODate); 0120 return Date(date); 0121 } 0122 } 0123 0124 Terms::Url Terms::Url::startsWith(const QString &prefix) 0125 { 0126 return Url(prefix + QStringLiteral("*")); 0127 } 0128 0129 Terms::Url Terms::Url::contains(const QString &infix) 0130 { 0131 return Url(QStringLiteral("*") + infix + QStringLiteral("*")); 0132 } 0133 0134 } // namespace Stats 0135 } // namespace KActivities 0136 0137 namespace KAStats = KActivities::Stats; 0138 0139 #define QDEBUG_TERM_OUT(TYPE, OUT) \ 0140 QDebug operator<<(QDebug dbg, const KAStats::Terms::TYPE &_) \ 0141 { \ 0142 using namespace KAStats::Terms; \ 0143 dbg.nospace() << #TYPE << ": " << (OUT); \ 0144 return dbg; \ 0145 } 0146 0147 QDEBUG_TERM_OUT(Order, 0148 _ == HighScoredFirst ? "HighScore" 0149 : _ == RecentlyUsedFirst ? "RecentlyUsed" 0150 : _ == RecentlyCreatedFirst ? "RecentlyCreated" 0151 : "Alphabetical") 0152 0153 QDEBUG_TERM_OUT(Select, _ == LinkedResources ? "LinkedResources" : _ == UsedResources ? "UsedResources" : "AllResources") 0154 0155 QDEBUG_TERM_OUT(Type, _.values) 0156 QDEBUG_TERM_OUT(Agent, _.values) 0157 QDEBUG_TERM_OUT(Activity, _.values) 0158 QDEBUG_TERM_OUT(Url, _.values) 0159 0160 QDEBUG_TERM_OUT(Limit, _.value) 0161 QDEBUG_TERM_OUT(Offset, _.value) 0162 QDEBUG_TERM_OUT(Date, _.end.isNull() ? _.start.toString(Qt::ISODate) : _.start.toString(Qt::ISODate) + QStringLiteral(",") + _.end.toString(Qt::ISODate)) 0163 0164 #undef QDEBUG_TERM_OUT