struct package_manager_event_info {
char *pkg_name;
package_manager_event_type_e event_type;
+ package_manager_event_state_e event_state;
};
struct package_manager_s {
}
static int __insert_event_info(package_manager_h manager, const char *pkg_name,
- package_manager_event_type_e event_type)
+ package_manager_event_type_e event_type,
+ package_manager_event_state_e event_state)
{
struct package_manager_event_info *info;
return -1;
info->pkg_name = strdup(pkg_name);
info->event_type = event_type;
+ info->event_state = event_state;
g_hash_table_insert(manager->event_info_table, info->pkg_name, info);
return 0;
}
evt_info->req_id = req_id;
evt_info->event_type = event_type;
+ evt_info->event_state = event_state;
evt_info->next = NULL;
if (*head == NULL)
while (tmp) {
if (tmp->req_id == req_id) {
*event_type = tmp->event_type;
+ *event_state = tmp->event_state;
return 0;
}
tmp = tmp->next;
while (tmp) {
if (tmp->req_id == req_id) {
tmp->event_type = event_type;
+ tmp->event_state = event_state;
return 0;
}
tmp = tmp->next;
}
} else if (strcasecmp(key, "error") == 0) {
- if (strcasecmp(key, "0") != 0) {
- if (__find_event_info
- (&(request->head), req_id, &event_type,
- &event_state) == 0) {
- __update_event_info(&(request->head), req_id,
- event_type,
- PACKAGE_MANAGER_EVENT_STATE_FAILED);
- }
+ if (__find_event_info
+ (&(request->head), req_id, &event_type,
+ &event_state) == 0) {
+ __update_event_info(&(request->head), req_id,
+ event_type,
+ PACKAGE_MANAGER_EVENT_STATE_FAILED);
+ }
- if (request->event_cb)
- request->event_cb(req_id, pkg_type,
- pkg_name, event_type,
- PACKAGE_MANAGER_EVENT_STATE_FAILED,
- 0,
- PACKAGE_MANAGER_ERROR_NONE,
- request->user_data);
+ if (request->event_cb)
+ request->event_cb(req_id, pkg_type,
+ pkg_name, event_type,
+ PACKAGE_MANAGER_EVENT_STATE_FAILED,
+ 0,
+ PACKAGE_MANAGER_ERROR_NONE,
+ request->user_data);
- }
} else if (strcasecmp(key, "end") == 0) {
if (__find_event_info
(&(request->head), req_id, &event_type,
{
int ret = -1;
package_manager_event_type_e event_type = -1;
- package_manager_event_state_e event_state = -1;
struct package_manager_event_info *info = NULL;
package_manager_h manager = data;
uid_t uid = target_uid;
return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
if (!info) {
- __insert_event_info(manager, pkg_name, event_type);
+ __insert_event_info(manager, pkg_name, event_type,
+ PACKAGE_MANAGER_EVENT_STATE_STARTED);
if (manager->event_cb && getuid() == uid)
manager->event_cb(pkg_type, pkg_name,
}
} else if (strcasecmp(key, "install_percent") == 0
|| strcasecmp(key, "progress_percent") == 0) {
+ info->event_state = PACKAGE_MANAGER_EVENT_STATE_PROCESSING;
if (manager->event_cb && getuid() == uid)
manager->event_cb(pkg_type, pkg_name,
info->event_type,
- PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
+ info->event_state,
atoi(val),
PACKAGE_MANAGER_ERROR_NONE,
manager->user_data);
} else if (strcasecmp(key, "error") == 0) {
+ info->event_state = PACKAGE_MANAGER_EVENT_STATE_FAILED;
if (manager->event_cb && getuid() == uid)
manager->event_cb(pkg_type, pkg_name,
info->event_type,
- PACKAGE_MANAGER_EVENT_STATE_FAILED,
+ info->event_state,
0,
PACKAGE_MANAGER_ERROR_NONE,
manager->user_data);
} else if (strcasecmp(key, "end") == 0) {
- if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
+ if (info->event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
if (manager->event_cb && getuid() == uid) {
if (strcasecmp(val, "ok") == 0) {
manager->event_cb(pkg_type, pkg_name,