2 * Copyright (c) 2011 - 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
24 #include <pkgmgr-info.h>
25 #include <package-manager.h>
27 #include <cynara-client.h>
30 #include "app_manager.h"
31 #include "app_manager_internal.h"
37 #define LOG_TAG "TIZEN_N_APP_MANAGER"
39 #define SMACK_LABEL_LEN 255
43 pkgmgrinfo_appinfo_h pkg_app_info;
46 struct app_info_filter_s {
47 pkgmgrinfo_appinfo_filter_h pkg_app_info_filter;
50 struct app_info_metadata_filter_s {
51 pkgmgrinfo_appinfo_metadata_filter_h pkg_app_info_metadata_filter;
54 typedef struct _foreach_context_ {
55 app_manager_app_info_cb callback;
59 typedef struct _foreach_metada_context_ {
60 app_info_metadata_cb callback;
62 } foreach_metadata_context_s;
64 typedef struct _foreach_category_ {
65 app_info_category_cb callback;
67 } foreach_category_context_s;
69 static int app_info_convert_str_property(const char *property, char **converted_property)
74 if (strcmp(property, PACKAGE_INFO_PROP_APP_ID) == 0)
75 *converted_property = PMINFO_APPINFO_PROP_APP_ID;
76 else if (strcmp(property, PACKAGE_INFO_PROP_APP_TYPE) == 0)
77 *converted_property = PMINFO_APPINFO_PROP_APP_TYPE;
78 else if (strcmp(property, PACKAGE_INFO_PROP_APP_CATEGORY) == 0)
79 *converted_property = PMINFO_APPINFO_PROP_APP_CATEGORY;
80 else if (strcmp(property, PACKAGE_INFO_PROP_APP_INSTALLED_STORAGE) == 0)
81 *converted_property = PMINFO_APPINFO_PROP_APP_INSTALLED_STORAGE;
82 else if (strcmp(property, PACKAGE_INFO_PROP_APP_COMPONENT_TYPE) == 0)
83 *converted_property = PMINFO_APPINFO_PROP_APP_COMPONENT;
90 static int app_info_convert_bool_property(const char *property, char **converted_property)
95 if (strcmp(property, PACKAGE_INFO_PROP_APP_NODISPLAY) == 0)
96 *converted_property = PMINFO_APPINFO_PROP_APP_NODISPLAY;
97 else if (strcmp(property, PACKAGE_INFO_PROP_APP_TASKMANAGE) == 0)
98 *converted_property = PMINFO_APPINFO_PROP_APP_TASKMANAGE;
99 else if (strcmp(property, PACKAGE_INFO_PROP_APP_DISABLED) == 0)
100 *converted_property = PMINFO_APPINFO_PROP_APP_DISABLE;
107 static int app_info_convert_app_component(pkgmgrinfo_app_component component, app_info_app_component_type_e *converted_component)
109 if (component == PMINFO_UI_APP)
110 *converted_component = APP_INFO_APP_COMPONENT_TYPE_UI_APP;
111 else if (component == PMINFO_SVC_APP)
112 *converted_component = APP_INFO_APP_COMPONENT_TYPE_SERVICE_APP;
113 else if (component == PMINFO_WIDGET_APP)
114 *converted_component = APP_INFO_APP_COMPONENT_TYPE_WIDGET_APP;
115 else if (component == PMINFO_WATCH_APP)
116 *converted_component = APP_INFO_APP_COMPONENT_TYPE_WATCH_APP;
123 static int app_info_foreach_app_filter_cb(pkgmgrinfo_appinfo_h handle, void *user_data)
127 app_info_h info = NULL;
128 bool iteration_next = true;
130 info = calloc(1, sizeof(struct app_info_s));
132 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
134 foreach_context_s *foreach_context = user_data;
135 if (handle == NULL || foreach_context == NULL) {
137 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
140 retval = pkgmgrinfo_appinfo_get_appid(handle, &appid);
143 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
146 info->app_id = strdup(appid);
147 if (info->app_id == NULL) {
152 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
154 info->pkg_app_info = handle;
156 iteration_next = foreach_context->callback(info, foreach_context->user_data);
168 if (iteration_next == true)
171 return PMINFO_R_ERROR;
174 static int app_info_foreach_app_metadata_cb(const char *metadata_key, const char *metadata_value, void *user_data)
176 foreach_metadata_context_s *foreach_context = user_data;
177 bool iteration_next = true;
179 if (metadata_value == NULL || foreach_context == NULL)
180 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
182 iteration_next = foreach_context->callback(metadata_key, metadata_value, foreach_context->user_data);
183 if (iteration_next == true)
186 return PMINFO_R_ERROR;
189 static int app_info_foreach_category_cb(const char *category_name, void *user_data)
191 foreach_category_context_s *foreach_category = user_data;
192 bool iteration_next = true;
194 if (category_name == NULL || foreach_category == NULL)
195 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
197 iteration_next = foreach_category->callback(category_name, foreach_category->user_data);
198 if (iteration_next == true)
201 return PMINFO_R_ERROR;
204 static int app_info_foreach_app_info_cb(pkgmgrinfo_appinfo_h handle, void *cb_data)
206 foreach_context_s *foreach_context = cb_data;
207 app_info_h app_info = NULL;
210 bool iteration_next = true;
212 if (handle == NULL || foreach_context == NULL) {
213 app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
214 return PMINFO_R_ERROR;
217 ret = pkgmgrinfo_appinfo_get_appid(handle, &appid);
218 if (ret != PMINFO_R_OK) {
219 app_manager_error(APP_MANAGER_ERROR_NO_SUCH_APP, __FUNCTION__, NULL);
220 return PMINFO_R_ERROR;
223 app_info = calloc(1, sizeof(struct app_info_s));
224 if (app_info == NULL) {
225 app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
226 return PMINFO_R_ERROR;
229 app_info->app_id = strdup(appid);
230 app_info->pkg_app_info = handle;
231 iteration_next = foreach_context->callback(app_info, foreach_context->user_data);
233 free(app_info->app_id);
236 if (iteration_next == true)
239 return PMINFO_R_ERROR;
242 int app_info_foreach_app_info(app_manager_app_info_cb callback, void *user_data)
244 foreach_context_s foreach_context = {
245 .callback = callback,
246 .user_data = user_data,
249 if (callback == NULL)
250 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
252 pkgmgrinfo_appinfo_get_usr_installed_list(app_info_foreach_app_info_cb, getuid(), &foreach_context);
254 return APP_MANAGER_ERROR_NONE;
257 static int _check_privilege(char *privilege)
263 char client[SMACK_LABEL_LEN + 1] = "";
265 char *client_session = "";
267 if (privilege == NULL) {
268 LOGE("invalid parameter");
269 return APP_MANAGER_ERROR_INVALID_PARAMETER;
272 ret = cynara_initialize(&p_cynara, NULL);
273 if (ret != CYNARA_API_SUCCESS) {
274 LOGE("cynara_initialize [%d] failed!", ret);
275 return APP_MANAGER_ERROR_IO_ERROR;
278 fd = open("/proc/self/attr/current", O_RDONLY);
280 LOGE("open [%d] failed!", errno);
281 ret = APP_MANAGER_ERROR_IO_ERROR;
285 ret = read(fd, client, SMACK_LABEL_LEN);
287 LOGE("read [%d] failed!", errno);
289 ret = APP_MANAGER_ERROR_IO_ERROR;
293 snprintf(uid, 10, "%d", getuid());
295 ret = cynara_check(p_cynara, client, client_session, uid, privilege);
296 if (ret != CYNARA_API_ACCESS_ALLOWED) {
297 LOGE("cynara access check [%d] failed!", ret);
299 if (ret == CYNARA_API_ACCESS_DENIED)
300 ret = APP_MANAGER_ERROR_PERMISSION_DENIED;
302 ret = APP_MANAGER_ERROR_IO_ERROR;
306 ret = APP_MANAGER_ERROR_NONE;
310 cynara_finish(p_cynara);
315 API int app_info_create(const char *app_id, app_info_h *app_info)
317 pkgmgrinfo_pkginfo_h pkginfo = NULL;
318 pkgmgrinfo_appinfo_h appinfo = NULL;
319 app_info_h info = NULL;
321 char *main_appid = NULL;
323 if (app_id == NULL || app_info == NULL)
324 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
326 info = calloc(1, sizeof(struct app_info_s));
328 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
330 retval = pkgmgrinfo_appinfo_get_usr_appinfo(app_id, getuid(), &appinfo);
332 info->app_id = strdup(app_id);
333 info->pkg_app_info = appinfo;
335 return APP_MANAGER_ERROR_NONE;
338 retval = pkgmgrinfo_pkginfo_get_usr_pkginfo(app_id, getuid(), &pkginfo);
341 return app_manager_error(APP_MANAGER_ERROR_NO_SUCH_APP, __FUNCTION__, NULL);
344 retval = pkgmgrinfo_pkginfo_get_mainappid(pkginfo, &main_appid);
347 pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo);
348 return app_manager_error(APP_MANAGER_ERROR_NO_SUCH_APP, __FUNCTION__, NULL);
350 if (pkgmgrinfo_appinfo_get_usr_appinfo(main_appid, getuid(), &appinfo)) {
352 pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo);
353 return app_manager_error(APP_MANAGER_ERROR_NO_SUCH_APP, __FUNCTION__, NULL);
356 info->app_id = strdup(main_appid);
357 info->pkg_app_info = appinfo;
360 pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo);
362 return APP_MANAGER_ERROR_NONE;
365 API int app_info_destroy(app_info_h app_info)
367 if (app_info == NULL)
368 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
370 if (app_info->app_id) {
371 free(app_info->app_id);
372 app_info->app_id = NULL;
375 pkgmgrinfo_appinfo_destroy_appinfo(app_info->pkg_app_info);
377 return APP_MANAGER_ERROR_NONE;
380 API int app_info_get_app_id(app_info_h app_info, char **app_id)
382 char *app_id_dup = NULL;
384 if (app_info == NULL || app_id == NULL)
385 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
387 if (app_info->app_id == NULL)
388 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
390 app_id_dup = strdup(app_info->app_id);
391 if (app_id_dup == NULL)
392 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
394 *app_id = app_id_dup;
396 return APP_MANAGER_ERROR_NONE;
399 API int app_info_get_exec(app_info_h app_info, char **exec)
402 char *app_exec_dup = NULL;
405 if (app_info == NULL || exec == NULL)
406 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
408 ret = pkgmgrinfo_appinfo_get_exec(app_info->pkg_app_info, &val);
409 if (ret != PMINFO_R_OK || val == NULL)
410 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
412 app_exec_dup = strdup(val);
413 if (app_exec_dup == NULL)
414 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
416 *exec = app_exec_dup;
418 return APP_MANAGER_ERROR_NONE;
421 API int app_info_get_label(app_info_h app_info, char **label)
424 char *app_label_dup = NULL;
427 if (app_info == NULL || label == NULL)
428 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
430 ret = pkgmgrinfo_appinfo_get_label(app_info->pkg_app_info, &val);
431 if (ret < 0 || val == NULL)
432 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
434 app_label_dup = strdup(val);
435 if (app_label_dup == NULL)
436 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
438 *label = app_label_dup;
440 return APP_MANAGER_ERROR_NONE;
443 API int app_info_get_localed_label(const char *app_id, const char *locale, char **label)
446 char *app_label_dup = NULL;
448 if (app_id == NULL || locale == NULL || label == NULL)
449 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
451 if (pkgmgrinfo_appinfo_usr_get_localed_label(app_id, locale, getuid(), &val))
452 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
454 app_label_dup = strdup(val);
455 if (app_label_dup == NULL) {
460 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
463 *label = app_label_dup;
466 return APP_MANAGER_ERROR_NONE;
469 API int app_info_get_icon(app_info_h app_info, char **path)
472 char *app_icon_dup = NULL;
475 if (app_info == NULL || path == NULL)
476 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
478 ret = pkgmgrinfo_appinfo_get_icon(app_info->pkg_app_info, &val);
479 if (ret != PMINFO_R_OK || val == NULL)
480 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
482 app_icon_dup = strdup(val);
483 if (app_icon_dup == NULL)
484 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
486 *path = app_icon_dup;
488 return APP_MANAGER_ERROR_NONE;
491 API int app_info_get_package(app_info_h app_info, char **package)
494 char *app_package_dup = NULL;
497 if (app_info == NULL || package == NULL)
498 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
500 ret = pkgmgrinfo_appinfo_get_pkgname(app_info->pkg_app_info, &val);
502 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
504 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
506 app_package_dup = strdup(val);
507 if (app_package_dup == NULL)
508 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
510 *package = app_package_dup;
512 return APP_MANAGER_ERROR_NONE;
515 API int app_info_get_type(app_info_h app_info, char **type)
518 char *app_type_dup = NULL;
521 if (app_info == NULL || type == NULL)
522 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
524 ret = pkgmgrinfo_appinfo_get_apptype(app_info->pkg_app_info, &val);
526 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
528 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
530 app_type_dup = strdup(val);
531 if (app_type_dup == NULL)
532 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
534 *type = app_type_dup;
536 return APP_MANAGER_ERROR_NONE;
539 API int app_info_get_app_component_type(app_info_h app_info, app_info_app_component_type_e *type)
541 pkgmgrinfo_app_component comp_val;
542 app_info_app_component_type_e converted_comp_val;
545 if (app_info == NULL || type == NULL)
546 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
548 ret = pkgmgrinfo_appinfo_get_component(app_info->pkg_app_info, &comp_val);
550 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
552 ret = app_info_convert_app_component(comp_val, &converted_comp_val);
554 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
556 *type = converted_comp_val;
558 return APP_MANAGER_ERROR_NONE;
561 API int app_info_foreach_metadata(app_info_h app_info, app_info_metadata_cb callback, void *user_data)
565 if (app_info == NULL || callback == NULL)
566 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
568 foreach_metadata_context_s foreach_context = {
569 .callback = callback,
570 .user_data = user_data,
573 retval = pkgmgrinfo_appinfo_foreach_metadata(app_info->pkg_app_info, app_info_foreach_app_metadata_cb, &foreach_context);
575 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
577 return APP_MANAGER_ERROR_NONE;
580 API int app_info_is_nodisplay(app_info_h app_info, bool *nodisplay)
584 if (app_info == NULL || nodisplay == NULL)
585 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
587 if (pkgmgrinfo_appinfo_is_nodisplay(app_info->pkg_app_info, &val) < 0)
588 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
591 return APP_MANAGER_ERROR_NONE;
594 API int app_info_is_enabled(app_info_h app_info, bool *enabled)
598 if (app_info == NULL || enabled == NULL)
599 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
601 if (pkgmgrinfo_appinfo_is_enabled(app_info->pkg_app_info, &val) < 0)
602 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
605 return APP_MANAGER_ERROR_NONE;
609 API int app_info_is_equal(app_info_h lhs, app_info_h rhs, bool *equal)
611 if (lhs == NULL || rhs == NULL || equal == NULL)
612 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
614 if (!strcmp(lhs->app_id, rhs->app_id))
619 return APP_MANAGER_ERROR_NONE;
622 API int app_info_is_onboot(app_info_h app_info, bool *onboot)
626 if (app_info == NULL || onboot == NULL)
627 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
629 if (pkgmgrinfo_appinfo_is_onboot(app_info->pkg_app_info, &val) < 0)
630 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
633 return APP_MANAGER_ERROR_NONE;
636 API int app_info_is_preload(app_info_h app_info, bool *preload)
640 if (app_info == NULL || preload == NULL)
641 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
643 if (pkgmgrinfo_appinfo_is_preload(app_info->pkg_app_info, &val) < 0)
644 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
647 return APP_MANAGER_ERROR_NONE;
650 API int app_info_clone(app_info_h *clone, app_info_h app_info)
654 if (clone == NULL || app_info == NULL)
655 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
657 info = calloc(1, sizeof(struct app_info_s));
659 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
661 info->app_id = strdup(app_info->app_id);
662 if (info->app_id == NULL) {
664 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
667 if (pkgmgrinfo_appinfo_clone_appinfo(app_info->pkg_app_info, &(info->pkg_app_info)) < 0) {
670 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
675 return APP_MANAGER_ERROR_NONE;
678 API int app_info_foreach_category(app_info_h app_info, app_info_category_cb callback, void *user_data)
681 if (app_info == NULL || callback == NULL)
682 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
684 retval = _check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
685 if (retval != APP_MANAGER_ERROR_NONE)
686 return app_manager_error(APP_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
688 foreach_category_context_s foreach_category = {
689 .callback = callback,
690 .user_data = user_data,
693 retval = pkgmgrinfo_appinfo_foreach_category(app_info->pkg_app_info, app_info_foreach_category_cb, &foreach_category);
694 if (retval != PMINFO_R_OK)
695 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
697 return APP_MANAGER_ERROR_NONE;
700 API int app_info_filter_create(app_info_filter_h *handle)
703 app_info_filter_h filter_created = NULL;
704 pkgmgrinfo_appinfo_filter_h filter_h = NULL;
707 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
709 retval = pkgmgrinfo_appinfo_filter_create(&filter_h);
711 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
713 filter_created = calloc(1, sizeof(struct app_info_filter_s));
714 if (filter_created == NULL) {
716 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
719 filter_created->pkg_app_info_filter = filter_h;
721 *handle = filter_created;
723 return APP_MANAGER_ERROR_NONE;
726 API int app_info_filter_destroy(app_info_filter_h handle)
731 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
733 retval = pkgmgrinfo_appinfo_filter_destroy(handle->pkg_app_info_filter);
735 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
738 return APP_MANAGER_ERROR_NONE;
741 API int app_info_filter_add_bool(app_info_filter_h handle, const char *property, const bool value)
744 char *converted_property = NULL;
746 if ((handle == NULL) || (property == NULL))
747 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
749 retval = app_info_convert_bool_property(property, &converted_property);
751 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
753 retval = pkgmgrinfo_appinfo_filter_add_bool(handle->pkg_app_info_filter, converted_property, value);
755 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
757 return APP_MANAGER_ERROR_NONE;
760 API int app_info_filter_add_string(app_info_filter_h handle, const char *property, const char *value)
763 char *converted_property = NULL;
765 if ((handle == NULL) || (property == NULL))
766 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
768 retval = app_info_convert_str_property(property, &converted_property);
770 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
772 retval = pkgmgrinfo_appinfo_filter_add_string(handle->pkg_app_info_filter, converted_property, value);
774 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
776 return APP_MANAGER_ERROR_NONE;
779 API int app_info_filter_count_appinfo(app_info_filter_h handle, int *count)
783 if ((handle == NULL) || (count == NULL))
784 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
786 retval = pkgmgrinfo_appinfo_filter_count(handle->pkg_app_info_filter, count);
788 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
790 return APP_MANAGER_ERROR_NONE;
793 API int app_info_filter_foreach_appinfo(app_info_filter_h handle, app_info_filter_cb callback, void *user_data)
797 foreach_context_s foreach_context = {
798 .callback = callback,
799 .user_data = user_data,
802 if ((handle == NULL) || (callback == NULL))
803 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
805 retval = pkgmgrinfo_appinfo_usr_filter_foreach_appinfo(handle->pkg_app_info_filter, app_info_foreach_app_filter_cb, &foreach_context, getuid());
807 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
809 return APP_MANAGER_ERROR_NONE;
812 API int app_info_metadata_filter_create(app_info_metadata_filter_h *handle)
815 app_info_metadata_filter_h filter_created = NULL;
816 pkgmgrinfo_appinfo_metadata_filter_h filter_h = NULL;
819 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
821 filter_created = calloc(1, sizeof(struct app_info_metadata_filter_s));
822 if (filter_created == NULL)
823 return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
825 retval = pkgmgrinfo_appinfo_metadata_filter_create(&filter_h);
827 free(filter_created);
828 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
831 filter_created->pkg_app_info_metadata_filter = filter_h;
833 *handle = filter_created;
835 return APP_MANAGER_ERROR_NONE;
838 API int app_info_metadata_filter_destroy(app_info_metadata_filter_h handle)
843 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
845 retval = pkgmgrinfo_appinfo_metadata_filter_destroy(handle->pkg_app_info_metadata_filter);
847 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
850 return APP_MANAGER_ERROR_NONE;
853 API int app_info_metadata_filter_add(app_info_metadata_filter_h handle, const char *key, const char *value)
857 if ((handle == NULL) || (key == NULL))
858 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
860 retval = pkgmgrinfo_appinfo_metadata_filter_add(handle->pkg_app_info_metadata_filter, key, value);
862 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
864 return APP_MANAGER_ERROR_NONE;
867 API int app_info_metadata_filter_foreach(app_info_metadata_filter_h handle, app_info_filter_cb callback, void *user_data)
871 foreach_context_s foreach_context = {
872 .callback = callback,
873 .user_data = user_data,
877 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
879 if (callback == NULL)
880 return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
882 retval = pkgmgrinfo_appinfo_usr_metadata_filter_foreach(handle->pkg_app_info_metadata_filter, app_info_foreach_app_filter_cb, &foreach_context, getuid());
884 return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
886 return APP_MANAGER_ERROR_NONE;