Behaviour of KoServiceLocator

Jaroslaw Staniek staniek at kde.org
Mon Sep 8 17:50:46 BST 2014


Hello,
I've been trying to figure out why Kexi doesn't find all plugins it
used to find before switching to KoServiceLocator.
My findings below.

In KoServiceLocator::init() KService::name() is used as an unique key
while finding *.desktop files. I.e. the Name field is used.
But as the script [1] can show you (run it in calligra/), there are
numerous services in calligra (not just Kexi) with the same Name
field. [2]
It's nothing unusual, services typically differ in Comment more than
Name. And kde-workspace has many duplications too.

Solution I propose is to use both library name and name. (yes, there
are services sharing the same library name). See:

diff --git a/libs/db/KoServiceLocator.cpp b/libs/db/KoServiceLocator.cpp
index 09918e1..263335e 100644
--- a/libs/db/KoServiceLocator.cpp
+++ b/libs/db/KoServiceLocator.cpp
@@ -91,8 +91,9 @@ void KoServiceLocator::init()
         if (servicesDir.exists()) {
             foreach(const QString &entry, servicesDir.entryList(QDir::Files)) {
                 KService::Ptr service = KService::Ptr(new
KService(servicesDir.absoluteFilePath(entry)));
-                if (!services.contains(service->name())) {
-                    services << service->name();
+                const QString key(service->library() + '\n' + service->name());
+                if (!services.contains(key)) {
+                    services << key;
                     foreach(const QString &t, service->serviceTypes()) {
                         if (!mimeTypes(service).contains(t)) {

Is it ok for you?
PS: I use the locator privately in Kexi 2.8 for some stability
reasons, thus I propose the patch for both calligra/2.8 and master.

[1] http://paste.kde.org/ptsnsnbs2/j0kqks/raw

[2]
./filters/flow/visio/import/calligra_filter_vsdx2odg.desktop:Name=Flow
Visio Import Filter
./filters/flow/wpg/import/flow_wpg_thumbnail.desktop:Name=WordPerfect/DrawPerfect
Images
./filters/karbon/eps/calligra_filter_eps2svgai.desktop:Name=Karbon EPS
Import Filter
./filters/karbon/eps/karbon_ps_import.desktop:Name=Karbon EPS Import Filter
./filters/karbon/wpg/karbon_wpg_thumbnail.desktop:Name=WordPerfect/DrawPerfect
Images
./filters/words/works/import/calligra_filter_wps2odt.desktop:Name=Flow
Visio Import Filter
./flow/stencils/Sybase/collection.desktop:Name=Sybase
./karbon/plugins/flattenpath/karbonflattenpath.desktop:Name=Karbon
Flatten Path plugin
./karbon/plugins/flattenpath/karbonflattenpathplugin.desktop:Name=Karbon
Flatten Path plugin
./karbon/plugins/refinepath/karbonrefinepath.desktop:Name=Karbon
Refine Path plugin
./karbon/plugins/refinepath/karbonrefinepathplugin.desktop:Name=Karbon
Refine Path plugin
./karbon/plugins/roundcorners/karbonroundcorners.desktop:Name=Karbon
Round Corners plugin
./karbon/plugins/roundcorners/karbonroundcornersplugin.desktop:Name=Karbon
Round Corners plugin
./karbon/plugins/whirlpinch/karbonwhirlpinch.desktop:Name=Karbon Whirl
Pinch plugin
./karbon/plugins/whirlpinch/karbonwhirlpinchplugin.desktop:Name=Karbon
Whirl Pinch plugin
./kexi/kexidb/drivers/mysql/kexidb_mysqldriver.desktop:Name=MySQL
./kexi/kexidb/drivers/pqxx/kexidb_pqxxsqldriver.desktop:Name=PostgreSQL
./kexi/kexidb/drivers/sybase/kexidb_sybasedriver.desktop:Name=Sybase
./kexi/kexidb/drivers/xbase/kexidb_xbasedriver.desktop:Name=xBase
./kexi/migration/mysql/keximigrate_mysql.desktop:Name=MySQL
./kexi/migration/pqxx/keximigrate_pqxx.desktop:Name=PostgreSQL
./kexi/migration/sybase/keximigrate_sybase.desktop:Name=Sybase
./kexi/migration/xbase/keximigrate_xbase.desktop:Name=xBase
./krita/plugins/paintops/gridbrush/kritagridpaintop.desktop:Name=Grid
./krita/plugins/tools/tool_grid/kritatoolgrid.desktop:Name=Grid
./plan/planpart.desktop:Name=Calligra Project Management Component
./plan/plugins/scripting/krossmoduleplan.desktop:Name=Scripting plugin
./plan/workpackage/planworkpart.desktop:Name=Calligra Project
Management Component
./sheets/plugins/scripting/krossmodulesheets.desktop:Name=Scripting plugin
./sheets/shape/calligra_shape_spreadsheet-deferred.desktop:Name=Spreadsheet
Shape
./sheets/shape/calligra_shape_spreadsheet.desktop:Name=Spreadsheet Shape
./words/plugins/scripting/krossmodulewords.desktop:Name=Scripting plugin

-- 
regards / pozdrawiam, Jaroslaw Staniek
 Kexi & Calligra & KDE | http://calligra.org/kexi | http://kde.org
 Qt for Tizen | http://qt-project.org/wiki/Tizen
 Qt Certified Specialist | http://www.linkedin.com/in/jstaniek



More information about the calligra-devel mailing list