TaskConfiguration refactoring - part 3/3
authorTomasz Iwanek <t.iwanek@samsung.com>
Thu, 5 Sep 2013 08:02:31 +0000 (10:02 +0200)
committerSoo-Hyun Choi <sh9.choi@samsung.com>
Mon, 7 Oct 2013 08:46:56 +0000 (08:46 +0000)
[Issue#]   LINUXWRT-820
[Problem]  Refatoring - CheckAppRunningStateStep for TaskConfiguration
[Cause]    N/A
[Solution] Refactoring.

[Verification] Install successfully any app. Try update app when it's running.
               App should be killed before installation start.

Change-Id: Ie15cbbb6736be9b7ae30e8547ee8f7b5b3abb85c

src/jobs/widget_install/task_configuration.cpp
src/jobs/widget_install/task_configuration.h

index 72513a1..7c9efef 100644 (file)
@@ -104,6 +104,7 @@ TaskConfiguration::TaskConfiguration(InstallerContext& context) :
     AddStep(&TaskConfiguration::ParseXMLConfigStep);
 
     AddStep(&TaskConfiguration::TizenIdStep);
+    AddStep(&TaskConfiguration::CheckAppRunningStateStep);
     AddStep(&TaskConfiguration::ApplicationTypeStep);
     AddStep(&TaskConfiguration::ResourceEncryptionStep);
     AddStep(&TaskConfiguration::InstallationFSLocationStep);
@@ -290,6 +291,70 @@ void TaskConfiguration::TizenIdStep()
     _D("Tizen Pkg Id : %ls", (m_context.widgetConfig.tzPkgid).c_str());
 }
 
+void TaskConfiguration::CheckAppRunningStateStep()
+{
+    bool isRunning = false;
+    int ret =
+        app_manager_is_running(DPL::ToUTF8String(m_context.widgetConfig.tzAppid).c_str(),
+                               &isRunning);
+    if (APP_MANAGER_ERROR_NONE != ret) {
+        _E("Fail to get running state");
+        ThrowMsg(Jobs::WidgetInstall::Exceptions::WidgetRunningError,
+                "widget is running");
+    }
+
+    if (true == isRunning) {
+        // get app_context for running application
+        // app_context must be released with app_context_destroy
+        app_context_h appCtx = NULL;
+        ret =
+            app_manager_get_app_context(
+                DPL::ToUTF8String(m_context.widgetConfig.tzAppid).c_str(),
+                &appCtx);
+        if (APP_MANAGER_ERROR_NONE != ret) {
+            _E("Fail to get app_context");
+            ThrowMsg(Jobs::WidgetInstall::Exceptions::WidgetRunningError,
+                    "widget is running");
+        }
+
+        // terminate app_context_h
+        ret = app_manager_terminate_app(appCtx);
+        if (APP_MANAGER_ERROR_NONE != ret) {
+            _E("Fail to terminate running application");
+            app_context_destroy(appCtx);
+            ThrowMsg(Jobs::WidgetInstall::Exceptions::WidgetRunningError,
+                    "widget is running");
+        } else {
+            app_context_destroy(appCtx);
+            // app_manager_terminate_app isn't sync API
+            // wait until application isn't running (50ms * 100)
+            bool isStillRunning = true;
+            int checkingloop = 100;
+            struct timespec duration = { 0, 50 * 1000 * 1000 };
+            while (--checkingloop >= 0) {
+                nanosleep(&duration, NULL);
+                int ret = app_manager_is_running(
+                        DPL::ToUTF8String(m_context.widgetConfig.tzAppid).c_str(),
+                        &isStillRunning);
+                if (APP_MANAGER_ERROR_NONE != ret) {
+                    _E("Fail to get running state");
+                    ThrowMsg(Jobs::WidgetInstall::Exceptions::WidgetRunningError,
+                            "widget is running");
+                }
+                if (!isStillRunning) {
+                    break;
+                }
+            }
+            if (isStillRunning) {
+                _E("Fail to terminate running application");
+                ThrowMsg(Jobs::WidgetInstall::Exceptions::WidgetRunningError,
+                        "widget is running");
+            }
+            _D("terminate application");
+        }
+    }
+}
+
 void TaskConfiguration::ConfigureWidgetLocationStep()
 {
     m_context.locations =
@@ -342,10 +407,10 @@ void TaskConfiguration::DetectUpdateInstallationStep()
 
 void TaskConfiguration::CheckRDSSupportStep()
 {
-    //update needs RDS support to go ahead
+    //update needs RDS support to go ahead if REINSTALL command is given
     if(m_context.isUpdateMode)
     {
-        if (!checkSupportRDSUpdate(m_widgetConfig)) {
+        if (!checkSupportRDSUpdateIfReinstall(m_widgetConfig)) {
             ThrowMsg(Jobs::WidgetInstall::Exceptions::NotSupportRDSUpdate,
                 "RDS update failed");
         }
@@ -400,70 +465,6 @@ bool TaskConfiguration::checkWidgetUpdate(
     _D("incoming version = '%ls", update.incomingVersion->Raw().c_str());
     _D("Tizen AppID = %ls", update.tzAppId.c_str());
 
-    // TODO: step Check running state
-    bool isRunning = false;
-    int ret =
-        app_manager_is_running(DPL::ToUTF8String(update.tzAppId).c_str(),
-                               &isRunning);
-    if (APP_MANAGER_ERROR_NONE != ret) {
-        _E("Fail to get running state");
-        ThrowMsg(Jobs::WidgetInstall::Exceptions::WidgetRunningError,
-                "widget is running");
-    }
-
-    if (true == isRunning) {
-        // get app_context for running application
-        // app_context must be released with app_context_destroy
-        app_context_h appCtx = NULL;
-        ret =
-            app_manager_get_app_context(
-                DPL::ToUTF8String(update.tzAppId).c_str(),
-                &appCtx);
-        if (APP_MANAGER_ERROR_NONE != ret) {
-            _E("Fail to get app_context");
-            ThrowMsg(Jobs::WidgetInstall::Exceptions::WidgetRunningError,
-                    "widget is running");
-        }
-
-        // terminate app_context_h
-        ret = app_manager_terminate_app(appCtx);
-        if (APP_MANAGER_ERROR_NONE != ret) {
-            _E("Fail to terminate running application");
-            app_context_destroy(appCtx);
-            ThrowMsg(Jobs::WidgetInstall::Exceptions::WidgetRunningError,
-                    "widget is running");
-        } else {
-            app_context_destroy(appCtx);
-            // app_manager_terminate_app isn't sync API
-            // wait until application isn't running (50ms * 100)
-            bool isStillRunning = true;
-            int checkingloop = 100;
-            struct timespec duration = { 0, 50 * 1000 * 1000 };
-            while (--checkingloop >= 0) {
-                nanosleep(&duration, NULL);
-                int ret =
-                    app_manager_is_running(
-                        DPL::ToUTF8String(update.tzAppId).c_str(),
-                        &isStillRunning);
-                if (APP_MANAGER_ERROR_NONE != ret) {
-                    _E("Fail to get running state");
-                    ThrowMsg(Jobs::WidgetInstall::Exceptions::WidgetRunningError,
-                            "widget is running");
-                }
-                if (!isStillRunning) {
-                    break;
-                }
-            }
-            if (isStillRunning) {
-                _E("Fail to terminate running application");
-                ThrowMsg(Jobs::WidgetInstall::Exceptions::WidgetRunningError,
-                        "widget is running");
-            }
-            _D("terminate application");
-        }
-    }
-    //...
-
     m_context.widgetConfig.tzAppid = update.tzAppId;
 
     if (!!update.existingVersion ||
@@ -673,7 +674,7 @@ void TaskConfiguration::InstallationFSLocationStep()
     }
 }
 
-bool TaskConfiguration::checkSupportRDSUpdate(const WrtDB::ConfigParserData
+bool TaskConfiguration::checkSupportRDSUpdateIfReinstall(const WrtDB::ConfigParserData
         &configInfo)
 {
     if (m_context.mode.command ==
index 167c3e4..0540ab7 100644 (file)
@@ -59,7 +59,7 @@ class TaskConfiguration : public DPL::TaskDecl<TaskConfiguration>
     bool validateTizenPackageID(const WrtDB::TizenPkgId &tizenPkgId);
     bool checkWidgetUpdate(const WidgetUpdateInfo &update);
     void ApplicationTypeStep(const WrtDB::ConfigParserData &configInfo);
-    bool checkSupportRDSUpdate(const WrtDB::ConfigParserData &configInfo);
+    bool checkSupportRDSUpdateIfReinstall(const WrtDB::ConfigParserData &configInfo);
     bool getDefaultExternalStorage();
     bool getMMCStatus();
 
@@ -73,6 +73,7 @@ class TaskConfiguration : public DPL::TaskDecl<TaskConfiguration>
     void ParseXMLConfigStep();
 
     void TizenIdStep();
+    void CheckAppRunningStateStep();
     void DetectUpdateInstallationStep();
     void PkgmgrStartStep();