SVN commit 1043166 by sebas: Make it possible to use the same library for different runners And add a techbase runner. The URL, name and icon are now loaded from This needs an updated servicetype from kdelibs to work. M +1 -0 CMakeLists.txt M +30 -4 wikipedia.cpp M +3 -0 wikipedia.h M +2 -0 wikipediarunner.desktop --- trunk/playground/base/plasma/runners/wikipedia/CMakeLists.txt #1043165:1043166 @@ -9,4 +9,5 @@ install(TARGETS krunner_wikipedia DESTINATION ${PLUGIN_INSTALL_DIR} ) install(FILES wikipediarunner.desktop DESTINATION ${SERVICES_INSTALL_DIR}) +install(FILES userbaserunner.desktop DESTINATION ${SERVICES_INSTALL_DIR}) --- trunk/playground/base/plasma/runners/wikipedia/wikipedia.cpp #1043165:1043166 @@ -23,6 +23,9 @@ #include #include +#include +#include + #include "mediawiki.h" @@ -33,8 +36,31 @@ Q_UNUSED(args); setObjectName("Wikipedia"); m_icon = KIcon("applications-internet"); + //m_apiUrl = QUrl("http://en.wikipedia.org/w/api.php"); + QString constraint; + if (!id().isEmpty()) { + //QString _id = "krunner_" + id(); + constraint.append(QString("[X-KDE-PluginInfo-Name] == '%1'").arg(id())); + } + KService::List offers = KServiceTypeTrader::self()->query("Plasma/Runner", constraint); + foreach (const KPluginInfo &info, KPluginInfo::fromServices(offers)) { + + QStringList _urls = info.property("X-Plasma-Args").toStringList(); + QString _u; + kDebug() << info.name() << info.property("X-Plasma-Args").toStringList() << _urls.count(); + if (_urls.count()) { + _u = _urls[0]; + kDebug() << _u << m_name << m_comment; + } + m_name = info.name(); + m_comment = info.comment(); + m_icon = KIcon(info.icon()); + m_apiUrl = _u; + } + + kDebug() << "ID:" << id(); Plasma::RunnerSyntax s(":q:", i18n("Finds entries on Wikipedia matching :q:.")); s.addExampleQuery(":q:"); addSyntax(s); @@ -63,14 +89,14 @@ m_wikipedia = new MediaWiki(); m_wikipedia->setMaxItems(3); - m_wikipedia->setApiUrl( QUrl("http://en.wikipedia.org/w/api.php") ); + m_wikipedia->setApiUrl( m_apiUrl ); connect( m_wikipedia, SIGNAL(finished(bool)), SLOT(wikipediaFinished(bool)) ); connect( this, SIGNAL(done()), &loop, SLOT(quit()) ); m_context = &context; m_wikipedia->search(term); kDebug() << "Wikisearch:" << term; - + loop.exec(); delete m_wikipedia; @@ -86,8 +112,8 @@ kDebug() << ">>>>>>>>> Match:" << res.url << res.title; Plasma::QueryMatch match(this); match.setType(Plasma::QueryMatch::PossibleMatch); - match.setIcon(KIcon("applications-internet")); - match.setText(QString("Wikipedia: %1").arg(res.title)); + match.setIcon(m_icon); + match.setText(QString("%1: %2").arg(m_name, res.title)); match.setData(res.url); m_context->addMatch(res.title, match); } --- trunk/playground/base/plasma/runners/wikipedia/wikipedia.h #1043165:1043166 @@ -44,7 +44,10 @@ private: KIcon m_icon; + QString m_name; + QString m_comment; MediaWiki* m_wikipedia; + QUrl m_apiUrl; Plasma::RunnerContext* m_context; }; --- trunk/playground/base/plasma/runners/wikipedia/wikipediarunner.desktop #1043165:1043166 @@ -33,3 +33,5 @@ X-KDE-PluginInfo-Version=1.0 X-KDE-PluginInfo-License=LGPL X-KDE-PluginInfo-EnabledByDefault=true + +X-Plasma-Args=http://wikipedia.org/w/api.php