--- a/hardware/OpenZWave.cpp +++ b/hardware/OpenZWave.cpp @@ -993,7 +993,7 @@ bool COpenZWave::OpenSerialConnector() } m_nodes.clear(); m_bNeedSave = false; - std::string ConfigPath = szStartupFolder + "Config/"; + std::string ConfigPath = "/usr/share/domoticz/openzwave/"; std::string UserPath = ConfigPath; if (szStartupFolder != szUserDataFolder) { --- a/main/EventSystem.cpp +++ b/main/EventSystem.cpp @@ -44,7 +44,7 @@ extern "C" { using namespace boost::python; #endif -extern std::string szUserDataFolder; +extern std::string szScriptsFolder; CEventSystem::CEventSystem(void) { @@ -1086,9 +1086,9 @@ void CEventSystem::EvaluateEvent(const s std::stringstream lua_DirT; #ifdef WIN32 - lua_DirT << szUserDataFolder << "scripts\\lua\\"; + lua_DirT << szScriptsFolder << "lua\\"; #else - lua_DirT << szUserDataFolder << "scripts/lua/"; + lua_DirT << szScriptsFolder << "lua/"; #endif std::string lua_Dir = lua_DirT.str(); @@ -1139,9 +1139,9 @@ void CEventSystem::EvaluateEvent(const s { std::stringstream python_DirT; #ifdef WIN32 - python_DirT << szUserDataFolder << "scripts\\python\\"; + python_DirT << szScriptsFolder << "python\\"; #else - python_DirT << szUserDataFolder << "scripts/python/"; + python_DirT << szScriptsFolder << "python/"; #endif std::string python_Dir = python_DirT.str(); @@ -2021,7 +2021,7 @@ bool CEventSystem::parseBlocklyActions(c } #if !defined WIN32 if (sPath.find("/") != 0) - sPath = szUserDataFolder + "scripts/" + sPath; + sPath = szScriptsFolder + sPath; #endif m_sql.AddTaskItem(_tTaskItem::ExecuteScript(1, sPath, sParam)); @@ -2133,9 +2133,9 @@ void CEventSystem::EvaluatePython(const std::stringstream python_DirT; #ifdef WIN32 - python_DirT << szUserDataFolder << "scripts\\python\\"; + python_DirT << szScriptsFolder << "python\\"; #else - python_DirT << szUserDataFolder << "scripts/python/"; + python_DirT << szScriptsFolder << "python/"; #endif std::string python_Dir = python_DirT.str(); if(!Py_IsInitialized()) { @@ -3909,9 +3909,9 @@ namespace http { std::stringstream template_file; #ifdef WIN32 - template_file << szUserDataFolder << "scripts\\templates\\" << eventType << "." << interpreter; + template_file << szScriptsFolder << "templates\\" << eventType << "." << interpreter; #else - template_file << szUserDataFolder << "scripts/templates/" << eventType << "." << interpreter; + template_file << szScriptsFolder << "templates/" << eventType << "." << interpreter; #endif std::ifstream file; std::stringstream template_content; --- a/main/LuaHandler.cpp +++ b/main/LuaHandler.cpp @@ -22,7 +22,7 @@ extern "C" { #include "mainworker.h" #include "../hardware/hardwaretypes.h" -extern std::string szUserDataFolder; +extern std::string szScriptsFolder; int CLuaHandler::l_domoticz_applyXPath(lua_State* lua_state) { @@ -319,9 +319,9 @@ bool CLuaHandler::executeLuaScript(const { std::stringstream lua_DirT; #ifdef WIN32 - lua_DirT << szUserDataFolder << "scripts\\lua_parsers\\"; + lua_DirT << szScriptsFolder << "lua_parsers\\"; #else - lua_DirT << szUserDataFolder << "scripts/lua_parsers/"; + lua_DirT << szScriptsFolder << "lua_parsers/"; #endif std::string lua_Dir = lua_DirT.str(); --- a/main/SQLHelper.cpp +++ b/main/SQLHelper.cpp @@ -612,6 +612,7 @@ const char *sqlCreateMobileDevices = "[LastUpdate] DATETIME DEFAULT(datetime('now', 'localtime'))" ");"; +extern std::string szScriptsFolder; extern std::string szUserDataFolder; CSQLHelper::CSQLHelper(void) @@ -3408,9 +3409,9 @@ unsigned long long CSQLHelper::UpdateVal //Execute possible script std::string scriptname; #ifdef WIN32 - scriptname = szUserDataFolder + "scripts\\domoticz_main.bat"; + scriptname = szScriptsFolder + "domoticz_main.bat"; #else - scriptname = szUserDataFolder + "scripts/domoticz_main"; + scriptname = szScriptsFolder + "domoticz_main"; #endif if (file_exist(scriptname.c_str())) { @@ -6460,7 +6461,7 @@ bool CSQLHelper::HandleOnOffAction(const std::string scriptname = OnAction.substr(9); #if !defined WIN32 if (scriptname.find("/") != 0) - scriptname = szUserDataFolder + "scripts/" + scriptname; + scriptname = szScriptsFolder + scriptname; #endif std::string scriptparams=""; //Add parameters @@ -6492,7 +6493,7 @@ bool CSQLHelper::HandleOnOffAction(const std::string scriptname = OffAction.substr(9); #if !defined WIN32 if (scriptname.find("/") != 0) - scriptname = szUserDataFolder + "scripts/" + scriptname; + scriptname = szScriptsFolder + scriptname; #endif std::string scriptparams=""; int pindex=scriptname.find(' '); --- a/main/WebServer.cpp +++ b/main/WebServer.cpp @@ -55,6 +55,7 @@ #define round(a) ( int ) ( a + .5 ) +extern std::string szScriptsFolder; extern std::string szUserDataFolder; extern std::string szWWWFolder; @@ -2614,9 +2615,9 @@ namespace http { if (scriptname.find("..") != std::string::npos) return; #ifdef WIN32 - scriptname = szUserDataFolder + "scripts\\" + scriptname; + scriptname = szScriptsFolder + scriptname; #else - scriptname = szUserDataFolder + "scripts/" + scriptname; + scriptname = szScriptsFolder + scriptname; #endif if (!file_exist(scriptname.c_str())) return; --- a/main/domoticz.cpp +++ b/main/domoticz.cpp @@ -135,6 +135,7 @@ static const _facilities facilities[] = }; std::string logfacname = "user"; #endif +std::string szScriptsFolder; std::string szStartupFolder; std::string szUserDataFolder; std::string szWWWFolder; @@ -603,6 +604,19 @@ int main(int argc, char**argv) szUserDataFolder = szroot; } + szScriptsFolder=szStartupFolder; + if (cmdLine.HasSwitch("-scripts")) + { + if (cmdLine.GetArgumentCount("-scripts") != 1) + { + _log.Log(LOG_ERROR, "Please specify a path for scripts directory"); + return 1; + } + std::string szroot = cmdLine.GetSafeArgument("-scripts", 0, ""); + if (szroot.size() != 0) + szScriptsFolder = szroot; + } + if (cmdLine.HasSwitch("-startupdelay")) { if (cmdLine.GetArgumentCount("-startupdelay") != 1) --- a/main/mainworker.cpp +++ b/main/mainworker.cpp @@ -139,6 +139,7 @@ #define round(a) ( int ) ( a + .5 ) +extern std::string szScriptsFolder; extern std::string szStartupFolder; extern std::string szUserDataFolder; extern std::string szWWWFolder; @@ -1394,8 +1395,8 @@ void MainWorker::Do_Work() m_sql.GetPreferencesVar("ReleaseChannel", nValue); bool bIsBetaChannel = (nValue != 0); - std::string scriptname = szUserDataFolder + "scripts/download_update.sh"; - std::string strparm = szUserDataFolder; + std::string scriptname = szScriptsFolder + "download_update.sh"; + std::string strparm = szScriptsFolder; if (bIsBetaChannel) strparm += " /beta"; --- a/notifications/NotificationHTTP.cpp +++ b/notifications/NotificationHTTP.cpp @@ -6,7 +6,7 @@ #include "../main/SQLHelper.h" #include "../main/Logger.h" -extern std::string szUserDataFolder; +extern std::string szScriptsFolder; CNotificationHTTP::CNotificationHTTP() : CNotificationBase(std::string("http"), OPTIONS_NONE) { @@ -97,7 +97,7 @@ bool CNotificationHTTP::SendMessageImple std::string scriptparams = ""; #if !defined WIN32 if (scriptname.find("/") != 0) - scriptname = szUserDataFolder + "scripts/" + scriptname; + scriptname = szScriptsFolder + scriptname; #endif //Add parameters uPos = scriptname.find(" "); --- a/push/GooglePubSubPush.cpp +++ b/push/GooglePubSubPush.cpp @@ -20,7 +20,7 @@ extern "C" { using namespace boost::python; #endif -extern std::string szUserDataFolder; +extern std::string szScriptsFolder; // this should be filled in by the preprocessor extern const char * Python_exe; @@ -222,11 +222,11 @@ void CGooglePubSubPush::DoGooglePubSubPu #ifdef ENABLE_PYTHON #ifdef WIN32 - python_DirT << szUserDataFolder << "scripts\\python\\"; - std::string filename = szUserDataFolder + "scripts\\python\\" + "googlepubsub.py"; + python_DirT << szScriptsFolder << "python\\"; + std::string filename = szScriptsFolder + "python\\" + "googlepubsub.py"; #else - python_DirT << szUserDataFolder << "scripts/python/"; - std::string filename = szUserDataFolder + "scripts/python/" + "googlepubsub.py"; + python_DirT << szScriptsFolder << "python/"; + std::string filename = szScriptsFolder + "python/" + "googlepubsub.py"; #endif char * argv[1];