#include <pkgmgrinfo_basic.h>
+#include <common/utils/glist_range.h>
+
#include "hybrid/hybrid_backend_data.h"
namespace hybrid {
namespace configuration {
+StepMergeTpkConfig::StepMergeTpkConfig(
+ common_installer::InstallerContext* context,
+ MergeType type) : Step(context), merge_type_(type) {
+}
+
common_installer::Step::Status StepMergeTpkConfig::process() {
HybridBackendData* data =
static_cast<HybridBackendData*>(context_->backend_data.get());
manifest_x* tpk_data = data->tpk_manifest_data.get();
manifest_x* wgt_data = context_->manifest_data.get();
- wgt_data->application =
- g_list_concat(wgt_data->application, tpk_data->application);
- tpk_data->application = nullptr;
+ if (merge_type_ == MergeType::CONCAT) {
+ wgt_data->application =
+ g_list_concat(wgt_data->application, tpk_data->application);
+ } else {
+ // mainappid should be webapp for hybrid pkg
+ for (application_x* app :
+ GListRange<application_x*>(tpk_data->application)) {
+ if (app->type && strcmp(app->type, "webapp") != 0)
+ continue;
+
+ if (app->mainapp)
+ free(app->mainapp);
+ app->mainapp = strdup("true");
+ if (!app->mainapp) {
+ LOG(ERROR) << "Out of memoery";
+ return Status::ERROR;
+ }
+ break;
+ }
+ wgt_data->application = tpk_data->application;
+ }
+ tpk_data->application = nullptr;
return Status::OK;
}