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,
} 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
#include <memory>
#include <string>
+#include <utility>
#include "manifest_parser/manifest_handler.h"
#include "manifest_parser/values.h"
namespace tpk {
namespace parse {
+using LangTextPair = std::pair<std::string, std::string>;
+
class PackageInfo : public parser::ManifestData {
public:
/**
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
const std::string& nodisplay_setting() const {
return nodisplay_setting_;
}
+ const std::vector<LangTextPair>& labels() const {
+ return labels_;
+ }
private:
std::string xmlns_;
std::string version_;
std::string install_location_;
std::string nodisplay_setting_;
+ std::vector<LangTextPair> labels_;
};
/**
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 {
std::vector<ApplicationIcon> icons_;
};
+class ApplicationImagesInfo {
+ public:
+ std::vector<ApplicationImage> images;
+};
+
// Label
class LabelInfo : public parser::ManifestData {
public:
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";
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) {
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,
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;
std::vector<DataControlInfo> data_control;
std::vector<MetaDataInfo> meta_data;
ApplicationIconsInfo app_icons;
+ ApplicationImagesInfo app_images;
std::vector<LabelInfo> label;
};
* <ui-application>
* \_ <label>
* \_ <icon>
+ * \_ <image>
* \_ <app-control>
* | \_ <mime>
* | \_ <operation>