Plugin system for bible backends and various tweaks to plugin code included debug...
[kworship.git] / kworship / KwPluginManager.cpp
blob936369fc01e04b6cb2929a5f285dd06e9da5fbd7
1 /***************************************************************************
2 * This file is part of KWorship. *
3 * Copyright 2008 James Hogan <james@albanarts.com> *
4 * *
5 * KWorship is free software: you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation, either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * KWorship is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with KWorship. If not, write to the Free Software Foundation, *
17 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
18 ***************************************************************************/
20 /**
21 * @file KwPluginManager.cpp
22 * @brief Manages KWorship plugins.
23 * @author James Hogan <james@albanarts.com>
26 #include "KwPluginManager.h"
27 #include "KwPlugin.h"
29 #include <KServiceTypeTrader>
32 * Constructors + destructor
35 /// Primary constructor.
36 KwPluginManager::KwPluginManager()
37 : m_plugins()
41 /// Destructor.
42 KwPluginManager::~KwPluginManager()
44 foreach (KwPlugin* plugin, m_plugins)
46 plugin->unload();
47 delete plugin;
52 * Plugin loading and unloading
55 /// Directly load a plugin.
56 bool KwPluginManager::loadPlugin(KwPlugin* plugin)
58 const QString& id = plugin->id();
59 Q_ASSERT(!plugin->isLoaded());
60 if (!m_plugins.contains(id))
62 m_plugins[id] = plugin;
63 plugin->load();
64 return true;
66 return false;
69 #include <QtDebug>
70 /// Load all plugins.
71 void KwPluginManager::loadPlugins()
73 KService::List offers = KServiceTypeTrader::self()->query("KWorship/Plugin");
75 foreach (KService::Ptr service, offers)
77 qDebug() << "Found KWorship plugin: " << service->desktopEntryName();
78 QString err;
79 KwPlugin* plugin = service->createInstance<KwPlugin>(this, QVariantList(), &err);
80 if (plugin)
82 bool loaded = loadPlugin(plugin);
83 if (loaded)
85 qDebug() << " Loaded successfully";
87 else
89 qDebug() << " Could not be initialised";
92 else
94 qDebug() << " Could not be loaded: " << err;