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

List:       kde-commits
Subject:    [kdeplasma-addons/plasma/sreich/youtube-runner] runners/youtube: add a TubeJob wrapper
From:       Shaun Reich <shaun.reich () kdemail ! net>
Date:       2012-02-25 16:10:38
Message-ID: 20120225161038.3BCE9A60A6 () git ! kde ! org
[Download RAW message or body]

Git commit 916847787a0cef04da87636e05c76357673900ca by Shaun Reich.
Committed on 25/02/2012 at 16:41.
Pushed by sreich into branch 'plasma/sreich/youtube-runner'.

add a TubeJob wrapper

M  +43   -34   runners/youtube/youtube.cpp
M  +30   -3    runners/youtube/youtube.h

http://commits.kde.org/kdeplasma-addons/916847787a0cef04da87636e05c76357673900ca

diff --git a/runners/youtube/youtube.cpp b/runners/youtube/youtube.cpp
index d5f7f85..4518ea6 100644
--- a/runners/youtube/youtube.cpp
+++ b/runners/youtube/youtube.cpp
@@ -30,6 +30,7 @@
 //but seeing as youtube doesn't fully support html5 (only for non-ad'ed videos), i \
guess i'll have to hold off on it?  YouTube::YouTube(QObject *parent, const \
QVariantList& args)  : Plasma::AbstractRunner(parent, args)
+    , m_context(0)
 {
     Q_UNUSED(args);
     setObjectName(QLatin1String("YouTube"));
@@ -43,7 +44,7 @@ YouTube::YouTube(QObject *parent, const QVariantList& args)
     setSpeed(SlowSpeed);
     setPriority(LowPriority);
 
-//    qRegisterMetaType<Plasma::RunnerContext>();
+    qRegisterMetaType<Plasma::RunnerContext*>();
 }
 
 YouTube::~YouTube()
@@ -52,11 +53,11 @@ YouTube::~YouTube()
 
 void YouTube::match(Plasma::RunnerContext &context)
 {
+    m_context = &context;
     kDebug() << "MATCH MADE, emitting matchmade";
-//    Q_ASSERT(connect(this, SIGNAL(matchMade(Plasma::RunnerContext&)), this, \
                SLOT(startYouTubeJob(Plasma::RunnerContext&))));
-    Q_ASSERT(connect(this, SIGNAL(matchMade()), this, SLOT(startYouTubeJob())));
-   emit matchMade();
-//    QMetaObject::invokeMethod(this, SLOT(matchMade(Plasma::RunnerContext));
+    connect(this, SIGNAL(matchMade(Plasma::RunnerContext*)), this, \
SLOT(startYouTubeJob(Plasma::RunnerContext*))); +    emit matchMade(&context);
+
     const QString term = context.query();
     if (term.length() < 3) {
         return;
@@ -65,27 +66,6 @@ void YouTube::match(Plasma::RunnerContext &context)
     if (!context.isValid()) {
         return;
     }
-
-//    QEventLoop loop;
-//    // Wait a second, we don't want to  query on every keypress
-//    QMutex mutex;
-//    QWaitCondition waiter;
-//    mutex.lock();
-//    waiter.wait(&mutex, 1000);
-//    mutex.unlock();
-
-//    startYouTubeJob();
-
-    Plasma::QueryMatch match(this);
-    match.setType(Plasma::QueryMatch::PossibleMatch);
-
-    //  match.setRelevance(1.0);
-    //  match.setIcon(m_icon);
-    //  match.setData(i.key());
-    match.setText(QLatin1String( "YouTube: " ));
-
-    context.addMatch(term, match);
-
 }
 
 void YouTube::run(const Plasma::RunnerContext &context, const Plasma::QueryMatch \
&match) @@ -103,21 +83,32 @@ void YouTube::run(const Plasma::RunnerContext &context, \
const Plasma::QueryMatch  //    }
 }
 
-void YouTube::startYouTubeJob()
+void YouTube::startYouTubeJob(Plasma::RunnerContext *context)
 {
-   // Q_ASSERT(0);
+
     kDebug() << "%%%%%% YOUTUBE RUNNING JORB!";
-    KIO::TransferJob *job = \
KIO::get(KUrl("http://gdata.youtube.com/feeds/api/videos?max-results=1&q=taylor \
                swift"), KIO::NoReload, KIO::HideProgressInfo);
-    connect(job, SIGNAL(data(KIO::Job*,QByteArray)), this, \
                SLOT(dataArrived(KIO::Job*,QByteArray)));
-    job->start();
+    TubeJob *job = new \
TubeJob(KUrl("http://gdata.youtube.com/feeds/api/videos?max-results=1&q=taylor \
swift"), KIO::NoReload, KIO::HideProgressInfo, context); +    connect(job, \
SIGNAL(dataReceived(KIO::Job*,QByteArray,Plasma::RunnerContext*)), this, \
SLOT(dataArrived(KIO::Job*,QByteArray,Plasma::RunnerContext*))); + //   job->start();
 }
 
-void YouTube::dataArrived(KIO::Job* job, const QByteArray& data)
+void YouTube::dataArrived(KIO::Job* job, const QByteArray& data, \
Plasma::RunnerContext* context)  {
     kDebug()  << "DATA:" << data;
     if (!data.isEmpty()) {
         parseXML(data);
     }
+    const QString term = context->query();
+    Plasma::QueryMatch match(this);
+    match.setType(Plasma::QueryMatch::PossibleMatch);
+
+    //  match.setRelevance(1.0);
+    //  match.setIcon(m_icon);
+//    match.setData("TEST");
+    match.setText(QLatin1String( "YouTube: " ));
+
+    context->addMatch(term, match);
+
 }
 
 void YouTube::parseXML(QByteArray data)
@@ -190,12 +181,30 @@ void YouTube::parseVideo(QXmlStreamReader& xml)
         kDebug() << currentElement;
     }
 
-
-
     if (!videoTitles.isEmpty() && !videoLinks.isEmpty()) {
         kDebug() << "TITLE WAS: " << videoTitles;
         kDebug() << "LINK WAS: " << videoLinks;
     }
 }
 
+TubeJob::TubeJob(const KUrl& url, KIO::LoadType type, KIO::JobFlag flags, \
Plasma::RunnerContext *context) +  : QObject()
+  , m_context(context)
+  , m_job(0)
+{
+    m_job = KIO::get(url, type, flags);
+    connect(m_job, SIGNAL(data(KIO::Job*,QByteArray)), \
SLOT(onData(KIO::Job*,QByteArray))); +}
+
+void TubeJob::onData(KIO::Job* job, QByteArray data)
+{
+    emit dataReceived(job, data, m_context);
+}
+
+void TubeJob::start()
+{
+    m_job->start();
+}
+
+
 #include "youtube.moc"
diff --git a/runners/youtube/youtube.h b/runners/youtube/youtube.h
index 6f1e19c..fd06bfe 100644
--- a/runners/youtube/youtube.h
+++ b/runners/youtube/youtube.h
@@ -25,6 +25,9 @@
 
 #include <KIO/Job>
 
+#include <KUrl>
+
+
 class QXmlStreamReader;
 
 class YouTube : public Plasma::AbstractRunner {
@@ -38,19 +41,43 @@ public:
     void run(const Plasma::RunnerContext &context, const Plasma::QueryMatch &match);
 
 Q_SIGNALS:
-    void matchMade();//Plasma::RunnerContext &context);
+    void matchMade(Plasma::RunnerContext *context);
 
 private slots:
-    void dataArrived(KIO::Job* job, const QByteArray& data);
-    void startYouTubeJob(); //(Plasma::RunnerContext &context);
+    void dataArrived(KIO::Job* job, const QByteArray& data, Plasma::RunnerContext* \
context); +    void startYouTubeJob(Plasma::RunnerContext *context);
 
 private:
     void parseXML(QByteArray);
     void parseVideo(QXmlStreamReader& xml);
 
     QByteArray buffer;
+
+    Plasma::RunnerContext *m_context;
 };
 
+class TubeJob : public QObject
+{
+    Q_OBJECT
+
+public:
+    TubeJob(const KUrl& url, KIO::LoadType type, KIO::JobFlag flags, \
Plasma::RunnerContext *context); +
+Q_SIGNALS:
+    void dataReceived(KIO::Job* job, QByteArray data, Plasma::RunnerContext \
*context); +
+private Q_SLOTS:
+    void onData(KIO::Job* job, QByteArray data);
+    void start();
+
+private:
+    Plasma::RunnerContext *m_context;
+
+    KIO::TransferJob *m_job;
+};
+
+Q_DECLARE_METATYPE(Plasma::RunnerContext*);
+
 K_EXPORT_PLASMA_RUNNER(youtube, YouTube)
 
 #endif


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

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