[Release] wrt-installer_0.1.9
[framework/web/wrt-installer.git] / src / jobs / widget_install / task_widget_config.h
index 0655964..fdaf1e9 100644 (file)
@@ -14,7 +14,7 @@
  *    limitations under the License.
  */
 /*
- * @file    task_widget_config.cpp
+ * @file    task_widget_config.h
  * @author  Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
  * @version 1.0
  * @brief   Implementation file for installer task widget config
 #ifndef INSTALLER_CORE_JOS_WIDGET_INSTALL_TASK_WIDGET_CONFIG_H
 #define INSTALLER_CORE_JOS_WIDGET_INSTALL_TASK_WIDGET_CONFIG_H
 
-#include <WidgetConfigurationManager.h>
+#include <set>
+#include <list>
+
 #include <dpl/task.h>
 #include <dpl/task_list.h>
 #include <dpl/string.h>
-#include <dpl/event/nested_loop.h>
-#include <wrt_error.h>
+#include <dpl/optional.h>
+#include <dpl/wrt-dao-ro/config_parser_data.h>
+#include <dpl/wrt-dao-ro/widget_dao_read_only.h>
 #include <dpl/wrt-dao-ro/global_config.h>
-#include <set>
-#include <dpl/popup/popup_controller.h>
-#include <dpl/popup/popup_manager.h>
-#include <dpl/popup/popup_renderer.h>
+
 #include <wrt_common_types.h>
+#include <widget_install/widget_install_popup.h>
 
 class InstallerContext;
 
@@ -43,51 +44,88 @@ namespace InstallerTaskWidgetPopupData {
 struct PopupData
 {
     DPL::String widgetInfo;
-    void addWidgetInfo(const DPL::String &head,
-            const DPL::String &info);
+    void addWidgetInfo(const DPL::String &info);
 };
 } // InstalllerTaskWidgetPopupData
 
 class TaskWidgetConfig :
     public DPL::TaskDecl<TaskWidgetConfig>,
-    public DPL::Popup::PopupControllerUser
+    public WidgetInstallPopup
 {
   private:
-    enum PowderInfoButton
+    class Exception
     {
-        WRT_POPUP_BUTTON_OK, WRT_POPUP_BUTTON_CANCEL
+      public:
+        DECLARE_EXCEPTION_TYPE(DPL::Exception, Base)
+        DECLARE_EXCEPTION_TYPE(Base, ConfigParseFailed)
     };
 
+    typedef std::list<std::pair<DPL::String, DPL::String> > StringPairList;
+
     InstallerContext& m_installContext;
     WrtDB::LocaleSet m_localeFolders;
     std::set<DPL::String> m_processedIconSet;
-    bool m_installCancel;
     InstallerTaskWidgetPopupData::PopupData m_popupData;
 
     void StepProcessConfigurationFile();
     void ReadLocaleFolders();
     void ProcessLocalizedStartFiles();
-    void ProcessStartFile(const DPL::OptionalString& path,
-            const DPL::OptionalString& type,
-            const DPL::OptionalString& encoding = DPL::OptionalString::Null,
-            bool typeForcedInConfig = false);
+    void ProcessStartFile(
+        const DPL::OptionalString& path,
+        const DPL::OptionalString& type,
+        const DPL::OptionalString& encoding =
+            DPL::OptionalString::Null,
+        bool typeForcedInConfig = false);
+    void ProcessBackgroundPageFile();
     void ProcessLocalizedIcons();
     void ProcessIcon(const WrtDB::ConfigParserData::Icon& icon);
-    void StepProcessPowderFile();
+    void ProcessWidgetInstalledPath();
     void StepVerifyFeatures();
     void StepShowWidgetInfo();
-    void StepPowderCancel();
-    void StepFeatureCancel();
+    void StepCheckMinVersionInfo();
+
+    template <typename Ex, const char* Msg>
+    void StepCancelInstallation();
+
+    void StepDeletePopupWin();
+    void StepCancelWidgetInstallationAfterVerifyFeatures();
     void StepCancelWidgetInstallation();
-    void StepShowPowderPassword();
-    void StepShowPowderPasswordCancel();
-    void PopupCreate();
-    DPL::String createPowderInfo() const;
-    void AnswerCallback(const DPL::Popup::AnswerCallbackData& answer);
+    void StepCancelWidgetInstallationAfterMinVersion();
+    void createInstallPopup(PopupType type, const std::string &label);
     DPL::String createAuthorWidgetInfo() const;
-    void setApplicationType();
     bool isFeatureAllowed(
-            WrtDB::AppType appType, DPL::String featureName);
+        WrtDB::AppType appType, DPL::String featureName);
+    bool isMinVersionCompatible(
+        WrtDB::AppType appType,
+        const DPL::OptionalString &widgetVersion) const;
+    /**
+     * @brief Parses version string in format "major.minor.micro anything"
+     * Returns false if format is invalid
+     */
+    bool isTizenWebApp() const;
+    bool parseVersionString(const std::string &version, long &majorVersion,
+                            long &minorVersion, long &microVersion) const;
+    /**
+     * This method is used to process the config.xml of widget, get
+     * the corresponding configuration to pWidgetConfigInfo
+     *
+     * @param[in] path Specified the widget archive file path (absolute path).
+     * @return         Configuration information of  widget
+     */
+    void processFile(const std::string& path,
+                     WrtDB::WidgetRegisterInfo &wConfig);
+
+    bool locateAndParseConfigurationFile(
+        const std::string& currentPath,
+        WrtDB::WidgetRegisterInfo&
+        pWidgetConfigInfo,
+        const std::string& baseFolder);
+    bool parseConfigurationFileBrowser(WrtDB::ConfigParserData& configInfo,
+                                       const std::string& _currentPath);
+    bool parseConfigurationFileWidget(WrtDB::ConfigParserData& configInfo,
+                                      const std::string& _currentPath);
+    bool fillWidgetConfig(WrtDB::WidgetRegisterInfo& pWidgetConfigInfo,
+                          WrtDB::ConfigParserData& configInfo);
 
   public:
     TaskWidgetConfig(InstallerContext& installTaskContext);