Fix StepMergeTpkConfig for application attribute
[platform/core/appfw/wgt-backend.git] / src / hybrid / step / configuration / step_merge_tpk_config.cc
1 // Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
2 // Use of this source code is governed by an apache-2.0 license that can be
3 // found in the LICENSE file.
4
5 #include "hybrid/step/configuration/step_merge_tpk_config.h"
6
7 #include <pkgmgrinfo_basic.h>
8
9 #include <common/utils/glist_range.h>
10
11 #include "hybrid/hybrid_backend_data.h"
12
13 namespace hybrid {
14 namespace configuration {
15
16 StepMergeTpkConfig::StepMergeTpkConfig(
17     common_installer::InstallerContext* context,
18     MergeType type) : Step(context), merge_type_(type) {
19 }
20
21 common_installer::Step::Status StepMergeTpkConfig::process() {
22   HybridBackendData* data =
23       static_cast<HybridBackendData*>(context_->backend_data.get());
24   manifest_x* tpk_data = data->tpk_manifest_data.get();
25   manifest_x* wgt_data = context_->manifest_data.get();
26
27   if (merge_type_ == MergeType::CONCAT) {
28     wgt_data->application =
29         g_list_concat(wgt_data->application, tpk_data->application);
30   } else {
31     // mainappid should be webapp for hybrid pkg
32     for (application_x* app :
33         GListRange<application_x*>(tpk_data->application)) {
34       if (app->type && strcmp(app->type, "webapp") != 0)
35         continue;
36
37       if (app->mainapp)
38         free(app->mainapp);
39       app->mainapp = strdup("true");
40       if (!app->mainapp) {
41         LOG(ERROR) << "Out of memoery";
42         return Status::ERROR;
43       }
44       break;
45     }
46     wgt_data->application = tpk_data->application;
47   }
48
49   tpk_data->application = nullptr;
50   return Status::OK;
51 }
52
53 }  // namespace configuration
54 }  // namespace hybrid