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

List:       kde-commits
Subject:    [sprinter/gko/master] /: Runner::match now takes a single MatchData
From:       Aaron J. Seigo <aseigo () kde ! org>
Date:       2014-03-06 10:20:24
Message-ID: E1WLVPc-0007ZS-UB () scm ! kde ! org
[Download RAW message or body]

Git commit 0d26e18ff1007a16c7b39ef700376209e9dc8bb0 by Aaron J. Seigo.
Committed on 26/02/2014 at 13:20.
Pushed by aseigo into branch 'gko/master'.

Runner::match now takes a single MatchData

this allows runners to forget about when it is appropriate to call
setMatches. this was far too easy to get wrong (a single return
statement on its own, and things are out of whack).

M  +12   -18   runners/activities/activities.cpp
M  +2    -4    runners/activities/activities.h
M  +5    -7    runners/c/c.cpp
M  +1    -1    runners/c/c.h
M  +7    -34   runners/calculator/calculator.cpp
M  +1    -2    runners/calculator/calculator.h
M  +6    -11   runners/datetime/datetime.cpp
M  +1    -1    runners/datetime/datetime.h
M  +5    -7    runners/youtube/youtube.cpp
M  +1    -1    runners/youtube/youtube.h
M  +0    -1    sprinter/querysessionthread_p.cpp
M  +2    -3    sprinter/runner.cpp
M  +2    -1    sprinter/runner.h
M  +7    -5    sprinter/runnersessiondata.cpp

http://commits.kde.org/sprinter/0d26e18ff1007a16c7b39ef700376209e9dc8bb0

diff --git a/runners/activities/activities.cpp b/runners/activities/activities.cpp
index 7f68510..4fc8759 100644
--- a/runners/activities/activities.cpp
+++ b/runners/activities/activities.cpp
@@ -124,20 +124,19 @@ Sprinter::RunnerSessionData \
*ActivityRunner::createSessionData()  return new ActivitySessionData(this);
 }
 
-void ActivityRunner::match(Sprinter::RunnerSessionData *sd,
-                           const Sprinter::QueryContext &context)
+void ActivityRunner::match(Sprinter::MatchData &matchData)
 {
-    ActivitySessionData *sessionData = qobject_cast<ActivitySessionData *>(sd);
+    ActivitySessionData *sessionData = qobject_cast<ActivitySessionData \
*>(matchData.sessionData());  if (!sessionData  || !sessionData->isEnabled) {
         return;
     }
 
-    const QString term = context.query();
+    const QString term = matchData.queryContext().query();
     bool list = false;
     bool triggerWord = false;
     QString name;
 
-    if (context.isDefaultMatchesRequest()) {
+    if (matchData.queryContext().isDefaultMatchesRequest()) {
         list = true;
     } else if (term.startsWith(m_keywordi18n, Qt::CaseInsensitive)) {
         triggerWord = true;
@@ -161,9 +160,8 @@ void ActivityRunner::match(Sprinter::RunnerSessionData *sd,
 
     const QStringList activities = sessionData->activities;
     const QString currentActivity = sessionData->currentActivity;
-    QVector<Sprinter::QueryMatch> matches;
 
-    if (!context.isValid()) {
+    if (!matchData.isValid()) {
         return;
     }
 
@@ -179,9 +177,9 @@ void ActivityRunner::match(Sprinter::RunnerSessionData *sd,
                       info.state() == KActivities::Info::Starting) ?
                         Sprinter::QuerySession::ExactMatch :
                         Sprinter::QuerySession::CloseMatch,
-                     context, matches);
+                     matchData);
 
-            if (!context.isValid()) {
+            if (!matchData.isValid()) {
                 return;
             }
         }
@@ -201,32 +199,28 @@ void ActivityRunner::match(Sprinter::RunnerSessionData *sd,
                                      : (exact ?
                                             Sprinter::QuerySession::CloseMatch :
                                             Sprinter::QuerySession::FuzzyMatch),
-                         context,
-                         matches);
+                         matchData);
             }
 
-            if (!context.isValid()) {
+            if (!matchData.isValid()) {
                 return;
             }
         }
     }
-
-    sessionData->setMatches(matches, context);
 }
 
 void ActivityRunner::addMatch(const KActivities::Info &activity,
                               Sprinter::QuerySession::MatchPrecision precision,
-                              const Sprinter::QueryContext &context,
-                              QVector<Sprinter::QueryMatch> &matches)
+                              Sprinter::MatchData &matchData)
 {
     Sprinter::QueryMatch match;
     match.setData(activity.id());
     match.setType(Sprinter::QuerySession::ActivityType);
     match.setSource(Sprinter::QuerySession::FromLocalService);
-    match.setImage(image(activity, context));
+    match.setImage(image(activity, matchData.queryContext()));
     match.setTitle(tr("Switch to activity \"%1\"").arg(activity.name()));
     match.setPrecision(precision);
-    matches << match;
+    matchData << match;
 }
 
 QImage ActivityRunner::image(const KActivities::Info &activity,
diff --git a/runners/activities/activities.h b/runners/activities/activities.h
index 208b558..dee6661 100644
--- a/runners/activities/activities.h
+++ b/runners/activities/activities.h
@@ -79,15 +79,13 @@ public:
 
     Sprinter::RunnerSessionData *createSessionData();
 
-    void match(Sprinter::RunnerSessionData *sessionData,
-               const Sprinter::QueryContext &context);
+    void match(Sprinter::MatchData &matchData);
     bool exec(const Sprinter::QueryMatch &match);
 
 private:
     void addMatch(const KActivities::Info &activity,
                   Sprinter::QuerySession::MatchPrecision precision,
-                  const Sprinter::QueryContext &context,
-                  QVector<Sprinter::QueryMatch> &matches);
+                  Sprinter::MatchData &matchData);
     QImage image(const KActivities::Info &activity,
                  const Sprinter::QueryContext &context);
 
diff --git a/runners/c/c.cpp b/runners/c/c.cpp
index 55f97ad..2daec99 100644
--- a/runners/c/c.cpp
+++ b/runners/c/c.cpp
@@ -28,10 +28,10 @@ RunnerC::RunnerC(QObject *parent)
     setGeneratesDefaultMatches(true);
 }
 
-void RunnerC::match(Sprinter::RunnerSessionData *sessionData, const \
Sprinter::QueryContext &context) +void RunnerC::match(Sprinter::MatchData &matchData)
 {
-    QVector<Sprinter::QueryMatch> matches;
-    if (context.isDefaultMatchesRequest() || context.query() == "plasma") {
+    if (matchData.queryContext().isDefaultMatchesRequest() ||
+        matchData.queryContext().query() == "plasma") {
         Sprinter::QueryMatch match;
         match.setTitle("Plasma");
         match.setText("Rocks");
@@ -40,11 +40,9 @@ void RunnerC::match(Sprinter::RunnerSessionData *sessionData, \
const Sprinter::Qu  match.setSource(Sprinter::QuerySession::FromDesktopShell);
         match.setData("time");
         match.setIsSearchTerm(true);
-        match.setImage(m_icon.pixmap(context.imageSize()).toImage());
-        matches << match;
+        match.setImage(m_icon.pixmap(matchData.queryContext().imageSize()).toImage());
 +        matchData << match;
     }
-
-    sessionData->setMatches(matches, context);
 }
 
 bool RunnerC::exec(const Sprinter::QueryMatch &match)
diff --git a/runners/c/c.h b/runners/c/c.h
index b56b7e8..0bc136b 100644
--- a/runners/c/c.h
+++ b/runners/c/c.h
@@ -31,7 +31,7 @@ class RunnerC : public Sprinter::Runner
 public:
     RunnerC(QObject *parent = 0);
 
-    void match(Sprinter::RunnerSessionData *sessionData, const \
Sprinter::QueryContext &context); +    void match(Sprinter::MatchData &matchData);
     bool exec(const Sprinter::QueryMatch &match);
 
 private:
diff --git a/runners/calculator/calculator.cpp b/runners/calculator/calculator.cpp
index 0d5ab79..d5dd282 100644
--- a/runners/calculator/calculator.cpp
+++ b/runners/calculator/calculator.cpp
@@ -37,46 +37,19 @@ CalculatorRunner::~CalculatorRunner()
 {
 }
 
-class SetMatches
-{
-public:
-    SetMatches(Sprinter::RunnerSessionData *sessionData,
-               const Sprinter::QueryContext &context,
-               QVector<Sprinter::QueryMatch> *matches)
-        : m_sessionData(sessionData),
-          m_context(context),
-          m_matches(matches)
-    {
-    }
-
-    ~SetMatches()
-    {
-        m_sessionData->setMatches(*m_matches, m_context);
-    }
-
-private:
-    Sprinter::RunnerSessionData *m_sessionData;
-    Sprinter::QueryContext m_context;
-    QVector<Sprinter::QueryMatch> *m_matches;
-};
-
 Sprinter::RunnerSessionData *CalculatorRunner::createSessionData()
 {
     return new CalculatorSessionData(this);
 }
 
-void CalculatorRunner::match(Sprinter::RunnerSessionData *sd,
-                             const Sprinter::QueryContext &context)
+void CalculatorRunner::match(Sprinter::MatchData &matchData)
 {
-    QVector<Sprinter::QueryMatch> matches;
-    SetMatches matchSetter(sd, context, &matches);
-
-    CalculatorSessionData *sessionData = qobject_cast<CalculatorSessionData *>(sd);
+    CalculatorSessionData *sessionData = qobject_cast<CalculatorSessionData \
*>(matchData.sessionData());  if (!sessionData) {
         return;
     }
 
-    const QString term = context.query();
+    const QString term = matchData.queryContext().query();
     QString cmd = term;
 
     //no meanless space between friendly guys: helps simplify code
@@ -87,10 +60,10 @@ void CalculatorRunner::match(Sprinter::RunnerSessionData *sd,
         match.setPrecision(Sprinter::QuerySession::ExactMatch);
         match.setType(Sprinter::QuerySession::MathAndUnitsType);
         match.setSource(Sprinter::QuerySession::FromInternalSource);
-        match.setImage(image(context));
+        match.setImage(image(matchData.queryContext()));
         match.setText("42");
         match.setData("42");
-        matches << match;
+        matchData << match;
         return;
     }
 
@@ -145,10 +118,10 @@ void CalculatorRunner::match(Sprinter::RunnerSessionData *sd,
         match.setPrecision(Sprinter::QuerySession::ExactMatch);
         match.setType(Sprinter::QuerySession::MathAndUnitsType);
         match.setSource(Sprinter::QuerySession::FromInternalSource);
-        match.setImage(image(context));
+        match.setImage(image(matchData.queryContext()));
         match.setText(result);
         match.setData(result);
-        matches << match;
+        matchData << match;
     }
 }
 
diff --git a/runners/calculator/calculator.h b/runners/calculator/calculator.h
index 94b29cb..98e091c 100644
--- a/runners/calculator/calculator.h
+++ b/runners/calculator/calculator.h
@@ -52,8 +52,7 @@ public:
     ~CalculatorRunner();
 
     Sprinter::RunnerSessionData *createSessionData();
-    void match(Sprinter::RunnerSessionData *sessionData,
-               const Sprinter::QueryContext &context);
+    void match(Sprinter::MatchData &matchData);
 
 private:
     QImage image(const Sprinter::QueryContext &context);
diff --git a/runners/datetime/datetime.cpp b/runners/datetime/datetime.cpp
index c01ae10..6301f47 100644
--- a/runners/datetime/datetime.cpp
+++ b/runners/datetime/datetime.cpp
@@ -160,23 +160,18 @@ QDateTime DateTimeRunner::datetime(const QString &term, bool \
date, QString &tzNa  return dt;
 }
 
-void DateTimeRunner::match(Sprinter::RunnerSessionData *sessionData, const \
Sprinter::QueryContext &context) +void DateTimeRunner::match(Sprinter::MatchData \
&matchData)  {
-    Sprinter::QueryMatch match = performMatch(context.query());
+    Sprinter::QueryMatch match = performMatch(matchData.queryContext().query());
 
 //     qDebug() << "got" << match.text() << (!match.data().isNull());
-    QVector<Sprinter::QueryMatch> matches;
     if (!match.data().isNull()) {
-        m_imageSize = context.imageSize();
+        m_imageSize = matchData.queryContext().imageSize();
         match.setImage(image());
-        matches << match;
-    }
-
-    sessionData->setMatches(matches, context);
-    if (matches.isEmpty()) {
-        emit stopUpdating();
-    } else {
+        matchData << match;
         emit startUpdating();
+    } else {
+        emit stopUpdating();
     }
 }
 
diff --git a/runners/datetime/datetime.h b/runners/datetime/datetime.h
index 7c0f6f8..3da69f6 100644
--- a/runners/datetime/datetime.h
+++ b/runners/datetime/datetime.h
@@ -48,7 +48,7 @@ class DateTimeRunner : public Sprinter::Runner
 public:
     DateTimeRunner(QObject *parent = 0);
     Sprinter::RunnerSessionData *createSessionData();
-    void match(Sprinter::RunnerSessionData *sessionData, const \
Sprinter::QueryContext &context); +    void match(Sprinter::MatchData &matchData);
     Sprinter::QueryMatch performMatch(const QString &term);
 
     QImage image();
diff --git a/runners/youtube/youtube.cpp b/runners/youtube/youtube.cpp
index 4222657..e836bfd 100644
--- a/runners/youtube/youtube.cpp
+++ b/runners/youtube/youtube.cpp
@@ -219,9 +219,9 @@ Sprinter::RunnerSessionData *YoutubeRunner::createSessionData()
     return new YoutubeSessionData(this);
 }
 
-void YoutubeRunner::match(Sprinter::RunnerSessionData *sessionData, const \
Sprinter::QueryContext &context) +void YoutubeRunner::match(Sprinter::MatchData \
&matchData)  {
-    const QString term = context.query();
+    const QString term = matchData.queryContext().query();
     QString query;
 
     if (term.startsWith(shortTrigger, Qt::CaseInsensitive)) {
@@ -229,23 +229,21 @@ void YoutubeRunner::match(Sprinter::RunnerSessionData \
*sessionData, const Sprint  } else if (term.startsWith(longTrigger, \
Qt::CaseInsensitive)) {  query = term.right(term.length() - longTrigger.length());
     } else {
-        sessionData->setMatches(QVector<Sprinter::QueryMatch>(), context);
         return;
     }
 
     if (query.size() < 3) {
-        sessionData->setMatches(QVector<Sprinter::QueryMatch>(), context);
         return;
     }
 
     qDebug() <<" should be matching... " << query;
-    YoutubeSessionData *sd = dynamic_cast<YoutubeSessionData *>(sessionData);
+    YoutubeSessionData *sd = dynamic_cast<YoutubeSessionData \
*>(matchData.sessionData());  if (!sd) {
-        sessionData->setMatches(QVector<Sprinter::QueryMatch>(), context);
         return;
     }
 
-    emit startQuery(query, context);
+    matchData.setAsynchronous(true);
+    emit startQuery(query, matchData.queryContext());
 }
 
 bool YoutubeRunner::exec(const Sprinter::QueryMatch &match)
diff --git a/runners/youtube/youtube.h b/runners/youtube/youtube.h
index b0f4742..2ed0d64 100644
--- a/runners/youtube/youtube.h
+++ b/runners/youtube/youtube.h
@@ -57,7 +57,7 @@ class YoutubeRunner : public Sprinter::Runner
 public:
     YoutubeRunner(QObject *parent = 0);
     Sprinter::RunnerSessionData *createSessionData();
-    void match(Sprinter::RunnerSessionData *sessionData, const \
Sprinter::QueryContext &context); +    void match(Sprinter::MatchData &matchData);
     bool exec(const Sprinter::QueryMatch &match);
 
 Q_SIGNALS:
diff --git a/sprinter/querysessionthread_p.cpp b/sprinter/querysessionthread_p.cpp
index fd1c662..c83e152 100644
--- a/sprinter/querysessionthread_p.cpp
+++ b/sprinter/querysessionthread_p.cpp
@@ -548,7 +548,6 @@ MatchRunnable::MatchRunnable(Runner *runner, \
QSharedPointer<RunnerSessionData> s  void MatchRunnable::run()
 {
     if (m_sessionData) {
-        RunnerSessionData::Busy busy(m_sessionData.data());
         m_sessionData.data()->startMatch(m_context);
     }
 }
diff --git a/sprinter/runner.cpp b/sprinter/runner.cpp
index 0d579fe..0a18ec8 100644
--- a/sprinter/runner.cpp
+++ b/sprinter/runner.cpp
@@ -66,10 +66,9 @@ RunnerSessionData *Runner::createSessionData()
     return new RunnerSessionData(this);
 }
 
-void Runner::match(RunnerSessionData *sessionData, const QueryContext &context)
+void Runner::match(MatchData &matchData)
 {
-    Q_UNUSED(sessionData)
-    Q_UNUSED(context)
+    Q_UNUSED(matchData)
 }
 
 bool Runner::startExec(const QueryMatch &match)
diff --git a/sprinter/runner.h b/sprinter/runner.h
index 6e7832b..e31210f 100644
--- a/sprinter/runner.h
+++ b/sprinter/runner.h
@@ -23,6 +23,7 @@
 #include <QObject>
 #include <QRunnable>
 
+#include <sprinter/matchdata.h>
 #include <sprinter/querycontext.h>
 #include <sprinter/runnersessiondata.h>
 
@@ -77,7 +78,7 @@ public:
      * @param context this object contains the query text itself and
      * additional metadata. @see QueryContext
      */
-    virtual void match(RunnerSessionData *sessionData, const QueryContext &context);
+    virtual void match(MatchData &matchData);
 
     /**
      * When a match is to be exec'd, this method can be called.
diff --git a/sprinter/runnersessiondata.cpp b/sprinter/runnersessiondata.cpp
index d0e0fb2..932f967 100644
--- a/sprinter/runnersessiondata.cpp
+++ b/sprinter/runnersessiondata.cpp
@@ -160,7 +160,10 @@ void RunnerSessionData::startMatch(const QueryContext &context)
         return;
     }
 
-    d->runner->match(this, context);
+
+    RunnerSessionData::Busy busy(this);
+    MatchData matchData(this, context);
+    d->runner->match(matchData);
 }
 
 void RunnerSessionData::setMatches(const QVector<QueryMatch> &matches, const \
QueryContext &context) @@ -170,10 +173,9 @@ void RunnerSessionData::setMatches(const \
QVector<QueryMatch> &matches, const Que  }
 
 #ifdef DEBUG_SYNC
-    qDebug() << "New matches from, to: " << d->currentMatches.size() << \
                matches.size();
-    int count = 0;
-    foreach (const QueryMatch &match, matches) {
-        qDebug() << "     " << count++ << match.title();
+    qDebug() << this << "New matches from, to: " << d->currentMatches.size() << \
matches.size(); +    for (int i = 0; i < matches.count(); ++i) {
+        qDebug() << "     " << i << matches[i].title();
     }
 #endif
 


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

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