diff options
Diffstat (limited to 'staging/smolblok/smolblok.hpp')
-rw-r--r-- | staging/smolblok/smolblok.hpp | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/staging/smolblok/smolblok.hpp b/staging/smolblok/smolblok.hpp index d3e63fb..e547d67 100644 --- a/staging/smolblok/smolblok.hpp +++ b/staging/smolblok/smolblok.hpp @@ -17,13 +17,45 @@ class smolblok { public: + smolblok() = default; ~smolblok() { for(auto &plugin : m_formats) { delete plugin.loader; } } - bool registerFormatPlugin(const QString &format, const QString &filename); + + auto registerFormatPlugin(const QString &format, const QString &filename) + { + struct { + bool loaded = false; + QString error; + } ret; + + if(format.isEmpty() || filename.isEmpty()) { + ret.error = "Format or filename is empty"; + return ret; + } + + auto *plugin = new QPluginLoader(filename); + if(!plugin->load()) { + ret.error = plugin->errorString(); + delete plugin; + return ret; + } + + auto *instance = qobject_cast<FilterPlugin *>(plugin->instance()); + if(instance == nullptr) { + ret.error = "Unable to cast"; + delete plugin; + return ret; + } + + m_formats[format] = PluginInfo{ plugin, instance }; + ret.loaded = true; + return ret; + } + const auto formats() const { return m_formats.keys(); |