* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
#include <widget_uninstall/job_widget_uninstall.h>
+#include <widget_uninstall/widget_uninstall_errors.h>
#include <widget_uninstall/task_check.h>
#include <widget_uninstall/task_db_update.h>
#include <widget_uninstall/task_remove_files.h>
#include <widget_uninstall/task_smack.h>
+#include <widget_uninstall/task_uninstall_ospsvc.h>
+#include <widget_uninstall/task_delete_certificates.h>
+#include <pkg-manager/pkgmgr_signal.h>
using namespace WrtDB;
+namespace { //anonymous
+class UninstallerTaskFail :
+ public DPL::TaskDecl<UninstallerTaskFail>
+{
+ private:
+ bool m_uninstalled;
+
+ void StepFail()
+ {
+ if(m_uninstalled) {
+ ThrowMsg(Jobs::WidgetUninstall::Exceptions::WidgetNotExist,
+ "Widget does not exist");
+ } else {
+ Throw(Jobs::WidgetUninstall::Exceptions::Base);
+ }
+ }
+
+ public:
+ UninstallerTaskFail(bool uninstalled) :
+ DPL::TaskDecl<UninstallerTaskFail>(this),
+ m_uninstalled(uninstalled)
+ {
+ AddStep(&UninstallerTaskFail::StepFail);
+ }
+};
+}
+
namespace Jobs {
namespace WidgetUninstall {
-JobWidgetUninstall::JobWidgetUninstall(WidgetHandle widgetHandle,
+JobWidgetUninstall::JobWidgetUninstall(const std::string & widgetPkgName,
const WidgetUninstallationStruct &uninstallerStruct) :
Job(Uninstallation),
JobContextBase<WidgetUninstallationStruct>(uninstallerStruct)
{
- WidgetDAO dao(widgetHandle);
-
- m_context.widgetHandle = widgetHandle;
+ using namespace PackageManager;
m_context.removeStarted = false;
m_context.removeFinished = false;
m_context.uninstallStep = UninstallerContext::UNINSTALL_START;
m_context.job = this;
+ m_context.pkgname = widgetPkgName;
- AddTask(new TaskSmack(m_context));
- AddTask(new TaskCheck(m_context));
- AddTask(new TaskRemoveFiles(m_context));
- AddTask(new TaskDbUpdate(m_context));
+ Try
+ {
+ WrtDB::WidgetDAOReadOnly dao(DPL::FromUTF8String(widgetPkgName));
+ m_context.locations = WidgetLocation(m_context.pkgname);
+
+ LogInfo("Widget model exists. Pkg name: " << m_context.pkgname);
+
+ AddTask(new TaskSmack(m_context));
+ AddTask(new TaskCheck(m_context));
+
+ if (dao.getPkgType() == PKG_TYPE_TIZEN_WITHSVCAPP) {
+ AddTask(new TaskUninstallOspsvc(m_context));
+ }
+ AddTask(new TaskRemoveFiles(m_context));
+ AddTask(new TaskDbUpdate(m_context));
+ AddTask(new TaskDeleteCertificates(m_context));
+
+ // send start signal of pkgmgr
+ if (PkgmgrSignalSingleton::Instance().setPkgname(m_context.pkgname)) {
+ PkgmgrSignalSingleton::Instance().sendSignal(
+ PKGMGR_START_KEY,
+ PKGMGR_START_UNINSTALL);
+ }
+ } Catch (WidgetDAOReadOnly::Exception::WidgetNotExist) {
+ AddTask(new UninstallerTaskFail(true));
+ } Catch (WidgetDAOReadOnly::Exception::Base) {
+ AddTask(new UninstallerTaskFail(false));
+ }
}
-WidgetHandle JobWidgetUninstall::getRemovedWidgetHandle() const
+std::string JobWidgetUninstall::getRemovedTizenId() const
{
- return m_context.widgetHandle;
+ return m_context.pkgname;
}
bool JobWidgetUninstall::getRemoveStartedFlag() const
void JobWidgetUninstall::SendProgress()
{
+ using namespace PackageManager;
if (!getRemoveStartedFlag() ||
(getRemoveStartedFlag() && getRemoveFinishedFlag())) {
if (NULL != getInstallerStruct().progressCallback) {
+ // send progress signal of pkgmgr
+ std::ostringstream percent;
+ percent << static_cast<int>(GetProgressPercent());
+ PkgmgrSignalSingleton::Instance().sendSignal(
+ PKGMGR_PROGRESS_KEY,
+ percent.str());
+
LogDebug("Call widget uninstall progressCallback");
getInstallerStruct().progressCallback(
getInstallerStruct().userParam,
void JobWidgetUninstall::SendFinishedSuccess()
{
+ using namespace PackageManager;
+ // send signal of pkgmgr
+ PkgmgrSignalSingleton::Instance().sendSignal(
+ PKGMGR_END_KEY,
+ PKGMGR_END_SUCCESS);
+
LogDebug("Call widget uninstall success finishedCallback");
getInstallerStruct().finishedCallback(getInstallerStruct().userParam,
- getRemovedWidgetHandle(),Exceptions::Success);
+ getRemovedTizenId(),Exceptions::Success);
}
void JobWidgetUninstall::SendFinishedFailure()
{
+ using namespace PackageManager;
LogError("Error in uninstallation step: " << m_exceptionCaught);
LogError("Message: " << m_exceptionMessage);
+ // send signal of pkgmgr
+ PkgmgrSignalSingleton::Instance().sendSignal(
+ PKGMGR_END_KEY,
+ PKGMGR_END_FAILURE);
+
LogDebug("Call widget uninstall failure finishedCallback");
getInstallerStruct().finishedCallback(getInstallerStruct().userParam,
- getRemovedWidgetHandle(), m_exceptionCaught); //TODO
+ getRemovedTizenId(), m_exceptionCaught); //TODO
LogDebug("[JobWidgetUninstall] Asynchronous failure callback status sent");
}