diff --git a/bin/dbus/dbuspluginmanagerinterface.cpp b/bin/dbus/dbuspluginmanagerinterface.cpp index 9bc0b098cb91ab7b36c427fe2a0eac5a1d9a56c1..3d2eb1ed6c1ae72cdecfc494ae92a13cf6a3b264 100644 --- a/bin/dbus/dbuspluginmanagerinterface.cpp +++ b/bin/dbus/dbuspluginmanagerinterface.cpp @@ -43,25 +43,27 @@ DBusPluginManagerInterface::togglePlugin(const std::string& path, const bool& to DRing::togglePlugin(path, toggle); } -std::map<std::string,std::string> +std::map<std::string, std::string> DBusPluginManagerInterface::getPluginDetails(const std::string& path) { return DRing::getPluginDetails(path); } -std::vector<std::map<std::string,std::string>> +std::vector<std::map<std::string, std::string>> DBusPluginManagerInterface::getPluginPreferences(const std::string& path) { return DRing::getPluginPreferences(path); } bool -DBusPluginManagerInterface::setPluginPreference(const std::string& path, const std::string& key, const std::string& value) +DBusPluginManagerInterface::setPluginPreference(const std::string& path, + const std::string& key, + const std::string& value) { return DRing::setPluginPreference(path, key, value); } -std::map<std::string,std::string> +std::map<std::string, std::string> DBusPluginManagerInterface::getPluginPreferencesValues(const std::string& path) { return DRing::getPluginPreferencesValues(path); @@ -109,7 +111,7 @@ DBusPluginManagerInterface::toggleCallMediaHandler(const std::string& id, const DRing::toggleCallMediaHandler(id, toggle); } -std::map<std::string,std::string> +std::map<std::string, std::string> DBusPluginManagerInterface::getCallMediaHandlerDetails(const std::string& id) { return DRing::getCallMediaHandlerDetails(id); @@ -127,7 +129,7 @@ DBusPluginManagerInterface::setPluginsEnabled(const bool& state) DRing::setPluginsEnabled(state); } -std::map<std::string,std::string> +std::map<std::string, std::string> DBusPluginManagerInterface::getCallMediaHandlerStatus() { return DRing::getCallMediaHandlerStatus(); diff --git a/bin/dbus/dbuspluginmanagerinterface.h b/bin/dbus/dbuspluginmanagerinterface.h index 9fd353660adf5e6ca5bf359b6ab48e26052fd8a6..b443f6ea8d394ebbc7ee6ab0a7c5cf8dbfbf191d 100644 --- a/bin/dbus/dbuspluginmanagerinterface.h +++ b/bin/dbus/dbuspluginmanagerinterface.h @@ -27,7 +27,7 @@ #include "dring/def.h" #include "dbus_cpp.h" -#if __GNUC__ >= 5 || (__GNUC__ >=4 && __GNUC_MINOR__ >= 6) +#if __GNUC__ >= 5 || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 6) /* This warning option only exists for gcc 4.6.0 and greater. */ #pragma GCC diagnostic ignored "-Wunused-but-set-variable" #endif @@ -38,37 +38,39 @@ #pragma GCC diagnostic warning "-Wignored-qualifiers" #pragma GCC diagnostic warning "-Wunused-parameter" -#if __GNUC__ >= 5 || (__GNUC__ >=4 && __GNUC_MINOR__ >= 6) +#if __GNUC__ >= 5 || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 6) /* This warning option only exists for gcc 4.6.0 and greater. */ #pragma GCC diagnostic warning "-Wunused-but-set-variable" #endif -class DRING_PUBLIC DBusPluginManagerInterface : - public cx::ring::Ring::PluginManagerInterface_adaptor, - public DBus::IntrospectableAdaptor, - public DBus::ObjectAdaptor +class DRING_PUBLIC DBusPluginManagerInterface + : public cx::ring::Ring::PluginManagerInterface_adaptor, + public DBus::IntrospectableAdaptor, + public DBus::ObjectAdaptor { - public: - DBusPluginManagerInterface(DBus::Connection& connection); +public: + DBusPluginManagerInterface(DBus::Connection& connection); - // Methods - bool loadPlugin(const std::string& path); - bool unloadPlugin(const std::string& path); - void togglePlugin(const std::string& path, const bool& toggle); - std::map<std::string,std::string> getPluginDetails(const std::string& path); - std::vector<std::map<std::string,std::string>> getPluginPreferences(const std::string& path); - bool setPluginPreference(const std::string& path, const std::string& key, const std::string& value); - std::map<std::string,std::string> getPluginPreferencesValues(const std::string& path); - bool resetPluginPreferencesValues(const std::string& path); - std::vector<std::string> listAvailablePlugins(); - std::vector<std::string> listLoadedPlugins(); - int installPlugin(const std::string& jplPath, const bool& force); - int uninstallPlugin(const std::string& pluginRootPath); - std::vector<std::string> listCallMediaHandlers(); - void toggleCallMediaHandler(const std::string& id, const bool& toggle); - std::map<std::string,std::string> getCallMediaHandlerDetails(const std::string& id); + // Methods + bool loadPlugin(const std::string& path); + bool unloadPlugin(const std::string& path); + void togglePlugin(const std::string& path, const bool& toggle); + std::map<std::string, std::string> getPluginDetails(const std::string& path); + std::vector<std::map<std::string, std::string>> getPluginPreferences(const std::string& path); + bool setPluginPreference(const std::string& path, + const std::string& key, + const std::string& value); + std::map<std::string, std::string> getPluginPreferencesValues(const std::string& path); + bool resetPluginPreferencesValues(const std::string& path); + std::vector<std::string> listAvailablePlugins(); + std::vector<std::string> listLoadedPlugins(); + int installPlugin(const std::string& jplPath, const bool& force); + int uninstallPlugin(const std::string& pluginRootPath); + std::vector<std::string> listCallMediaHandlers(); + void toggleCallMediaHandler(const std::string& id, const bool& toggle); + std::map<std::string, std::string> getCallMediaHandlerDetails(const std::string& id); - bool getPluginsEnabled(); - void setPluginsEnabled(const bool& state); - std::map<std::string,std::string> getCallMediaHandlerStatus(); + bool getPluginsEnabled(); + void setPluginsEnabled(const bool& state); + std::map<std::string, std::string> getCallMediaHandlerStatus(); }; diff --git a/src/dring/plugin_manager_interface.h b/src/dring/plugin_manager_interface.h index e99a5459f1cd063508ab5ce7f464b95e094a8429..243127c32b7f790ba73ba4acf557af6b39745293 100644 --- a/src/dring/plugin_manager_interface.h +++ b/src/dring/plugin_manager_interface.h @@ -36,12 +36,13 @@ namespace DRing { DRING_PUBLIC bool loadPlugin(const std::string& path); DRING_PUBLIC bool unloadPlugin(const std::string& path); DRING_PUBLIC void togglePlugin(const std::string& path, bool toggle); -DRING_PUBLIC std::map<std::string,std::string> getPluginDetails(const std::string& path); -DRING_PUBLIC std::vector<std::map<std::string,std::string>> getPluginPreferences(const std::string& path); +DRING_PUBLIC std::map<std::string, std::string> getPluginDetails(const std::string& path); +DRING_PUBLIC std::vector<std::map<std::string, std::string>> getPluginPreferences( + const std::string& path); DRING_PUBLIC bool setPluginPreference(const std::string& path, - const std::string& key, - const std::string& value); -DRING_PUBLIC std::map<std::string,std::string> getPluginPreferencesValues(const std::string& path); + const std::string& key, + const std::string& value); +DRING_PUBLIC std::map<std::string, std::string> getPluginPreferencesValues(const std::string& path); DRING_PUBLIC bool resetPluginPreferencesValues(const std::string& path); DRING_PUBLIC std::vector<std::string> listAvailablePlugins(); DRING_PUBLIC std::vector<std::string> listLoadedPlugins(); @@ -49,8 +50,8 @@ DRING_PUBLIC int installPlugin(const std::string& jplPath, bool force); DRING_PUBLIC int uninstallPlugin(const std::string& pluginRootPath); DRING_PUBLIC std::vector<std::string> listCallMediaHandlers(); DRING_PUBLIC void toggleCallMediaHandler(const std::string& id, bool toggle); -DRING_PUBLIC std::map<std::string,std::string> getCallMediaHandlerDetails(const std::string& id); +DRING_PUBLIC std::map<std::string, std::string> getCallMediaHandlerDetails(const std::string& id); DRING_PUBLIC bool getPluginsEnabled(); DRING_PUBLIC void setPluginsEnabled(bool state); -DRING_PUBLIC std::map<std::string,std::string> getCallMediaHandlerStatus(); -} +DRING_PUBLIC std::map<std::string, std::string> getCallMediaHandlerStatus(); +} // namespace DRing diff --git a/src/plugin/jamipluginmanager.cpp b/src/plugin/jamipluginmanager.cpp index 69d84e403d7ff73246fce96bb16d471025506277..7e8db542b6028decd00ccc57074d7fc743171b78 100644 --- a/src/plugin/jamipluginmanager.cpp +++ b/src/plugin/jamipluginmanager.cpp @@ -150,23 +150,23 @@ uncompressJplFunction(const std::string& relativeFileName) std::string convertArrayToString(const Json::Value& jsonArray) { - std::string stringArray = "["; - - for (int i = 0; i < static_cast<int>(jsonArray.size()) - 1; i++) { - if (jsonArray[i].isString()) { - stringArray += jsonArray[i].asString() + ","; - } else if (jsonArray[i].isArray()) { - stringArray += convertArrayToString(jsonArray[i]) + ","; + std::string stringArray = ""; + + if (jsonArray.size()) { + for (unsigned i = 0; i < jsonArray.size() - 1; i++) { + if (jsonArray[i].isString()) { + stringArray += jsonArray[i].asString() + ","; + } else if (jsonArray[i].isArray()) { + stringArray += convertArrayToString(jsonArray[i]) + ","; + } } - } - int lastIndex = static_cast<int>(jsonArray.size()) - 1; - if (jsonArray[lastIndex].isString()) { - stringArray += jsonArray[lastIndex].asString(); + unsigned lastIndex = jsonArray.size() - 1; + if (jsonArray[lastIndex].isString()) { + stringArray += jsonArray[lastIndex].asString(); + } } - stringArray += "]"; - return stringArray; } @@ -337,11 +337,10 @@ JamiPluginManager::unloadPlugin(const std::string& rootPath) void JamiPluginManager::togglePlugin(const std::string& rootPath, bool toggle) { - //This function should not be used as is - //One should modify it to perform plugin install followed by load - //rootPath should be the jplpath! - try - { + // This function should not be used as is + // One should modify it to perform plugin install followed by load + // rootPath should be the jplpath! + try { std::string soPath = getPluginDetails(rootPath).at("soPath"); // remove the previous plugin object if it was registered pm_.destroyPluginComponents(soPath); @@ -382,16 +381,21 @@ JamiPluginManager::getPluginPreferences(const std::string& rootPath) if (file) { bool ok = Json::parseFromStream(rbuilder, file, &root, &errs); if (ok && root.isArray()) { - for (int i = 0; i < static_cast<int>(root.size()); i++) { - const Json::Value jsonPreference = root[i]; + for (unsigned i = 0; i < root.size(); i++) { + const Json::Value& jsonPreference = root[i]; std::string category = jsonPreference.get("category", "NoCategory").asString(); std::string type = jsonPreference.get("type", "None").asString(); std::string key = jsonPreference.get("key", "None").asString(); if (type != "None" && key != "None") { if (keys.find(key) == keys.end()) { - const auto& preferenceAttributes = parsePreferenceConfig(jsonPreference, - type); - // If the parsing of the attributes was successful, commit the map and the key + auto preferenceAttributes = parsePreferenceConfig(jsonPreference, type); + // If the parsing of the attributes was successful, commit the map and the keys + auto defaultValue = preferenceAttributes.find("defaultValue"); + if (type == "Path" && defaultValue != preferenceAttributes.end()) { + defaultValue->second = rootPath + DIR_SEPARATOR_STR + + defaultValue->second; + } + if (!preferenceAttributes.empty()) { preferences.push_back(std::move(preferenceAttributes)); keys.insert(key); @@ -448,7 +452,6 @@ JamiPluginManager::setPluginPreference(const std::string& rootPath, const std::string& key, const std::string& value) { - bool returnValue = false; std::map<std::string, std::string> pluginUserPreferencesMap = getPluginUserPreferencesValuesMap( rootPath); std::map<std::string, std::string> pluginPreferencesMap = getPluginPreferencesValuesMap( @@ -473,14 +476,13 @@ JamiPluginManager::setPluginPreference(const std::string& rootPath, try { std::lock_guard<std::mutex> guard(fileutils::getFileLock(preferencesValuesFilePath)); msgpack::pack(fs, pluginUserPreferencesMap); - returnValue = true; + return true; } catch (const std::exception& e) { - returnValue = false; JAMI_ERR() << e.what(); + return false; } } - - return returnValue; + return false; } std::map<std::string, std::string>