BAD_CAST app->taskmanage);
}
-void WriteWidgetApplicationAttributes(
- xmlTextWriterPtr writer, application_x *app) {
+bool WriteWidgetApplicationAttributesAndElements(
+ xmlTextWriterPtr writer, application_x *app,
+ const wgt::parse::AppWidgetInfo& widget_info,
+ const bf::path& shared_path) {
if (app->nodisplay)
xmlTextWriterWriteAttribute(writer, BAD_CAST "nodisplay",
BAD_CAST app->nodisplay);
if (app->multiple)
xmlTextWriterWriteAttribute(writer, BAD_CAST "multiple",
BAD_CAST app->multiple);
+ if (app->mainapp)
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "main",
+ BAD_CAST app->mainapp);
+
+ auto& appwidgets = widget_info.app_widgets();
+ const auto& appwidget = std::find_if(appwidgets.begin(), appwidgets.end(),
+ [app](const wgt::parse::AppWidget& widget) {
+ return widget.id == app->appid;
+ });
+ if (appwidget == appwidgets.end()) {
+ return true;
+ }
+
+ // Add extra elements for wgt widget-application
+ if (!appwidget->update_period.empty()) {
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "update-period", BAD_CAST
+ std::to_string(static_cast<int>(
+ appwidget->update_period.front())).c_str());
+ }
+
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "max-instance",
+ BAD_CAST std::to_string(appwidget->max_instance).c_str());
+
+ for (auto& size : appwidget->content_size) {
+ xmlTextWriterStartElement(writer, BAD_CAST "support-size");
+
+ std::string type = wgt::parse::AppWidgetSizeTypeToString(size.type);
+ if (!size.preview.empty()) {
+ std::string icon_name = shared_path.string() + "/"
+ + appwidget->id + "." + type + "." + "preview" +
+ bf::path(size.preview).extension().string();
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "preview",
+ BAD_CAST icon_name.c_str()); // NOLINT
+ }
+
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "frame",
+ BAD_CAST "true");
+ xmlTextWriterWriteString(writer,
+ BAD_CAST type.c_str());
+ xmlTextWriterEndElement(writer);
+ }
+
+ for (auto& pair : appwidget->metadata) {
+ xmlTextWriterStartElement(writer, BAD_CAST "metadata");
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "key",
+ BAD_CAST pair.first.c_str());
+ if (!pair.second.empty())
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "value",
+ BAD_CAST pair.second.c_str());
+ xmlTextWriterEndElement(writer);
+ }
+ return true;
}
void WriteWatchApplicationAttributes(
- xmlTextWriterPtr writer, application_x *app) {
- if (app->ambient_support)
+ xmlTextWriterPtr writer, application_x* app) {
+ if (app->support_ambient)
xmlTextWriterWriteAttribute(writer, BAD_CAST "ambient-support",
- BAD_CAST app->ambient_support);
+ BAD_CAST app->support_ambient);
}
} // namespace
WriteServiceApplicationAttributes(writer, app);
break;
case AppCompType::WIDGETAPP:
- WriteWidgetApplicationAttributes(writer, app);
+ if (!WriteWidgetApplicationAttributesAndElements(writer, app,
+ static_cast<WgtBackendData*>(
+ context_->backend_data.get())->appwidgets.get(),
+ context_->pkg_path.get() / "shared" / "res"))
+ return Status::MANIFEST_ERROR;
break;
case AppCompType::WATCHAPP:
WriteWatchApplicationAttributes(writer, app);
}
for (label_x* label : GListRange<label_x*>(app->label)) {
- xmlTextWriterStartElement(writer, BAD_CAST "label");
- if (label->lang && strcmp(DEFAULT_LOCALE, label->lang) != 0) {
- xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
- BAD_CAST label->lang);
+ if (label->name && strcmp(label->name, "") != 0) {
+ xmlTextWriterStartElement(writer, BAD_CAST "label");
+ if (label->lang && strcmp(DEFAULT_LOCALE, label->lang) != 0) {
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
+ BAD_CAST label->lang);
+ }
+ xmlTextWriterWriteString(writer, BAD_CAST label->name);
+ xmlTextWriterEndElement(writer);
}
- xmlTextWriterWriteString(writer, BAD_CAST label->name);
- xmlTextWriterEndElement(writer);
}
- if (app->icon) {
- icon_x* iconx = reinterpret_cast<icon_x*>(app->icon->data);
- xmlTextWriterWriteFormatElement(
- writer, BAD_CAST "icon", "%s", BAD_CAST iconx->text);
- } else {
- // Default icon setting is role of the platform
- LOG(DEBUG) << "Icon was not found in application";
+ for (auto& icon : GListRange<icon_x*>(app->icon)) {
+ xmlTextWriterStartElement(writer, BAD_CAST "icon");
+ if (icon->lang && strcmp(DEFAULT_LOCALE, icon->lang) != 0) {
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
+ BAD_CAST icon->lang);
+ }
+ xmlTextWriterWriteString(writer, BAD_CAST icon->text);
+ xmlTextWriterEndElement(writer);
}
for (image_x* image : GListRange<image_x*>(app->image)) {
}
common_installer::Step::Status StepGenerateXml::undo() {
- bs::error_code error;
- if (bf::exists(context_->xml_path.get()))
- bf::remove_all(context_->xml_path.get(), error);
+ common_installer::RemoveAll(context_->xml_path.get());
return Status::OK;
}
}
if (context_->pkgid.get().empty()) {
LOG(ERROR) << "pkgid attribute is empty";
- return Step::Status::PACKAGE_NOT_FOUND; }
+ return Step::Status::PACKAGE_NOT_FOUND;
+ }
if (!context_->manifest_data.get()->application) {
LOG(ERROR) << "No application in package";
return Step::Status::INVALID_VALUE;
}
- // TODO(p.sikorski) check context_->uid.get()
return Step::Status::OK;
}
common_installer::Step::Status StepGenerateXml::process() {
bf::path xml_path =
- bf::path(getUserManifestPath(context_->uid.get(), false))
+ bf::path(getUserManifestPath(context_->uid.get(),
+ context_->is_readonly_package.get()))
/ bf::path(context_->pkgid.get());
xml_path += ".xml";
context_->xml_path.set(xml_path.string());
return status;
}
GeneratePrivilege(writer);
+ GenerateProvidesAppDefinedPrivilege(writer);
GenerateAccount(writer);
GenerateIme(writer);
GenerateProfiles(writer);
GenerateShortcuts(writer);
- GenerateWidget(writer);
-
+ GenerateTrustAnchor(writer);
xmlTextWriterEndElement(writer);
return Status::OK;
}
BAD_CAST context_->manifest_data.get()->api_version);
xmlTextWriterWriteAttribute(writer, BAD_CAST "nodisplay-setting",
BAD_CAST context_->manifest_data.get()->nodisplay_setting);
+ if (context_->is_readonly_package.get()) {
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "readonly", BAD_CAST "true");
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "preload", BAD_CAST "true");
+ } else if (context_->is_preload_rw_package.get()) {
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "preload", BAD_CAST "true");
+ }
}
void StepGenerateXml::GenerateLangLabels(xmlTextWriterPtr writer) {
for (label_x* label :
GListRange<label_x*>(context_->manifest_data.get()->label)) {
- xmlTextWriterStartElement(writer, BAD_CAST "label");
- if (label->lang && strcmp(DEFAULT_LOCALE, label->lang) != 0) {
+ if (label->name && strcmp(label->name, "") != 0) {
+ xmlTextWriterStartElement(writer, BAD_CAST "label");
+ if (label->lang && strcmp(DEFAULT_LOCALE, label->lang) != 0) {
xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
- BAD_CAST label->lang);
+ BAD_CAST label->lang);
+ }
+ xmlTextWriterWriteString(writer, BAD_CAST label->name);
+ xmlTextWriterEndElement(writer);
}
- xmlTextWriterWriteString(writer, BAD_CAST label->name);
- xmlTextWriterEndElement(writer);
}
}
xmlFreeTextWriter(writer);
return Status::ERROR;
}
- GenerateApplicationCommonXml(app, writer, type);
+ Status status = GenerateApplicationCommonXml(app, writer, type);
+ if (status != Status::OK) {
+ xmlFreeTextWriter(writer);
+ return status;
+ }
xmlTextWriterEndElement(writer);
}
return Status::OK;
}
void StepGenerateXml::GeneratePrivilege(xmlTextWriterPtr writer) {
- if (context_->manifest_data.get()->privileges) {
+ if (context_->manifest_data.get()->privileges) {
xmlTextWriterStartElement(writer, BAD_CAST "privileges");
- for (const char* priv :
- GListRange<char*>(context_->manifest_data.get()->privileges)) {
- xmlTextWriterWriteFormatElement(writer, BAD_CAST "privilege",
- "%s", BAD_CAST priv);
+ for (privilege_x* priv :
+ GListRange<privilege_x*>(context_->manifest_data.get()->privileges)) {
+ xmlTextWriterStartElement(writer, BAD_CAST "privilege");
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "type",
+ BAD_CAST priv->type);
+ xmlTextWriterWriteString(writer, BAD_CAST priv->value);
+ xmlTextWriterEndElement(writer);
+ }
+ if (context_->manifest_data.get()->appdefined_privileges) {
+ for (appdefined_privilege_x* priv : GListRange<appdefined_privilege_x*>(
+ context_->manifest_data.get()->appdefined_privileges)) {
+ xmlTextWriterStartElement(writer, BAD_CAST "appdefined-privilege");
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "license",
+ BAD_CAST priv->license);
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "type",
+ BAD_CAST priv->type);
+ xmlTextWriterWriteString(writer, BAD_CAST priv->value);
+ xmlTextWriterEndElement(writer);
+ }
}
+ xmlTextWriterEndElement(writer);
+ }
+}
+void StepGenerateXml::GenerateProvidesAppDefinedPrivilege(
+ xmlTextWriterPtr writer) {
+ if (context_->manifest_data.get()->provides_appdefined_privileges) {
+ xmlTextWriterStartElement(writer, BAD_CAST "provides-appdefined-privileges");
+ for (appdefined_privilege_x* priv : GListRange<appdefined_privilege_x*>(
+ context_->manifest_data.get()->provides_appdefined_privileges)) {
+ xmlTextWriterStartElement(writer, BAD_CAST "appdefined-privilege");
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "license",
+ BAD_CAST priv->license);
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "type",
+ BAD_CAST priv->type);
+ xmlTextWriterWriteString(writer, BAD_CAST priv->value);
+ xmlTextWriterEndElement(writer);
+ }
xmlTextWriterEndElement(writer);
}
}
xmlTextWriterWriteAttribute(writer,
BAD_CAST "multiple-accounts-support",
BAD_CAST "true");
+ else
+ xmlTextWriterWriteAttribute(writer,
+ BAD_CAST "multiple-accounts-support",
+ BAD_CAST "false");
for (auto& icon_pair : account.icon_paths) {
xmlTextWriterStartElement(writer, BAD_CAST "icon");
if (icon_pair.first == "AccountSmall")
if (!shortcut.app_id.empty())
xmlTextWriterWriteAttribute(writer, BAD_CAST "appid",
BAD_CAST shortcut.app_id.c_str());
- if (!shortcut.app_id.empty())
+ if (!shortcut.extra_data.empty())
xmlTextWriterWriteAttribute(writer, BAD_CAST "extra_data",
BAD_CAST shortcut.extra_data.c_str());
- if (!shortcut.app_id.empty())
+ if (!shortcut.extra_key.empty())
xmlTextWriterWriteAttribute(writer, BAD_CAST "extra_key",
BAD_CAST shortcut.extra_key.c_str());
if (!shortcut.icon.empty()) {
}
}
-void StepGenerateXml::GenerateWidget(xmlTextWriterPtr writer) {
- WgtBackendData* backend_data =
- static_cast<WgtBackendData*>(context_->backend_data.get());
- bf::path widget_content_path = context_->pkg_path.get() / kResWgt;
- for (auto& appwidget : backend_data->appwidgets.get().app_widgets()) {
- xmlTextWriterStartElement(writer, BAD_CAST "widget");
- xmlTextWriterWriteAttribute(writer, BAD_CAST "appid",
- BAD_CAST appwidget.id.c_str());
- xmlTextWriterWriteAttribute(writer, BAD_CAST "primary",
- BAD_CAST (appwidget.primary ? "true" : "false")); // NOLINT
- xmlTextWriterWriteAttribute(writer, BAD_CAST "abi",
- BAD_CAST "html");
- xmlTextWriterWriteAttribute(writer, BAD_CAST "network",
- BAD_CAST "true");
- xmlTextWriterWriteAttribute(writer, BAD_CAST "nodisplay",
- BAD_CAST "false");
+void StepGenerateXml::GenerateTrustAnchor(xmlTextWriterPtr writer) {
+ if (!context_->manifest_data.get()->pkg_certs_dir ||
+ !context_->manifest_data.get()->use_system_certs)
+ return;
- if (!appwidget.label.default_value.empty()) {
- xmlTextWriterStartElement(writer, BAD_CAST "label");
- xmlTextWriterWriteString(writer,
- BAD_CAST appwidget.label.default_value.c_str());
- xmlTextWriterEndElement(writer);
- }
- for (auto& pair : appwidget.label.lang_value_map) {
- xmlTextWriterStartElement(writer, BAD_CAST "label");
- xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
- BAD_CAST pair.first.c_str());
- xmlTextWriterWriteString(writer, BAD_CAST pair.second.c_str());
- xmlTextWriterEndElement(writer);
- }
-
- if (!appwidget.icon_src.empty()) {
- xmlTextWriterStartElement(writer, BAD_CAST "icon");
- xmlTextWriterWriteString(writer, BAD_CAST appwidget.icon_src.c_str());
- xmlTextWriterEndElement(writer);
- }
+ xmlTextWriterStartElement(writer, BAD_CAST "trust-anchor");
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "pkg-certs-dir",
+ BAD_CAST context_->manifest_data.get()->pkg_certs_dir);
- xmlTextWriterStartElement(writer, BAD_CAST "box");
- xmlTextWriterWriteAttribute(writer, BAD_CAST "type", BAD_CAST "buffer");
- xmlTextWriterWriteAttribute(writer, BAD_CAST "mouse_event",
- BAD_CAST (appwidget.content_mouse_event ? "true" : "false")); // NOLINT
- xmlTextWriterWriteAttribute(writer, BAD_CAST "touch_effect",
- BAD_CAST (appwidget.content_touch_effect ? "true" : "false")); // NOLINT
- xmlTextWriterStartElement(writer, BAD_CAST "script");
- bf::path src = widget_content_path / appwidget.content_src;
- xmlTextWriterWriteAttribute(writer, BAD_CAST "src",
- BAD_CAST src.c_str());
- xmlTextWriterEndElement(writer);
- for (auto& size : appwidget.content_size) {
- xmlTextWriterStartElement(writer, BAD_CAST "size");
-
- std::string type = wgt::parse::AppWidgetSizeTypeToString(size.type);
- if (!size.preview.empty()) {
- std::string icon_name = appwidget.id + "." + type + "." + "preview" +
- bf::path(size.preview).extension().string();
- bf::path preview_icon =
- context_->pkg_path.get() / kSharedRes / icon_name;
- xmlTextWriterWriteAttribute(writer, BAD_CAST "preview",
- BAD_CAST preview_icon.c_str()); // NOLINT
- }
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "use-system-certs",
+ BAD_CAST context_->manifest_data.get()->use_system_certs);
- xmlTextWriterWriteAttribute(writer, BAD_CAST "need_frame",
- BAD_CAST "true");
- xmlTextWriterWriteString(writer,
- BAD_CAST type.c_str());
- xmlTextWriterEndElement(writer);
- }
- xmlTextWriterEndElement(writer);
-
- xmlTextWriterEndElement(writer);
- }
+ xmlTextWriterEndElement(writer);
}
} // namespace pkgmgr