From 025903718c4a40d48c846cb58e849d904de24aee Mon Sep 17 00:00:00 2001 From: Nicolas Fella Date: Tue, 12 Aug 2025 14:54:55 +0200 Subject: [PATCH] Restore thumbnailer functionality The thumbnailers were never properly ported to KF6. The code has multiple desktop files that all load the same thumbnailer plugin. That approach does not work with KF6. Instead we need a proper plugin with embedded JSON metadata for each. (cherry picked from commit 18528fa5062c4d9ec90785fc3d709163d86af6e8) * asturm 2025-10-12: Leaving ever changing .desktop files intact to keep working with 25.08.3. --- src/plugins/runner/gpx/CMakeLists.txt | 3 +++ src/plugins/runner/gpx/marble_thumbnail_gpx.json | 8 ++++++++ src/plugins/runner/gpx/thumbnail.cpp | 11 +++++++++++ src/plugins/runner/json/CMakeLists.txt | 3 +++ .../runner/json/marble_thumbnail_geojson.json | 8 ++++++++ src/plugins/runner/json/thumbnail.cpp | 11 +++++++++++ src/plugins/runner/kml/CMakeLists.txt | 8 +++++--- src/plugins/runner/kml/marble_thumbnail_kml.json | 8 ++++++++ src/plugins/runner/kml/marble_thumbnail_kmz.json | 8 ++++++++ src/plugins/runner/kml/thumbnail_kml.cpp | 11 +++++++++++ src/plugins/runner/kml/thumbnail_kmz.cpp | 11 +++++++++++ src/plugins/runner/osm/CMakeLists.txt | 7 +++---- src/plugins/runner/osm/marble_thumbnail_osm.json | 8 ++++++++ src/plugins/runner/osm/thumbnail.cpp | 11 +++++++++++ src/plugins/runner/shp/CMakeLists.txt | 4 ++-- src/plugins/runner/shp/marble_thumbnail_shp.json | 8 ++++++++ src/plugins/runner/shp/thumbnail.cpp | 11 +++++++++++ src/thumbnailer/CMakeLists.txt | 4 +--- src/thumbnailer/main.cpp | 12 ------------ src/thumbnailer/thumbnailer.cpp | 4 ++-- src/thumbnailer/thumbnailer.h | 2 +- 21 files changed, 134 insertions(+), 27 deletions(-) create mode 100644 src/plugins/runner/gpx/marble_thumbnail_gpx.json create mode 100644 src/plugins/runner/gpx/thumbnail.cpp create mode 100644 src/plugins/runner/json/marble_thumbnail_geojson.json create mode 100644 src/plugins/runner/json/thumbnail.cpp create mode 100644 src/plugins/runner/kml/marble_thumbnail_kml.json create mode 100644 src/plugins/runner/kml/marble_thumbnail_kmz.json create mode 100644 src/plugins/runner/kml/thumbnail_kml.cpp create mode 100644 src/plugins/runner/kml/thumbnail_kmz.cpp create mode 100644 src/plugins/runner/osm/marble_thumbnail_osm.json create mode 100644 src/plugins/runner/osm/thumbnail.cpp create mode 100644 src/plugins/runner/shp/marble_thumbnail_shp.json create mode 100644 src/plugins/runner/shp/thumbnail.cpp delete mode 100644 src/thumbnailer/main.cpp diff --git a/src/plugins/runner/gpx/CMakeLists.txt b/src/plugins/runner/gpx/CMakeLists.txt index 69f63d5a0..cfc8a318d 100644 --- a/src/plugins/runner/gpx/CMakeLists.txt +++ b/src/plugins/runner/gpx/CMakeLists.txt @@ -74,6 +74,9 @@ if(NOT KF6_FOUND) return() endif() +kcoreaddons_add_plugin(marble_thumbnail_gpx SOURCES thumbnail.cpp INSTALL_NAMESPACE "kf6/thumbcreator") +target_link_libraries(marble_thumbnail_gpx PRIVATE marblethumbnail) + # register marble part as handler # install again once part is fixed to load and show the passed file # install(FILES marble_part_gpx.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) diff --git a/src/plugins/runner/gpx/marble_thumbnail_gpx.json b/src/plugins/runner/gpx/marble_thumbnail_gpx.json new file mode 100644 index 000000000..e9074e32b --- /dev/null +++ b/src/plugins/runner/gpx/marble_thumbnail_gpx.json @@ -0,0 +1,8 @@ +{ + "KPlugin": { + "MimeTypes": [ + "application/gpx+xml" + ], + "Name": "GPX Geographic Data" + } +} diff --git a/src/plugins/runner/gpx/thumbnail.cpp b/src/plugins/runner/gpx/thumbnail.cpp new file mode 100644 index 000000000..638d869e5 --- /dev/null +++ b/src/plugins/runner/gpx/thumbnail.cpp @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later +// +// SPDX-FileCopyrightText: 2025 Nicolas Fella + +#include "thumbnailer.h" + +#include + +K_PLUGIN_CLASS_WITH_JSON(Marble::GeoDataThumbnailer, "marble_thumbnail_gpx.json") + +#include "thumbnail.moc" diff --git a/src/plugins/runner/json/CMakeLists.txt b/src/plugins/runner/json/CMakeLists.txt index fd52ff188..07a92f123 100644 --- a/src/plugins/runner/json/CMakeLists.txt +++ b/src/plugins/runner/json/CMakeLists.txt @@ -14,6 +14,9 @@ if(NOT KF6_FOUND) return() endif() +kcoreaddons_add_plugin(marble_thumbnail_geojson SOURCES thumbnail.cpp INSTALL_NAMESPACE "kf6/thumbcreator") +target_link_libraries(marble_thumbnail_geojson PRIVATE marblethumbnail) + # register marble part as handler # install again once part is fixed to load and show the passed file # install(FILES marble_part_geojson.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) diff --git a/src/plugins/runner/json/marble_thumbnail_geojson.json b/src/plugins/runner/json/marble_thumbnail_geojson.json new file mode 100644 index 000000000..ff7a673a3 --- /dev/null +++ b/src/plugins/runner/json/marble_thumbnail_geojson.json @@ -0,0 +1,8 @@ +{ + "KPlugin": { + "MimeTypes": [ + "application/geo+json" + ], + "Name": "GeoJSON Geographic Data" + } +} diff --git a/src/plugins/runner/json/thumbnail.cpp b/src/plugins/runner/json/thumbnail.cpp new file mode 100644 index 000000000..5590ffa9a --- /dev/null +++ b/src/plugins/runner/json/thumbnail.cpp @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later +// +// SPDX-FileCopyrightText: 2025 Nicolas Fella + +#include "thumbnailer.h" + +#include + +K_PLUGIN_CLASS_WITH_JSON(Marble::GeoDataThumbnailer, "marble_thumbnail_geojson.json") + +#include "thumbnail.moc" diff --git a/src/plugins/runner/kml/CMakeLists.txt b/src/plugins/runner/kml/CMakeLists.txt index 59eb85928..6b5c0cbf3 100644 --- a/src/plugins/runner/kml/CMakeLists.txt +++ b/src/plugins/runner/kml/CMakeLists.txt @@ -20,9 +20,11 @@ endif() # install(FILES marble_part_kml.desktop DESTINATION ${KDE_INSTALL_FULL_KSERVICESDIR}) # install(FILES marble_part_kmz.desktop DESTINATION ${KDE_INSTALL_FULL_KSERVICESDIR}) -# register thumbnail plugin as handler -install(FILES marble_thumbnail_kml.desktop DESTINATION ${KDE_INSTALL_FULL_APPDIR}) -install(FILES marble_thumbnail_kmz.desktop DESTINATION ${KDE_INSTALL_FULL_APPDIR}) +kcoreaddons_add_plugin(marble_thumbnail_kml SOURCES thumbnail_kml.cpp INSTALL_NAMESPACE "kf6/thumbcreator") +target_link_libraries(marble_thumbnail_kml PRIVATE marblethumbnail) + +kcoreaddons_add_plugin(marble_thumbnail_kmz SOURCES thumbnail_kmz.cpp INSTALL_NAMESPACE "kf6/thumbcreator") +target_link_libraries(marble_thumbnail_kmz PRIVATE marblethumbnail) if(NOT WIN32 AND NOT APPLE) # register marble app as handler diff --git a/src/plugins/runner/kml/marble_thumbnail_kml.json b/src/plugins/runner/kml/marble_thumbnail_kml.json new file mode 100644 index 000000000..0523c56e9 --- /dev/null +++ b/src/plugins/runner/kml/marble_thumbnail_kml.json @@ -0,0 +1,8 @@ +{ + "KPlugin": { + "MimeTypes": [ + "application/vnd.google-earth.kml+xml" + ], + "Name": "KML Geographic Data" + } +} diff --git a/src/plugins/runner/kml/marble_thumbnail_kmz.json b/src/plugins/runner/kml/marble_thumbnail_kmz.json new file mode 100644 index 000000000..8ff4d3209 --- /dev/null +++ b/src/plugins/runner/kml/marble_thumbnail_kmz.json @@ -0,0 +1,8 @@ +{ + "KPlugin": { + "MimeTypes": [ + "application/vnd.google-earth.kmz" + ], + "Name": "KML Geographic Compressed Data" + } +} diff --git a/src/plugins/runner/kml/thumbnail_kml.cpp b/src/plugins/runner/kml/thumbnail_kml.cpp new file mode 100644 index 000000000..c3f9df0c3 --- /dev/null +++ b/src/plugins/runner/kml/thumbnail_kml.cpp @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later +// +// SPDX-FileCopyrightText: 2025 Nicolas Fella + +#include "thumbnailer.h" + +#include + +K_PLUGIN_CLASS_WITH_JSON(Marble::GeoDataThumbnailer, "marble_thumbnail_kml.json") + +#include "thumbnail_kml.moc" diff --git a/src/plugins/runner/kml/thumbnail_kmz.cpp b/src/plugins/runner/kml/thumbnail_kmz.cpp new file mode 100644 index 000000000..4dee965de --- /dev/null +++ b/src/plugins/runner/kml/thumbnail_kmz.cpp @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later +// +// SPDX-FileCopyrightText: 2025 Nicolas Fella + +#include "thumbnailer.h" + +#include + +K_PLUGIN_CLASS_WITH_JSON(Marble::GeoDataThumbnailer, "marble_thumbnail_kmz.json") + +#include "thumbnail_kmz.moc" diff --git a/src/plugins/runner/osm/CMakeLists.txt b/src/plugins/runner/osm/CMakeLists.txt index 3cb2f6fbb..e69a1e8b0 100644 --- a/src/plugins/runner/osm/CMakeLists.txt +++ b/src/plugins/runner/osm/CMakeLists.txt @@ -78,10 +78,9 @@ if(NOT KF6_FOUND) return() endif() +kcoreaddons_add_plugin(marble_thumbnail_osm SOURCES thumbnail.cpp INSTALL_NAMESPACE "kf6/thumbcreator") +target_link_libraries(marble_thumbnail_osm PRIVATE marblethumbnail) + # register marble part as handler # install again once part is fixed to load and show the passed file # install(FILES marble_part_osm.desktop DESTINATION ${KDE_INSTALL_FULL_KSERVICE5DIR}) - -# register thumbnail plugin as handler -install(FILES marble_thumbnail_osm.desktop DESTINATION ${KDE_INSTALL_FULL_APPDIR}) - diff --git a/src/plugins/runner/osm/marble_thumbnail_osm.json b/src/plugins/runner/osm/marble_thumbnail_osm.json new file mode 100644 index 000000000..050615de6 --- /dev/null +++ b/src/plugins/runner/osm/marble_thumbnail_osm.json @@ -0,0 +1,8 @@ +{ + "KPlugin": { + "MimeTypes": [ + "application/x-osm+xml" + ], + "Name": "OSM Data" + } +} diff --git a/src/plugins/runner/osm/thumbnail.cpp b/src/plugins/runner/osm/thumbnail.cpp new file mode 100644 index 000000000..0536d304d --- /dev/null +++ b/src/plugins/runner/osm/thumbnail.cpp @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later +// +// SPDX-FileCopyrightText: 2025 Nicolas Fella + +#include "thumbnailer.h" + +#include + +K_PLUGIN_CLASS_WITH_JSON(Marble::GeoDataThumbnailer, "marble_thumbnail_osm.json") + +#include "thumbnail.moc" diff --git a/src/plugins/runner/shp/CMakeLists.txt b/src/plugins/runner/shp/CMakeLists.txt index 9d1cdc9a1..472b8190f 100644 --- a/src/plugins/runner/shp/CMakeLists.txt +++ b/src/plugins/runner/shp/CMakeLists.txt @@ -21,8 +21,8 @@ endif() # install again once part is fixed to load and show the passed file # install(FILES marble_part_shp.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) -# register thumbnail plugin as handler -install(FILES marble_thumbnail_shp.desktop DESTINATION ${KDE_INSTALL_APPDIR}) +kcoreaddons_add_plugin(marble_thumbnail_shp SOURCES thumbnail.cpp INSTALL_NAMESPACE "kf6/thumbcreator") +target_link_libraries(marble_thumbnail_shp PRIVATE marblethumbnail) if(NOT WIN32 AND NOT APPLE) # register marble app as handler diff --git a/src/plugins/runner/shp/marble_thumbnail_shp.json b/src/plugins/runner/shp/marble_thumbnail_shp.json new file mode 100644 index 000000000..401dd4e02 --- /dev/null +++ b/src/plugins/runner/shp/marble_thumbnail_shp.json @@ -0,0 +1,8 @@ +{ + "KPlugin": { + "MimeTypes": [ + "application/x-esri-shape" + ], + "Name": "ESRI Shapefile" + } +} diff --git a/src/plugins/runner/shp/thumbnail.cpp b/src/plugins/runner/shp/thumbnail.cpp new file mode 100644 index 000000000..caee98a89 --- /dev/null +++ b/src/plugins/runner/shp/thumbnail.cpp @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later +// +// SPDX-FileCopyrightText: 2025 Nicolas Fella + +#include "thumbnailer.h" + +#include + +K_PLUGIN_CLASS_WITH_JSON(Marble::GeoDataThumbnailer, "marble_thumbnail_shp.json") + +#include "thumbnail.moc" diff --git a/src/thumbnailer/CMakeLists.txt b/src/thumbnailer/CMakeLists.txt index 62e692b72..5ac0b1535 100644 --- a/src/thumbnailer/CMakeLists.txt +++ b/src/thumbnailer/CMakeLists.txt @@ -9,11 +9,9 @@ endif() set(marblethumbnail_SRCS thumbnailer.cpp thumbnailer.h - main.cpp ) -add_library(marblethumbnail MODULE ${marblethumbnail_SRCS}) +add_library(marblethumbnail STATIC ${marblethumbnail_SRCS}) target_link_libraries(marblethumbnail marblewidget KF6::KIOGui ) -install(TARGETS marblethumbnail DESTINATION ${KDE_INSTALL_PLUGINDIR}) diff --git a/src/thumbnailer/main.cpp b/src/thumbnailer/main.cpp deleted file mode 100644 index c26e553dd..000000000 --- a/src/thumbnailer/main.cpp +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-FileCopyrightText: 2014 Friedrich W. H. Kossebau -// SPDX-License-Identifier: LGPL-2.1-or-later - -#include "thumbnailer.h" - -extern "C" { - -Q_DECL_EXPORT ThumbnailCreator *new_creator() -{ - return new Marble::GeoDataThumbnailer; -} -} diff --git a/src/thumbnailer/thumbnailer.cpp b/src/thumbnailer/thumbnailer.cpp index ce84a86d4..6e2520396 100644 --- a/src/thumbnailer/thumbnailer.cpp +++ b/src/thumbnailer/thumbnailer.cpp @@ -18,8 +18,8 @@ static const int timeoutTime = 5000; // in msec namespace Marble { -GeoDataThumbnailer::GeoDataThumbnailer() - : ThumbnailCreator(nullptr, QVariantList()) +GeoDataThumbnailer::GeoDataThumbnailer(QObject *parent) + : ThumbnailCreator(parent, QVariantList()) { m_marbleMap.setMapThemeId(QStringLiteral("earth/openstreetmap/openstreetmap.dgml")); m_marbleMap.setProjection(Equirectangular); diff --git a/src/thumbnailer/thumbnailer.h b/src/thumbnailer/thumbnailer.h index 47266050f..66ce681c2 100644 --- a/src/thumbnailer/thumbnailer.h +++ b/src/thumbnailer/thumbnailer.h @@ -26,7 +26,7 @@ class GeoDataThumbnailer : public ThumbnailCreator Q_OBJECT public: - GeoDataThumbnailer(); + GeoDataThumbnailer(QObject *parent); ~GeoDataThumbnailer() override; ThumbnailResult create(const ThumbnailRequest &request) override; -- 2.51.0