<div dir="ltr">Ive tested the patch in relation to BUG: 338737, where the migratemanager is unable to load the postgresql driver, and this fixed it. (there are other bugs in the import, but thats not important here!)</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Sep 8, 2014 at 5:50 PM, Jaroslaw Staniek <span dir="ltr"><<a href="mailto:staniek@kde.org" target="_blank">staniek@kde.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
I've been trying to figure out why Kexi doesn't find all plugins it<br>
used to find before switching to KoServiceLocator.<br>
My findings below.<br>
<br>
In KoServiceLocator::init() KService::name() is used as an unique key<br>
while finding *.desktop files. I.e. the Name field is used.<br>
But as the script [1] can show you (run it in calligra/), there are<br>
numerous services in calligra (not just Kexi) with the same Name<br>
field. [2]<br>
It's nothing unusual, services typically differ in Comment more than<br>
Name. And kde-workspace has many duplications too.<br>
<br>
Solution I propose is to use both library name and name. (yes, there<br>
are services sharing the same library name). See:<br>
<br>
diff --git a/libs/db/KoServiceLocator.cpp b/libs/db/KoServiceLocator.cpp<br>
index 09918e1..263335e 100644<br>
--- a/libs/db/KoServiceLocator.cpp<br>
+++ b/libs/db/KoServiceLocator.cpp<br>
@@ -91,8 +91,9 @@ void KoServiceLocator::init()<br>
         if (servicesDir.exists()) {<br>
             foreach(const QString &entry, servicesDir.entryList(QDir::Files)) {<br>
                 KService::Ptr service = KService::Ptr(new<br>
KService(servicesDir.absoluteFilePath(entry)));<br>
-                if (!services.contains(service->name())) {<br>
-                    services << service->name();<br>
+                const QString key(service->library() + '\n' + service->name());<br>
+                if (!services.contains(key)) {<br>
+                    services << key;<br>
                     foreach(const QString &t, service->serviceTypes()) {<br>
                         if (!mimeTypes(service).contains(t)) {<br>
<br>
Is it ok for you?<br>
PS: I use the locator privately in Kexi 2.8 for some stability<br>
reasons, thus I propose the patch for both calligra/2.8 and master.<br>
<br>
[1] <a href="http://paste.kde.org/ptsnsnbs2/j0kqks/raw" target="_blank">http://paste.kde.org/ptsnsnbs2/j0kqks/raw</a><br>
<br>
[2]<br>
./filters/flow/visio/import/calligra_filter_vsdx2odg.desktop:Name=Flow<br>
Visio Import Filter<br>
./filters/flow/wpg/import/flow_wpg_thumbnail.desktop:Name=WordPerfect/DrawPerfect<br>
Images<br>
./filters/karbon/eps/calligra_filter_eps2svgai.desktop:Name=Karbon EPS<br>
Import Filter<br>
./filters/karbon/eps/karbon_ps_import.desktop:Name=Karbon EPS Import Filter<br>
./filters/karbon/wpg/karbon_wpg_thumbnail.desktop:Name=WordPerfect/DrawPerfect<br>
Images<br>
./filters/words/works/import/calligra_filter_wps2odt.desktop:Name=Flow<br>
Visio Import Filter<br>
./flow/stencils/Sybase/collection.desktop:Name=Sybase<br>
./karbon/plugins/flattenpath/karbonflattenpath.desktop:Name=Karbon<br>
Flatten Path plugin<br>
./karbon/plugins/flattenpath/karbonflattenpathplugin.desktop:Name=Karbon<br>
Flatten Path plugin<br>
./karbon/plugins/refinepath/karbonrefinepath.desktop:Name=Karbon<br>
Refine Path plugin<br>
./karbon/plugins/refinepath/karbonrefinepathplugin.desktop:Name=Karbon<br>
Refine Path plugin<br>
./karbon/plugins/roundcorners/karbonroundcorners.desktop:Name=Karbon<br>
Round Corners plugin<br>
./karbon/plugins/roundcorners/karbonroundcornersplugin.desktop:Name=Karbon<br>
Round Corners plugin<br>
./karbon/plugins/whirlpinch/karbonwhirlpinch.desktop:Name=Karbon Whirl<br>
Pinch plugin<br>
./karbon/plugins/whirlpinch/karbonwhirlpinchplugin.desktop:Name=Karbon<br>
Whirl Pinch plugin<br>
./kexi/kexidb/drivers/mysql/kexidb_mysqldriver.desktop:Name=MySQL<br>
./kexi/kexidb/drivers/pqxx/kexidb_pqxxsqldriver.desktop:Name=PostgreSQL<br>
./kexi/kexidb/drivers/sybase/kexidb_sybasedriver.desktop:Name=Sybase<br>
./kexi/kexidb/drivers/xbase/kexidb_xbasedriver.desktop:Name=xBase<br>
./kexi/migration/mysql/keximigrate_mysql.desktop:Name=MySQL<br>
./kexi/migration/pqxx/keximigrate_pqxx.desktop:Name=PostgreSQL<br>
./kexi/migration/sybase/keximigrate_sybase.desktop:Name=Sybase<br>
./kexi/migration/xbase/keximigrate_xbase.desktop:Name=xBase<br>
./krita/plugins/paintops/gridbrush/kritagridpaintop.desktop:Name=Grid<br>
./krita/plugins/tools/tool_grid/kritatoolgrid.desktop:Name=Grid<br>
./plan/planpart.desktop:Name=Calligra Project Management Component<br>
./plan/plugins/scripting/krossmoduleplan.desktop:Name=Scripting plugin<br>
./plan/workpackage/planworkpart.desktop:Name=Calligra Project<br>
Management Component<br>
./sheets/plugins/scripting/krossmodulesheets.desktop:Name=Scripting plugin<br>
./sheets/shape/calligra_shape_spreadsheet-deferred.desktop:Name=Spreadsheet<br>
Shape<br>
./sheets/shape/calligra_shape_spreadsheet.desktop:Name=Spreadsheet Shape<br>
./words/plugins/scripting/krossmodulewords.desktop:Name=Scripting plugin<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
regards / pozdrawiam, Jaroslaw Staniek<br>
 Kexi & Calligra & KDE | <a href="http://calligra.org/kexi" target="_blank">http://calligra.org/kexi</a> | <a href="http://kde.org" target="_blank">http://kde.org</a><br>
 Qt for Tizen | <a href="http://qt-project.org/wiki/Tizen" target="_blank">http://qt-project.org/wiki/Tizen</a><br>
 Qt Certified Specialist | <a href="http://www.linkedin.com/in/jstaniek" target="_blank">http://www.linkedin.com/in/jstaniek</a><br>
_______________________________________________<br>
calligra-devel mailing list<br>
<a href="mailto:calligra-devel@kde.org">calligra-devel@kde.org</a><br>
<a href="https://mail.kde.org/mailman/listinfo/calligra-devel" target="_blank">https://mail.kde.org/mailman/listinfo/calligra-devel</a><br>
</font></span></blockquote></div><br></div>