20 #include "total99resources.h"
22 #include <QApplication>
26 #include <QPluginLoader>
27 #include <QStringList>
31 #include <QStringList>
32 #include "configurationparameters.h"
34 #include "farsaplugin.h"
35 #include "evorobotviewer.h"
37 #include "dependencysorter.h"
48 #pragma warning(disable:4996)
55 if ( QFile::exists(
confUserPath +
"/" + resourceName ) ) {
63 if ( QFile::exists(
confBasePath +
"/" + resourceName ) ) {
91 FarsaPlugin* plugin = loadSinglePlugin(filename, &errorString);
107 QMap<QString, FarsaPlugin*> loadedDependencies;
108 while (!dependenciesToLoad.empty()) {
110 QString curDep = dependenciesToLoad.takeFirst();
113 if (loadedDependencies.contains(curDep)) {
118 loadedDependencies[curDep] = loadSinglePlugin(curDep, &errorString);
119 if (loadedDependencies[curDep] == NULL) {
127 QStringList newDependencies = loadedDependencies[curDep]->getDependencies();
128 pluginDependencies.
add(curDep, newDependencies);
129 foreach (QString d, newDependencies) {
130 dependenciesToLoad.append(d);
137 QStringList sortedDependencies = pluginDependencies.
sort();
138 foreach (QString d, sortedDependencies) {
139 loadedDependencies[d]->registerTypesOnFactory();
142 Logger::error(
"ERROR LOADING PLUGIN: circular dependency found");
151 SetDllDirectory(NULL);
159 foreach (QString pluginfile, dir.entryList()) {
160 if (!QLibrary::isLibrary(pluginfile)) {
165 QRegExp r(
".*farsaPlugin.*");
166 if (r.indexIn(pluginfile) == -1) {
169 if (
loadPlugin(dir.absoluteFilePath(pluginfile))) {
179 foreach (QString param, plugins) {
180 QString value = params.
getValue(
"TOTAL99/" + param);
181 if (!QFileInfo(value).isFile()) {
184 if (!QFileInfo(value).isFile()) {
194 foreach( QString param, pluginPaths ) {
195 QString value = params.
getValue(
"TOTAL99/"+param );
196 if ( ! QFileInfo( value ).isDir() ) {
197 Logger::warning(
"Ignoring un-existing plugin path \"" + value +
"\"" );
209 confBasePath = qApp->applicationDirPath() +
"/../share/FARSA/conf";
212 pluginBasePath = qApp->applicationDirPath() +
"/../lib/FARSA/plugins";
214 confUserPath = QString(getenv(
"HOME")) +
"/.FARSA/total99";
219 confUserPath = QString(getenv(
"HOME")) +
"/Library/Application Support/FARSA/Total99";
224 confUserPath = QString(getenv(
"APPDATA")) +
"/FARSA/Total99";
247 FarsaPlugin* Total99Resources::loadSinglePlugin(QString filename, QString* errorString)
249 if (!QFileInfo(filename).isFile()) {
254 QPluginLoader loader(filename);
256 if ((plugin == NULL) && (errorString != NULL)) {
257 *errorString =
"Error trying to load \"" + filename +
"\", reason: " + loader.errorString();
266 #if defined(_MSC_VER)