From 5cbf25c15986526a2c29c053fe13ed5c8f54d4e2 Mon Sep 17 00:00:00 2001 From: Ilho Kim Date: Mon, 1 Mar 2021 10:15:37 +0900 Subject: [PATCH] Implement parser_db's api using PkgInfoClient - pkgmgr_parser_update_app_disable_info_in_usr_db - pkgmgr_parser_update_pkg_disable_info_in_db - pkgmgr_parser_update_global_app_splash_screen_display_info_in_usr_db - pkgmgr_parser_update_app_splash_screen_display_info_in_usr_db - pkgmgr_parser_update_app_label_info_in_usr_db - pkgmgr_parser_update_app_icon_info_in_usr_db - pkgmgr_parser_update_tep_info_in_usr_db - pkgmgr_parser_register_pkg_update_info_in_usr_db - pkgmgr_parser_register_pkg_plugin_info_in_usr_db - pkgmgr_parser_update_pkg_plugin_info_in_usr_db - pkgmgr_parser_update_pkg_plugin_info_in_usr_db - pkgmgr_parser_unregister_pkg_plugin_info_in_usr_db - pkgmgr_parser_update_global_app_disable_for_uid_info_in_db - pkgmgr_parser_unregister_pkg_update_info_in_usr_db - pkgmgr_parser_unregister_all_pkg_update_info_in_usr_db Signed-off-by: Ilho Kim --- parser/src/pkgmgr_parser_db.c | 109 ++++++++++++++++++++++++++++++++++------- src/manager/pkginfo_manager.cc | 74 ++++++++++++++++++++++++++++ src/manager/pkginfo_manager.h | 4 ++ 3 files changed, 169 insertions(+), 18 deletions(-) diff --git a/parser/src/pkgmgr_parser_db.c b/parser/src/pkgmgr_parser_db.c index a85e01d..380f667 100644 --- a/parser/src/pkgmgr_parser_db.c +++ b/parser/src/pkgmgr_parser_db.c @@ -40,6 +40,7 @@ #include "pkgmgr_parser_db_queries.h" #include "pkgmgr_parser_debug.h" #include "pkgmgr_parser_internal.h" +#include "manager/pkginfo_manager.h" #ifndef OWNER_ROOT #define OWNER_ROOT 0 @@ -1655,10 +1656,19 @@ static int __insert_package_plugin_execution_info( char *query = NULL; GList *tmp; plugin_x *plugin; + char **queries = NULL; + int idx = 0; + int i = 0; if (!mfx->plugin) return PM_PARSER_R_OK; + queries = calloc(g_list_length(mfx->plugin), sizeof (char *)); + if (queries == NULL) { + _LOGE("Out of memory"); + return PM_PARSER_R_ERROR; + } + for (tmp = mfx->plugin; tmp; tmp = tmp->next) { plugin = (plugin_x *)tmp->data; if (plugin == NULL) @@ -1671,13 +1681,28 @@ static int __insert_package_plugin_execution_info( plugin->plugin_type, plugin->plugin_name); if (query == NULL) { _LOGE("Out of memory"); + for (i = 0; i < idx; ++i) + free(queries[i]); + free(queries); return PM_PARSER_R_ERROR; } - // TODO: send query to server - sqlite3_free(query); - query = NULL; + queries[idx++] = query; + } + + if (_parser_execute_write_queries((const char **)queries, idx, uid) < 0) { + _LOGE("Fail to write to db"); + for (i = 0; i < idx; ++i) + free(queries[i]); + free(queries); + return PM_PARSER_R_ERROR; } + + for (i = 0; i < idx; ++i) + free(queries[i]); + free(queries); + free(query); + return PM_PARSER_R_OK; } @@ -1692,7 +1717,11 @@ static int __delete_package_plugin_execution_info(const char *pkgid, uid_t uid) return PM_PARSER_R_ERROR; } - // TODO: send query to server + if (_parser_execute_write_query(query, uid) < 0) { + _LOGE("Fail to write to db"); + sqlite3_free(query); + return PM_PARSER_R_ERROR; + } sqlite3_free(query); return PM_PARSER_R_OK; @@ -2270,7 +2299,11 @@ API int pkgmgr_parser_update_global_app_disable_for_uid_info_in_db( return PM_PARSER_R_ERROR; } - // TODO: send query to server + if (_parser_execute_write_query(query, uid) < 0) { + _LOGE("Fail to write to db"); + sqlite3_free(query); + return PM_PARSER_R_ERROR; + } sqlite3_free(query); return PM_PARSER_R_OK; @@ -2288,7 +2321,11 @@ API int pkgmgr_parser_update_app_disable_info_in_usr_db(const char *appid, return PM_PARSER_R_ERROR; } - // TODO: construct query and send it to server + if (_parser_execute_write_query(query, uid) < 0) { + _LOGE("Fail to write to db"); + sqlite3_free(query); + return PM_PARSER_R_ERROR; + } sqlite3_free(query); return PM_PARSER_R_OK; @@ -2313,7 +2350,11 @@ API int pkgmgr_parser_update_pkg_disable_info_in_usr_db(const char *pkgid, return PM_PARSER_R_ERROR; } - // TODO: construct query and send it to server + if (_parser_execute_write_query(query, uid) < 0) { + _LOGE("Fail to write to db"); + sqlite3_free(query); + return PM_PARSER_R_ERROR; + } sqlite3_free(query); return PM_PARSER_R_OK; @@ -2339,7 +2380,11 @@ API int pkgmgr_parser_update_global_app_splash_screen_display_info_in_usr_db( return PM_PARSER_R_ERROR; } - // TODO: construct query and send it to server + if (_parser_execute_write_query(query, uid) < 0) { + _LOGE("Fail to write to db"); + sqlite3_free(query); + return PM_PARSER_R_ERROR; + } sqlite3_free(query); return PM_PARSER_R_OK; @@ -2357,7 +2402,11 @@ API int pkgmgr_parser_update_app_splash_screen_display_info_in_usr_db( return PM_PARSER_R_ERROR; } - // TODO: construct query and send it to server + if (_parser_execute_write_query(query, uid) < 0) { + _LOGE("Fail to write to db"); + sqlite3_free(query); + return PM_PARSER_R_ERROR; + } sqlite3_free(query); return PM_PARSER_R_OK; @@ -2382,7 +2431,11 @@ API int pkgmgr_parser_update_app_label_info_in_usr_db(const char *appid, return PM_PARSER_R_ERROR; } - // TODO: construct query and send it to server + if (_parser_execute_write_query(query, uid) < 0) { + _LOGE("Fail to write to db"); + sqlite3_free(query); + return PM_PARSER_R_ERROR; + } sqlite3_free(query); return PM_PARSER_R_OK; @@ -2401,13 +2454,17 @@ API int pkgmgr_parser_update_app_icon_info_in_usr_db(const char *appid, char *query = NULL; query = sqlite3_mprintf("UPDATE package_app_localized_info SET app_icon=%Q " - "WHERE app_id=TQ AND app_icon IS NOT NULL", icon_path, appid); + "WHERE app_id=%Q AND app_icon IS NOT NULL", icon_path, appid); if (query == NULL) { _LOGE("Out of memory"); return PM_PARSER_R_ERROR; } - // TODO: construct query and send it to server + if (_parser_execute_write_query(query, uid) < 0) { + _LOGE("Fail to write to db"); + sqlite3_free(query); + return PM_PARSER_R_ERROR; + } sqlite3_free(query); return PM_PARSER_R_OK; @@ -2432,7 +2489,11 @@ API int pkgmgr_parser_update_tep_info_in_usr_db(const char *pkgid, return PM_PARSER_R_ERROR; } - // TODO: construct query and send it to server + if (_parser_execute_write_query(query, uid) < 0) { + _LOGE("Fail to write to db"); + sqlite3_free(query); + return PM_PARSER_R_ERROR; + } sqlite3_free(query); return PM_PARSER_R_OK; @@ -2460,7 +2521,7 @@ static int __convert_update_type(pkgmgrinfo_updateinfo_update_type type, } static int __register_pkg_update_info(updateinfo_x *info, - const char *update_type) + const char *update_type, uid_t uid) { char *query = NULL; @@ -2472,7 +2533,11 @@ static int __register_pkg_update_info(updateinfo_x *info, return PM_PARSER_R_ERROR; } - // TODO: send query to server + if (_parser_execute_write_query(query, uid) < 0) { + _LOGE("Fail to write to db"); + sqlite3_free(query); + return PM_PARSER_R_ERROR; + } sqlite3_free(query); return PM_PARSER_R_OK; @@ -2536,7 +2601,7 @@ API int pkgmgr_parser_register_pkg_update_info_in_usr_db( } pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo); - return __register_pkg_update_info(update_info, update_type); + return __register_pkg_update_info(update_info, update_type, uid); } API int pkgmgr_parser_register_pkg_update_info_in_db( @@ -2557,7 +2622,11 @@ static int __unregister_pkg_update_info(const char *pkgid, uid_t uid) return PM_PARSER_R_ERROR; } - // TODO: send query to server + if (_parser_execute_write_query(query, uid) < 0) { + _LOGE("Fail to write to db"); + sqlite3_free(query); + return PM_PARSER_R_ERROR; + } sqlite3_free(query); return PM_PARSER_R_OK; @@ -2608,7 +2677,11 @@ API int pkgmgr_parser_unregister_all_pkg_update_info_in_usr_db(uid_t uid) return PM_PARSER_R_ERROR; } - // TODO: send query to server + if (_parser_execute_write_query(query, uid) < 0) { + _LOGE("Fail to write to db"); + sqlite3_free(query); + return PM_PARSER_R_ERROR; + } sqlite3_free(query); return PM_PARSER_R_OK; diff --git a/src/manager/pkginfo_manager.cc b/src/manager/pkginfo_manager.cc index 630a2b4..36aaf74 100644 --- a/src/manager/pkginfo_manager.cc +++ b/src/manager/pkginfo_manager.cc @@ -628,3 +628,77 @@ extern "C" EXPORT_API int _pkginfo_set_usr_installed_storage(const char *pkgid, return PMINFO_R_OK; } + +extern "C" EXPORT_API int _parser_execute_write_query(const char *query, uid_t uid) +{ + std::shared_ptr parcelable( + new pkgmgr_common::parcel::QueryParcelable(uid, query, + pkgmgr_common::database::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB, + pkgmgr_common::database::AbstractDBHandler::OperationType::OPERATION_TYPE_WRITE)); + + pkgmgr_client::PkgInfoClient client(parcelable, uid, + pkgmgr_common::ReqType::QUERY); + if (!client.SendRequest()) { + return -1; + } + + std::shared_ptr return_parcel( + std::static_pointer_cast( + client.GetResultParcel())); + + auto result_list = return_parcel->GetResult(); + if (result_list.size() != 1) { + LOG(ERROR) << "Invalid result"; + return -1; + } + + if (result_list[0].size() != 1) { + LOG(ERROR) << "Invalid result"; + return -1; + } + + LOG(ERROR) << "result : " << result_list[0][0]; + if (result_list[0][0] != "SUCCESS") + return -1; + + return 0; +} + +extern "C" EXPORT_API int _parser_execute_write_queries(const char **queries, int len, uid_t uid) +{ + std::vector query_vt; + for (int i = 0; i < len; ++i) + query_vt.emplace_back(queries[i]); + + std::shared_ptr parcelable( + new pkgmgr_common::parcel::QueryParcelable(uid, query_vt, + pkgmgr_common::database::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB, + pkgmgr_common::database::AbstractDBHandler::OperationType::OPERATION_TYPE_WRITE)); + + pkgmgr_client::PkgInfoClient client(parcelable, uid, + pkgmgr_common::ReqType::QUERY); + if (!client.SendRequest()) { + return -1; + } + + std::shared_ptr return_parcel( + std::static_pointer_cast( + client.GetResultParcel())); + + auto result_list = return_parcel->GetResult(); + if (result_list.size() != 1) { + LOG(ERROR) << "Invalid result"; + return -1; + } + + if (result_list[0].size() != 1) { + LOG(ERROR) << "Invalid result"; + return -1; + } + + LOG(ERROR) << "result : " << result_list[0][0]; + if (result_list[0][0] != "SUCCESS") + return -1; + + return 0; +} diff --git a/src/manager/pkginfo_manager.h b/src/manager/pkginfo_manager.h index 1e63a5e..7684e2c 100644 --- a/src/manager/pkginfo_manager.h +++ b/src/manager/pkginfo_manager.h @@ -63,6 +63,10 @@ int _pkginfo_set_usr_installed_storage(const char *pkgid, INSTALL_LOCATION location, const char *external_pkg_path, uid_t uid); +int _parser_execute_write_query(const char *query, uid_t uid); + +int _parser_execute_write_queries(const char **queries, int len, uid_t uid); + #ifdef __cplusplus } #endif -- 2.7.4