Add attribute for lib rpk 85/303785/7
authorSangyoon Jang <jeremy.jang@samsung.com>
Fri, 5 Jan 2024 01:28:52 +0000 (10:28 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Mon, 8 Jan 2024 06:02:19 +0000 (15:02 +0900)
Change-Id: Ia85734e3fdbd7f3bb21d43f043820902bff51e78
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
include/pkgmgr-info.h
include/pkgmgrinfo_basic.h
parser/include/pkgmgr_parser_db_queries.h
pkg_db_version.txt.in
src/common/parcel/pkginfo_parcelable.cc
src/pkgmgrinfo_basic.c
src/pkgmgrinfo_pkginfo.c
src/server/pkginfo_internal.cc
test/unit_tests/parcel_utils.cc

index 9a856d6dc0eece1e6ab47b23cdd5ad3028ed81d8..ee8cb743092e33cd60ddca9a59a1d9006c68bbac 100644 (file)
@@ -2171,6 +2171,43 @@ int pkgmgrinfo_pkginfo_is_support_disable(pkgmgrinfo_pkginfo_h handle, bool *sup
   */
 int pkgmgrinfo_pkginfo_is_global(pkgmgrinfo_pkginfo_h handle, bool *global);
 
+/**
+ * @fn int pkgmgrinfo_pkginfo_is_lib(pkgmgrinfo_pkginfo_h handle, bool *lib)
+ * @brief      This API gets whether the given package is lib resource package or not
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in]  handle  pointer to package info handle
+ * @param[in]  global  pointer to hold package global value
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @pre                pkgmgrinfo_pkginfo_get_pkginfo()
+ * @post               pkgmgrinfo_pkginfo_destroy_pkginfo()
+ * @see                pkgmgrinfo_pkginfo_get_pkgid()
+static int get_pkg_is_lib(const char *pkgid)
+{
+       int ret = 0;
+       bool lib;
+       pkgmgrinfo_pkginfo_h handle = NULL;
+       ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
+       if (ret != PMINFO_R_OK)
+               return -1;
+       ret = pkgmgrinfo_pkginfo_is_lib(handle, &lib);
+       if (ret != PMINFO_R_OK) {
+               pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+               return -1;
+       }
+       printf("pkg lib: %d\n", lib);
+       pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+       return 0;
+}
+ * @endcode
+ */
+int pkgmgrinfo_pkginfo_is_lib(pkgmgrinfo_pkginfo_h handle, bool *lib);
+
 /**
  * @fn int pkgmgrinfo_pkginfo_is_accessible(pkgmgrinfo_pkginfo_h handle, bool *accessible)
  * @brief      This API gets the package 'accessible' value from the package ID
index d75c33f9cbb9e96714419b5ffe7a3819a0c30d20..9623cb6e3576311b1ce8a02251b91788b2503819 100644 (file)
@@ -243,6 +243,7 @@ typedef struct package_x {
        char *locale;   /*no xml part*/
        char *res_type; /**< res type, attr*/
        char *res_version;      /**< res version, attr*/
+       char *lib;      /**< whether lib rpk or not, attr*/
        char *is_disabled; /**< Flag that indicates if the package is disabled or not, no xml part*/
        char *light_user_switch_mode;   /**< light_user_switch_mode flag, attr, default: "dafault"*/
        GList *icon;            /**< package icon, element*/
index d3bf46e07c6a9a52a5b778f42256cbab7aecb028..649bd645e9f5bb19a2f105761e5db250564893ea 100644 (file)
        "  package TEXT NOT NULL,\n" \
        "  res_type TEXT NOT NULL,\n" \
        "  res_version TEXT NOT NULL,\n" \
+       "  lib TEXT NOT NULL DEFAULT 'false',\n" \
        "  PRIMARY KEY(res_type, res_version)\n" \
        "  FOREIGN KEY(package)\n" \
        "  REFERENCES package_info(package) ON DELETE CASCADE)"
index 4ae0e53cd9b195e6c3e711750d1b0040df4bb4cc..a23d04a18aaac6c6346f879edb4dc810631597ac 100644 (file)
@@ -1 +1 @@
-30009
+30010
index e0f35d380efa2eb52dc774916f2518b8ed93e31d..6154c4925c7fbf4814fe30814a20251ba19b3b36 100644 (file)
@@ -231,6 +231,7 @@ void PkgInfoParcelable::WritePackage(tizen_base::Parcel* parcel,
   WriteString(parcel, package->locale);
   WriteString(parcel, package->res_type);
   WriteString(parcel, package->res_version);
+  WriteString(parcel, package->lib);
   WriteString(parcel, package->is_disabled);
   WriteString(parcel, package->light_user_switch_mode);
   WriteIcon(parcel, package->icon);
@@ -500,6 +501,7 @@ package_x* PkgInfoParcelable::ReadPackage(tizen_base::Parcel* parcel) {
   ReadString(parcel, &package->locale);
   ReadString(parcel, &package->res_type);
   ReadString(parcel, &package->res_version);
+  ReadString(parcel, &package->lib);
   ReadString(parcel, &package->is_disabled);
   ReadString(parcel, &package->light_user_switch_mode);
   ReadIcon(parcel, &package->icon);
index df90d3925ee2e0cf25af53f3bf0045e222b4eae2..cd1b3e245e7080657bfe8346cf56ab3c74346613 100644 (file)
@@ -555,6 +555,8 @@ API void pkgmgrinfo_basic_free_package(package_x *package)
                free((void *)package->res_type);
        if (package->res_version)
                free((void *)package->res_version);
+        if (package->lib)
+                free((void *)package->lib);
        if (package->is_disabled)
                free((void *)package->is_disabled);
        if (package->light_user_switch_mode)
@@ -594,4 +596,3 @@ API void pkgmgrinfo_basic_free_package(package_x *package)
        g_list_free_full(package->metadata, __ps_free_metadata);
        free((void *)package);
 }
-
index 2c9bfb5e0340b228e70d55856fa8a9a7a88b8c45..8d7a8a3cfb7bad6f4258c76fd5fc99d43c04cdd5 100644 (file)
@@ -1149,6 +1149,22 @@ API int pkgmgrinfo_pkginfo_is_for_all_users(pkgmgrinfo_pkginfo_h handle, bool *f
        return pkgmgrinfo_pkginfo_is_global(handle, for_all_users);
 }
 
+API int pkgmgrinfo_pkginfo_is_lib(pkgmgrinfo_pkginfo_h handle, bool *lib)
+{
+       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
+
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n");
+       retvm_if(lib == NULL, PMINFO_R_EINVAL,
+                       "Argument supplied to hold return value is NULL\n");
+
+       if (info->pkg_info == NULL || info->pkg_info->lib == NULL)
+               return PMINFO_R_ERROR;
+
+       *lib = _get_bool_value(info->pkg_info->lib);
+
+       return PMINFO_R_OK;
+}
+
 API int pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo_h handle)
 {
        pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
index 40492add15a5cc39f82aea2344b9dc975693fb6d..334d354591020dd7b8a69a27ebdc9f97710ebad5 100644 (file)
@@ -1792,12 +1792,16 @@ int InsertPackageResInfo(const tizen_base::Database& db, manifest_x* mfx) {
   if (mfx->res_type == nullptr || mfx->res_version == nullptr)
     return 0;
 
+  if (mfx->lib == nullptr)
+    mfx->lib = strdup("false");
+
   auto q = tizen_base::Database::Sql(
       "INSERT INTO package_res_info (package, res_type,"
-      "  res_version) VALUES (?, ?, ?)")
+      "  res_version, lib) VALUES (?, ?, ?, ?)")
       .Bind(mfx->package)
       .Bind(mfx->res_type)
-      .Bind(mfx->res_version);
+      .Bind(mfx->res_version)
+      .Bind(mfx->lib);
 
   auto r = db.Exec(q);
   if (!r) {
index 984f2266163f089aae95ec99247c6181eb1cfae7..ce14d7710103ee49898f67fb2c5c47c2c09cc179 100644 (file)
@@ -448,6 +448,7 @@ package_x* GetTestPackage(std::string pkgid) {
   package->use_system_certs = strdup("test_use_system_certs");
   package->res_type = strdup("test_res_type");
   package->res_version = strdup("test_res_version");
+  package->lib = strdup("false");
   package->light_user_switch_mode = strdup("default");
 
   icon_x* icon = reinterpret_cast<icon_x*>(calloc(1, sizeof(icon_x)));