External file removal fix
[framework/web/wrt-installer.git] / src / jobs / widget_install / task_database.cpp
index 4f800bb..450de41 100644 (file)
@@ -49,6 +49,7 @@ TaskDatabase::TaskDatabase(InstallerContext& context) :
     AddStep(&TaskDatabase::StepRegisterExternalFiles);
     AddStep(&TaskDatabase::StepWrtDBInsert);
     AddStep(&TaskDatabase::StepAceDBInsert);
+    AddStep(&TaskDatabase::StepRemoveExternalFiles);
 
     AddAbortStep(&TaskDatabase::StepAbortDBInsert);
 }
@@ -134,28 +135,11 @@ void TaskDatabase::StepRegisterExternalFiles()
     {
         WidgetDAO dao(m_context.locations->getPkgname());
         WrtDB::ExternalLocationList externalLocationsDB = dao.getWidgetExternalLocations();
-        LogDebug("Removing external files:");
         FOREACH(file, externalLocationsDB)
         {
             if(std::find(externalLocationsUpdate.begin(), externalLocationsUpdate.end(), *file) == externalLocationsUpdate.end())
             {
-                if(WrtUtilFileExists(*file))
-                {
-                    LogDebug("  -> " << *file);
-                    remove(file->c_str());
-                }
-                else if(WrtUtilDirExists(*file))
-                {
-                    LogDebug("  -> " << *file);
-                    if(!WrtUtilRemove(*file)){
-                        ThrowMsg(Exceptions::RemovingFolderFailure,
-                                "Failed to remove external directory");
-                    }
-                }
-                else
-                {
-                    LogWarning("  -> " << *file << "(no such a path)");
-                }
+                m_externalLocationsToRemove.push_back(*file);
             }
         }
     }
@@ -165,10 +149,39 @@ void TaskDatabase::StepRegisterExternalFiles()
         LogDebug("  -> " << *file);
     }
 
-    //set external lcoations to be registered
+    //set external locations to be registered
     m_context.widgetConfig.externalLocations = externalLocationsUpdate;
 }
 
+void TaskDatabase::StepRemoveExternalFiles()
+{
+    if(!m_externalLocationsToRemove.empty())
+    {
+        LogDebug("Removing external files:");
+    }
+
+    FOREACH(file, m_externalLocationsToRemove)
+    {
+        if(WrtUtilFileExists(*file))
+        {
+            LogDebug("  -> " << *file);
+            remove(file->c_str());
+        }
+        else if(WrtUtilDirExists(*file))
+        {
+            LogDebug("  -> " << *file);
+            if(!WrtUtilRemove(*file)){
+                ThrowMsg(Exceptions::RemovingFolderFailure,
+                        "Failed to remove external directory");
+            }
+        }
+        else
+        {
+            LogWarning("  -> " << *file << "(no such a path)");
+        }
+    }
+}
+
 void TaskDatabase::StepAbortDBInsert()
 {
     LogWarning("[DB Update Task] Aborting... (DB Clean)");