From: Tomasz Iwanek Date: Thu, 5 Sep 2013 08:02:31 +0000 (+0200) Subject: TaskConfiguration refactoring - part 3/3 X-Git-Tag: 2.2.1_release~8^2~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=18019d85ea2fa3a310ddb53cd06d830949aa0e28;p=framework%2Fweb%2Fwrt-installer.git TaskConfiguration refactoring - part 3/3 [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 --- diff --git a/src/jobs/widget_install/task_configuration.cpp b/src/jobs/widget_install/task_configuration.cpp index 72513a1..7c9efef 100644 --- a/src/jobs/widget_install/task_configuration.cpp +++ b/src/jobs/widget_install/task_configuration.cpp @@ -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 == diff --git a/src/jobs/widget_install/task_configuration.h b/src/jobs/widget_install/task_configuration.h index 167c3e4..0540ab7 100644 --- a/src/jobs/widget_install/task_configuration.h +++ b/src/jobs/widget_install/task_configuration.h @@ -59,7 +59,7 @@ class TaskConfiguration : public DPL::TaskDecl 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 void ParseXMLConfigStep(); void TizenIdStep(); + void CheckAppRunningStateStep(); void DetectUpdateInstallationStep(); void PkgmgrStartStep();