Skip to content

Commit dda9e11

Browse files
committed
added interface for file mapping plugins
1 parent 9945b5e commit dda9e11

File tree

4 files changed

+20
-12
lines changed

4 files changed

+20
-12
lines changed

src/organizercore.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1563,10 +1563,18 @@ void OrganizerCore::prepareStart() {
15631563
std::vector<Mapping> OrganizerCore::fileMapping()
15641564
{
15651565
IPluginGame *game = qApp->property("managed_game").value<IPluginGame *>();
1566-
return fileMapping(
1566+
MappingType result = fileMapping(
15671567
QDir::toNativeSeparators(game->dataDirectory().absolutePath()),
15681568
"\\",
15691569
directoryStructure(), directoryStructure());
1570+
1571+
for (MOBase::IPluginFileMapper *mapper : m_PluginContainer->plugins<MOBase::IPluginFileMapper>()) {
1572+
MappingType pluginMap = mapper->mappings();
1573+
result.reserve(result.size() + pluginMap.size());
1574+
result.insert(result.end(), pluginMap.begin(), pluginMap.end());
1575+
}
1576+
1577+
return result;
15701578
}
15711579

15721580
std::vector<Mapping> OrganizerCore::fileMapping(

src/plugincontainer.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName)
8787
m_Organizer->settings().registerPlugin(pluginObj);
8888
}
8989

90-
{ // diagnosis plugins
90+
{ // diagnosis plugin
9191
IPluginDiagnose *diagnose = qobject_cast<IPluginDiagnose*>(plugin);
9292
if (diagnose != nullptr) {
9393
bf::at_key<IPluginDiagnose>(m_Plugins).push_back(diagnose);
@@ -96,6 +96,12 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName)
9696
);
9797
}
9898
}
99+
{ // file mapper plugin
100+
IPluginFileMapper *mapper = qobject_cast<IPluginFileMapper*>(plugin);
101+
if (mapper != nullptr) {
102+
bf::at_key<IPluginFileMapper>(m_Plugins).push_back(mapper);
103+
}
104+
}
99105
{ // mod page plugin
100106
IPluginModPage *modPage = qobject_cast<IPluginModPage*>(plugin);
101107
if (verifyPlugin(modPage)) {

src/plugincontainer.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <iplugintool.h>
1111
#include <ipluginproxy.h>
1212
#include <iplugininstaller.h>
13+
#include <ipluginfilemapper.h>
1314
#include <QtPlugin>
1415
#include <QPluginLoader>
1516
#include <QFile>
@@ -36,7 +37,8 @@ class PluginContainer : public QObject, public MOBase::IPluginDiagnose
3637
boost::fusion::pair<MOBase::IPluginModPage, std::vector<MOBase::IPluginModPage*>>,
3738
boost::fusion::pair<MOBase::IPluginPreview, std::vector<MOBase::IPluginPreview*>>,
3839
boost::fusion::pair<MOBase::IPluginTool, std::vector<MOBase::IPluginTool*>>,
39-
boost::fusion::pair<MOBase::IPluginProxy, std::vector<MOBase::IPluginProxy*>>
40+
boost::fusion::pair<MOBase::IPluginProxy, std::vector<MOBase::IPluginProxy*>>,
41+
boost::fusion::pair<MOBase::IPluginFileMapper, std::vector<MOBase::IPluginFileMapper*>>
4042
> PluginMap;
4143

4244
static const unsigned int PROBLEM_PLUGINSNOTLOADED = 1;

src/usvfsconnector.h

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,13 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
2323

2424

2525
#include <usvfs.h>
26+
#include <filemapping.h>
2627
#include <QString>
2728
#include <QThread>
2829
#include <QFile>
2930
#include <QDebug>
3031

3132

32-
struct Mapping {
33-
QString source;
34-
QString destination;
35-
bool isDirectory;
36-
};
37-
38-
typedef std::vector<Mapping> MappingType;
39-
40-
4133
class LogWorker : public QThread {
4234

4335
Q_OBJECT

0 commit comments

Comments
 (0)