Add new APIs for register, unregister and get pkg update info
[platform/core/api/package-manager.git] / src / package_manager.c
index aa21455..1384320 100644 (file)
@@ -79,6 +79,11 @@ struct package_manager_filter_s {
        pkgmgrinfo_pkginfo_filter_h pkgmgrinfo_pkginfo_filter;
 };
 
+struct package_updateinfo_request_s {
+       pkgmgr_client *pc;
+       pkg_update_info_t *updateinfo_handle;
+};
+
 static int package_manager_request_new_id()
 {
        static int request_handle_id = 0;
@@ -1701,3 +1706,179 @@ API int package_size_info_get_external_app_size(package_size_info_h handle, long
        *ext_app_size = size_info->external_app_size;
        return PACKAGE_MANAGER_ERROR_NONE;
 }
+
+API int package_manager_updateinfo_set_pkgid(package_updateinfo_request_h pkg_updateinfo_req, const char *pkgid)
+{
+       struct package_updateinfo_request_s *request;
+
+       if (pkg_updateinfo_req == NULL || pkg_updateinfo_req->updateinfo_handle == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       request = (struct package_updateinfo_request_s *)pkg_updateinfo_req;
+       if (request->updateinfo_handle->pkgid)
+               free(request->updateinfo_handle->pkgid);
+       request->updateinfo_handle->pkgid = strdup(pkgid);
+       if (request->updateinfo_handle->pkgid == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_updateinfo_set_version(package_updateinfo_request_h pkg_updateinfo_req, const char *version)
+{
+       struct package_updateinfo_request_s *request;
+
+       if (pkg_updateinfo_req == NULL || pkg_updateinfo_req->updateinfo_handle == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       request = (struct package_updateinfo_request_s *)pkg_updateinfo_req;
+       if (request->updateinfo_handle->version)
+               free(request->updateinfo_handle->version);
+       request->updateinfo_handle->version = strdup(version);
+       if (request->updateinfo_handle->pkgid == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+static int package_manager_updateinfo_convert_property(package_updateinfo_type_e property, pkgmgr_updateinfo_type *converted_property)
+{
+       if (converted_property == NULL)
+               return -1;
+
+       if (property == PACKAGE_UPDATEINFO_TYPE_FORCE)
+               *converted_property = PM_UPDATEINFO_TYPE_FORCE;
+       else if (property == PACKAGE_UPDATEINFO_TYPE_OPTIONAL)
+               *converted_property = PM_UPDATEINFO_TYPE_OPTIONAL;
+       else if (property == PACKAGE_UPDATEINFO_TYPE_NONE)
+               *converted_property = PM_UPDATEINFO_TYPE_NONE;
+       else
+               return -1;
+
+       return 0;
+}
+
+API int package_manager_updateinfo_set_type(package_updateinfo_request_h pkg_updateinfo_req, package_updateinfo_type_e type)
+{
+       int retval;
+       pkgmgr_updateinfo_type converted_type;
+       struct package_updateinfo_request_s *request;
+
+       if (pkg_updateinfo_req == NULL || pkg_updateinfo_req->updateinfo_handle == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       request = (struct package_updateinfo_request_s *)pkg_updateinfo_req;
+       retval = package_manager_updateinfo_convert_property(type, &converted_type);
+       if (retval != 0)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       request->updateinfo_handle->type = converted_type;
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_updateinfo_request_destroy(package_updateinfo_request_h pkg_updateinfo_req)
+{
+       struct package_updateinfo_request_s *request;
+
+       if (pkg_updateinfo_req == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       request = (struct package_updateinfo_request_s *)pkg_updateinfo_req;
+       if (request->pc)
+               pkgmgr_client_free(request->pc);
+
+       if (request->updateinfo_handle) {
+               if (request->updateinfo_handle->pkgid)
+                       free(request->updateinfo_handle->pkgid);
+               if (request->updateinfo_handle->version)
+                       free(request->updateinfo_handle->version);
+               free(request->updateinfo_handle);
+       }
+       free(request);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API  int package_manager_updateinfo_request_create(package_updateinfo_request_h *pkg_updateinfo_req)
+{
+       struct package_updateinfo_request_s *request;
+       pkg_update_info_t *update_info;
+
+       if (pkg_updateinfo_req == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       request = calloc(1, sizeof(struct package_updateinfo_request_s));
+       if (request == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+       request->pc = pkgmgr_client_new(PC_REQUEST);
+       if (request->pc == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+       update_info = calloc(1, sizeof(pkg_update_info_t));
+       if (update_info == NULL) {
+               pkgmgr_client_free(request->pc);
+               return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+       }
+       request->updateinfo_handle = update_info;
+
+       *pkg_updateinfo_req = request;
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_updateinfo_request_register(package_updateinfo_request_h pkg_updateinfo_req)
+{
+       struct package_updateinfo_request_s *update_info;
+       int retval;
+
+       if (pkg_updateinfo_req == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+       update_info = (struct package_updateinfo_request_s *)pkg_updateinfo_req;
+
+       retval = pkgmgr_client_register_pkg_update_info(update_info->pc, update_info->updateinfo_handle);
+       if (retval == PKGMGR_R_EINVAL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_updateinfo_request_unregister(package_updateinfo_request_h pkg_updateinfo_req, const char *pkgid)
+{
+       int retval;
+       struct package_updateinfo_request_s *update_info;
+
+       retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
+       if (retval != PACKAGE_MANAGER_ERROR_NONE)
+               return retval;
+
+       if (pkg_updateinfo_req == NULL || pkgid == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       update_info = (struct package_updateinfo_request_s *)pkg_updateinfo_req;
+       retval = pkgmgr_client_unregister_pkg_update_info(update_info->pc, pkgid);
+       if (retval != PMINFO_R_OK)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_updateinfo_request_unregister_all(package_updateinfo_request_h pkg_updateinfo_req)
+{
+       int retval;
+       struct package_updateinfo_request_s *update_info;
+
+       retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
+       if (retval != PACKAGE_MANAGER_ERROR_NONE)
+               return retval;
+
+       if (pkg_updateinfo_req == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       update_info = (struct package_updateinfo_request_s *)pkg_updateinfo_req;
+       retval = pkgmgr_client_unregister_all_pkg_update_info(update_info->pc);
+
+       if (retval != PMINFO_R_OK)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}