[Release] wrt-installer_0.1.23
[framework/web/wrt-installer.git] / src / logic / installer_logic.cpp
index 607ec92..aa9061c 100644 (file)
 using namespace WrtDB;
 
 namespace Logic {
-
 InstallerLogic::InstallerLogic() :
     m_NextHandle(0)
-{
-}
+{}
 
 InstallerLogic::~InstallerLogic()
 {
@@ -72,9 +70,10 @@ Jobs::JobHandle InstallerLogic::AddAndStartJob(Jobs::Job *job)
 
 //InstallWidget, UninstallWidget InstallPlugin method are almost the same
 // But each Job has different constructor, so creating new Job is specific
-// i.e. widgetHandle, path etc...
-Jobs::JobHandle InstallerLogic::InstallWidget(std::string const & widgetPath,
-        const WidgetInstallationStruct &installerStruct)
+Jobs::JobHandle InstallerLogic::InstallWidget(
+    const std::string & widgetPath,
+    const WidgetInstallationStruct &
+    installerStruct)
 {
     LogDebug("New Widget Installation:");
 
@@ -84,26 +83,32 @@ Jobs::JobHandle InstallerLogic::InstallWidget(std::string const & widgetPath,
     return AddAndStartJob(job);
 }
 
-Jobs::JobHandle InstallerLogic::UninstallWidget(WidgetHandle widgetHandle,
-        const WidgetUninstallationStruct &uninstallerStruct)
+Jobs::JobHandle InstallerLogic::UninstallWidget(
+    const std::string & widgetPkgName,
+    const
+    WidgetUninstallationStruct &uninstallerStruct)
 {
     LogDebug("New Widget Uninstallation");
 
     Jobs::Job *job =
-        new Jobs::WidgetUninstall::JobWidgetUninstall(widgetHandle,
+        new Jobs::WidgetUninstall::JobWidgetUninstall(widgetPkgName,
                                                       uninstallerStruct);
 
     return AddAndStartJob(job);
 }
 
-Jobs::JobHandle InstallerLogic::InstallPlugin(std::string const & pluginPath,
-        const PluginInstallerStruct &installerStruct)
+Jobs::JobHandle InstallerLogic::InstallPlugin(
+    std::string const & pluginPath,
+    const PluginInstallerStruct &
+    installerStruct)
 {
     LogDebug("New Plugin Installation");
 
     Jobs::Job *job =
         new Jobs::PluginInstall::JobPluginInstall(pluginPath, installerStruct);
-
+    // before start install plugin, reset plugin data which is stopped
+    // during installing. (PluginDAO::INSTALLATION_IN_PROGRESS)
+    ResetProgressPlugins();
     return AddAndStartJob(job);
 }
 
@@ -147,8 +152,7 @@ bool InstallerLogic::NextStep(Jobs::Job *job)
         delete job;
 
         return false;
-    }
-    catch (Jobs::JobExceptionBase &exc) {
+    } catch (Jobs::JobExceptionBase &exc) {
         //start revert job
         LogInfo("Exception occured: " << exc.getParam() <<
                 ". Reverting job...");
@@ -175,7 +179,8 @@ void InstallerLogic::InstallDeferredWidgetPackages()
     LogWarning("Not implemented");
     //    LogInfo("Installing deferred widget packages...");
     //
-    //    WidgetPackageList packages = GlobalDAO::GetDefferedWidgetPackageInstallationList();
+    //    WidgetPackageList packages =
+    // GlobalDAO::GetDefferedWidgetPackageInstallationList();
     //
     //    LogInfo(packages.size() << " widget package(s) to install");
     //
@@ -190,25 +195,6 @@ void InstallerLogic::InstallDeferredWidgetPackages()
 void InstallerLogic::InstallSingleDeferredPackage()
 {
     LogWarning("Not implemented");
-    //    if (m_packagesToInstall.empty())
-    //        return;
-    //
-    //    // Take single package
-    //    DPL::String widgetPackage = m_packagesToInstall.front();
-    //    m_packagesToInstall.pop_front();
-    //
-    //    // Remove it from DB
-    //    GlobalDAO::RemoveDefferedWidgetPackageInstallation(widgetPackage);
-    //
-    //    // Begin installation
-    //    LogInfo("Installing deferred widget package: " << widgetPackage);
-    //
-    //    // Post installation
-    //    CONTROLLER_POST_EVENT(
-    //        InstallerController, InstallerControllerEvents::InstallWidgetEvent(
-    //            DPL::ToUTF8String(widgetPackage).c_str(), WidgetInstallationStruct(
-    //                    &DummyInstallCallback, &DummyProgressCallback, NULL,
-    //                        WidgetUpdateMode::PolicyWac)));
 }
 
 void InstallerLogic::InstallWaitingPlugins()
@@ -224,6 +210,23 @@ void InstallerLogic::InstallWaitingPlugins()
     }
 }
 
+void InstallerLogic::ResetProgressPlugins()
+{
+    PluginHandleSetPtr progressPlugins;
+
+    progressPlugins =
+        PluginDAO::getPluginHandleByStatus(PluginDAO::INSTALLATION_IN_PROGRESS);
+
+    FOREACH(it, *progressPlugins) {
+        FeatureHandleListPtr featureListPtr =
+            FeatureDAOReadOnly::GetFeatureHandleListForPlugin(*it);
+        FOREACH(ItFeature, *featureListPtr) {
+            FeatureDAO::UnregisterFeature(*ItFeature);
+        }
+        PluginDAO::unregisterPlugin(*it);
+    }
+}
+
 bool InstallerLogic::resolvePluginDependencies(PluginHandle handle)
 {
     PluginHandleSetPtr dependencies(new PluginHandleSet);
@@ -240,7 +243,8 @@ bool InstallerLogic::resolvePluginDependencies(PluginHandle handle)
             PluginDAO::getPluginHandleForImplementedObject(*requiredObject);
 
         if (depHandle ==
-            Jobs::PluginInstall::JobPluginInstall::INVALID_HANDLE) {
+            Jobs::PluginInstall::JobPluginInstall::INVALID_HANDLE)
+        {
             LogError("Library implementing: " <<
                      *requiredObject << " NOT FOUND");
 
@@ -256,6 +260,5 @@ bool InstallerLogic::resolvePluginDependencies(PluginHandle handle)
 
     return true;
 }
-
 }