Add APIs to set/get limit size of photo for vcard
[platform/core/pim/contacts-service.git] / client / ctsvc_client_db_notification.c
1 /*
2  * Contacts Service
3  *
4  * Copyright (c) 2010 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 #include "contacts.h"
21 #include "ctsvc_internal.h"
22 #include "ctsvc_inotify.h"
23 #include "ctsvc_client_handle.h"
24 #include "ctsvc_client_ipc.h"
25
26 static int _client_noti_check_read_permission(const char *view_uri)
27 {
28         int ret;
29         bool result = false;
30
31         if (STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_ADDRESSBOOK, strlen(CTSVC_VIEW_URI_ADDRESSBOOK))
32                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_PERSON, strlen(CTSVC_VIEW_URI_PERSON))
33                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_CONTACT, strlen(CTSVC_VIEW_URI_CONTACT))
34                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_SIMPLE_CONTACT, strlen(CTSVC_VIEW_URI_SIMPLE_CONTACT))
35                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_GROUP, strlen(CTSVC_VIEW_URI_GROUP))
36                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_MY_PROFILE, strlen(CTSVC_VIEW_URI_MY_PROFILE))
37                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_NAME, strlen(CTSVC_VIEW_URI_NAME))
38                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_NUMBER, strlen(CTSVC_VIEW_URI_NUMBER))
39                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_EMAIL, strlen(CTSVC_VIEW_URI_EMAIL))
40                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_ADDRESS, strlen(CTSVC_VIEW_URI_ADDRESS))
41                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_NOTE, strlen(CTSVC_VIEW_URI_NOTE))
42                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_URL, strlen(CTSVC_VIEW_URI_URL))
43                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_EVENT, strlen(CTSVC_VIEW_URI_EVENT))
44                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_IMAGE, strlen(CTSVC_VIEW_URI_IMAGE))
45                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_COMPANY, strlen(CTSVC_VIEW_URI_COMPANY))
46                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_NICKNAME, strlen(CTSVC_VIEW_URI_NICKNAME))
47                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_MESSENGER, strlen(CTSVC_VIEW_URI_MESSENGER))
48                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_EXTENSION, strlen(CTSVC_VIEW_URI_EXTENSION))
49                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_PROFILE, strlen(CTSVC_VIEW_URI_PROFILE))
50                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_RELATIONSHIP, strlen(CTSVC_VIEW_URI_RELATIONSHIP))
51                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_ACTIVITY, strlen(CTSVC_VIEW_URI_ACTIVITY))
52                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_ACTIVITY_PHOTO, strlen(CTSVC_VIEW_URI_ACTIVITY_PHOTO))
53                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_SPEEDDIAL, strlen(CTSVC_VIEW_URI_SPEEDDIAL))
54                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_SDN, strlen(CTSVC_VIEW_URI_SDN))
55                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_GROUP_RELATION, strlen(CTSVC_VIEW_URI_GROUP_RELATION))
56                         || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_SIP, strlen(CTSVC_VIEW_URI_SIP))) {
57                 ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_CONTACT_READ, &result);
58                 if (CONTACTS_ERROR_NONE != ret) {
59                         ERR("ctsvc_ipc_client_check_permission() Fail(%d)", ret);
60                         return ret;
61                 }
62
63                 RETVM_IF(result == false, CONTACTS_ERROR_PERMISSION_DENIED,
64                                 "Permission denied(contact read)");
65         } else if (STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_PHONELOG, strlen(CTSVC_VIEW_URI_PHONELOG))) {
66                 ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_PHONELOG_READ, &result);
67                 if (CONTACTS_ERROR_NONE != ret) {
68                         ERR("ctsvc_ipc_client_check_permission() Fail(%d)", ret);
69                         return ret;
70                 }
71
72                 RETVM_IF(result == false, CONTACTS_ERROR_PERMISSION_DENIED,
73                                 "Permission denied(phonelog read)");
74         }
75
76         return CONTACTS_ERROR_NONE;
77 }
78
79 API int contacts_db_add_changed_cb(const char *view_uri, contacts_db_changed_cb cb,
80                 void *user_data)
81 {
82         int ret;
83
84         RETV_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER);
85         RETV_IF(NULL == cb, CONTACTS_ERROR_INVALID_PARAMETER);
86
87         ret = _client_noti_check_read_permission(view_uri);
88         RETVM_IF(CONTACTS_ERROR_NONE != ret, ret,
89                         "_client_noti_check_read_permission() Fail(%d)", ret);
90
91         ret = ctsvc_inotify_subscribe(view_uri, cb, user_data);
92         if (CONTACTS_ERROR_NONE != ret) {
93                 ERR("ctsvc_inotify_subscribe(%s) Fail(%d)", view_uri, ret);
94                 return ret;
95         }
96
97         return CONTACTS_ERROR_NONE;
98 }
99
100 API int contacts_db_remove_changed_cb(const char *view_uri, contacts_db_changed_cb cb,
101                 void *user_data)
102 {
103         int ret;
104
105         RETV_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER);
106         RETV_IF(NULL == cb, CONTACTS_ERROR_INVALID_PARAMETER);
107
108         ret = ctsvc_inotify_unsubscribe(view_uri, cb, user_data);
109         if (CONTACTS_ERROR_NONE != ret) {
110                 ERR("ctsvc_inotify_unsubscribe(%s) Fail(%d)", view_uri, ret);
111                 return ret;
112         }
113
114         return CONTACTS_ERROR_NONE;
115 }
116