[Release] wrt-installer_0.1.53
[framework/web/wrt-installer.git] / src / wrt-installer / wrt-installer.cpp
index a61a96a..77457f5 100644 (file)
@@ -82,7 +82,6 @@ struct PluginInstallerData
 WrtInstaller::WrtInstaller(int argc, char **argv) :
     Application(argc, argv, "backend", false),
     DPL::TaskDecl<WrtInstaller>(this),
-    m_installMode(WRT_INSTALL_MODE_UNKNOWN),
     m_packagePath(),
     m_initialized(false),
     m_numPluginsToInstall(0),
@@ -175,10 +174,10 @@ void WrtInstaller::OnCreate()
             struct stat info;
             if (-1 != stat(m_argv[2], &info) && S_ISDIR(info.st_mode)) {
                 LogInfo("Installing package directly from directory");
-                m_installMode = WRT_INSTALL_MODE_INSTALL_DIRECTORY;
+                m_installMode.extension = InstallMode::ExtensionType::DIR;
             } else {
                 LogInfo("Installing from regular location");
-                m_installMode = WRT_INSTALL_MODE_INSTALL_WGT;
+                m_installMode.extension = InstallMode::ExtensionType::WGT;
             }
             m_packagePath = m_argv[2];
 
@@ -189,7 +188,17 @@ void WrtInstaller::OnCreate()
                 return showHelpAndQuit();
             }
             m_packagePath = m_argv[2];
-            m_installMode = WRT_INSTALL_MODE_INSTALL_PRELOAD;
+            m_installMode.installTime = InstallMode::InstallTime::PRELOAD;
+            m_installMode.rootPath = InstallMode::RootPath::RO;
+            AddStep(&WrtInstaller::installStep);
+        } else if (arg == "-ipw" || arg == "--install-preload-writable") {
+            LogDebug("Install preload web application to writable storage");
+            if (m_argc != 3) {
+                return showHelpAndQuit();
+            }
+            m_packagePath = m_argv[2];
+            m_installMode.installTime = InstallMode::InstallTime::PRELOAD;
+            m_installMode.rootPath = InstallMode::RootPath::RW;
             AddStep(&WrtInstaller::installStep);
         } else if (arg == "-c" || arg == "--csc-update") {
             // "path=/opt/system/csc/Ozq2iEG15R-2.0.0-arm.wgt:op=install:removable=true"
@@ -208,7 +217,7 @@ void WrtInstaller::OnCreate()
 
             if (it->second == CSCConfiguration::VALUE_INSTALL) {
                 LogDebug("operation = " << it->second);
-                m_installMode = WRT_INSTALL_MODE_INSTALL_WGT;
+                m_installMode.extension = InstallMode::ExtensionType::WGT;
                 it = m_CSCconfigurationMap.find(CSCConfiguration::KEY_PATH);
                 if (it == m_CSCconfigurationMap.end()) {
                     return showHelpAndQuit();
@@ -249,7 +258,8 @@ void WrtInstaller::OnCreate()
                 return showHelpAndQuit();
             }
             LogInfo("Installing package directly from directory");
-            m_installMode = WRT_INSTALL_MODE_REINSTALL;
+            m_installMode.command = InstallMode::Command::REINSTALL;
+            m_installMode.extension = InstallMode::ExtensionType::DIR;
             m_packagePath = m_argv[2];
             AddStep(&WrtInstaller::installStep);
         } else {
@@ -276,10 +286,10 @@ void WrtInstaller::OnCreate()
             struct stat info;
             if (-1 != stat(m_argv[4], &info) && S_ISDIR(info.st_mode)) {
                 LogInfo("Installing package directly from directory");
-                m_installMode = WRT_INSTALL_MODE_INSTALL_DIRECTORY;
+                m_installMode.extension = InstallMode::ExtensionType::DIR;
             } else {
                 LogInfo("Installing from regular location");
-                m_installMode = WRT_INSTALL_MODE_INSTALL_WGT;
+                m_installMode.extension = InstallMode::ExtensionType::WGT;
             }
             AddStep(&WrtInstaller::installStep);
             break;
@@ -289,7 +299,8 @@ void WrtInstaller::OnCreate()
             break;
         case PKGMGR_REQ_REINSTALL:
             m_packagePath = m_argv[4];
-            m_installMode = WRT_INSTALL_MODE_REINSTALL;
+            m_installMode.command = InstallMode::Command::REINSTALL;
+            m_installMode.extension = InstallMode::ExtensionType::DIR;
             AddStep(&WrtInstaller::installStep);
             break;
         default:
@@ -312,8 +323,8 @@ void WrtInstaller::OnReset(bundle* /*b*/)
 void WrtInstaller::OnTerminate()
 {
     LogDebug("Wrt Shutdown now");
-    PluginUtils::unlockPluginInstallation(m_installMode ==
-            WRT_INSTALL_MODE_INSTALL_PRELOAD);
+    PluginUtils::unlockPluginInstallation(
+        m_installMode.installTime == InstallMode::InstallTime::PRELOAD);
     if (m_initialized) {
         wrt_installer_shutdown();
     }
@@ -414,8 +425,9 @@ void WrtInstaller::installPluginsStep()
 
     if (m_startupPluginInstallation) {
         LogInfo("Plugin installation started because new plugin package found");
-    } else if (!PluginUtils::lockPluginInstallation(m_installMode ==
-                WRT_INSTALL_MODE_INSTALL_PRELOAD)) {
+    } else if (!PluginUtils::lockPluginInstallation(
+        m_installMode.installTime == InstallMode::InstallTime::PRELOAD))
+    {
         LogError("Failed to open plugin installation lock file"
                  " Plugins are currently installed by other process");
         staticWrtPluginInstallationCallback(WRT_INSTALLER_ERROR_PLUGIN_INSTALLATION_FAILED,
@@ -745,6 +757,13 @@ void WrtInstaller::staticWrtStatusCallback(std::string tizenId,
                         tizenId.c_str(), printMsg.c_str());
                 break;
 
+            case WRT_INSTALLER_ERROR_PRIVILEGE_LEVEL_VIOLATION:
+                This->m_returnStatus = 1; //this status is specific
+                fprintf(stderr, "## wrt-installer : %s %s has failed - "
+                        "privilege level violation\n",
+                        tizenId.c_str(), printMsg.c_str());
+                break;
+
             case WRT_INSTALLER_ERROR_MENU_ICON_NOT_FOUND:
                 This->m_returnStatus = 1; //this status is specific
                 fprintf(stderr, "## wrt-installer : %s %s has failed - "
@@ -773,6 +792,13 @@ void WrtInstaller::staticWrtStatusCallback(std::string tizenId,
                         tizenId.c_str(), printMsg.c_str());
                 break;
 
+            case WRT_INSTALLER_ERROR_ARGUMENT_INVALID:
+                This->m_returnStatus = 1; //this status is specific
+                fprintf(stderr, "## wrt-installer : %s %s has failed - "
+                        "invalid argument\n",
+                        tizenId.c_str(), printMsg.c_str());
+                break;
+
             case WRT_INSTALLER_ERROR_PACKAGE_ALREADY_INSTALLED:
                 This->m_returnStatus = 1; //this status is specific
                 fprintf(stderr, "## wrt-installer : %s %s has failed - "
@@ -833,8 +859,9 @@ void WrtInstaller::staticWrtStatusCallback(std::string tizenId,
         This->m_returnStatus = 0;
         resultMsg += L" : " + DPL::FromUTF8String(PKGMGR_END_SUCCESS);
 
-        if (This->m_installMode == WRT_INSTALL_MODE_INSTALL_PRELOAD &&
-                !This->m_packagePath.empty()) {
+        if (This->m_installMode.installTime == InstallMode::InstallTime::PRELOAD &&
+                !This->m_packagePath.empty())
+        {
             LogDebug("This widget is preloaded so it will be removed : "
                     << This->m_packagePath);
             if (!WrtUtilRemove(This->m_packagePath)) {
@@ -873,8 +900,9 @@ void WrtInstaller::staticWrtPluginInstallationCallback(WrtErrStatus status,
         }
 
         //remove lock file
-        if (!PluginUtils::unlockPluginInstallation(This->m_installMode ==
-                WRT_INSTALL_MODE_INSTALL_PRELOAD)) {
+        if (!PluginUtils::unlockPluginInstallation(
+            This->m_installMode.installTime == InstallMode::InstallTime::PRELOAD))
+        {
             LogInfo("Failed to remove installation lock");
         }
 
@@ -967,16 +995,17 @@ void WrtInstaller::installNewPlugins()
 {
     LogDebug("Install new plugins");
 
-    if (!PluginUtils::lockPluginInstallation(m_installMode ==
-                WRT_INSTALL_MODE_INSTALL_PRELOAD)) {
+    if (!PluginUtils::lockPluginInstallation(
+        m_installMode.installTime == InstallMode::InstallTime::PRELOAD))
+    {
         LogInfo("Lock NOT created");
         return;
     }
 
     if (!PluginUtils::checkPluginInstallationRequired()) {
         LogDebug("Plugin installation not required");
-        PluginUtils::unlockPluginInstallation(m_installMode ==
-            WRT_INSTALL_MODE_INSTALL_PRELOAD);
+        PluginUtils::unlockPluginInstallation(
+            m_installMode.installTime == InstallMode::InstallTime::PRELOAD);
         return;
     }
 
@@ -1001,16 +1030,17 @@ CSCConfiguration::dataMap WrtInstaller::parseCSCConfiguration(
     const char* ptr = strtok(buf,":");
     while (ptr != NULL) {
         std::string string = ptr;
+        ptr = strtok (NULL, ":");
         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, ":");
+                                       string.substr(pos+1)));
     }
-     return result;
+    free(buf);
+    return result;
 }
 
 int main(int argc, char *argv[])