From: Jihoon Chung Date: Wed, 24 Apr 2013 02:07:03 +0000 (+0900) Subject: Implement install & uninstall by CSC X-Git-Tag: 2.1b_release^2~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e758816571289807cefbc5a44bcda4ef09364cb5;p=framework%2Fweb%2Fwrt-installer.git Implement install & uninstall by CSC [Issue#] N/A [Problem] N/A [Cause] N/A [Solution] Implement install & uninstall by CSC configuration Use case is pkgmgr calls "-c" option with configuration string wrt-installer -c path=/opt/system/csc/Basic.wgt:op=install:removable=true "path" is widget file path "op" is operation name. install or uninstall "removale" isn't supported by wrt-installer [SCMRequest] N/A Change-Id: Icc0873cbd9c2235268d3c843db91485e62557d3b --- diff --git a/src/wrt-installer/wrt-installer.cpp b/src/wrt-installer/wrt-installer.cpp index 1f5bc8c..7d2cb52 100644 --- a/src/wrt-installer/wrt-installer.cpp +++ b/src/wrt-installer/wrt-installer.cpp @@ -21,6 +21,7 @@ #include "wrt-installer.h" #include "plugin_utils.h" +#include #include #include #include @@ -191,6 +192,47 @@ void WrtInstaller::OnCreate() m_packagePath = m_argv[2]; m_installMode = WRT_INSTALL_MODE_INSTALL_PRELOAD; AddStep(&WrtInstaller::installStep); + } else if (arg == "-c" || arg == "--csc-update") { + // "path=/opt/system/csc/Ozq2iEG15R-2.0.0-arm.wgt:op=install:removable=true" + LogDebug("Install & uninstall by csc configuration"); + if (m_argc != 3) { + return showHelpAndQuit(); + } + std::string configuration = m_argv[2]; + m_CSCconfigurationMap = parseCSCConfiguration(configuration); + + CSCConfiguration::dataMap::iterator it; + it = m_CSCconfigurationMap.find(CSCConfiguration::KEY_OP); + if (it == m_CSCconfigurationMap.end()) { + return showHelpAndQuit(); + } + + if (it->second == CSCConfiguration::VALUE_INSTALL) { + LogDebug("operation = " << it->second); + m_installMode = WRT_INSTALL_MODE_INSTALL_WGT; + it = m_CSCconfigurationMap.find(CSCConfiguration::KEY_PATH); + if (it == m_CSCconfigurationMap.end()) { + return showHelpAndQuit(); + } + m_packagePath = it->second; + AddStep(&WrtInstaller::installStep); + LogDebug("path = " << m_packagePath); + } else if (it->second == CSCConfiguration::VALUE_UNINSTALL) { + LogDebug("operation = " << it->second); + // uninstall command isn't confirmed yet + it = m_CSCconfigurationMap.find(CSCConfiguration::KEY_PATH); + if (it == m_CSCconfigurationMap.end()) { + return showHelpAndQuit(); + } + m_packagePath = it->second; + AddStep(&WrtInstaller::unistallWgtFileStep); + LogDebug("operation = uninstall"); + LogDebug("path = " << m_packagePath); + } else { + LogError("Unknown operation : " << it->second); + LogDebug("operation = " << it->second); + return showHelpAndQuit(); + } } else if (arg == "-un" || arg == "--uninstall-name") { if (m_argc != 3) { return showHelpAndQuit(); @@ -294,6 +336,8 @@ void WrtInstaller::showHelpAndQuit() " -p, --install-plugins install plugins\n" " -i, --install " "install or update widget package for given path\n" + " -c, --csc-update " + "install or uninstall by CSC configuration \n" " -un, --uninstall-name " "uninstall widget for given package name\n" " -up, --uninstall-packagepath " @@ -944,6 +988,35 @@ void WrtInstaller::installNewPlugins() AddStep(&WrtInstaller::installPluginsStep); } +CSCConfiguration::dataMap WrtInstaller::parseCSCConfiguration( + std::string str) +{ + // path=/opt/system/csc/Ozq2iEG15R-2.0.0-arm.wgt:op=install:removable=true + // parsing CSC configuration string + LogDebug("parseConfiguration"); + CSCConfiguration::dataMap result; + + if (str.empty()) { + LogDebug("Input argument is empty"); + return result; + } + + char* buf = strdup(str.c_str()); + const char* ptr = strtok(buf,":"); + while (ptr != NULL) { + std::string string = ptr; + size_t pos = string.find('='); + if (pos == std::string::npos) { + continue; + } + result.insert( + CSCConfiguration::dataPair(string.substr(0, pos), + string.substr(pos+1))); + ptr = strtok (NULL, ":"); + } + return result; +} + int main(int argc, char *argv[]) { UNHANDLED_EXCEPTION_HANDLER_BEGIN diff --git a/src/wrt-installer/wrt-installer.h b/src/wrt-installer/wrt-installer.h index 9cd0173..b2288e3 100644 --- a/src/wrt-installer/wrt-installer.h +++ b/src/wrt-installer/wrt-installer.h @@ -27,6 +27,7 @@ #include #include #include +#include #include namespace WRTInstallerNS { //anonymous @@ -37,6 +38,14 @@ DECLARE_GENERIC_EVENT_0(InstallPluginEvent) typedef void (*ShowResultCallback)(void *data, Evas_Object *obj, void *event_info); +namespace CSCConfiguration { +typedef std::map dataMap; +typedef std::pair dataPair; +const char* const KEY_OP = "op"; +const char* const KEY_PATH = "path"; +const char* const VALUE_INSTALL = "install"; +const char* const VALUE_UNINSTALL = "uninstall"; +} enum ReturnValue { @@ -109,6 +118,7 @@ class WrtInstaller : void installNewPlugins(); bool popupsEnabled() const; + CSCConfiguration::dataMap parseCSCConfiguration(std::string str); // Private data std::shared_ptr pkgmgrSignalInterface; @@ -122,6 +132,7 @@ class WrtInstaller : bool m_installByPkgmgr; bool m_quiet; bool m_startupPluginInstallation; + CSCConfiguration::dataMap m_CSCconfigurationMap; typedef std::list PluginPathList; DPL::Optional m_pluginsPaths;