Hello community,

here is the log from the commit of package kservice for openSUSE:Factory 
checked in at 2014-10-07 15:58:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kservice (Old)
 and      /work/SRC/openSUSE:Factory/.kservice.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kservice"

Changes:
--------
--- /work/SRC/openSUSE:Factory/kservice/kservice.changes        2014-09-12 
17:03:36.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.kservice.new/kservice.changes   2014-10-07 
15:59:04.000000000 +0200
@@ -1,0 +2,10 @@
+Sat Oct  4 17:59:14 UTC 2014 - hrvoje.sen...@gmail.com
+
+- Update to 5.3.0
+  * Many many fixes to KPluginInfo
+  * Add functions to convert between lists KPluginMetaData
+    and KPluginInfo
+  * For more details please see:
+    https://www.kde.org/announcements/kde-frameworks-5.3.0.php
+
+-------------------------------------------------------------------

Old:
----
  kservice-5.2.0.tar.xz

New:
----
  kservice-5.3.0.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kservice.spec ++++++
--- /var/tmp/diff_new_pack.soR2tr/_old  2014-10-07 15:59:06.000000000 +0200
+++ /var/tmp/diff_new_pack.soR2tr/_new  2014-10-07 15:59:06.000000000 +0200
@@ -17,11 +17,11 @@
 
 
 Name:           kservice
-Version:        5.2.0
+Version:        5.3.0
 Release:        0
 %define kf5_version %{version}
 BuildRequires:  cmake >= 2.8.12
-BuildRequires:  extra-cmake-modules >= 1.2.0
+BuildRequires:  extra-cmake-modules >= 1.3.0
 BuildRequires:  fdupes
 BuildRequires:  kconfig-devel >= %{kf5_version}
 BuildRequires:  kcoreaddons-devel >= %{kf5_version}

++++++ kservice-5.2.0.tar.xz -> kservice-5.3.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kservice-5.2.0/CMakeLists.txt 
new/kservice-5.3.0/CMakeLists.txt
--- old/kservice-5.2.0/CMakeLists.txt   2014-09-09 02:35:54.000000000 +0200
+++ new/kservice-5.3.0/CMakeLists.txt   2014-10-04 19:11:46.000000000 +0200
@@ -4,7 +4,7 @@
 project(KService)
 
 # ECM setup
-find_package(ECM 1.2.0 REQUIRED NO_MODULE)
+find_package(ECM 1.3.0 REQUIRED NO_MODULE)
 set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} 
${CMAKE_CURRENT_SOURCE_DIR}/cmake )
 
 include(KDEInstallDirs)
@@ -15,8 +15,8 @@
 include(FeatureSummary)
 include(GenerateExportHeader)
 
-set(KF5_VERSION "5.2.0") # handled by release scripts
-set(KF5_DEP_VERSION "5.2.0") # handled by release scripts
+set(KF5_VERSION "5.3.0") # handled by release scripts
+set(KF5_DEP_VERSION "5.3.0") # handled by release scripts
 
 ecm_setup_version(${KF5_VERSION}
                   VARIABLE_PREFIX KSERVICE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kservice-5.2.0/autotests/CMakeLists.txt 
new/kservice-5.3.0/autotests/CMakeLists.txt
--- old/kservice-5.2.0/autotests/CMakeLists.txt 2014-09-09 02:35:54.000000000 
+0200
+++ new/kservice-5.3.0/autotests/CMakeLists.txt 2014-10-04 19:11:46.000000000 
+0200
@@ -8,7 +8,7 @@
 
 macro(KSERVICE_UNIT_TESTS)
   foreach(_testname ${ARGN})
-    ecm_add_test(${_testname}.cpp kwaitforsignal.cpp TEST_NAME ${_testname}
+    ecm_add_test(${_testname}.cpp TEST_NAME ${_testname}
     LINK_LIBRARIES KF5::Service Qt5::Test Qt5::Concurrent)
   endforeach()
 endmacro(KSERVICE_UNIT_TESTS)
@@ -19,6 +19,7 @@
  ksycocathreadtest
  kservicetest
  pluginlocatortest
+ kplugininfotest
 )
 
 add_library(fakeplugin MODULE nsaplugin.cpp)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kservice-5.2.0/autotests/kplugininfotest.cpp 
new/kservice-5.3.0/autotests/kplugininfotest.cpp
--- old/kservice-5.2.0/autotests/kplugininfotest.cpp    1970-01-01 
01:00:00.000000000 +0100
+++ new/kservice-5.3.0/autotests/kplugininfotest.cpp    2014-10-04 
19:11:46.000000000 +0200
@@ -0,0 +1,243 @@
+/*
+ *  Copyright 2014 Alex Richardson <arichardson....@gmail.com>
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License version 2 as published by the Free Software Foundation;
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public License
+ *  along with this library; see the file COPYING.LIB.  If not, write to
+ *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ *  Boston, MA 02110-1301, USA.
+ */
+
+#include <QtTest/QTest>
+#include <QLocale>
+#include <QJsonDocument>
+#include <QFileInfo>
+
+#include <KAboutData>
+#include <KPluginMetaData>
+
+#include <kplugininfo.h>
+#include <kservice.h>
+
+Q_DECLARE_METATYPE(KPluginInfo)
+
+class KPluginInfoTest : public QObject
+{
+    Q_OBJECT
+private:
+    static KPluginInfo withCustomProperty(const KPluginInfo &info)
+    {
+        QVariantMap result;
+        QVariantMap metaData = info.properties();
+        metaData["X-Foo-Bar"] = QStringLiteral("Baz");
+        result["MetaData"] = metaData;
+        return KPluginInfo(QVariantList() << result, info.libraryPath());
+    }
+private Q_SLOTS:
+    void testLoadDesktop_data()
+    {
+        QTest::addColumn<QString>("desktopFilePath");
+        QTest::addColumn<KPluginInfo>("info");
+        QTest::addColumn<KPluginInfo>("infoGerman");
+        QTest::addColumn<QVariant>("customValue");
+
+
+        QString fakepluginDesktop = QFINDTESTDATA("fakeplugin.desktop");
+        QVERIFY2(!fakepluginDesktop.isEmpty(), "Could not find 
fakeplugin.desktop");
+        // translations are performed when the object is constructed, not later
+        QLocale::setDefault(QLocale::c());
+        KPluginInfo info(fakepluginDesktop);
+        KService::Ptr fakepluginService(new KService(fakepluginDesktop));
+        KPluginInfo infoFromService(fakepluginService);
+        QLocale::setDefault(QLocale(QLocale::German, QLocale::Germany));
+        KPluginInfo infoGerman(fakepluginDesktop);
+        KService::Ptr fakepluginServiceGerman(new KService(fakepluginDesktop));
+        KPluginInfo infoFromServiceGerman(fakepluginServiceGerman);
+        QLocale::setDefault(QLocale::c());
+
+        QTest::newRow("no custom property") << fakepluginDesktop << info << 
infoGerman << QVariant();
+        // when adding the custom property entryPath() cannot be copied -> 
expect empty string
+        QTest::newRow("with custom property") << QString() << 
withCustomProperty(info)
+            << withCustomProperty(infoGerman) << QVariant("Baz");
+        QTest::newRow("from KService::Ptr") << fakepluginDesktop << 
infoFromService << infoFromServiceGerman << QVariant();
+    }
+
+    void testLoadDesktop()
+    {
+        QFETCH(KPluginInfo, info);
+        QFETCH(KPluginInfo, infoGerman);
+        QFETCH(QVariant, customValue);
+        QFETCH(QString, desktopFilePath);
+
+        QVERIFY(info.isValid());
+        QVERIFY(infoGerman.isValid());
+        QVERIFY(!KPluginInfo("/this/path/does/not/exist.desktop").isValid());
+
+        // check the translatable keys first
+        QCOMPARE(info.comment(), QStringLiteral("Test Plugin Spy"));
+        QCOMPARE(infoGerman.comment(), QStringLiteral("Test-Spionagemodul"));
+        QCOMPARE(info.name(), QStringLiteral("NSA Plugin"));
+        QCOMPARE(infoGerman.name(), QStringLiteral("NSA-Modul"));
+
+        QCOMPARE(info.author(), QStringLiteral("Sebastian Kügler"));
+        QCOMPARE(info.category(), QStringLiteral("Examples"));
+        QCOMPARE(info.dependencies(), QStringList());
+        QCOMPARE(info.email(), QStringLiteral("se...@kde.org"));
+        QCOMPARE(info.entryPath(), desktopFilePath);
+        QCOMPARE(info.icon(), QStringLiteral("preferences-system-time"));
+        QCOMPARE(info.isHidden(), false);
+        QCOMPARE(info.isPluginEnabled(), false);
+        QCOMPARE(info.isPluginEnabledByDefault(), true);
+        QCOMPARE(info.libraryPath(), QStringLiteral("fakeplugin"));
+        QCOMPARE(info.license(), QStringLiteral("LGPL"));
+        QCOMPARE(info.pluginName(), QStringLiteral("fakeplugin"));
+        QCOMPARE(info.serviceTypes(), QStringList() << "KService/NSA");
+        QCOMPARE(info.version(), QStringLiteral("1.0"));
+        QCOMPARE(info.website(), QStringLiteral("http://kde.org/";));
+
+        QCOMPARE(info.property("X-Foo-Bar"), customValue);
+
+    }
+
+    void testToMetaData()
+    {
+        QString fakepluginDesktop = QFINDTESTDATA("fakeplugin.desktop");
+        QVERIFY2(!fakepluginDesktop.isEmpty(), "Could not find 
fakeplugin.desktop");
+        // translations are performed when the object is constructed, not later
+        QLocale::setDefault(QLocale::c());
+        KPluginInfo info = withCustomProperty(KPluginInfo(fakepluginDesktop));
+        QLocale::setDefault(QLocale(QLocale::German, QLocale::Germany));
+        KPluginInfo infoGerman = 
withCustomProperty(KPluginInfo(fakepluginDesktop));
+        QVERIFY(info.isValid());
+        KPluginMetaData meta = info.toMetaData();
+        // translations will be broken (since not all are read), it will 
always return the german version even with QLocale::c()
+        KPluginMetaData metaGerman = infoGerman.toMetaData();
+        QLocale::setDefault(QLocale::c());
+
+        // check the translatable keys first
+        QCOMPARE(meta.description(), QStringLiteral("Test Plugin Spy"));
+        QCOMPARE(metaGerman.description(), 
QStringLiteral("Test-Spionagemodul"));
+        QCOMPARE(meta.name(), QStringLiteral("NSA Plugin"));
+        QCOMPARE(metaGerman.name(), QStringLiteral("NSA-Modul"));
+
+        QCOMPARE(meta.authors().size(), 1);
+        QCOMPARE(meta.authors()[0].name(), QStringLiteral("Sebastian Kügler"));
+        QCOMPARE(meta.authors()[0].emailAddress(), 
QStringLiteral("se...@kde.org"));
+        QCOMPARE(meta.category(), QStringLiteral("Examples"));
+        QCOMPARE(meta.dependencies(), QStringList());
+        QCOMPARE(meta.fileName(), 
QFileInfo(QStringLiteral("fakeplugin")).absoluteFilePath());
+        QCOMPARE(meta.pluginId(), QStringLiteral("fakeplugin"));
+        QCOMPARE(meta.iconName(), QStringLiteral("preferences-system-time"));
+        QCOMPARE(meta.isEnabledByDefault(), true);
+        QCOMPARE(meta.license(), QStringLiteral("LGPL"));
+        QCOMPARE(meta.serviceTypes(), QStringList() << "KService/NSA");
+        QCOMPARE(meta.version(), QStringLiteral("1.0"));
+        QCOMPARE(meta.website(), QStringLiteral("http://kde.org/";));
+
+        // also test the static version
+        QCOMPARE(meta, KPluginInfo::toMetaData(info));
+        QCOMPARE(metaGerman, KPluginInfo::toMetaData(infoGerman));
+
+        // make sure custom values are also retained
+        QCOMPARE(info.property("X-Foo-Bar"), QVariant("Baz"));
+        QCOMPARE(meta.rawData().value("X-Foo-Bar").toString(), 
QStringLiteral("Baz"));
+
+
+        KPluginInfo::List srcList = KPluginInfo::List() << info << infoGerman;
+        QVector<KPluginMetaData> convertedList = 
KPluginInfo::toMetaData(srcList);
+        QCOMPARE(convertedList.size(), 2);
+        QCOMPARE(convertedList[0], meta);
+        QCOMPARE(convertedList[1], metaGerman);
+    }
+
+    void testFromMetaData()
+    {
+        QJsonParseError e;
+        QJsonObject jo = QJsonDocument::fromJson("{\n"
+            " \"KPlugin\": {\n"
+                " \"Name\": \"NSA Plugin\",\n"
+                " \"Name[de]\": \"NSA-Modul\",\n"
+                " \"Description\": \"Test Plugin Spy\",\n"
+                " \"Description[de]\": \"Test-Spionagemodul\",\n"
+                " \"Icon\": \"preferences-system-time\",\n"
+                " \"Authors\": { \"Name\": \"Sebastian Kügler\", \"Email\": 
\"se...@kde.org\" },\n"
+                " \"Category\": \"Examples\",\n"
+                " \"Dependencies\": [],\n"
+                " \"EnabledByDefault\": \"true\",\n"
+                " \"License\": \"LGPL\",\n"
+                " \"Id\": \"fakeplugin\",\n" // not strictly required
+                " \"Version\": \"1.0\",\n"
+                " \"Website\": \"http://kde.org/\",\n";
+                " \"ServiceTypes\": [\"KService/NSA\"]\n"
+            " },\n"
+        " \"X-Foo-Bar\": \"Baz\"\n"
+        "}", &e).object();
+        QCOMPARE(e.error, QJsonParseError::NoError);
+        KPluginMetaData meta(jo, "fakeplugin");
+
+        QLocale::setDefault(QLocale::c());
+        KPluginInfo info = KPluginInfo::fromMetaData(meta);
+        QLocale::setDefault(QLocale(QLocale::German, QLocale::Germany));
+        KPluginInfo infoGerman = KPluginInfo::fromMetaData(meta);
+        QLocale::setDefault(QLocale::c());
+
+        QCOMPARE(info.comment(), QStringLiteral("Test Plugin Spy"));
+        QCOMPARE(infoGerman.comment(), QStringLiteral("Test-Spionagemodul"));
+        QCOMPARE(info.name(), QStringLiteral("NSA Plugin"));
+        QCOMPARE(infoGerman.name(), QStringLiteral("NSA-Modul"));
+
+        QCOMPARE(info.author(), QStringLiteral("Sebastian Kügler"));
+        QCOMPARE(info.category(), QStringLiteral("Examples"));
+        QCOMPARE(info.dependencies(), QStringList());
+        QCOMPARE(info.email(), QStringLiteral("se...@kde.org"));
+        QCOMPARE(info.entryPath(), QString());
+        QCOMPARE(info.icon(), QStringLiteral("preferences-system-time"));
+        QCOMPARE(info.isHidden(), false);
+        QCOMPARE(info.isPluginEnabled(), false);
+        QCOMPARE(info.isPluginEnabledByDefault(), true);
+        QCOMPARE(info.libraryPath(), 
QFileInfo(QStringLiteral("fakeplugin")).absoluteFilePath());
+        QCOMPARE(info.license(), QStringLiteral("LGPL"));
+        QCOMPARE(info.pluginName(), QStringLiteral("fakeplugin"));
+        QCOMPARE(info.serviceTypes(), QStringList() << "KService/NSA");
+        QCOMPARE(info.version(), QStringLiteral("1.0"));
+        QCOMPARE(info.website(), QStringLiteral("http://kde.org/";));
+
+        // make sure custom values are also retained
+        QCOMPARE(meta.rawData().value("X-Foo-Bar").toString(), 
QStringLiteral("Baz"));
+        QCOMPARE(info.property("X-Foo-Bar"), QVariant("Baz"));
+
+        QVector<KPluginMetaData> srcList = QVector<KPluginMetaData>() << meta;
+        KPluginInfo::List convertedList = KPluginInfo::fromMetaData(srcList);
+        QCOMPARE(convertedList.size(), 1);
+        // KPluginInfo::operator== compares identity of the d-pointer -> 
manual structural comparison
+        QCOMPARE(convertedList[0].comment(), info.comment());
+        QCOMPARE(convertedList[0].name(), info.name());
+        QCOMPARE(convertedList[0].author(), info.author());
+        QCOMPARE(convertedList[0].category(), info.category());
+        QCOMPARE(convertedList[0].dependencies(), info.dependencies());
+        QCOMPARE(convertedList[0].email(), info.email());
+        QCOMPARE(convertedList[0].entryPath(), info.entryPath());
+        QCOMPARE(convertedList[0].icon(), info.icon());
+        QCOMPARE(convertedList[0].isHidden(), info.isHidden());
+        QCOMPARE(convertedList[0].isPluginEnabled(), info.isPluginEnabled());
+        QCOMPARE(convertedList[0].isPluginEnabledByDefault(), 
info.isPluginEnabledByDefault());
+        QCOMPARE(convertedList[0].libraryPath(), info.libraryPath());
+        QCOMPARE(convertedList[0].license(), info.license());
+        QCOMPARE(convertedList[0].pluginName(), info.pluginName());
+        QCOMPARE(convertedList[0].serviceTypes(), info.serviceTypes());
+        QCOMPARE(convertedList[0].version(), info.version());
+        QCOMPARE(convertedList[0].website(), info.website());
+    }
+};
+
+QTEST_MAIN(KPluginInfoTest)
+
+#include "kplugininfotest.moc"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kservice-5.2.0/autotests/kservicetest.cpp 
new/kservice-5.3.0/autotests/kservicetest.cpp
--- old/kservice-5.2.0/autotests/kservicetest.cpp       2014-09-09 
02:35:54.000000000 +0200
+++ new/kservice-5.3.0/autotests/kservicetest.cpp       2014-10-04 
19:11:46.000000000 +0200
@@ -37,7 +37,6 @@
 #include <qstandardpaths.h>
 #include <qthread.h>
 #include <qsignalspy.h>
-#include <kwaitforsignal.h>
 
 #include <QTimer>
 #include <QDebug>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kservice-5.2.0/autotests/ksycocathreadtest.cpp 
new/kservice-5.3.0/autotests/ksycocathreadtest.cpp
--- old/kservice-5.2.0/autotests/ksycocathreadtest.cpp  2014-09-09 
02:35:54.000000000 +0200
+++ new/kservice-5.3.0/autotests/ksycocathreadtest.cpp  2014-10-04 
19:11:46.000000000 +0200
@@ -32,7 +32,6 @@
 #include <kservicetypeprofile.h>
 
 #include <qstandardpaths.h>
-#include "kwaitforsignal.h" // for kWaitForSignal
 #include <QDebug>
 
 // Helper method for all the trader tests
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kservice-5.2.0/autotests/kwaitforsignal.cpp 
new/kservice-5.3.0/autotests/kwaitforsignal.cpp
--- old/kservice-5.2.0/autotests/kwaitforsignal.cpp     2014-09-09 
02:35:54.000000000 +0200
+++ new/kservice-5.3.0/autotests/kwaitforsignal.cpp     1970-01-01 
01:00:00.000000000 +0100
@@ -1,26 +0,0 @@
-/*
- *  Copyright (C) 2006 David Faure   <fa...@kde.org>
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public
- *  License version 2 as published by the Free Software Foundation;
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public License
- *  along with this library; see the file COPYING.LIB.  If not, write to
- *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- *  Boston, MA 02110-1301, USA.
- */
-
-#include <kwaitforsignal.h>
-
-bool kWaitForSignal(QObject *obj, const char *signal, int timeout)
-{
-    KDESignalSpy spy(obj, signal, timeout);
-    return spy.signalEmitted();
-}
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kservice-5.2.0/autotests/kwaitforsignal.h 
new/kservice-5.3.0/autotests/kwaitforsignal.h
--- old/kservice-5.2.0/autotests/kwaitforsignal.h       2014-09-09 
02:35:54.000000000 +0200
+++ new/kservice-5.3.0/autotests/kwaitforsignal.h       1970-01-01 
01:00:00.000000000 +0100
@@ -1,61 +0,0 @@
-/*
- *  Copyright (C) 2006 David Faure   <fa...@kde.org>
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public
- *  License version 2 as published by the Free Software Foundation;
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public License
- *  along with this library; see the file COPYING.LIB.  If not, write to
- *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- *  Boston, MA 02110-1301, USA.
- */
-#ifndef KWAITFORSIGNAL_H
-#define KWAITFORSIGNAL_H
-
-#include <QtCore/QObject>
-
-#include <QEventLoop>
-#include <QTimer>
-// TODO Qt5: remove!
-class KDESignalSpy : public QObject
-{
-    Q_OBJECT
-public:
-    KDESignalSpy(QObject *obj, const char *signal, int timeout)
-        : QObject(0), m_obj(obj), m_emitted(false)
-    {
-        connect(obj, signal, this, SLOT(slotSignalEmitted()));
-        if (timeout > 0) {
-            QObject::connect(&m_timer, SIGNAL(timeout()), &m_loop, 
SLOT(quit()));
-            m_timer.setSingleShot(true);
-            m_timer.start(timeout);
-        }
-        m_loop.exec();
-    }
-    bool signalEmitted() const
-    {
-        return m_emitted;
-    }
-
-private Q_SLOTS:
-    void slotSignalEmitted()
-    {
-        m_emitted = true;
-        disconnect(m_obj, 0, this, 0);
-        m_timer.stop();
-        m_loop.quit();
-    }
-private:
-    QObject *m_obj;
-    bool m_emitted;
-    QEventLoop m_loop;
-    QTimer m_timer;
-};
-
-#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kservice-5.2.0/autotests/noplugin.desktop 
new/kservice-5.3.0/autotests/noplugin.desktop
--- old/kservice-5.2.0/autotests/noplugin.desktop       2014-09-09 
02:35:54.000000000 +0200
+++ new/kservice-5.3.0/autotests/noplugin.desktop       2014-10-04 
19:11:46.000000000 +0200
@@ -3,6 +3,7 @@
 Name[ca]=Sense connector
 Name[ca@valencia]=Sense connector
 Name[cs]=Žádný modul
+Name[da]=Intet plugin
 Name[de]=Kein Modul
 Name[en_GB]=No Plugin
 Name[es]=Ningún complemento
@@ -38,6 +39,7 @@
 Comment[ca]=Aquest no té cap biblioteca
 Comment[ca@valencia]=Això no té cap biblioteca
 Comment[cs]=Toto nemá knihovnu
+Comment[da]=Dette har ikke et bibliotek
 Comment[de]=Dies hat keine Bibliothek
 Comment[en_GB]=This does not have a library
 Comment[es]=Esto no posee una biblioteca
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kservice-5.2.0/po/ja/kservice5.po 
new/kservice-5.3.0/po/ja/kservice5.po
--- old/kservice-5.2.0/po/ja/kservice5.po       2014-09-09 02:35:54.000000000 
+0200
+++ new/kservice-5.3.0/po/ja/kservice5.po       2014-10-04 19:11:46.000000000 
+0200
@@ -16,7 +16,7 @@
 "POT-Creation-Date: 2014-08-03 08:17+0000\n"
 "PO-Revision-Date: 2011-08-27 14:05-0700\n"
 "Last-Translator: Fumiaki Okushi <oku...@kde.gr.jp>\n"
-"Language-Team: Japanese <kdevelo...@kde.gr.jp>\n"
+"Language-Team: Japanese <kde...@kde.org>\n"
 "Language: ja\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kservice-5.2.0/po/nds/kservice5.po 
new/kservice-5.3.0/po/nds/kservice5.po
--- old/kservice-5.2.0/po/nds/kservice5.po      2014-09-09 02:35:54.000000000 
+0200
+++ new/kservice-5.3.0/po/nds/kservice5.po      2014-10-04 19:11:46.000000000 
+0200
@@ -16,7 +16,7 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.5\n"
+"X-Generator: Lokalize 1.4\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 
 msgctxt "NAME OF TRANSLATORS"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kservice-5.2.0/po/oc/kservice5.po 
new/kservice-5.3.0/po/oc/kservice5.po
--- old/kservice-5.2.0/po/oc/kservice5.po       1970-01-01 01:00:00.000000000 
+0100
+++ new/kservice-5.3.0/po/oc/kservice5.po       2014-10-04 19:11:46.000000000 
+0200
@@ -0,0 +1,218 @@
+# translation of kdelibs4.po to Occitan
+# Copyright (C) 2008 This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Yannig Marchegay (Kokoyaya) <yan...@marchegay.org>, 2007, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n";
+"POT-Creation-Date: 2014-08-03 08:17+0000\n"
+"PO-Revision-Date: 2008-08-06 00:07+0200\n"
+"Last-Translator: \n"
+"Language-Team: Occitan <o...@li.org>\n"
+"Language: oc\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: KBabel 1.11.4\n"
+
+msgctxt "NAME OF TRANSLATORS"
+msgid "Your names"
+msgstr "Yannig Marchegay (Kokoyaya)"
+
+msgctxt "EMAIL OF TRANSLATORS"
+msgid "Your emails"
+msgstr "yan...@marchegay.org"
+
+#: kbuildsycoca/kbuildsycoca.cpp:617
+#, fuzzy
+#| msgid "KBuildSycoca"
+msgctxt "application name"
+msgid "KBuildSycoca"
+msgstr "KBuildSycoca"
+
+#: kbuildsycoca/kbuildsycoca.cpp:619
+#, fuzzy
+#| msgid "Rebuilds the system configuration cache."
+msgctxt "application description"
+msgid "Rebuilds the system configuration cache."
+msgstr "Reconstrusís l'amagatal de configuracion del sistèma."
+
+#: kbuildsycoca/kbuildsycoca.cpp:621
+msgctxt "@info:credit"
+msgid "Copyright 1999-2014 KDE Developers"
+msgstr ""
+
+#: kbuildsycoca/kbuildsycoca.cpp:622
+#, fuzzy
+#| msgid "David Faure"
+msgctxt "@info:credit"
+msgid "David Faure"
+msgstr "David Faure"
+
+#: kbuildsycoca/kbuildsycoca.cpp:623 kbuildsycoca/kbuildsycoca.cpp:626
+#, fuzzy
+#| msgid "Author"
+msgctxt "@info:credit"
+msgid "Author"
+msgstr "Autor"
+
+#: kbuildsycoca/kbuildsycoca.cpp:625
+#, fuzzy
+#| msgid "Waldo Bastian"
+msgctxt "@info:credit"
+msgid "Waldo Bastian"
+msgstr "Waldo Bastian"
+
+#: kbuildsycoca/kbuildsycoca.cpp:636
+#, fuzzy
+#| msgid "Do not signal applications to update"
+msgctxt "@info:shell command-line option"
+msgid "Do not signal applications to update"
+msgstr "Senhalar pas las aplicacions de metre a jorn."
+
+#: kbuildsycoca/kbuildsycoca.cpp:639
+#, fuzzy
+#| msgid "Disable incremental update, re-read everything"
+msgctxt "@info:shell command-line option"
+msgid "Disable incremental update, re-read everything"
+msgstr "Desactivar la mesa a jorn incrementala, tornar legir tot"
+
+#: kbuildsycoca/kbuildsycoca.cpp:642
+#, fuzzy
+#| msgid "Check file timestamps"
+msgctxt "@info:shell command-line option"
+msgid "Check file timestamps"
+msgstr "Verificar l'orodatatge dels fichièrs"
+
+#: kbuildsycoca/kbuildsycoca.cpp:645
+#, fuzzy
+#| msgid "Disable checking files (dangerous)"
+msgctxt "@info:shell command-line option"
+msgid "Disable checking files (dangerous)"
+msgstr "Desactivar la verificacion dels fichièrs (dangierós)"
+
+#: kbuildsycoca/kbuildsycoca.cpp:648
+#, fuzzy
+#| msgid "Create global database"
+msgctxt "@info:shell command-line option"
+msgid "Create global database"
+msgstr "Crear une banca de donadas globala"
+
+#: kbuildsycoca/kbuildsycoca.cpp:651
+#, fuzzy
+#| msgid "Perform menu generation test run only"
+msgctxt "@info:shell command-line option"
+msgid "Perform menu generation test run only"
+msgstr "Efectuar la generacion de menut pas qu'en tèst"
+
+#: kbuildsycoca/kbuildsycoca.cpp:654
+#, fuzzy
+#| msgid "Track menu id for debug purposes"
+msgctxt "@info:shell command-line option"
+msgid "Track menu id for debug purposes"
+msgstr "Traçar lo menut id dins la tòca de desbogar"
+
+#: kbuildsycoca/kbuildsycoca.cpp:658
+msgctxt "@info:shell command-line option"
+msgid "Switch QStandardPaths to test mode, for unit tests only"
+msgstr ""
+
+#: kdeinit/ktoolinvocation.cpp:66
+msgid "Function must be called from the main thread."
+msgstr ""
+
+#: kdeinit/ktoolinvocation.cpp:103
+#, kde-format
+msgid ""
+"Error launching %1. Either KLauncher is not running anymore, or it failed to "
+"start the application."
+msgstr ""
+
+#: kdeinit/ktoolinvocation.cpp:106
+#, kde-format
+msgid ""
+"KLauncher could not be reached via D-Bus. Error when calling %1:\n"
+"%2\n"
+msgstr ""
+
+#: kdeinit/ktoolinvocation_x11.cpp:259
+#, kde-format
+msgid ""
+"Could not launch the mail client:\n"
+"\n"
+"%1"
+msgstr ""
+
+#: kdeinit/ktoolinvocation_x11.cpp:260
+#, fuzzy
+#| msgid ""
+#| "Could not launch the browser:\n"
+#| "\n"
+#| "%1"
+msgid "Could not launch Mail Client"
+msgstr ""
+"Impossible d'aviar lo navegador :\n"
+"\n"
+"%1"
+
+#: kdeinit/ktoolinvocation_x11.cpp:309 kdeinit/ktoolinvocation_x11.cpp:334
+#: kdeinit/ktoolinvocation_x11.cpp:353
+#, kde-format
+msgid ""
+"Could not launch the browser:\n"
+"\n"
+"%1"
+msgstr ""
+"Impossible d'aviar lo navegador :\n"
+"\n"
+"%1"
+
+#: kdeinit/ktoolinvocation_x11.cpp:310 kdeinit/ktoolinvocation_x11.cpp:335
+#: kdeinit/ktoolinvocation_x11.cpp:354
+#, fuzzy
+#| msgid ""
+#| "Could not launch the browser:\n"
+#| "\n"
+#| "%1"
+msgid "Could not launch Browser"
+msgstr ""
+"Impossible d'aviar lo navegador :\n"
+"\n"
+"%1"
+
+#: kdeinit/ktoolinvocation_x11.cpp:393
+#, kde-format
+msgid ""
+"Could not launch the terminal client:\n"
+"\n"
+"%1"
+msgstr ""
+
+#: kdeinit/ktoolinvocation_x11.cpp:394
+#, fuzzy
+#| msgid ""
+#| "Could not launch the browser:\n"
+#| "\n"
+#| "%1"
+msgid "Could not launch Terminal Client"
+msgstr ""
+"Impossible d'aviar lo navegador :\n"
+"\n"
+"%1"
+
+#: plugin/kdbusservicestarter.cpp:77
+#, kde-format
+msgid "No service implementing %1"
+msgstr ""
+
+#: services/kservice.cpp:1027
+msgid "The provided service is not valid"
+msgstr ""
+
+#: services/kservice.cpp:1031
+#, kde-format
+msgid "The service '%1' provides no library or the Library key is missing"
+msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kservice-5.2.0/po/zh_CN/kservice5.po 
new/kservice-5.3.0/po/zh_CN/kservice5.po
--- old/kservice-5.2.0/po/zh_CN/kservice5.po    2014-09-09 02:35:54.000000000 
+0200
+++ new/kservice-5.3.0/po/zh_CN/kservice5.po    2014-10-04 19:11:46.000000000 
+0200
@@ -10,14 +10,15 @@
 # Feng Chao <chaofeng...@gmail.com>, 2010, 2012, 2014.
 # Ni Hui <shuizhuyuan...@126.com>, 2010, 2011, 2012.
 # Weng Xuetian <wen...@gmail.com>, 2011, 2012, 2013.
+# Xuetian Weng <xw...@cs.stonybrook.edu>, 2014.
 msgid ""
 msgstr ""
 "Project-Id-Version: kdelibs4\n"
 "Report-Msgid-Bugs-To: http://bugs.kde.org\n";
 "POT-Creation-Date: 2014-08-03 08:17+0000\n"
-"PO-Revision-Date: 2014-03-13 21:01+0800\n"
-"Last-Translator: Feng Chao <chaofeng...@gmail.com>\n"
-"Language-Team: Chinese Simplified <kde-ch...@kde.org>\n"
+"PO-Revision-Date: 2014-09-25 18:31-0400\n"
+"Last-Translator: Xuetian Weng <xw...@cs.stonybrook.edu>\n"
+"Language-Team: Chinese Simplified <kde-i18n-...@kde.org>\n"
 "Language: zh_CN\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -34,92 +35,66 @@
 msgstr "kde-ch...@kde.org, chaofeng...@gmail.com"
 
 #: kbuildsycoca/kbuildsycoca.cpp:617
-#, fuzzy
-#| msgid "KBuildSycoca"
 msgctxt "application name"
 msgid "KBuildSycoca"
 msgstr "KBuildSycoca"
 
 #: kbuildsycoca/kbuildsycoca.cpp:619
-#, fuzzy
-#| msgid "Rebuilds the system configuration cache."
 msgctxt "application description"
 msgid "Rebuilds the system configuration cache."
 msgstr "重建系统配置缓存。"
 
 #: kbuildsycoca/kbuildsycoca.cpp:621
-#, fuzzy
-#| msgid "(c) 1999-2002 KDE Developers"
 msgctxt "@info:credit"
 msgid "Copyright 1999-2014 KDE Developers"
-msgstr "(c) 1999-2002 KDE 开发人员"
+msgstr "版权所有 1999-2014 KDE 开发者"
 
 #: kbuildsycoca/kbuildsycoca.cpp:622
-#, fuzzy
-#| msgid "David Faure"
 msgctxt "@info:credit"
 msgid "David Faure"
 msgstr "David Faure"
 
 #: kbuildsycoca/kbuildsycoca.cpp:623 kbuildsycoca/kbuildsycoca.cpp:626
-#, fuzzy
-#| msgid "Author"
 msgctxt "@info:credit"
 msgid "Author"
 msgstr "作者"
 
 #: kbuildsycoca/kbuildsycoca.cpp:625
-#, fuzzy
-#| msgid "Waldo Bastian"
 msgctxt "@info:credit"
 msgid "Waldo Bastian"
 msgstr "Waldo Bastian"
 
 #: kbuildsycoca/kbuildsycoca.cpp:636
-#, fuzzy
-#| msgid "Do not signal applications to update"
 msgctxt "@info:shell command-line option"
 msgid "Do not signal applications to update"
 msgstr "不请求应用程序进行更新"
 
 #: kbuildsycoca/kbuildsycoca.cpp:639
-#, fuzzy
-#| msgid "Disable incremental update, re-read everything"
 msgctxt "@info:shell command-line option"
 msgid "Disable incremental update, re-read everything"
 msgstr "禁用增量更新,重新读取全部数据"
 
 #: kbuildsycoca/kbuildsycoca.cpp:642
-#, fuzzy
-#| msgid "Check file timestamps"
 msgctxt "@info:shell command-line option"
 msgid "Check file timestamps"
 msgstr "检查文件时间戳"
 
 #: kbuildsycoca/kbuildsycoca.cpp:645
-#, fuzzy
-#| msgid "Disable checking files (dangerous)"
 msgctxt "@info:shell command-line option"
 msgid "Disable checking files (dangerous)"
 msgstr "禁用文件检查(危险)"
 
 #: kbuildsycoca/kbuildsycoca.cpp:648
-#, fuzzy
-#| msgid "Create global database"
 msgctxt "@info:shell command-line option"
 msgid "Create global database"
 msgstr "创建全局数据库"
 
 #: kbuildsycoca/kbuildsycoca.cpp:651
-#, fuzzy
-#| msgid "Perform menu generation test run only"
 msgctxt "@info:shell command-line option"
 msgid "Perform menu generation test run only"
 msgstr "只执行菜单创建测试"
 
 #: kbuildsycoca/kbuildsycoca.cpp:654
-#, fuzzy
-#| msgid "Track menu id for debug purposes"
 msgctxt "@info:shell command-line option"
 msgid "Track menu id for debug purposes"
 msgstr "跟踪菜单 ID 以进行调试"
@@ -127,7 +102,7 @@
 #: kbuildsycoca/kbuildsycoca.cpp:658
 msgctxt "@info:shell command-line option"
 msgid "Switch QStandardPaths to test mode, for unit tests only"
-msgstr ""
+msgstr "切换 QStandardPaths 到测试模式,仅用于单元测试"
 
 #: kdeinit/ktoolinvocation.cpp:66
 msgid "Function must be called from the main thread."
@@ -200,7 +175,7 @@
 #: plugin/kdbusservicestarter.cpp:77
 #, kde-format
 msgid "No service implementing %1"
-msgstr ""
+msgstr "没有实现 %1 的服务"
 
 #: services/kservice.cpp:1027
 msgid "The provided service is not valid"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kservice-5.2.0/src/services/application.desktop 
new/kservice-5.3.0/src/services/application.desktop
--- old/kservice-5.2.0/src/services/application.desktop 2014-09-09 
02:35:54.000000000 +0200
+++ new/kservice-5.3.0/src/services/application.desktop 2014-10-04 
19:11:46.000000000 +0200
@@ -62,6 +62,7 @@
 Name[ne]=अनुप्रयोग
 Name[nl]=Toepassing
 Name[nn]=Program
+Name[oc]=Aplicacion
 Name[or]=ପ୍ରୟୋଗ
 Name[pa]=ਐਪਲੀਕੇਸ਼ਨ
 Name[pl]=Program
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kservice-5.2.0/src/services/kplugininfo.cpp 
new/kservice-5.3.0/src/services/kplugininfo.cpp
--- old/kservice-5.2.0/src/services/kplugininfo.cpp     2014-09-09 
02:35:54.000000000 +0200
+++ new/kservice-5.3.0/src/services/kplugininfo.cpp     2014-10-04 
19:11:46.000000000 +0200
@@ -19,15 +19,19 @@
 */
 
 #include "kplugininfo.h"
-#include <kservicetypetrader.h>
-#include <kdesktopfile.h>
-#include <kservice.h>
+
 #include <QList>
 #include <QDebug>
 #include <QDirIterator>
+#include <QJsonArray>
+#include <QStandardPaths>
+
+#include <kaboutdata.h>
 #include <kconfiggroup.h>
-#include <qstandardpaths.h>
-#include <qdebug.h>
+#include <kdesktopfile.h>
+#include <kpluginmetadata.h>
+#include <kservice.h>
+#include <kservicetypetrader.h>
 
 //#ifndef NDEBUG
 #define KPLUGININFO_ISVALID_ASSERTION \
@@ -44,6 +48,7 @@
 static const char s_nameKey[] = "Name";
 static const char s_commentKey[] = "Comment";
 static const char s_iconKey[] = "Icon";
+static const char s_libraryKey[] = "X-KDE-Library";
 static const char s_authorKey[] = "X-KDE-PluginInfo-Author";
 static const char s_emailKey[] = "X-KDE-PluginInfo-Email";
 static const char s_pluginNameKey[] = "X-KDE-PluginInfo-Name";
@@ -86,9 +91,14 @@
 {
     KDesktopFile file(/*resource,*/ filename);
 
-    d->entryPath = filename;
-
     KConfigGroup cg = file.desktopGroup();
+    if (!cg.exists()) {
+        qWarning() << filename << "has no desktop group, cannot construct a 
KPluginInfo object from it.";
+        d.reset();
+        return;
+    }
+    d->entryPath = file.fileName();
+
     d->hidden = cg.readEntry(s_hiddenKey, false);
     if (d->hidden) {
         return;
@@ -104,9 +114,12 @@
     d->metaData.insert(s_websiteKey, cg.readEntryUntranslated(s_websiteKey));
     d->metaData.insert(s_categoryKey, cg.readEntryUntranslated(s_categoryKey));
     d->metaData.insert(s_licenseKey, cg.readEntryUntranslated(s_licenseKey));
-    d->metaData.insert(s_dependenciesKey, 
cg.readEntryUntranslated(s_dependenciesKey));
+    d->metaData.insert(s_dependenciesKey, cg.readEntry(s_dependenciesKey, 
QStringList()));
     d->metaData.insert(s_enabledbyDefaultKey, 
cg.readEntryUntranslated(s_enabledbyDefaultKey));
+    d->metaData.insert(s_serviceTypesKey, 
cg.readEntryUntranslated(s_serviceTypesKey));
+    d->metaData.insert(s_xKDEServiceTypes, 
cg.readEntryUntranslated(s_xKDEServiceTypes));
     d->enabledbydefault = cg.readEntry(s_enabledbyDefaultKey, false);
+    d->libraryPath = cg.readEntry(s_libraryKey);
 }
 
 KPluginInfo::KPluginInfo(const QVariantList &args, const QString &libraryPath)
@@ -143,6 +156,7 @@
     }
     d->service = service;
     d->entryPath = service->entryPath();
+    d->libraryPath = service->library();
 
     if (service->isDeleted()) {
         d->hidden = true;
@@ -160,6 +174,7 @@
     d->metaData.insert(s_categoryKey, service->property(s_categoryKey));
     d->metaData.insert(s_licenseKey, service->property(s_licenseKey));
     d->metaData.insert(s_dependenciesKey, 
service->property(s_dependenciesKey));
+    d->metaData.insert(s_xKDEServiceTypes, service->serviceTypes());
     QVariant tmp = service->property(s_enabledbyDefaultKey);
     d->metaData.insert(s_enabledbyDefaultKey, tmp.toBool());
     d->enabledbydefault = d->metaData.value(s_enabledbyDefaultKey).toBool();
@@ -425,6 +440,11 @@
     return d->metaData.value(key);
 }
 
+QVariantMap KPluginInfo::properties() const
+{
+    return d->metaData;
+}
+
 void KPluginInfo::save(KConfigGroup config)
 {
     KPLUGININFO_ISVALID_ASSERTION;
@@ -466,5 +486,95 @@
     return qHash(reinterpret_cast<quint64>(p.d.data()));
 }
 
-#undef KPLUGININFO_ISVALID_ASSERTION
+KPluginInfo KPluginInfo::fromMetaData(const KPluginMetaData &md)
+{
+    QVariantMap metaData = md.rawData().toVariantMap();
+    const QList<KAboutPerson> &authors = md.authors();
+    if (!authors.isEmpty()) {
+        metaData[s_authorKey] = authors[0].name();
+        metaData[s_emailKey] = authors[0].emailAddress();
+    }
+    metaData[s_categoryKey] = md.category();
+    metaData[s_commentKey] = md.description();
+    metaData[s_dependenciesKey] = md.dependencies();
+    metaData[s_enabledbyDefaultKey] = md.isEnabledByDefault();
+    metaData[s_iconKey] = md.iconName();
+    metaData[s_licenseKey] = md.license();
+    metaData[s_nameKey] = md.name();
+    metaData[s_pluginNameKey] = md.pluginId();
+    metaData[s_xKDEServiceTypes] = md.serviceTypes();
+    metaData[s_versionKey] = md.version();
+    metaData[s_websiteKey] = md.website();
+    QVariantMap result;
+    result[QStringLiteral("MetaData")] = metaData;
+    return KPluginInfo(QVariantList() << result, md.fileName());
+}
+
+KPluginMetaData KPluginInfo::toMetaData() const
+{
+    KPLUGININFO_ISVALID_ASSERTION;
+    QJsonObject metadata = QJsonObject::fromVariantMap(d->metaData);
+    QJsonObject kplugin;
+    /* Metadata structure is as follows:
+     "KPlugin": {
+        "Name": "Date and Time",
+        "Description": "Date and time by timezone",
+        "Icon": "preferences-system-time",
+        "Authors": { "Name": "Aaron Seigo", "Email": "ase...@kde.org" },
+        "Category": "Date and Time",
+        "Dependencies": [],
+        "EnabledByDefault": "true",
+        "License": "LGPL",
+        "Id": "time",
+        "Version": "1.0",
+        "Website": "http://plasma.kde.org/";,
+        "ServiceTypes": ["Plasma/DataEngine"]
+     }
+     */
+    const QString nameStr = QStringLiteral("Name");
+    kplugin[nameStr] = name();
+    kplugin[QStringLiteral("Description")] = comment();
+    kplugin[QStringLiteral("Icon")] = icon();
+    QJsonObject authors;
+    authors[nameStr] = author();
+    authors[QStringLiteral("Email")] = email();
+    kplugin[QStringLiteral("Authors")] = authors;
+    kplugin[QStringLiteral("Category")] = category();
+    kplugin[QStringLiteral("Dependencies")] = 
QJsonArray::fromStringList(dependencies());
+    kplugin[QStringLiteral("EnabledByDefault")] = isPluginEnabledByDefault();
+    kplugin[QStringLiteral("License")] = license();
+    kplugin[QStringLiteral("Id")] = pluginName();
+    kplugin[QStringLiteral("Version")] = version();
+    kplugin[QStringLiteral("Website")] = website();
+    kplugin[QStringLiteral("ServiceTypes")] = 
QJsonArray::fromStringList(serviceTypes());
+    metadata[QStringLiteral("KPlugin")] = kplugin;
+    return KPluginMetaData(metadata, d->libraryPath);
+}
+
+KPluginMetaData KPluginInfo::toMetaData(const KPluginInfo& info)
+{
+    return info.toMetaData();
+}
+
+KPluginInfo::List KPluginInfo::fromMetaData(const QVector<KPluginMetaData> 
&list)
+{
+    KPluginInfo::List ret;
+    ret.reserve(list.size());
+    foreach(const KPluginMetaData &md, list) {
+        ret.append(KPluginInfo::fromMetaData(md));
+    }
+    return ret;
+}
+
+QVector<KPluginMetaData> KPluginInfo::toMetaData(const KPluginInfo::List &list)
+{
+    QVector<KPluginMetaData> ret;
+    ret.reserve(list.size());
+    foreach(const KPluginInfo &info, list) {
+        ret.append(info.toMetaData());
+    }
+    return ret;
+}
 
+
+#undef KPLUGININFO_ISVALID_ASSERTION
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kservice-5.2.0/src/services/kplugininfo.h 
new/kservice-5.3.0/src/services/kplugininfo.h
--- old/kservice-5.2.0/src/services/kplugininfo.h       2014-09-09 
02:35:54.000000000 +0200
+++ new/kservice-5.3.0/src/services/kplugininfo.h       2014-10-04 
19:11:46.000000000 +0200
@@ -29,6 +29,7 @@
 #include <kservice.h>
 #include <QtCore/QList>
 
+class KPluginMetaData;
 class KPluginInfoPrivate;
 
 /**
@@ -123,7 +124,7 @@
      * Use (Q|K)PluginLoader and build the metadata into the plugin using
      * K_PLUGIN_FACTORY_WITH_JSON( ..., "mypluginmetadata.json", ...)
      *
-     * You can use the "kconfigtojson tool to generate a .json file from your 
.desktop file.
+     * You can use the "desktoptojson tool to generate a .json file from your 
.desktop file.
      * The .json file should look like this:
      *
      * \verbatim
@@ -237,6 +238,13 @@
     QVariant property(const QString &key) const;
 
     /**
+     * @return All properties of this object. This can be used to read custom 
values.
+     * @since 5.3
+     * @see KPluginInfo::property()
+     */
+    QVariantMap properties() const;
+
+    /**
      * @return The user visible name of the plugin.
      */
     QString name() const;
@@ -416,6 +424,40 @@
 
     friend class KPluginTrader;
 
+    /**
+     * @return a KPluginMetaData object with equivalent meta data.
+     * @since 5.3
+     */
+    KPluginMetaData toMetaData() const;
+
+    /**
+     * @param info the KPluginInfo object to convert
+     * @return a KPluginMetaData object with equivalent meta data.
+     * @since 5.3
+     */
+    static KPluginMetaData toMetaData(const KPluginInfo &info);
+
+    /**
+     * @param meta the KPluginMetaData to convert
+     * @return a KPluginInfo object with equivalent meta data.
+     * @since 5.3
+     */
+    static KPluginInfo fromMetaData(const KPluginMetaData &meta);
+
+    /**
+     * @param list the list of KPluginInfo objects to convert
+     * @return a list of KPluginMetaData objects with equivalent meta data.
+     * @since 5.3
+     */
+    static QVector<KPluginMetaData> toMetaData(const KPluginInfo::List &list);
+
+    /**
+     * @param list the list of KPluginMetaData objects to convert
+     * @return a list of KPluginInfo objects with equivalent meta data.
+     * @since 5.3
+     */
+    static KPluginInfo::List fromMetaData(const QVector<KPluginMetaData> 
&list);
+
 private:
     friend KSERVICE_EXPORT uint qHash(const KPluginInfo &);
     QExplicitlySharedDataPointer<KPluginInfoPrivate> d;

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to