diff --git a/hardware/EvohomeScript.cpp b/hardware/EvohomeScript.cpp index 5258fc55..0a44e97c 100644 --- a/hardware/EvohomeScript.cpp +++ b/hardware/EvohomeScript.cpp @@ -30,7 +30,7 @@ #include -extern std::string szUserDataFolder; +extern std::string szScriptsFolder; CEvohomeScript::CEvohomeScript(const int ID) @@ -143,7 +143,7 @@ void CEvohomeScript::RunScript(const char *pdata, const unsigned char length) std::string scriptname = OnAction.substr(9); #if !defined WIN32 if (scriptname.find("/") != 0) - scriptname = szUserDataFolder + "scripts/" + scriptname; + scriptname = szScriptsFolder + "scripts/" + scriptname; #endif std::string scriptparams=""; //Add parameters diff --git a/hardware/OpenZWave.cpp b/hardware/OpenZWave.cpp index 1f5c341c..24db61c9 100644 --- a/hardware/OpenZWave.cpp +++ b/hardware/OpenZWave.cpp @@ -948,7 +948,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) { diff --git a/main/EventSystem.cpp b/main/EventSystem.cpp index 4eff02fd..f2b17b97 100644 --- a/main/EventSystem.cpp +++ b/main/EventSystem.cpp @@ -33,9 +33,11 @@ extern "C" { #endif } +extern std::string szScriptsFolder; extern std::string szUserDataFolder; extern http::server::CWebServerHelper m_webservers; +static std::string dzv_Dir; static std::string m_printprefix; #ifdef ENABLE_PYTHON @@ -115,7 +117,6 @@ static const _tJsonMap JsonMap[] = { NULL, NULL, tString } }; - CEventSystem::CEventSystem(void) { m_stoprequested = false; @@ -149,7 +150,7 @@ void CEventSystem::StartEventSystem() GetCurrentScenesGroups(); GetCurrentUserVariables(); #ifdef ENABLE_PYTHON - Plugins::PythonEventsInitialize(szUserDataFolder); + Plugins::PythonEventsInitialize(szScriptsFolder); #endif m_thread = boost::shared_ptr(new boost::thread(boost::bind(&CEventSystem::Do_Work, this))); @@ -179,11 +180,11 @@ void CEventSystem::SetEnabled(const bool bEnabled) void CEventSystem::LoadEvents() { - std::string dzv_Dir,s; + std::string s; #ifdef WIN32 - dzv_Dir = szUserDataFolder + "scripts\\dzVents\\generated_scripts\\"; + dzv_Dir = szUserDataFolder + "generated_scripts\\"; #else - dzv_Dir = szUserDataFolder + "scripts/dzVents/generated_scripts/"; + dzv_Dir = szUserDataFolder + "generated_scripts/"; #endif boost::unique_lock eventsMutexLock(m_eventsMutex); _log.Log(LOG_STATUS, "EventSystem: reset all events..."); @@ -274,18 +275,18 @@ void CEventSystem::LoadEvents() void CEventSystem::Do_Work() { #ifdef WIN32 - m_lua_Dir = szUserDataFolder + "scripts\\lua\\"; - m_dzv_Dir = szUserDataFolder + "scripts\\dzVents\\runtime\\"; + m_lua_Dir = szScriptsFolder + "lua\\"; + m_dzv_Dir = szScriptsFolder + "dzVents\\runtime\\"; #else - m_lua_Dir = szUserDataFolder + "scripts/lua/"; - m_dzv_Dir = szUserDataFolder + "scripts/dzVents/runtime/"; + m_lua_Dir = szScriptsFolder + "lua/"; + m_dzv_Dir = szScriptsFolder + "dzVents/runtime/"; #endif #ifdef ENABLE_PYTHON #ifdef WIN32 - m_python_Dir = szUserDataFolder + "scripts\\python\\"; + m_python_Dir = szScriptsFolder + "python\\"; #else - m_python_Dir = szUserDataFolder + "scripts/python/"; + m_python_Dir = szScriptsFolder + "python/"; #endif #endif m_stoprequested = false; @@ -1426,9 +1427,9 @@ void CEventSystem::EvaluateEvent(const std::string &reason, const uint64_t Devic { std::string dzv_scripts; #ifdef WIN32 - dzv_scripts = szUserDataFolder + "scripts\\dzVents\\scripts\\"; + dzv_scripts = szScriptsFolder + "dzVents\\scripts\\"; #else - dzv_scripts = szUserDataFolder + "scripts/dzVents/scripts/"; + dzv_scripts = szScriptsFolder + "dzVents/scripts/"; #endif DirectoryListing(FileEntries, dzv_scripts, false, true); for (itt = FileEntries.begin(); itt != FileEntries.end(); ++itt) @@ -2404,7 +2405,7 @@ bool CEventSystem::parseBlocklyActions(const std::string &Actions, const std::st } #if !defined WIN32 if (sPath.find("/") != 0) - sPath = szUserDataFolder + "scripts/" + sPath; + sPath = szScriptsFolder + sPath; #endif m_sql.AddTaskItem(_tTaskItem::ExecuteScript(0.2f, sPath, sParam)); @@ -3508,13 +3509,16 @@ void CEventSystem::EvaluateLua(const std::string &reason, const std::string &fil { std::stringstream lua_DirT; - lua_DirT << szUserDataFolder << + lua_DirT << szScriptsFolder << #ifdef WIN32 - "scripts\\dzVents\\"; + "dzVents\\"; #else - "scripts/dzVents/"; + "dzVents/"; #endif + lua_pushstring(lua_state, "generated_script_path"); + lua_pushstring(lua_state, dzv_Dir.c_str()); + lua_rawset(lua_state, -3); lua_pushstring(lua_state, "script_path"); lua_pushstring(lua_state, lua_DirT.str().c_str()); lua_rawset(lua_state, -3); @@ -4695,9 +4699,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; diff --git a/main/EventsPythonModule.cpp b/main/EventsPythonModule.cpp index f69e7219..2d97562e 100644 --- a/main/EventsPythonModule.cpp +++ b/main/EventsPythonModule.cpp @@ -108,7 +108,7 @@ int PythonEventsInitalized = 0; - bool PythonEventsInitialize(std::string szUserDataFolder) { + bool PythonEventsInitialize(std::string szScriptsFolder) { if (!Plugins::Py_LoadLibrary()) { @@ -131,9 +131,9 @@ std::string ssPath; #ifdef WIN32 - ssPath = szUserDataFolder + "scripts\\python\\;"; + ssPath = szScriptsFolder + "python\\;"; #else - ssPath = szUserDataFolder + "scripts/python/:"; + ssPath = szScriptsFolder + "python/:"; #endif std::wstring sPath = std::wstring(ssPath.begin(), ssPath.end()); diff --git a/main/LuaHandler.cpp b/main/LuaHandler.cpp index 8fdcb278..c2ad98ff 100644 --- 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_updateDevice(lua_State* lua_state) { @@ -155,9 +155,9 @@ bool CLuaHandler::executeLuaScript(const std::string &script, const std::string { 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(); diff --git a/main/SQLHelper.cpp b/main/SQLHelper.cpp index 491aa5a2..d529243a 100644 --- a/main/SQLHelper.cpp +++ b/main/SQLHelper.cpp @@ -633,6 +633,7 @@ const char *sqlCreateMobileDevices = "[LastUpdate] DATETIME DEFAULT(datetime('now', 'localtime'))" ");"; +extern std::string szScriptsFolder; extern std::string szUserDataFolder; CSQLHelper::CSQLHelper(void) @@ -3683,9 +3684,9 @@ uint64_t CSQLHelper::UpdateValueInt(const int HardwareID, const char* ID, const //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())) { @@ -6641,7 +6642,7 @@ bool CSQLHelper::HandleOnOffAction(const bool bIsOn, const std::string &OnAction 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 @@ -6675,7 +6676,7 @@ bool CSQLHelper::HandleOnOffAction(const bool bIsOn, const std::string &OnAction 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(' '); diff --git a/main/WebServer.cpp b/main/WebServer.cpp index f8471791..d2cf10b2 100644 --- a/main/WebServer.cpp +++ b/main/WebServer.cpp @@ -59,6 +59,7 @@ #define round(a) ( int ) ( a + .5 ) +extern std::string szScriptsFolder; extern std::string szUserDataFolder; extern std::string szWWWFolder; @@ -2987,9 +2988,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; diff --git a/main/domoticz.cpp b/main/domoticz.cpp index 5ef96f68..52599b14 100644 --- a/main/domoticz.cpp +++ b/main/domoticz.cpp @@ -136,6 +136,7 @@ static const _facilities facilities[] = }; std::string logfacname = "user"; #endif +std::string szScriptsFolder; std::string szStartupFolder; std::string szUserDataFolder; std::string szWWWFolder; @@ -696,6 +697,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) diff --git a/main/mainworker.cpp b/main/mainworker.cpp index 803690e1..e89a783b 100644 --- a/main/mainworker.cpp +++ b/main/mainworker.cpp @@ -159,6 +159,7 @@ #define round(a) ( int ) ( a + .5 ) +extern std::string szScriptsFolder; extern std::string szStartupFolder; extern std::string szUserDataFolder; extern std::string szWWWFolder; @@ -1473,8 +1474,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"; diff --git a/notifications/NotificationHTTP.cpp b/notifications/NotificationHTTP.cpp index decff3b4..632e4e66 100644 --- 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) { @@ -105,7 +105,7 @@ bool CNotificationHTTP::SendMessageImplementation( std::string scriptparams = ""; #if !defined WIN32 if (scriptname.find("/") != 0) - scriptname = szUserDataFolder + "scripts/" + scriptname; + scriptname = szScriptsFolder + scriptname; #endif //Add parameters uPos = scriptname.find(" "); diff --git a/push/GooglePubSubPush.cpp b/push/GooglePubSubPush.cpp index 359a7d7c..46e489f6 100644 --- a/push/GooglePubSubPush.cpp +++ b/push/GooglePubSubPush.cpp @@ -22,7 +22,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; @@ -231,11 +231,11 @@ void CGooglePubSubPush::DoGooglePubSubPush() #ifdef ENABLE_PYTHON_DECAP #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 wchar_t * argv[1]; diff --git a/scripts/dzVents/runtime/dzVents.lua b/scripts/dzVents/runtime/dzVents.lua index d0dfa869..8370d6a9 100644 --- a/scripts/dzVents/runtime/dzVents.lua +++ b/scripts/dzVents/runtime/dzVents.lua @@ -1,8 +1,9 @@ local currentPath = globalvariables['script_path'] +local generatedScriptPath = globalvariables['generated_script_path'] local triggerReason = globalvariables['script_reason'] _G.scriptsFolderPath = currentPath .. 'scripts' -- global -_G.generatedScriptsFolderPath = currentPath .. 'generated_scripts' -- global +_G.generatedScriptsFolderPath = generatedScriptPath -- global _G.dataFolderPath = currentPath .. 'data' -- global package.path = package.path .. ';' .. currentPath .. '?.lua' @@ -10,7 +11,7 @@ package.path = package.path .. ';' .. currentPath .. 'runtime/?.lua' package.path = package.path .. ';' .. currentPath .. 'runtime/device-adapters/?.lua' package.path = package.path .. ';' .. currentPath .. 'dzVents/?.lua' package.path = package.path .. ';' .. currentPath .. 'scripts/?.lua' -package.path = package.path .. ';' .. currentPath .. 'generated_scripts/?.lua' +package.path = package.path .. ';' .. generatedScriptPath .. '?.lua' package.path = package.path .. ';' .. currentPath .. 'data/?.lua' local EventHelpers = require('EventHelpers')