/* * This file is part of smolbote. It's copyrighted by the contributors recorded * in the version control history of the file, available from its original * location: https://library.iserlohn-fortress.net/aqua/smolbote.git * * SPDX-License-Identifier: GPL-3.0 */ #ifndef SMOLBOTE_SMOLBLOK_HPP #define SMOLBOTE_SMOLBLOK_HPP #include "filtermanager.hpp" #include #include #include class smolblok { public: smolblok() = default; ~smolblok() { for(auto &plugin : m_formats) { delete plugin.loader; } } 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(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(); } bool addSubscriptions(const QString &filename); QWebEngineUrlRequestInterceptor *interceptor() { return &m_subscriptions; } private: struct PluginInfo { QPluginLoader *loader = nullptr; FilterPlugin *instance = nullptr; }; QHash m_formats; FilterManager m_subscriptions; }; #endif // SMOLBOTE_SMOLBLOK_HPP