summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTannin <sherb@gmx.net>2015-11-23 21:43:37 +0100
committerTannin <sherb@gmx.net>2015-11-23 21:43:37 +0100
commitdda9e1197670cddb69789cc9a179d09cd8e560a6 (patch)
treed9b1f5460a46df21105ff4a008b729ebaddf62b2
parent9945b5e92629027da1ef17b1ae1460729102b374 (diff)
added interface for file mapping plugins
-rw-r--r--src/organizercore.cpp10
-rw-r--r--src/plugincontainer.cpp8
-rw-r--r--src/plugincontainer.h4
-rw-r--r--src/usvfsconnector.h10
4 files changed, 20 insertions, 12 deletions
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index a5dc393d..83d468ef 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -1563,10 +1563,18 @@ void OrganizerCore::prepareStart() {
std::vector<Mapping> OrganizerCore::fileMapping()
{
IPluginGame *game = qApp->property("managed_game").value<IPluginGame *>();
- return fileMapping(
+ MappingType result = fileMapping(
QDir::toNativeSeparators(game->dataDirectory().absolutePath()),
"\\",
directoryStructure(), directoryStructure());
+
+ for (MOBase::IPluginFileMapper *mapper : m_PluginContainer->plugins<MOBase::IPluginFileMapper>()) {
+ MappingType pluginMap = mapper->mappings();
+ result.reserve(result.size() + pluginMap.size());
+ result.insert(result.end(), pluginMap.begin(), pluginMap.end());
+ }
+
+ return result;
}
std::vector<Mapping> OrganizerCore::fileMapping(
diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp
index 7a059cd1..a594f703 100644
--- a/src/plugincontainer.cpp
+++ b/src/plugincontainer.cpp
@@ -87,7 +87,7 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName)
m_Organizer->settings().registerPlugin(pluginObj);
}
- { // diagnosis plugins
+ { // diagnosis plugin
IPluginDiagnose *diagnose = qobject_cast<IPluginDiagnose*>(plugin);
if (diagnose != nullptr) {
bf::at_key<IPluginDiagnose>(m_Plugins).push_back(diagnose);
@@ -96,6 +96,12 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName)
);
}
}
+ { // file mapper plugin
+ IPluginFileMapper *mapper = qobject_cast<IPluginFileMapper*>(plugin);
+ if (mapper != nullptr) {
+ bf::at_key<IPluginFileMapper>(m_Plugins).push_back(mapper);
+ }
+ }
{ // mod page plugin
IPluginModPage *modPage = qobject_cast<IPluginModPage*>(plugin);
if (verifyPlugin(modPage)) {
diff --git a/src/plugincontainer.h b/src/plugincontainer.h
index 02978e3e..70392d0b 100644
--- a/src/plugincontainer.h
+++ b/src/plugincontainer.h
@@ -10,6 +10,7 @@
#include <iplugintool.h>
#include <ipluginproxy.h>
#include <iplugininstaller.h>
+#include <ipluginfilemapper.h>
#include <QtPlugin>
#include <QPluginLoader>
#include <QFile>
@@ -36,7 +37,8 @@ private:
boost::fusion::pair<MOBase::IPluginModPage, std::vector<MOBase::IPluginModPage*>>,
boost::fusion::pair<MOBase::IPluginPreview, std::vector<MOBase::IPluginPreview*>>,
boost::fusion::pair<MOBase::IPluginTool, std::vector<MOBase::IPluginTool*>>,
- boost::fusion::pair<MOBase::IPluginProxy, std::vector<MOBase::IPluginProxy*>>
+ boost::fusion::pair<MOBase::IPluginProxy, std::vector<MOBase::IPluginProxy*>>,
+ boost::fusion::pair<MOBase::IPluginFileMapper, std::vector<MOBase::IPluginFileMapper*>>
> PluginMap;
static const unsigned int PROBLEM_PLUGINSNOTLOADED = 1;
diff --git a/src/usvfsconnector.h b/src/usvfsconnector.h
index beec5acc..78bb7a49 100644
--- a/src/usvfsconnector.h
+++ b/src/usvfsconnector.h
@@ -23,21 +23,13 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <usvfs.h>
+#include <filemapping.h>
#include <QString>
#include <QThread>
#include <QFile>
#include <QDebug>
-struct Mapping {
- QString source;
- QString destination;
- bool isDirectory;
-};
-
-typedef std::vector<Mapping> MappingType;
-
-
class LogWorker : public QThread {
Q_OBJECT