Update wrt-installer_0.0.51
[framework/web/wrt-installer.git] / src / jobs / widget_install / task_manifest_file.h
similarity index 50%
rename from src/jobs/widget_install/task_desktop_file.h
rename to src/jobs/widget_install/task_manifest_file.h
index 2218168..109812b 100644 (file)
@@ -14,7 +14,7 @@
  *    limitations under the License.
  */
 /**
- * @file    task_desktop_file.h
+ * @file    task_manifest_file.h
  * @author  Pawel Sikorski (p.sikorski@samgsung.com)
  * @version
  * @brief
 #include <dpl/task.h>
 #include <dpl/localization/localization_utils.h>
 
+#include <libxml2/libxml/xmlwriter.h>
+
+#include <libxml_utils.h>
+#include <widget_install/manifest.h>
+#include <dpl/localization/localization_utils.h>
+
+#include <dpl/wrt-dao-ro/widget_dao_read_only.h>
+
+
 class InstallerContext;
 
 namespace Jobs {
 namespace WidgetInstall {
-class TaskDesktopFile :
-    public DPL::TaskDecl<TaskDesktopFile>
+class TaskManifestFile :
+    public DPL::TaskDecl<TaskManifestFile>
 {
   public:
-    TaskDesktopFile(InstallerContext &inCont);
-    virtual ~TaskDesktopFile();
+
+    DECLARE_EXCEPTION_TYPE(DPL::Exception, Base)
+    DECLARE_EXCEPTION_TYPE(Base, ManifestValidationError)
+    DECLARE_EXCEPTION_TYPE(Base, ManifestParsingError)
+
+    TaskManifestFile(InstallerContext &inCont);
+    virtual ~TaskManifestFile();
 
   private:
     //context data
@@ -51,10 +65,27 @@ class TaskDesktopFile :
     void stepCreateExecFile();
     void stepFinalize();
     void stepCopyIconFiles();
+    void stepGenerateManifest();
+    void stepParseManifest();
+    void stepParseUpgradedManifest();
+
+    //For widget update
+    void stepBackupIconFiles();
+    void stepUpdateDesktopFile();
+    void stepUpdateFinalize();
+
+    void stepAbortIconFiles();
+    void stepAbortDesktopFile();
 
     //private data
     std::ostringstream desktop_name;
     std::ostringstream desktop_file;
+    std::ostringstream bp_desktop_file;
+    std::list<std::string> icon_list;
+    std::ostringstream backup_dir;
+    xmlTextWriterPtr writer;
+    DPL::String manifest_name;
+    DPL::String manifest_file;
 
     //private methods
     void moveDesktopFile();
@@ -65,11 +96,34 @@ class TaskDesktopFile :
     void saveWidgetVersion(std::ofstream &file);
     void saveWidgetOtherInfo(std::ofstream &file);
     void saveAppServiceInfo(std::ofstream &file);
+    void updateAilInfo();
+
+    void writeManifest(const DPL::String & path);
+    void validateManifest();
+    void commitManifest();
+
+    void setWidgetExecPath(UiApplication & uiApp);
+    void setWidgetName(Manifest & manifest, UiApplication & uiApp);
+    void setWidgetIcons(UiApplication & uiApp);
+    void setWidgetManifest(Manifest & manifest);
+    void setWidgetOtherInfo(UiApplication & uiApp);
+    void setAppServiceInfo(UiApplication & uiApp);
+
+    void generateWidgetName(Manifest & manifest, UiApplication &uiApp, const DPL::OptionalString& tag, DPL::OptionalString name, bool & defaultNameSaved);
+    void generateWidgetIcon(UiApplication & uiApp, const DPL::OptionalString& tag, const DPL::String& language, int iconId, const WrtDB::WidgetDAOReadOnly::WidgetIconList & list, bool & defaultIconSaved);
+
+    //for widget update
+    void backupDesktopFile();
+    void backupIconFiles();
+    void getFileList(const char* path, std::list<std::string> &list);
 
     static void saveLocalizedKey(std::ofstream &file,
             const DPL::String& key,
             const DPL::String& languageTag);
     DPL::String getIconTargetFilename(const DPL::String& languageTag) const;
+
+    static const char * encoding;
+
 };
 } //namespace WidgetInstall
 } //namespace Jobs