KOSMIndoorMap

io.cpp
1/*
2 SPDX-FileCopyrightText: 2022 Volker Krause <vkrause@kde.org>
3 SPDX-License-Identifier: LGPL-2.0-or-later
4*/
5
6#include "io.h"
7#include "ioplugin.h"
8
9#include <QJsonArray>
10#include <QJsonObject>
11#include <QPluginLoader>
12
13#include <optional>
14
15using namespace OSM;
16
17Q_IMPORT_PLUGIN(OSM_O5mIOPlugin)
18
19IOPluginInterface::~IOPluginInterface() = default;
20
21static std::optional<QStaticPlugin> pluginForMetaData(QLatin1String key, QStringView value)
22{
23 const auto plugins = QPluginLoader::staticPlugins();
24 for (const auto &plugin : plugins) {
25 const auto md = plugin.metaData();
26 if (md.value(QLatin1String("IID")).toString() != QLatin1String(OSMIOPluginInteraface_iid)) {
27 continue;
28 }
29 const auto exts = md.value(QLatin1String("MetaData")).toObject().value(key).toArray();
30 for (const auto &ext : exts) {
31 if (value.endsWith(ext.toString(), Qt::CaseInsensitive)) {
32 return plugin;
33 }
34 }
35 }
36
37 return {};
38}
39
40std::unique_ptr<AbstractReader> IO::readerForFileName(QStringView fileName, OSM::DataSet *dataSet)
41{
42 const auto plugin = pluginForMetaData(QLatin1String("fileExtensions"), fileName);
43 if (plugin) {
44 return qobject_cast<IOPluginInterface*>(plugin->instance())->createReader(dataSet);
45 }
46 return {};
47}
48
49std::unique_ptr<AbstractReader> IO::readerForMimeType(QStringView mimeType, OSM::DataSet* dataSet)
50{
51 const auto plugin = pluginForMetaData(QLatin1String("mimetypes"), mimeType);
52 if (plugin) {
53 return qobject_cast<IOPluginInterface*>(plugin->instance())->createReader(dataSet);
54 }
55 return {};
56}
57
58std::unique_ptr<AbstractWriter> IO::writerForFileName(QStringView fileName)
59{
60 const auto plugin = pluginForMetaData(QLatin1String("fileExtensions"), fileName);
61 if (plugin) {
62 return qobject_cast<IOPluginInterface*>(plugin->instance())->createWriter();
63 }
64 return {};
65}
66
67std::unique_ptr<AbstractWriter> IO::writerForMimeType(QStringView mimeType)
68{
69 const auto plugin = pluginForMetaData(QLatin1String("mimeypes"), mimeType);
70 if (plugin) {
71 return qobject_cast<IOPluginInterface*>(plugin->instance())->createWriter();
72 }
73 return {};
74}
A set of nodes, ways and relations.
Definition datatypes.h:340
char * toString(const EngineQuery &query)
KOSM_EXPORT std::unique_ptr< AbstractReader > readerForMimeType(QStringView mimeType, OSM::DataSet *dataSet)
Returns a suitable reader for the given MIME type.
Definition io.cpp:49
KOSM_EXPORT std::unique_ptr< AbstractWriter > writerForMimeType(QStringView mimeType)
Returns a suitable writer for the given MIME type.
Definition io.cpp:67
KOSM_EXPORT std::unique_ptr< AbstractReader > readerForFileName(QStringView fileName, OSM::DataSet *dataSet)
Returns a suitable reader for the given file name.
Definition io.cpp:40
KOSM_EXPORT std::unique_ptr< AbstractWriter > writerForFileName(QStringView fileName)
Returns a suitable writer for the given file name.
Definition io.cpp:58
Low-level types and functions to work with raw OSM data as efficiently as possible.
QList< QStaticPlugin > staticPlugins()
bool endsWith(QChar ch) const const
CaseInsensitive
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Tue Mar 26 2024 11:20:03 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.