Add function to support new API on media-content.
[platform/core/multimedia/libmedia-service.git] / src / common / media-svc-noti.c
1 /*
2  * libmedia-service
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Hyunjun Ko <zzoon.ko@samsung.com>, Haejeong Kim <backto.kim@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 #include <unistd.h>
23 #include "media-svc-noti.h"
24 #include "media-svc-util.h"
25
26 static __thread media_svc_noti_item *g_inserted_noti_list = NULL;
27 static __thread int g_noti_from_pid = -1;
28
29 static int __media_svc_publish_noti_by_item(media_svc_noti_item *noti_item)
30 {
31         int ret = MS_MEDIA_ERR_NONE;
32
33         if (noti_item && noti_item->path)
34         {
35                 ret = media_db_update_send(noti_item->pid,
36                                                                 noti_item->update_item,
37                                                                 noti_item->update_type,
38                                                                 noti_item->path,
39                                                                 noti_item->media_uuid,
40                                                                 noti_item->media_type,
41                                                                 noti_item->mime_type);
42                 if(ret != MS_MEDIA_ERR_NONE)
43                 {
44                         media_svc_error("media_db_update_send failed : %d [%s]", ret, noti_item->path);
45                         ret = MS_MEDIA_ERR_SEND_NOTI_FAIL;
46                 }
47                 else
48                 {
49                         media_svc_debug("media_db_update_send success");
50                 }
51         }
52         else
53         {
54                 media_svc_debug("invalid path");
55                 ret = MS_MEDIA_ERR_INVALID_PARAMETER;
56         }
57
58         return ret;
59 }
60
61 int _media_svc_publish_noti(media_item_type_e update_item,
62                                                         media_item_update_type_e update_type,
63                                                         const char *path,
64                                                         media_type_e media_type,
65                                                         const char *uuid,
66                                                         const char *mime_type
67 )
68 {
69         int ret = MS_MEDIA_ERR_NONE;
70
71         if(path) {
72                 ret = media_db_update_send(getpid(), update_item, update_type, (char *)path, (char *)uuid, media_type, (char *)mime_type);
73                 if(ret != MS_MEDIA_ERR_NONE) {
74                         media_svc_error("Send noti failed : %d [%s]", ret, path);
75                         ret = MS_MEDIA_ERR_SEND_NOTI_FAIL;
76                 } else {
77                         media_svc_debug("media_db_update_send success");
78                 }
79         } else {
80                 media_svc_debug("invalid path");
81                 ret = MS_MEDIA_ERR_INVALID_PARAMETER;
82         }
83
84         return ret;
85 }
86
87 media_svc_noti_item *_media_svc_get_noti_list()
88 {
89         return g_inserted_noti_list;
90 }
91
92 void _media_svc_set_noti_from_pid(int pid)
93 {
94         g_noti_from_pid = pid;
95 }
96
97 int _media_svc_create_noti_list(int count)
98 {
99         SAFE_FREE(g_inserted_noti_list);
100
101         g_inserted_noti_list = calloc(count, sizeof(media_svc_noti_item));
102         if (g_inserted_noti_list == NULL) {
103                 media_svc_error("Failed to prepare noti items");
104                 return MS_MEDIA_ERR_OUT_OF_MEMORY;
105         }
106
107         return MS_MEDIA_ERR_NONE;
108 }
109
110 int _media_svc_insert_item_to_noti_list(media_svc_content_info_s *content_info, int cnt)
111 {
112         media_svc_noti_item *noti_list = g_inserted_noti_list;
113
114         if (noti_list && content_info) {
115                 noti_list[cnt].pid = g_noti_from_pid;
116                 noti_list[cnt].update_item = MS_MEDIA_ITEM_INSERT; // INSERT
117                 noti_list[cnt].update_type = MS_MEDIA_ITEM_FILE;
118                 noti_list[cnt].media_type = content_info->media_type;
119                 if (content_info->media_uuid)
120                         noti_list[cnt].media_uuid = strdup(content_info->media_uuid);
121                 if (content_info->path)
122                         noti_list[cnt].path = strdup(content_info->path);
123                 if (content_info->mime_type)
124                         noti_list[cnt].mime_type = strdup(content_info->mime_type);
125         }
126
127         return MS_MEDIA_ERR_NONE;
128 }
129
130 int _media_svc_destroy_noti_list(int all_cnt)
131 {
132         int i = 0;
133         media_svc_noti_item *noti_list = g_inserted_noti_list;
134
135         if (noti_list) {
136                 for (i = 0; i < all_cnt; i++) {
137                         SAFE_FREE(noti_list[i].media_uuid);
138                         SAFE_FREE(noti_list[i].path);
139                         SAFE_FREE(noti_list[i].mime_type);
140                 }
141
142                 SAFE_FREE(g_inserted_noti_list);
143                 g_inserted_noti_list = NULL;
144         }
145
146         return MS_MEDIA_ERR_NONE;
147 }
148
149 int _media_svc_publish_noti_list(int all_cnt)
150 {
151         int ret = MS_MEDIA_ERR_NONE;
152         int idx = 0;
153         media_svc_noti_item *noti_list = g_inserted_noti_list;
154
155         if (noti_list) {
156                 for (idx = 0; idx < all_cnt; idx++) {
157                         ret = __media_svc_publish_noti_by_item(&(noti_list[idx]));
158                 }
159         }
160
161         return ret;
162 }
163
164
165 int _media_svc_create_noti_item(media_svc_content_info_s *content_info,
166                                                         int pid,
167                                                         media_item_type_e update_item,
168                                                         media_item_update_type_e update_type,
169                                                         media_svc_noti_item **item)
170 {
171         media_svc_noti_item *_item = NULL;
172
173         if (item == NULL || content_info == NULL) {
174                 media_svc_error("_media_svc_create_noti_item : invalid param");
175                 return MS_MEDIA_ERR_INVALID_PARAMETER;
176         }
177
178         _item = calloc(1, sizeof(media_svc_noti_item));
179
180         if (_item == NULL) {
181                 media_svc_error("Failed to prepare noti items");
182                 return MS_MEDIA_ERR_OUT_OF_MEMORY;
183         }
184
185         _item->pid = pid;
186         _item->update_item = update_item;
187         _item->update_type = update_type;
188         _item->media_type = content_info->media_type;
189
190         if (content_info->media_uuid)
191                 _item->media_uuid = strdup(content_info->media_uuid);
192         if (content_info->path)
193                 _item->path = strdup(content_info->path);
194         if (content_info->mime_type)
195                 _item->mime_type = strdup(content_info->mime_type);
196
197         *item = _item;
198
199         return MS_MEDIA_ERR_NONE;
200 }
201
202 int _media_svc_destroy_noti_item(media_svc_noti_item *item)
203 {
204         if (item) {
205                 SAFE_FREE(item->media_uuid);
206                 SAFE_FREE(item->path);
207                 SAFE_FREE(item->mime_type);
208
209                 SAFE_FREE(item);
210         }
211
212         return MS_MEDIA_ERR_NONE;
213 }