const char *pkg_name, const char *key,
const char *val, const void *pmsg, void *data)
{
- int ret = -1;
- package_manager_event_type_e event_type = -1;
struct package_manager_event_info *info = NULL;
+ int ret = -1;
package_manager_h manager = data;
uid_t uid = target_uid;
+ bool invoke_callback = false;
+ package_manager_event_type_e event_type = -1;
+ package_manager_event_state_e event_state;
+ int progress = 0;
+ package_manager_error_e error = PACKAGE_MANAGER_ERROR_NONE;
_LOGD("req_id(%d), pkg_name(%s), type(%s), key(%s), val(%s)",
req_id, pkg_name, pkg_type, key, val);
__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,
- event_type,
- PACKAGE_MANAGER_EVENT_STATE_STARTED,
- 0,
- PACKAGE_MANAGER_ERROR_NONE,
- manager->user_data);
+ event_state = PACKAGE_MANAGER_EVENT_STATE_STARTED;
+ progress = 0;
+ error = PACKAGE_MANAGER_ERROR_NONE;
+ invoke_callback = true;
} else {
_LOGE("unexpected start event");
}
} 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,
- info->event_state,
- atoi(val),
- PACKAGE_MANAGER_ERROR_NONE,
- manager->user_data);
+ event_type = info->event_type;
+ event_state = info->event_state;
+ progress = atoi(val);
+ error = PACKAGE_MANAGER_ERROR_NONE;
+ invoke_callback = true;
} 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,
- info->event_state,
- 0,
- __convert_to_error(val),
- manager->user_data);
+ event_type = info->event_type;
+ event_state = info->event_state;
+ progress = 0;
+ error = __convert_to_error(val);
+ invoke_callback = true;
} else if (strcasecmp(key, "end") == 0) {
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,
- info->event_type,
- PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
- 100,
- PACKAGE_MANAGER_ERROR_NONE,
- manager->user_data);
- } else {
- manager->event_cb(pkg_type, pkg_name,
- info->event_type,
- PACKAGE_MANAGER_EVENT_STATE_FAILED,
- 0,
- PACKAGE_MANAGER_ERROR_SYSTEM_ERROR,
- manager->user_data);
- }
+ if (strcasecmp(val, "ok") == 0) {
+ event_type = info->event_type;
+ event_state =
+ PACKAGE_MANAGER_EVENT_STATE_COMPLETED;
+ progress = 100;
+ error = PACKAGE_MANAGER_ERROR_NONE;
+ invoke_callback = true;
+ } else {
+ event_type = info->event_type;
+ event_state =
+ PACKAGE_MANAGER_EVENT_STATE_FAILED;
+ progress = 0;
+ error = PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
+ invoke_callback = true;
}
}
g_hash_table_remove(manager->event_info_table, info->pkg_name);
}
-
g_mutex_unlock(&manager->mutex);
+ if (invoke_callback && manager->event_cb && getuid() == uid) {
+ manager->event_cb(pkg_type, pkg_name, event_type, event_state,
+ progress, error, manager->user_data);
+ }
+
return PACKAGE_MANAGER_ERROR_NONE;
}
size_info.external_cache_size = result->ext_cache_size;
size_info.external_app_size = result->ext_app_size;
- callback(pkgid, (package_size_info_h)&size_info, user_data);
+ callback(pkgid, (package_size_info_h)&size_info, cbdata->user_data);
__free_getsize_cbdata(cbdata);
}
size_info.external_cache_size = result->ext_cache_size;
size_info.external_app_size = result->ext_app_size;
- callback((package_size_info_h)&size_info, user_data);
+ callback((package_size_info_h)&size_info, cbdata->user_data);
__free_getsize_cbdata(cbdata);
}
else
res = pkgmgr_client_get_total_package_size_info(pc, __total_result_cb, cbdata);
- if (res == PKGMGR_R_EINVAL) {
- pkgmgr_client_free(pc);
- return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
- } else if (res == PKGMGR_R_ENOPKG) {
- pkgmgr_client_free(pc);
- return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
- } else if (res == PKGMGR_R_ENOMEM) {
- pkgmgr_client_free(pc);
- return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
- } else if (res == PKGMGR_R_EIO) {
- pkgmgr_client_free(pc);
- return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
- } else if (res == PKGMGR_R_EPRIV) {
- pkgmgr_client_free(pc);
- return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
- } else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR) {
- pkgmgr_client_free(pc);
- return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
- } else if (res != PKGMGR_R_OK) {
- _LOGE("Unexpected error");
+ if (res != PKGMGR_R_OK) {
__free_getsize_cbdata(cbdata);
- return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
+ if (res == PKGMGR_R_EINVAL) {
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+ } else if (res == PKGMGR_R_ENOPKG) {
+ return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
+ } else if (res == PKGMGR_R_ENOMEM) {
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+ } else if (res == PKGMGR_R_EIO) {
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+ } else if (res == PKGMGR_R_EPRIV) {
+ return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
+ } else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR) {
+ return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
+ } else {
+ _LOGE("Unexpected error");
+ return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
+ }
}
return PACKAGE_MANAGER_ERROR_NONE;