int CScriptInvocationManager::Execute(const std::string &script, const ADDON::AddonPtr &addon /* = ADDON::AddonPtr() */, const std::vector<std::string> &arguments /* = std::vector<std::string>() */) { if (script.empty() || !CFile::Exists(script, false)) return -1; ILanguageInvoker *invoker = GetLanguageInvoker(script); if (invoker == NULL) return -1; CLanguageInvokerThreadPtr invokerThread = CLanguageInvokerThreadPtr(new CLanguageInvokerThread(invoker, this)); if (invokerThread == NULL) return -1; if (addon != NULL) invokerThread->SetAddon(addon); CSingleLock lock(m_critSection); invokerThread->SetId(m_nextId++); lock.Leave(); LanguageInvokerThread thread = { invokerThread, script, false }; m_scripts.insert(make_pair(invokerThread->GetId(), thread)); m_scriptPaths.insert(make_pair(script, invokerThread->GetId())); invokerThread->Execute(script, arguments); return invokerThread->GetId(); }
int CScriptInvocationManager::ExecuteAsync(const std::string &script, LanguageInvokerPtr languageInvoker, const ADDON::AddonPtr &addon /* = ADDON::AddonPtr() */, const std::vector<std::string> &arguments /* = std::vector<std::string>() */) { if (script.empty() || languageInvoker == NULL) return -1; if (!CFile::Exists(script, false)) { CLog::Log(LOGERROR, "%s - Not executing non-existing script %s", __FUNCTION__, script.c_str()); return -1; } CLanguageInvokerThreadPtr invokerThread = CLanguageInvokerThreadPtr(new CLanguageInvokerThread(languageInvoker, this)); if (invokerThread == NULL) return -1; if (addon != NULL) invokerThread->SetAddon(addon); CSingleLock lock(m_critSection); invokerThread->SetId(m_nextId++); lock.Leave(); LanguageInvokerThread thread = { invokerThread, script, false }; m_scripts.insert(std::make_pair(invokerThread->GetId(), thread)); m_scriptPaths.insert(std::make_pair(script, invokerThread->GetId())); invokerThread->Execute(script, arguments); return invokerThread->GetId(); }