@@ -17,29 +17,39 @@ bool PluginManager::PluginExists(std::string plugin_name)
1717 return (pluginsMap.find (plugin_name) != pluginsMap.end ());
1818}
1919
20- void PluginManager::LoadPlugins ()
20+ void PluginManager::LoadPlugins (std::string directory )
2121{
22- if (!Files::ExistsPath (" addons/swiftly/plugins" ))
23- Files::CreateDirectory (" addons/swiftly/plugins" );
22+ std::string baseDir = " addons/swiftly/plugins" + directory;
23+ if (!Files::ExistsPath (baseDir))
24+ Files::CreateDirectory (baseDir);
2425
25- std::vector<std::string> plugins = Files::FetchDirectories (" addons/swiftly/plugins " );
26+ std::vector<std::string> plugins = Files::FetchDirectories (baseDir );
2627 for (std::string folder : plugins)
2728 {
2829 // Skips over disabled
2930 if (folder.find (" disabled" ) != std::string::npos)
3031 continue ;
3132
32- folder = replace (folder, " addons/swiftly/plugins" , " " );
33- std::string plugin_name = replace (folder, WIN_LINUX (" \\ " , " /" ), " " );
33+ auto directory_name = explode (folder, WIN_LINUX (" \\ " , " /" )).back ();
3434
35- LoadPlugin (plugin_name);
35+ if (directory_name.find (" [" ) != std::string::npos)
36+ LoadPlugins (directory + " /" + directory_name);
37+ else
38+ {
39+ folder = replace (folder, baseDir, " " );
40+ std::string plugin_name = replace (folder, WIN_LINUX (" \\ " , " /" ), " " );
41+
42+ pluginBasePaths[plugin_name] = baseDir;
43+
44+ LoadPlugin (plugin_name);
45+ }
3646 }
3747}
3848
3949void PluginManager::UnloadPlugins ()
4050{
4151 std::vector<std::string> pluginNames;
42- for (Plugin * plugin : pluginsList)
52+ for (Plugin* plugin : pluginsList)
4353 pluginNames.push_back (plugin->GetName ());
4454
4555 for (std::string plugin_name : pluginNames)
@@ -51,11 +61,11 @@ void PluginManager::LoadPlugin(std::string plugin_name)
5161 if (PluginExists (plugin_name))
5262 return ;
5363
54- std::vector<std::string> files = Files::FetchFileNames (" addons/swiftly/plugins /" + plugin_name);
64+ std::vector<std::string> files = Files::FetchFileNames (pluginBasePaths[plugin_name] + " /" + plugin_name);
5565 if (files.size () == 0 )
5666 return ;
5767
58- Plugin * plugin = nullptr ;
68+ Plugin* plugin = nullptr ;
5969
6070 for (std::string file : files)
6171 {
@@ -73,15 +83,15 @@ void PluginManager::LoadPlugin(std::string plugin_name)
7383 }
7484
7585 pluginsList.push_back (plugin);
76- pluginsMap.insert ({plugin_name, plugin});
86+ pluginsMap.insert ({ plugin_name, plugin });
7787}
7888
7989void PluginManager::UnloadPlugin (std::string plugin_name)
8090{
8191 if (!PluginExists (plugin_name))
8292 return ;
8393
84- Plugin * plugin = pluginsMap.at (plugin_name);
94+ Plugin* plugin = pluginsMap.at (plugin_name);
8595
8696 auto it = std::find (pluginsList.begin (), pluginsList.end (), plugin);
8797 if (it != pluginsList.end ())
@@ -93,7 +103,7 @@ void PluginManager::UnloadPlugin(std::string plugin_name)
93103
94104void PluginManager::StartPlugins ()
95105{
96- for (Plugin * plugin : pluginsList)
106+ for (Plugin* plugin : pluginsList)
97107 if (!StartPlugin (plugin->GetName ()))
98108 StopPlugin (plugin->GetName ());
99109
@@ -102,15 +112,15 @@ void PluginManager::StartPlugins()
102112
103113 msgpack::pack (ss, eventData);
104114
105- PluginEvent * event = new PluginEvent (" core" , nullptr , nullptr );
115+ PluginEvent* event = new PluginEvent (" core" , nullptr , nullptr );
106116 this ->ExecuteEvent (" core" , " OnAllPluginsLoaded" , ss.str (), event);
107117 delete event;
108118 AllPluginsStarted = true ;
109119}
110120
111121void PluginManager::StopPlugins ()
112122{
113- for (Plugin * plugin : pluginsList)
123+ for (Plugin* plugin : pluginsList)
114124 StopPlugin (plugin->GetName ());
115125}
116126
@@ -119,7 +129,7 @@ bool PluginManager::StartPlugin(std::string plugin_name)
119129 if (!PluginExists (plugin_name))
120130 return false ;
121131
122- Plugin * plugin = pluginsMap.at (plugin_name);
132+ Plugin* plugin = pluginsMap.at (plugin_name);
123133 if (plugin->GetPluginState () == PluginState_t::Started)
124134 return true ;
125135
@@ -136,7 +146,7 @@ bool PluginManager::StartPlugin(std::string plugin_name)
136146
137147 msgpack::pack (ss, eventData);
138148
139- PluginEvent * event = new PluginEvent (" core" , nullptr , nullptr );
149+ PluginEvent* event = new PluginEvent (" core" , nullptr , nullptr );
140150 plugin->TriggerEvent (" core" , " OnAllPluginsLoaded" , ss.str (), event);
141151 delete event;
142152 }
@@ -149,7 +159,7 @@ void PluginManager::StopPlugin(std::string plugin_name)
149159 if (!PluginExists (plugin_name))
150160 return ;
151161
152- Plugin * plugin = pluginsMap.at (plugin_name);
162+ Plugin* plugin = pluginsMap.at (plugin_name);
153163 if (plugin->GetPluginState () == PluginState_t::Stopped)
154164 return ;
155165
@@ -160,17 +170,17 @@ void PluginManager::StopPlugin(std::string plugin_name)
160170 g_MenuManager->UnregisterPluginMenus (plugin_name);
161171}
162172
163- Plugin * PluginManager::FetchPlugin (std::string name)
173+ Plugin* PluginManager::FetchPlugin (std::string name)
164174{
165175 if (!PluginExists (name))
166176 return nullptr ;
167177
168178 return pluginsMap.at (name);
169179}
170180
171- EventResult PluginManager::ExecuteEvent (std::string invokedBy, std::string eventName, std::string eventPayload, PluginEvent * event)
181+ EventResult PluginManager::ExecuteEvent (std::string invokedBy, std::string eventName, std::string eventPayload, PluginEvent* event)
172182{
173- for (Plugin * plugin : this ->pluginsList )
183+ for (Plugin* plugin : this ->pluginsList )
174184 {
175185 EventResult result = plugin->TriggerEvent (invokedBy, eventName, eventPayload, event);
176186 if (result != EventResult::Continue)
@@ -180,7 +190,7 @@ EventResult PluginManager::ExecuteEvent(std::string invokedBy, std::string event
180190 return EventResult::Continue;
181191}
182192
183- std::vector<Plugin *> PluginManager::GetPluginsList ()
193+ std::vector<Plugin*> PluginManager::GetPluginsList ()
184194{
185195 return this ->pluginsList ;
186196}
0 commit comments