<xs:element ref="packages:description"/>
<xs:element ref="packages:label"/>
<xs:element ref="packages:icon"/>
+ <xs:element ref="packages:metadata"/>
<xs:element ref="packages:allowed-package"/>
<xs:element ref="packages:dependencies"/>
</xs:choice>
<xs:attribute name="dpi" type="xs:string"/>
</xs:complexType>
</xs:element>
+ <xs:element name="metadata">
+ <xs:complexType>
+ <xs:attribute name="key" use="required" type="xs:string"/>
+ <xs:attribute name="value" type="xs:string"/>
+ <xs:anyAttribute processContents="lax"/>
+ </xs:complexType>
+ </xs:element>
<xs:element name="allowed-package">
<xs:complexType>
<xs:choice maxOccurs="unbounded" minOccurs="0">
manifest->icon = g_list_append(manifest->icon, icon);
}
+ for (auto& meta_data : pkg_info->meta_data()) {
+ metadata_x* md = reinterpret_cast<metadata_x*>(
+ calloc(1, sizeof(metadata_x)));
+ if (!md) {
+ LOG(ERROR) << "Out of memory";
+ return false;
+ }
+ md->key = strdup(meta_data.key().c_str());
+ if (!meta_data.val().empty())
+ md->value = strdup(meta_data.val().c_str());
+ manifest->metadata = g_list_append(manifest->metadata, md);
+ }
+
return true;
}
constexpr const char kLabelKey[] = "label";
constexpr const char kLabelLangKey[] = "@lang";
constexpr const char kLabelTextKey[] = "#text";
+constexpr const char kMetaDataKey[] = "metadata";
+constexpr const char kMetaDataKeyKey[] = "@key";
+constexpr const char kMetaDataValueKey[] = "@value";
const char kIconKey[] = "icon";
const char kIconLangKey[] = "@lang";
const char kIconTextKey[] = "#text";
pkg_info->AddIcon(lang, text);
}
+ for (auto manifest_dict : parser::GetOneOrMany(&manifest_dict, kMetaDataKey,
+ "")) {
+ std::string key;
+ std::string value;
+ manifest_dict->GetString(kMetaDataKeyKey, &key);
+ manifest_dict->GetString(kMetaDataValueKey, &value);
+ pkg_info->AddMetadata(std::move(key), std::move(value));
+ }
+
return true;
}
using LangTextPair = std::pair<std::string, std::string>;
+// MetaData
+class MetaDataInfo : public parser::ManifestData {
+ public:
+ MetaDataInfo(std::string key, std::string val)
+ : key_(std::move(key)), value_(std::move(val)) {}
+
+ const std::string& key() const {
+ return key_;
+ }
+ const std::string& val() const {
+ return value_;
+ }
+
+ private:
+ std::string key_;
+ std::string value_;
+};
+
class PackageInfo : public parser::ManifestData {
public:
/**
icons_.emplace_back(lang, text);
}
+ void AddMetadata(std::string key, std::string value) {
+ meta_data_.emplace_back(key, value);
+ }
+
/**
* @brief xmlns
* @return xmlns string
return icons_;
}
+ // naming consistency with metadata of tpk_manifest_handlers
+ const std::vector<MetaDataInfo>& meta_data() const {
+ return meta_data_;
+ }
+
private:
std::string xmlns_;
std::string package_;
std::vector<LangTextPair> labels_;
std::vector<LangTextPair> icons_;
+ std::vector<MetaDataInfo> meta_data_;
};
/**