From 20baadec5f8280944524e85b8c66da49306032a4 Mon Sep 17 00:00:00 2001 From: Toni Gundogdu Date: Thu, 27 Oct 2011 22:00:08 +0300 Subject: [PATCH] Use QJson for parsing umph output --- src/feed/nfeedprogressdialog.cpp | 47 +++++++++++++++------------------------- 1 file changed, 18 insertions(+), 29 deletions(-) diff --git a/src/feed/nfeedprogressdialog.cpp b/src/feed/nfeedprogressdialog.cpp index 2abcdff..303eabe 100644 --- a/src/feed/nfeedprogressdialog.cpp +++ b/src/feed/nfeedprogressdialog.cpp @@ -17,13 +17,15 @@ #include "config.h" -#include -#include +#include +#include #ifdef ENABLE_VERBOSE #include #endif +#include + #include extern QString umph_path; @@ -71,46 +73,33 @@ bool NFeedProgressDialog::open(QStringList args) return _errmsg.isEmpty(); } -bool NFeedProgressDialog::results(feed::NFeedList& dst, QString& err) +bool NFeedProgressDialog::results(feed::NFeedList& dst, QString& errmsg) { const int n = _buffer.indexOf("{"); if (n == -1) { - err = tr("Unexpected data from umph"); + errmsg = tr("Unexpected data from umph"); return false; } - QScriptEngine e; - QScriptValue v = e.evaluate("("+_buffer.mid(n)+")"); - if (e.hasUncaughtException()) - { - err = tr("Uncaught exception at line %1: %2") - .arg(e.uncaughtExceptionLineNumber()) - .arg(v.toString()); - return false; - } + QJson::Parser p; + bool ok; - QScriptValueIterator i(v.property("video")); - if (!i.hasNext()) + QVariantMap r = p.parse(_buffer.mid(n).toLocal8Bit(), &ok).toMap(); + if (!ok) { - err = tr("umph did not return any video entries"); + errmsg = tr("An error occurred while parsing JSON"); return false; } + dst.clear(); - QString t,u; - while (i.hasNext()) - { - i.next(); - if (i.flags() & QScriptValue::SkipInEnumeration) - continue; - v = i.value(); - t = v.property("title").toString(); - u = v.property("url").toString(); - - feed::NFeedItem item(t,u); - dst.append(item); - } + foreach (const QVariant v, r["video"].toList()) + { + const QVariantMap m = v.toMap(); + feed::NFeedItem i(m["title"].toString(), m["url"].toString()); + dst.append(i); + } return true; } -- 2.11.4.GIT