Modify the media type classification method
[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                 ret = media_db_update_send_internal(noti_item->pid, noti_item->update_item, noti_item->update_type, noti_item->path, noti_item->media_uuid, noti_item->media_type, noti_item->mime_type);
35                 if (ret != MS_MEDIA_ERR_NONE) {
36                         media_svc_error("media_db_update_send_internal failed : %d [%s]", ret, noti_item->path);
37                         ret = MS_MEDIA_ERR_SEND_NOTI_FAIL;
38                 } else {
39                         media_svc_debug("media_db_update_send_internal success");
40                 }
41         } else {
42                 media_svc_debug("invalid path");
43                 ret = MS_MEDIA_ERR_INVALID_PARAMETER;
44         }
45
46         return ret;
47 }
48
49 int _media_svc_publish_noti(media_item_update_type_e update_type, const char *path, media_type_e media_type, const char *uuid, const char *mime_type)
50 {
51         int ret = MS_MEDIA_ERR_NONE;
52         media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid path");
53
54         ret = media_db_update_send_internal(getpid(), MS_MEDIA_ITEM_FILE, update_type, (char *)path, (char *)uuid, media_type, (char *)mime_type);
55         media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Send noti failed[%d][%s]", ret, path);
56
57         media_svc_debug("Send noti [%s]", path);
58
59         return ret;
60 }
61
62 int _media_svc_publish_dir_noti(media_item_update_type_e update_type, const char *path, const char *uuid, int pid)
63 {
64         int ret = MS_MEDIA_ERR_NONE;
65         media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid path");
66
67         ret = media_db_update_send_internal(pid, MS_MEDIA_ITEM_DIRECTORY, update_type, (char *)path, (char *)uuid, MS_MEDIA_UNKNOWN, NULL);
68         media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Send dir noti failed[%d][%s]", ret, path);
69
70         media_svc_debug("Send dir noti [%s]", path);
71
72         return ret;
73 }
74
75
76 void _media_svc_set_noti_from_pid(int pid)
77 {
78         g_noti_from_pid = pid;
79 }
80
81 int _media_svc_create_noti_list(int count)
82 {
83         SAFE_FREE(g_inserted_noti_list);
84
85         g_inserted_noti_list = calloc(count, sizeof(media_svc_noti_item));
86         if (g_inserted_noti_list == NULL) {
87                 media_svc_error("Failed to prepare noti items");
88                 return MS_MEDIA_ERR_OUT_OF_MEMORY;
89         }
90
91         return MS_MEDIA_ERR_NONE;
92 }
93
94 int _media_svc_insert_item_to_noti_list(media_svc_content_info_s *content_info, int cnt)
95 {
96         media_svc_noti_item *noti_list = g_inserted_noti_list;
97
98         if (noti_list && content_info) {
99                 noti_list[cnt].pid = g_noti_from_pid;
100                 noti_list[cnt].update_item = MS_MEDIA_ITEM_INSERT; /* INSERT */
101                 noti_list[cnt].update_type = MS_MEDIA_ITEM_FILE;
102                 noti_list[cnt].media_type = content_info->media_type;
103                 if (content_info->media_uuid)
104                         noti_list[cnt].media_uuid = strdup(content_info->media_uuid);
105                 if (content_info->path)
106                         noti_list[cnt].path = strdup(content_info->path);
107                 if (content_info->mime_type)
108                         noti_list[cnt].mime_type = strdup(content_info->mime_type);
109         }
110
111         return MS_MEDIA_ERR_NONE;
112 }
113
114 int _media_svc_destroy_noti_list(int all_cnt)
115 {
116         int i = 0;
117         media_svc_noti_item *noti_list = g_inserted_noti_list;
118
119         if (noti_list) {
120                 for (i = 0; i < all_cnt; i++) {
121                         SAFE_FREE(noti_list[i].media_uuid);
122                         SAFE_FREE(noti_list[i].path);
123                         SAFE_FREE(noti_list[i].mime_type);
124                 }
125
126                 SAFE_FREE(g_inserted_noti_list);
127                 g_inserted_noti_list = NULL;
128         }
129
130         return MS_MEDIA_ERR_NONE;
131 }
132
133 int _media_svc_publish_noti_list(int all_cnt)
134 {
135         int ret = MS_MEDIA_ERR_NONE;
136         int idx = 0;
137         media_svc_noti_item *noti_list = g_inserted_noti_list;
138
139         if (noti_list) {
140                 for (idx = 0; idx < all_cnt; idx++)
141                         ret = __media_svc_publish_noti_by_item(&(noti_list[idx]));
142         }
143
144         return ret;
145 }
146
147 int _media_svc_destroy_noti_item(media_svc_noti_item *item)
148 {
149         if (item) {
150                 SAFE_FREE(item->media_uuid);
151                 SAFE_FREE(item->path);
152                 SAFE_FREE(item->mime_type);
153
154                 SAFE_FREE(item);
155         }
156
157         return MS_MEDIA_ERR_NONE;
158 }