[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kactivities] src/lib/stats: Dealing with url filters in the result watcher
From:       Ivan Čukić <ivan.cukic () kde ! org>
Date:       2015-04-04 18:47:51
Message-ID: E1YeT6l-0002zG-Ce () scm ! kde ! org
[Download RAW message or body]

Git commit cdfe9f45ddb7ba6e47f3ee57064dfd13173bab73 by Ivan Čukić.
Committed on 04/04/2015 at 18:47.
Pushed by ivan into branch 'master'.

Dealing with url filters in the result watcher

M  +1    -1    src/lib/stats/query.cpp
M  +2    -2    src/lib/stats/resultset.cpp
M  +19   -1    src/lib/stats/resultwatcher.cpp
M  +4    -4    src/lib/stats/terms.cpp

http://commits.kde.org/kactivities/cdfe9f45ddb7ba6e47f3ee57064dfd13173bab73

diff --git a/src/lib/stats/query.cpp b/src/lib/stats/query.cpp
index 3f09d45..0a47ea6 100644
--- a/src/lib/stats/query.cpp
+++ b/src/lib/stats/query.cpp
@@ -126,7 +126,7 @@ bool Query::operator!= (const Query &right) const
 IMPLEMENT_QUERY_LIST_FIELD(Types,      types,      QStringList(":any"))
 IMPLEMENT_QUERY_LIST_FIELD(Agents,     agents,     QStringList(":current"))
 IMPLEMENT_QUERY_LIST_FIELD(Activities, activities, QStringList(":current"))
-IMPLEMENT_QUERY_LIST_FIELD(UrlFilters, urlFilters, QStringList("%"))
+IMPLEMENT_QUERY_LIST_FIELD(UrlFilters, urlFilters, QStringList("*"))
 
 #undef IMPLEMENT_QUERY_LIST_FIELD
 
diff --git a/src/lib/stats/resultset.cpp b/src/lib/stats/resultset.cpp
index f4d573d..2143939 100644
--- a/src/lib/stats/resultset.cpp
+++ b/src/lib/stats/resultset.cpp
@@ -197,9 +197,9 @@ public:
 
     QString urlFilterClause(const QString &urlFilter) const
     {
-        if (urlFilter == "%") return "1";
+        if (urlFilter == "*") return "1";
 
-        return "resource LIKE '" + urlFilter + "'";
+        return "resource GLOB '" + urlFilter + "'";
     }
 
     /**
diff --git a/src/lib/stats/resultwatcher.cpp b/src/lib/stats/resultwatcher.cpp
index 0fe8fc1..10c4752 100644
--- a/src/lib/stats/resultwatcher.cpp
+++ b/src/lib/stats/resultwatcher.cpp
@@ -23,6 +23,8 @@
 #include <QSqlQuery>
 #include <QSqlError>
 #include <QCoreApplication>
+#include <QList>
+#include <QRegExp>
 
 // Local
 #include <common/database/Database.h>
@@ -60,6 +62,7 @@ namespace Stats {
 class ResultWatcher::Private {
 public:
     mutable ActivitiesSync::ConsumerPtr activities;
+    QList<QRegExp> urlFilters;
 
     Private(ResultWatcher *parent, Query query)
         : linking(new KAMD_DBUS_CLASS_INTERFACE(Resources/Linking, ResourcesLinking, \
Q_NULLPTR)) @@ -67,6 +70,9 @@ public:
         , q(parent)
         , query(query)
     {
+        for (const auto& urlFilter: query.urlFilters()) {
+            urlFilters << QRegExp(urlFilter, Qt::CaseSensitive, \
QRegExp::WildcardUnix); +        }
     }
 
     // Processing the list of activities as specified by the query.
@@ -96,6 +102,16 @@ public:
         );
     }
 
+    // Same as above, but for urls
+    bool urlMatches(const QString &url) const
+    {
+        return std::any_of(urlFilters.cbegin(), urlFilters.cend(),
+            [&] (const QRegExp &matcher) {
+                return matcher.exactMatch(url);
+            }
+        );
+    }
+
     bool typeMatches(const QString &resource) const
     {
         // We don't necessarily need to retrieve the type from
@@ -130,7 +146,9 @@ public:
         // from the cheapest, to the most expensive
         return agentMatches(agent)
                && activityMatches(activity)
-               && typeMatches(resource);
+               && urlMatches(resource)
+               && typeMatches(resource)
+               ;
     }
 
     void onResourceLinkedToActivity(const QString &agent,
diff --git a/src/lib/stats/terms.cpp b/src/lib/stats/terms.cpp
index e56ccdf..c48732d 100644
--- a/src/lib/stats/terms.cpp
+++ b/src/lib/stats/terms.cpp
@@ -54,20 +54,20 @@ IMPLEMENT_SPECIAL_TERM_VALUE(Activity, global, ":global")
 IMPLEMENT_SPECIAL_TERM_VALUE(Activity, current, ":current")
 
 IMPLEMENT_TERM_CONSTRUCTORS(Url)
-IMPLEMENT_SPECIAL_TERM_VALUE(Url, localFile, "/%")
-IMPLEMENT_SPECIAL_TERM_VALUE(Url, file, QStringList() << "/%" << "smb:%" << "fish:%" \
<< "sftp:%" << "ftp:%") +IMPLEMENT_SPECIAL_TERM_VALUE(Url, localFile, "/*")
+IMPLEMENT_SPECIAL_TERM_VALUE(Url, file, QStringList() << "/*" << "smb:*" << "fish:*" \
<< "sftp:*" << "ftp:*")  
 #undef IMPLEMENT_TERM_CONSTRUCTORS
 #undef IMPLEMENT_SPECIAL_TERM_VALUE
 
 Terms::Url Terms::Url::startsWith(const QString &prefix)
 {
-    return Url(prefix + "%");
+    return Url(prefix + "*");
 }
 
 Terms::Url Terms::Url::contains(const QString &infix)
 {
-    return Url("%" + infix + "%");
+    return Url("*" + infix + "*");
 }
 
 } // namespace Stats


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic