// execute script, returns -1 if script doesn't exist int XBPython::evalString(const CStdString &src, const std::vector<CStdString> &argv) { CLog::Log(LOGDEBUG, "XBPython::evalString (python)"); CSingleLock lock(m_critSection); Initialize(); if (!m_bInitialized) { CLog::Log(LOGERROR, "XBPython::evalString, python not initialized (python)"); return -1; } // Previous implementation would create a new thread for every script m_nextid++; XBPyThread *pyThread = new XBPyThread(this, m_nextid); pyThread->setArgv(argv); pyThread->evalString(src); PyElem inf; inf.id = m_nextid; inf.bDone = false; inf.strFile = "<string>"; inf.pyThread = pyThread; m_vecPyList.push_back(inf); return m_nextid; }
// execute script, returns -1 if script doesn't exist int XBPython::evalFile(const CStdString &src, const std::vector<CStdString> &argv, ADDON::AddonPtr addon) { CSingleExit ex(g_graphicsContext); CSingleLock lock(m_critSection); // return if file doesn't exist if (!XFILE::CFile::Exists(src)) { CLog::Log(LOGERROR, "Python script \"%s\" does not exist", CSpecialProtocol::TranslatePath(src).c_str()); return -1; } // check if locked if (g_settings.GetCurrentProfile().programsLocked() && !g_passwordManager.IsMasterLockUnlocked(true)) return -1; Initialize(); if (!m_bInitialized) return -1; m_nextid++; XBPyThread *pyThread = new XBPyThread(this, m_nextid); pyThread->setArgv(argv); pyThread->setAddon(addon); pyThread->evalFile(src); PyElem inf; inf.id = m_nextid; inf.bDone = false; inf.strFile = src; inf.pyThread = pyThread; m_vecPyList.push_back(inf); return m_nextid; }
// execute script, returns -1 if script doesn't exist int XBPython::evalString(const char *src, const unsigned int argc, const char ** argv) { CLog::Log(LOGDEBUG, "XBPython::evalString (python)"); CSingleLock lock(m_critSection); Initialize(); if (!m_bInitialized) { CLog::Log(LOGERROR, "XBPython::evalString, python not initialized (python)"); return -1; } // Previous implementation would create a new thread for every script nextid++; XBPyThread *pyThread = new XBPyThread(this, mainThreadState, nextid); if (argv != NULL) pyThread->setArgv(argc, argv); pyThread->evalString(src); PyElem inf; inf.id = nextid; inf.bDone = false; inf.strFile = "<string>"; inf.pyThread = pyThread; vecPyList.push_back(inf); return nextid; }
// execute script, returns -1 if script doesn't exist int XBPython::evalFile(const char *src, const unsigned int argc, const char ** argv) { CStdString srcStr = _P(src); // return if file doesn't exist if(access(srcStr.c_str(), 0) == -1) return -1; // check if locked if (g_settings.m_vecProfiles[g_settings.m_iLastLoadedProfileIndex].programsLocked() && g_settings.m_vecProfiles[0].getLockMode() != LOCK_MODE_EVERYONE) if (!g_passwordManager.IsMasterLockUnlocked(true)) return -1; Initialize(); if (!m_bInitialized) return -1; nextid++; XBPyThread *pyThread = new XBPyThread(this, nextid); if (argv != NULL) pyThread->setArgv(argc, argv); pyThread->evalFile(srcStr.c_str()); PyElem inf; inf.id = nextid; inf.bDone = false; inf.strFile = srcStr.c_str(); inf.pyThread = pyThread; EnterCriticalSection(&m_critSection ); vecPyList.push_back(inf); LeaveCriticalSection(&m_critSection ); return nextid; }
// execute script, returns -1 if script doesn't exist int XBPython::evalFile(const char *src, const unsigned int argc, const char ** argv) { CSingleExit ex(g_graphicsContext); CSingleLock lock(m_critSection); // return if file doesn't exist if (!XFILE::CFile::Exists(src)) { CLog::Log(LOGERROR, "Python script \"%s\" does not exist", CSpecialProtocol::TranslatePath(src).c_str()); return -1; } // check if locked if (g_settings.GetCurrentProfile().programsLocked() && !g_passwordManager.IsMasterLockUnlocked(true)) return -1; Initialize(); if (!m_bInitialized) return -1; nextid++; XBPyThread *pyThread = new XBPyThread(this, mainThreadState, nextid); if (argv != NULL) pyThread->setArgv(argc, argv); pyThread->evalFile(src); PyElem inf; inf.id = nextid; inf.bDone = false; inf.strFile = src; inf.pyThread = pyThread; vecPyList.push_back(inf); return nextid; }