Add a code for removing sticker data
[platform/core/uifw/capi-ui-sticker.git] / receiver / src / sticker_info.cpp
1 #include "sticker_info.h"
2 #include <sticker_provider.h>
3 #include <app_common.h>
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <iostream>
7
8 #include "log.h"
9
10 using namespace std;
11
12 static sticker_provider_h sticker_provider = NULL;
13 static bool need_to_retrive = false;
14
15 sticker_data_h
16 set_sticker_data(sticker_data_uri_type_e type, const char* uri, const char* keyword,
17 int len, const char* group, const char* thumbnail, const char* description)
18 {
19     sticker_data_h sticker_data;
20     int ret;
21
22     /* Creates a Sticker data handle */
23     ret = sticker_data_create(&sticker_data);
24     if (ret != STICKER_ERROR_NONE) {
25         /* Error handling */
26         LOGE("Failed to create sticker data");
27     }
28
29     /* Sets the URI and URI type of the sticker */
30     ret = sticker_data_set_uri(sticker_data, type, uri);
31     if (ret != STICKER_ERROR_NONE) {
32         /* Error handling */
33         LOGE("Failed to set uri");
34     }
35
36     //for (int i = 0; i < len; i++)
37     {
38         /* Adds a keyword of the sticker to the list */
39         ret = sticker_data_add_keyword(sticker_data, keyword);
40         if (ret != STICKER_ERROR_NONE) {
41             /* Error handling */
42             LOGE("Failed to add keyword");
43         }
44     }
45
46     /* Sets the group name of the sticker */
47     ret = sticker_data_set_group_name(sticker_data, group);
48     if (ret != STICKER_ERROR_NONE) {
49         /* Error handling */
50         LOGE("Failed to set group name");
51     }
52
53     /* Sets the thumbnail local path of the sticker */
54     if (thumbnail) {
55         ret = sticker_data_set_thumbnail(sticker_data, thumbnail);
56         if (ret != STICKER_ERROR_NONE) {
57             /* Error handling */
58             LOGE("Failed to set thumbnail");
59         }
60     }
61
62     /* Sets the description of the sticker */
63     ret = sticker_data_set_description(sticker_data, description);
64     if (ret != STICKER_ERROR_NONE) {
65         /* Error handling */
66         LOGE("Failed to set description");
67     }
68
69     return sticker_data;
70 }
71
72 void
73 insert_sticker_data(const char *filepath, const char *keyword, const char *group, const char *desc)
74 {
75     sticker_data_h data_handle;
76     int ret;
77
78     data_handle = set_sticker_data(STICKER_DATA_URI_LOCAL_PATH, filepath, keyword, 1, group, NULL, desc);
79
80     ret = sticker_provider_insert_data(sticker_provider, data_handle);
81     if (ret != STICKER_ERROR_NONE) {
82         LOGE("Failed to insert data. error code : %x. message : %s", ret, get_error_message(ret));
83     }
84     else {
85         LOGI("Succeeded to insert data");
86     }
87
88     /* Destroys a sticker data handle */
89     ret = sticker_data_destroy(data_handle);
90     if (ret != STICKER_ERROR_NONE) {
91         /* Error handling */
92         LOGE("Failed to destroy sticker data");
93     }
94 }
95
96 int create_sticker_provider_handle(void)
97 {
98     int ret;
99     ret = sticker_provider_create(&sticker_provider);
100     if (ret != STICKER_ERROR_NONE) {
101         /* Error handling */
102         LOGE("Failed to create sticker provider");
103     }
104
105     return ret;
106 }
107
108 void destroy_sticker_provider_handle(void)
109 {
110     sticker_provider_destroy(sticker_provider);
111     sticker_provider = NULL;
112 }
113
114 static void _sticker_foreach_cb(sticker_data_h data_handle, void *user_data)
115 {
116     int ret;
117     char *del_file = (char *)user_data;
118     sticker_data_uri_type_e type;
119     char *uri = NULL;
120
121     if (!need_to_retrive)
122         return;
123
124     ret = sticker_data_get_uri(data_handle, &type, &uri);
125     if (ret != STICKER_ERROR_NONE)
126         LOGE("Failed to get sticker uri");
127
128     int result = (string(uri)).find(del_file);
129     if (result >= 0) {
130         LOGI("Delete sticker (%s)", uri);
131         need_to_retrive = false;
132
133         ret = sticker_provider_delete_data(sticker_provider, data_handle);
134         if (ret != STICKER_ERROR_NONE)
135             LOGE("Failed to delete sticker");
136     }
137 }
138
139 void delete_sticker_data(const char *fileName)
140 {
141     int ret;
142     int offset = 0;
143     int count = 0;
144     int result = 0;
145     need_to_retrive = true;
146
147     while (result == count && need_to_retrive) {
148         count = 20;
149         ret = sticker_provider_data_foreach_all(sticker_provider, offset, count, &result, _sticker_foreach_cb, (void *)fileName);
150         offset += result;
151         if (ret != STICKER_ERROR_NONE) {
152             LOGE("Failed to retrieve sticker");
153             return;
154         }
155     }
156 }