Fix StepMergeTpkConfig for application attribute
[platform/core/appfw/wgt-backend.git] / src / hybrid / step / configuration / step_merge_tpk_config.cc
index 913ad98..eb2619f 100644 (file)
@@ -6,25 +6,47 @@
 
 #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;
-
-  wgt_data->privileges =
-      g_list_concat(wgt_data->privileges, tpk_data->privileges);
-  tpk_data->privileges = 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;
 }