aboutsummaryrefslogtreecommitdiff
path: root/staging/smolblok/smolblok.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'staging/smolblok/smolblok.hpp')
-rw-r--r--staging/smolblok/smolblok.hpp34
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();