wxString GUI::GetExtensionsDirectory() { std::string cfg_str = g_settings.getString(Config::EXTENSIONS_DIRECTORY); if(cfg_str.size()) { FileName dir; dir.Assign(wxstr(cfg_str)); wxString path; if(dir.DirExists()) { path = dir.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR); return path; } } // Silently reset directory FileName local_directory = GetLocalDirectory(); local_directory.AppendDir(wxT("extensions")); local_directory.Mkdir(0755, wxPATH_MKDIR_FULL); return local_directory.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR); }
bool cPlugin_NewLua::Initialize(void) { cCSLock Lock(m_CriticalSection); if (m_LuaState == NULL) { m_LuaState = lua_open(); luaL_openlibs(m_LuaState); tolua_AllToLua_open(m_LuaState); ManualBindings::Bind(m_LuaState); luaopen_lsqlite3(m_LuaState); luaopen_lxp(m_LuaState); // Inject the identification global variables into the state: lua_pushlightuserdata(m_LuaState, this); lua_setglobal(m_LuaState, LUA_PLUGIN_INSTANCE_VAR_NAME); lua_pushstring(m_LuaState, GetName().c_str()); lua_setglobal(m_LuaState, LUA_PLUGIN_NAME_VAR_NAME); } std::string PluginPath = FILE_IO_PREFIX + GetLocalDirectory() + "/"; // Load all files for this plugin, and execute them AStringList Files = GetDirectoryContents(PluginPath.c_str()); for (AStringList::const_iterator itr = Files.begin(); itr != Files.end(); ++itr) { if (itr->rfind(".lua") == AString::npos) { continue; } AString Path = PluginPath + *itr; int s = luaL_loadfile(m_LuaState, Path.c_str() ); if( report_errors( m_LuaState, s ) ) { LOGERROR("Can't load plugin %s because of an error in file %s", GetLocalDirectory().c_str(), Path.c_str() ); lua_close( m_LuaState ); m_LuaState = 0; return false; } s = lua_pcall(m_LuaState, 0, LUA_MULTRET, 0); if( report_errors( m_LuaState, s ) ) { LOGERROR("Error in plugin %s in file %s", GetLocalDirectory().c_str(), Path.c_str() ); lua_close( m_LuaState ); m_LuaState = 0; return false; } } // for itr - Files[] // Call intialize function if (!PushFunction("Initialize")) { lua_close( m_LuaState ); m_LuaState = 0; return false; } tolua_pushusertype(m_LuaState, this, "cPlugin_NewLua"); if (!CallFunction(1, 1, "Initialize")) { lua_close( m_LuaState ); m_LuaState = 0; return false; } if( !lua_isboolean( m_LuaState, -1 ) ) { LOGWARN("Error in plugin %s Initialize() must return a boolean value!", GetLocalDirectory().c_str() ); lua_close( m_LuaState ); m_LuaState = 0; return false; } bool bSuccess = (tolua_toboolean(m_LuaState, -1, 0) > 0); return bSuccess; }