Parse extra elements in tpk manifest 78/53678/2 accepted/tizen/mobile/20151209.133327 accepted/tizen/tv/20151209.133351 accepted/tizen/wearable/20151209.133401 submit/tizen/20151209.100315
authorTomasz Iwanek <t.iwanek@samsung.com>
Tue, 8 Dec 2015 12:13:55 +0000 (13:13 +0100)
committerTomasz Iwanek <t.iwanek@samsung.com>
Wed, 9 Dec 2015 08:25:45 +0000 (09:25 +0100)
Added parsing for elements:
 - manifest/uiapplication/image,
 - manifest/label.

Change-Id: I3fccdd9f125c623cbd14a5234a9ce6c6585ec2d4

src/tpk_manifest_handlers/package_handler.cc
src/tpk_manifest_handlers/package_handler.h
src/tpk_manifest_handlers/ui_and_service_application_infos.h
src/tpk_manifest_handlers/ui_application_handler.cc
src/tpk_manifest_handlers/ui_application_handler.h

index d21183a..5beea2f 100644 (file)
@@ -26,6 +26,9 @@ const char kInstallLocation[] = "@install-location";
 const char kNodisplaySetting[] = "@nodisplay-setting";
 const char kAutoInstallLocation[] = "auto";
 const char kManifestKey[] = "manifest";
+const char kLabelKey[] = "label";
+const char kLabelLangKey[] = "@lang";
+const char kLabelTextKey[] = "#text";
 
 void ParsePackageAndStore(
     const parser::DictionaryValue& manifest_dict,
@@ -54,6 +57,14 @@ void ParsePackageAndStore(
   } else {
     pkg_info->set_install_location(install_location);
   }
+
+  for (auto label_dict : parser::GetOneOrMany(&manifest_dict, kLabelKey, "")) {
+    std::string lang;
+    std::string text;
+    label_dict->GetString(kLabelLangKey, &lang);
+    label_dict->GetString(kLabelTextKey, &text);
+    pkg_info->AddLabel(lang, text);
+  }
 }
 
 }  // namespace
index dea27c1..c0b23e9 100644 (file)
@@ -7,6 +7,7 @@
 
 #include <memory>
 #include <string>
+#include <utility>
 
 #include "manifest_parser/manifest_handler.h"
 #include "manifest_parser/values.h"
@@ -15,6 +16,8 @@
 namespace tpk {
 namespace parse {
 
+using LangTextPair = std::pair<std::string, std::string>;
+
 class PackageInfo : public parser::ManifestData {
  public:
   /**
@@ -61,6 +64,9 @@ class PackageInfo : public parser::ManifestData {
   void set_nodisplay_setting(const std::string& nodisplay_setting) {
     nodisplay_setting_ = nodisplay_setting;
   }
+  void AddLabel(const std::string& lang, const std::string& text) {
+    labels_.emplace_back(lang, text);
+  }
 
   /**
    * @brief xmlns
@@ -96,6 +102,9 @@ class PackageInfo : public parser::ManifestData {
   const std::string& nodisplay_setting() const {
     return nodisplay_setting_;
   }
+  const std::vector<LangTextPair>& labels() const {
+    return labels_;
+  }
 
  private:
   std::string xmlns_;
@@ -104,6 +113,7 @@ class PackageInfo : public parser::ManifestData {
   std::string version_;
   std::string install_location_;
   std::string nodisplay_setting_;
+  std::vector<LangTextPair> labels_;
 };
 
 /**
index 970c2e0..a64f398 100644 (file)
@@ -115,6 +115,25 @@ class ApplicationIcon  {
   std::string path_;
 };
 
+class ApplicationImage  {
+ public:
+  ApplicationImage(const std::string& name, const std::string& lang)
+      : name_(name), lang_(lang) {
+  }
+
+  const std::string& name() const {
+    return name_;
+  }
+
+  const std::string& lang() const {
+    return lang_;
+  }
+
+ private:
+  std::string name_;
+  std::string lang_;
+};
+
 class ApplicationIconsInfo : public parser::ManifestData {
  public:
   const std::vector<ApplicationIcon>& icons() const {
@@ -127,6 +146,11 @@ class ApplicationIconsInfo : public parser::ManifestData {
   std::vector<ApplicationIcon> icons_;
 };
 
+class ApplicationImagesInfo {
+ public:
+  std::vector<ApplicationImage> images;
+};
+
 // Label
 class LabelInfo : public parser::ManifestData {
  public:
index 6269fcd..2112deb 100644 (file)
@@ -51,6 +51,11 @@ const char kDataControlTypeKey[] = "@type";
 const char kIconKey[] = "icon";
 const char kIconTextKey[] = "#text";
 
+// image
+const char kImageKey[] = "image";
+const char kImageNameKey[] = "@name";
+const char kImageLangKey[] = "@lang";
+
 // label
 const char kLabelKey[] = "label";
 const char kLabelTextKey[] = "#text";
@@ -167,6 +172,18 @@ bool ParseAppIcon(
   return true;
 }
 
+bool ParseAppImage(
+  const parser::DictionaryValue* dict,
+  UIApplicationSingleEntry* info) {
+  std::string image_name;
+  std::string image_lang;
+  if (!dict->GetString(kImageNameKey, &image_name))
+    return false;
+  dict->GetString(kImageLangKey, &image_lang);
+  info->app_images.images.emplace_back(image_name, image_lang);
+  return true;
+}
+
 bool ParseLabel(
   const parser::DictionaryValue* dict,
   UIApplicationSingleEntry* info) {
@@ -244,6 +261,19 @@ bool InitializeIconParsing(
   return true;
 }
 
+bool InitializeImageParsing(
+    const parser::DictionaryValue& app_dict,
+    UIApplicationSingleEntry* uiapplicationinfo,
+    std::string* error) {
+  for (auto& item : parser::GetOneOrMany(&app_dict, kImageKey, "")) {
+    if (!ParseAppImage(item, uiapplicationinfo)) {
+      *error = "Parsing Icon failed";
+      return false;
+    }
+  }
+  return true;
+}
+
 bool InitializeLabelParsing(
     const parser::DictionaryValue& control_dict,
     UIApplicationSingleEntry* uiapplicationinfo,
@@ -270,6 +300,8 @@ bool InitializeParsing(const parser::DictionaryValue& app_dict,
     return false;
   if (!InitializeLabelParsing(app_dict, uiapplicationinfo, error))
     return false;
+  if (!InitializeImageParsing(app_dict, uiapplicationinfo, error))
+    return false;
   if (!InitializeBackgroundCategoryParsing(app_dict, uiapplicationinfo, error))
     return false;
   return true;
index 9340425..ec3d957 100644 (file)
@@ -215,6 +215,7 @@ struct UIApplicationSingleEntry : public parser::ManifestData {
   std::vector<DataControlInfo> data_control;
   std::vector<MetaDataInfo> meta_data;
   ApplicationIconsInfo app_icons;
+  ApplicationImagesInfo app_images;
   std::vector<LabelInfo> label;
 };
 
@@ -229,6 +230,7 @@ struct UIApplicationInfoList : public parser::ManifestData {
  *  <ui-application>
  *  \_  <label>
  *  \_  <icon>
+ *  \_  <image>
  *  \_  <app-control>
  *  |   \_  <mime>
  *  |   \_  <operation>