#ifndef __TIZEN_APPFW_PACKAGE_ARCHIVE_INFO_H
#define __TIZEN_APPFW_PACKAGE_ARCHIVE_INFO_H
+#include <package_info.h>
+
#ifdef __cplusplus
extern "C" {
#endif
int package_archive_info_get_icon(package_archive_info_h archive_info,
unsigned char **icon, size_t *icon_size);
+/**
+ * @brief Retrieves direct dependencies of the given package.
+ * @details package_info_dependency_info_cb() is called for each direct dependency of the given package.
+ * For example, if there are packages having the following relationship:
+ *
+ * <pre>
+ * B --> E
+ * A --> B --> C
+ * D --> C
+ * </pre>
+ * A --> B means that A depends on B.
+ *
+ * If package_archive_info_foreach_direct_dependency(A) is called, the callback will be called once with the following argument values: @e from = A, @e to = B.
+ * @since_tizen 5.5
+ * @remarks The function provides the results synchronously. If there are no dependencies, this function will return PACKAGE_MANAGER_ERROR_NONE immediately and the callback will not be invoked.
+ * @param[in] archive_info The package archive information
+ * @param[in] callback The iteration callback function
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_SYSTEM_ERROR Severe system error
+ */
+int package_archive_info_foreach_direct_dependency(
+ package_archive_info_h archive_info,
+ package_info_dependency_info_cb callback, void *user_data);
+
/**
* @}
pkgmgrinfo_archiveinfo_h archive_info;
};
+struct foreach_dependency_s {
+ package_info_dependency_info_cb callback;
+ void *user_data;
+};
+
API int package_archive_info_create(const char *path,
package_archive_info_h *archive_info)
{
return PACKAGE_MANAGER_ERROR_NONE;
}
+
+static int package_archive_info_foreach_dependency_cb(const char *from,
+ const char *to, const char *type,
+ const char *required_version, void *user_data)
+{
+ struct foreach_dependency_s *foreach_dependency =
+ (struct foreach_dependency_s *)user_data;
+
+ if (!foreach_dependency->callback(from, to, type,
+ required_version, foreach_dependency->user_data))
+ return -1;
+ else
+ return 0;
+}
+
+API int package_archive_info_foreach_direct_dependency(
+ package_archive_info_h archive_info,
+ package_info_dependency_info_cb callback, void *user_data)
+{
+ int ret;
+ struct package_archive_info_s *info =
+ (struct package_archive_info_s *)archive_info;
+ struct foreach_dependency_s foreach_dependency = {
+ .callback = callback,
+ .user_data = user_data,
+ };
+
+ if (archive_info == NULL || callback == NULL) {
+ _LOGE("Invalid parameter");
+ return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
+ }
+
+ ret = pkgmgrinfo_archiveinfo_foreach_dependency(info->archive_info,
+ package_archive_info_foreach_dependency_cb, &foreach_dependency);
+ if (ret == PMINFO_R_EINVAL)
+ return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
+ else if (ret == PMINFO_R_ERROR)
+ return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}