SET(LIBDIR "\${prefix}/lib")
SET(INCLUDEDIR "\${prefix}/${DEST_INCLUDE_DIR}")
SET(VERSION_MAJOR 0)
-SET(VERSION "${VERSION_MAJOR}.9.24.8")
+SET(VERSION "${VERSION_MAJOR}.9.45.3")
EXECUTE_PROCESS(COMMAND build-util/generator.sh)
FILE(GLOB HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h)
INSTALL(FILES ${HEADER_FILES} DESTINATION ${DEST_INCLUDE_DIR})
+# Install DB file
+FILE(GLOB DB_FILES ${CMAKE_CURRENT_SOURCE_DIR}/build-util/.contacts-svc.db*)
+INSTALL(FILES ${DB_FILES} DESTINATION /opt/usr/dbspace)
+
ADD_SUBDIRECTORY(native)
ADD_SUBDIRECTORY(client)
ADD_SUBDIRECTORY(server)
--- /dev/null
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngjae Shin <yj99.shin@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, char **argv)
+{
+ FILE *fp;
+ int c;
+
+ fp = fopen(argv[1], "r");
+ if (fp == NULL)
+ exit(EXIT_FAILURE);
+
+ do{
+ c = fgetc(fp);
+ switch (c)
+ {
+ case '-':
+ if ('-' == (c = fgetc(fp))) {
+ while ('\n' != c && EOF != c)
+ c = fgetc(fp);
+ printf("\n");
+ }
+ else printf("-%c",c);
+ break;
+ case EOF:
+ break;
+ default:
+ printf("%c",c);
+ break;
+ }
+ }while(EOF != c);
+
+ exit(EXIT_SUCCESS);
+}
+
#!/bin/sh
-echo "###### API Generator #####"
+echo "###### DB Generator #####"
cd build-util
make
-# New server daemon Schema
+# Make DB schema for generating DB file when running contacts server daemon
echo "static const char *schema_query = \"\\" > ../server/schema.h
./DB-schema-gen ../schema.sql >> ../server/schema.h
echo \"\; >> ../server/schema.h
+# Make DB file at builing time
+echo "sqlite3 .contacts-svc.db \"" > DB-schema-create.sh
+./DB-schema-gen2 ../schema.sql >> DB-schema-create.sh
+echo \" >> DB-schema-create.sh
+chmod +x DB-schema-create.sh
+./DB-schema-create.sh
+rm DB-schema-create.sh
+
make clean
${CMAKE_SOURCE_DIR}/common/ctsvc_inotify.c
${CMAKE_SOURCE_DIR}/common/ctsvc_list.c
${CMAKE_SOURCE_DIR}/common/ctsvc_localize.c
+ ${CMAKE_SOURCE_DIR}/common/ctsvc_localize_ch.c
${CMAKE_SOURCE_DIR}/common/ctsvc_normalize.c
${CMAKE_SOURCE_DIR}/common/ctsvc_mutex.c
${CMAKE_SOURCE_DIR}/common/ctsvc_query.c
// ipc call\r
if (ctsvc_ipc_call( CTSVC_IPC_ACTIVITY_MODULE, CTSVC_IPC_SERVER_ACTIVITY_DELETE_BY_CONTACT_ID, indata, &outdata) != 0)\r
{\r
- CTS_ERR("pims_ipc_call failed");\r
+ CTS_ERR("ctsvc_ipc_call failed");\r
pims_ipc_data_destroy(indata);\r
return CONTACTS_ERROR_IPC;\r
}\r
// check result\r
unsigned int size = 0;\r
ret = *(int*) pims_ipc_data_get(outdata, &size);\r
+ if (CONTACTS_ERROR_NONE == ret) {\r
+ int transaction_ver = 0;\r
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);\r
+ ctsvc_client_ipc_set_change_version(transaction_ver);\r
+ }\r
\r
pims_ipc_data_destroy(outdata);\r
}\r
// ipc call\r
if (ctsvc_ipc_call( CTSVC_IPC_ACTIVITY_MODULE, CTSVC_IPC_SERVER_ACTIVITY_DELETE_BY_ACCOUNT_ID, indata, &outdata) != 0)\r
{\r
- CTS_ERR("pims_ipc_call failed");\r
+ CTS_ERR("ctsvc_ipc_call failed");\r
pims_ipc_data_destroy(indata);\r
return CONTACTS_ERROR_IPC;\r
}\r
// check result\r
unsigned int size = 0;\r
ret = *(int*) pims_ipc_data_get(outdata, &size);\r
+ if (CONTACTS_ERROR_NONE == ret) {\r
+ int transaction_ver = 0;\r
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);\r
+ ctsvc_client_ipc_set_change_version(transaction_ver);\r
+ }\r
\r
pims_ipc_data_destroy(outdata);\r
}\r
typedef struct {
void *callback;
void *user_data;
- contacts_list_h list;
}ctsvc_ipc_async_userdata_s;
static void __ctsvc_ipc_client_insert_records_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata);
{
ctsvc_ipc_async_userdata_s *sync_data = (ctsvc_ipc_async_userdata_s *)userdata;
int ret = CONTACTS_ERROR_NONE;
- contacts_list_h list = sync_data->list;
int *ids = NULL;
unsigned int count = 0;
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(data_out,&size);
- if (ret == CONTACTS_ERROR_NONE && list != NULL)
- {
+ if (ret == CONTACTS_ERROR_NONE) {
int i=0;
unsigned int size = 0;
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(data_out, &size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
count = *(unsigned int*) pims_ipc_data_get(data_out,&size);
ids = calloc(count, sizeof(int));
// check outdata
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(data_out,&size);
+
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(data_out, &size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
}
if (sync_data->callback)
// check outdata
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(data_out,&size);
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(data_out, &size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
}
if (sync_data->callback)
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_INSERT_RECORD, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(outdata,&size);
- if (ret == CONTACTS_ERROR_NONE)
- {
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+
if (id)
*id = *(int*)pims_ipc_data_get(outdata,&size);
}
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_RECORD, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
*out_record = NULL;
return CONTACTS_ERROR_IPC;
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_UPDATE_RECORD, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
// check outdata
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(outdata,&size);
+ if (CONTACTS_ERROR_NONE == ret) {
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
pims_ipc_data_destroy(outdata);
}
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_DELETE_RECORD, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
// check outdata
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(outdata,&size);
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
pims_ipc_data_destroy(outdata);
}
pims_ipc_data_h indata = NULL;
pims_ipc_data_h outdata = NULL;
- RETVM_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter : record is NULL");
+ RETVM_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : record is NULL");
// make indata
indata = pims_ipc_data_create(0);
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE,
CTSVC_IPC_SERVER_DB_REPLACE_RECORD, indata, &outdata) != 0) {
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
// check outdata
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(outdata,&size);
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
pims_ipc_data_destroy(outdata);
}
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_ALL_RECORDS, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
*out_list = NULL;
return CONTACTS_ERROR_IPC;
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_RECORDS_WITH_QUERY, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
*out_list = NULL;
return CONTACTS_ERROR_IPC;
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_COUNT, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_COUNT_WITH_QUERY, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
{
int ret = CONTACTS_ERROR_NONE;
pims_ipc_data_h indata = NULL;
- pims_ipc_data_h outdata = NULL;
- contacts_list_h clone_list = NULL;
ctsvc_ipc_async_userdata_s *async_data = NULL;
RETVM_IF(list==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"list is NULL");
-
- ret = ctsvc_list_clone(list, &clone_list);
- RETV_IF(CONTACTS_ERROR_NONE != ret, ret);
-
- // make indata
indata = pims_ipc_data_create(0);
if (indata == NULL)
{
CTS_ERR("ipc data created fail!");
ret = CONTACTS_ERROR_OUT_OF_MEMORY;
- contacts_list_destroy(clone_list, true);
return ret;
}
- ret = ctsvc_ipc_marshal_list(clone_list,indata);
+ ret = ctsvc_ipc_marshal_list(list,indata);
if (ret != CONTACTS_ERROR_NONE)
{
CTS_ERR("marshal fail");
- contacts_list_destroy(clone_list, true);
- return ret;
- }
-
- if (callback == NULL)
- {
- if (ctsvc_ipc_call( CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_INSERT_RECORDS,
- indata,&outdata) != 0)
- {
- CTS_ERR("pims_ipc_call_async failed");
- contacts_list_destroy(clone_list, true);
- return CONTACTS_ERROR_IPC;
- }
-
- if (indata)
- {
- pims_ipc_data_destroy(indata);
- }
- if (outdata)
- {
- // check outdata
- unsigned int size = 0;
- ret = *(int*) pims_ipc_data_get(outdata,&size);
-
- if (ret == CONTACTS_ERROR_NONE)
- {
- goto SET_DATA;
- }
-
- pims_ipc_data_destroy(outdata);
- }
-
- contacts_list_destroy(clone_list, true);
return ret;
}
{
CTS_ERR("malloc fail!");
ret = CONTACTS_ERROR_OUT_OF_MEMORY;
- contacts_list_destroy(clone_list, true);
+ pims_ipc_data_destroy(indata);
return ret;
}
async_data->callback = callback;
async_data->user_data = user_data;
- async_data->list = clone_list;
+
if (ctsvc_ipc_call_async(CTSVC_IPC_DB_MODULE,CTSVC_IPC_SERVER_DB_INSERT_RECORDS,
indata,__ctsvc_ipc_client_insert_records_cb,async_data) != 0)
{
CONTACTS_FREE(async_data);
- CTS_ERR("pims_ipc_call_async failed");
- contacts_list_destroy(clone_list, true);
+ CTS_ERR("ctsvc_ipc_call_async failed");
return CONTACTS_ERROR_IPC;
}
- if (indata)
- {
- pims_ipc_data_destroy(indata);
- }
- contacts_list_destroy(clone_list, true);
-
- return ret;
-
-SET_DATA:
- if (outdata)
- {
-/*
- int count = 0;
- int id = 0;
- unsigned int property_id = 0;
- int i=0;
- unsigned int size = 0;
-
- contacts_list_first(list);
- count = *(int*) pims_ipc_data_get(outdata,&size);
- property_id = *(unsigned int*) pims_ipc_data_get(outdata,&size);
- for(i=0;i<count;i++)
- {
- contacts_record_h record = NULL;
- if (contacts_list_get_current_record_p(list,&record) != CONTACTS_ERROR_NONE)
- {
- CTS_ERR("contacts_list_get_current_record_p fail");
- pims_ipc_data_destroy(outdata);
- return ret;
- }
- id = *(int*) pims_ipc_data_get(outdata,&size);
- ctsvc_record_set_int(record,property_id,id);
- }
-*/
- pims_ipc_data_destroy(outdata);
- }
- contacts_list_destroy(clone_list, true);
+ pims_ipc_data_destroy(indata);
return ret;
}
{
int ret = CONTACTS_ERROR_NONE;
pims_ipc_data_h indata = NULL;
- pims_ipc_data_h outdata = NULL;
ctsvc_ipc_async_userdata_s *async_data = NULL;
RETVM_IF(list==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"record is NULL");
-
// make indata
indata = pims_ipc_data_create(0);
if (indata == NULL)
return ret;
}
- if (callback == NULL)
- {
- // ipc call
- if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_UPDATE_RECORDS,
- indata, &outdata) != 0)
- {
- CTS_ERR("pims_ipc_call failed");
- return CONTACTS_ERROR_IPC;
- }
-
- if (indata)
- {
- pims_ipc_data_destroy(indata);
- }
-
- if (outdata)
- {
- // check outdata
- unsigned int size = 0;
- ret = *(int*) pims_ipc_data_get(outdata,&size);
-
- pims_ipc_data_destroy(outdata);
- }
-
- return ret;
- }
-
async_data = (ctsvc_ipc_async_userdata_s*)malloc(sizeof(ctsvc_ipc_async_userdata_s));
if (async_data == NULL)
{
CTS_ERR("malloc fail!");
ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+ pims_ipc_data_destroy(indata);
return ret;
}
async_data->callback = callback;
async_data->user_data = user_data;
- async_data->list = list;
+
if (ctsvc_ipc_call_async(CTSVC_IPC_DB_MODULE,CTSVC_IPC_SERVER_DB_UPDATE_RECORDS,
indata,__ctsvc_ipc_client_update_records_cb,async_data) != 0)
{
CONTACTS_FREE(async_data);
- CTS_ERR("pims_ipc_call_async failed");
+ CTS_ERR("ctsvc_ipc_call_async failed");
return CONTACTS_ERROR_IPC;
}
{
int ret = CONTACTS_ERROR_NONE;
pims_ipc_data_h indata = NULL;
- pims_ipc_data_h outdata = NULL;
int i = 0;
ctsvc_ipc_async_userdata_s *async_data = NULL;
RETVM_IF(view_uri==NULL,CONTACTS_ERROR_INVALID_PARAMETER,"view_uri is NULL");
- RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
- RETVM_IF(0 == count, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
+ RETVM_IF(0 == count, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
// make indata
indata = pims_ipc_data_create(0);
}
}
- if (callback == NULL)
- {
- // ipc call
- if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_DELETE_RECORDS,
- indata, &outdata) != 0)
- {
- CTS_ERR("pims_ipc_call failed");
- return CONTACTS_ERROR_IPC;
- }
-
- if (indata)
- {
- pims_ipc_data_destroy(indata);
- }
-
- if (outdata)
- {
- // check outdata
- unsigned int size = 0;
- ret = *(int*) pims_ipc_data_get(outdata,&size);
-
- pims_ipc_data_destroy(outdata);
- }
-
- return ret;
- }
-
async_data = (ctsvc_ipc_async_userdata_s*)malloc(sizeof(ctsvc_ipc_async_userdata_s));
if (async_data == NULL)
{
indata,__ctsvc_ipc_client_delete_records_cb,async_data) != 0)
{
CONTACTS_FREE(async_data);
- CTS_ERR("pims_ipc_call_async failed");
+ CTS_ERR("ctsvc_ipc_call_async failed");
return CONTACTS_ERROR_IPC;
}
- if (indata)
- {
- pims_ipc_data_destroy(indata);
- }
+ pims_ipc_data_destroy(indata);
return ret;
}
if (data_out) {
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(data_out,&size);
- //pims_ipc_data_destroy(data_out);
+
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(data_out, &size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
}
if (async_data->callback) {
int i;
int ret = CONTACTS_ERROR_NONE;
pims_ipc_data_h indata = NULL;
- pims_ipc_data_h outdata = NULL;
ctsvc_ipc_async_userdata_s *async_data = NULL;
RETVM_IF(NULL == list,CONTACTS_ERROR_INVALID_PARAMETER, "list is NULL");
- RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
- RETVM_IF(0 == count, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
+ RETVM_IF(0 == count, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
// make indata
indata = pims_ipc_data_create(0);
}
}
- if (callback == NULL) {
- if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_REPLACE_RECORDS,
- indata, &outdata) != 0) {
- CTS_ERR("pims_ipc_call failed");
- return CONTACTS_ERROR_IPC;
- }
-
- pims_ipc_data_destroy(indata);
-
- if (outdata) {
- unsigned int size = 0;
- ret = *(int*) pims_ipc_data_get(outdata,&size);
- pims_ipc_data_destroy(outdata);
- }
-
- return ret;
- }
-
async_data = (ctsvc_ipc_async_userdata_s*)malloc(sizeof(ctsvc_ipc_async_userdata_s));
async_data->callback = callback;
async_data->user_data = user_data;
- async_data->list = list;
+
if (ctsvc_ipc_call_async(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_REPLACE_RECORDS,
indata, __ctsvc_ipc_client_replace_records_cb, async_data) != 0) {
CONTACTS_FREE(async_data);
- CTS_ERR("pims_ipc_call_async failed");
+ CTS_ERR("ctsvc_ipc_call_async failed");
return CONTACTS_ERROR_IPC;
}
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_INSERT_RECORDS,
indata, &outdata) != 0) {
- CTS_ERR("pims_ipc_call_async failed");
+ CTS_ERR("ctsvc_ipc_call_async failed");
pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
ret = *(int*) pims_ipc_data_get(outdata,&size);
if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+
if (ids && count) {
int i = 0;
int *id = NULL;
}
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_UPDATE_RECORDS,
- indata, &outdata) != 0) {
- CTS_ERR("pims_ipc_call failed");
+ indata, &outdata) != 0) {
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
if (outdata) {
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(outdata,&size);
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
pims_ipc_data_destroy(outdata);
}
}
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_DELETE_RECORDS,
- indata, &outdata) != 0) {
- CTS_ERR("pims_ipc_call failed");
+ indata, &outdata) != 0) {
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(outdata,&size);
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
+
pims_ipc_data_destroy(outdata);
}
pims_ipc_data_h outdata = NULL;
RETVM_IF(NULL == list,CONTACTS_ERROR_INVALID_PARAMETER, "list is NULL");
- RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
- RETVM_IF(0 == count, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
+ RETVM_IF(0 == count, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
// make indata
indata = pims_ipc_data_create(0);
}
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_REPLACE_RECORDS,
- indata, &outdata) != 0) {
- CTS_ERR("pims_ipc_call failed");
+ indata, &outdata) != 0) {
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
if (outdata) {
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(outdata,&size);
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
pims_ipc_data_destroy(outdata);
}
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_CHANGES_BY_VERSION, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
*record_list = NULL;
return CONTACTS_ERROR_IPC;
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_CURRENT_VERSION, NULL, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
return CONTACTS_ERROR_IPC;
}
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_SEARCH_RECORDS, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
*out_list = NULL;
return CONTACTS_ERROR_IPC;
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_QUERY, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
*out_list = NULL;
return CONTACTS_ERROR_IPC;
return ret;
}
+API int contacts_db_get_last_change_version(int* last_version)
+{
+ int ret = CONTACTS_ERROR_NONE;
+
+ RETVM_IF(NULL == last_version, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
+ *last_version = ctsvc_client_ipc_get_change_version();
+ return ret;
+}
+
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_GROUP_MODULE, CTSVC_IPC_SERVER_GROUP_ADD_CONTACT, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
return CONTACTS_ERROR_IPC;
}
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(outdata, &size);
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
+
pims_ipc_data_destroy(outdata);
}
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_GROUP_MODULE, CTSVC_IPC_SERVER_GROUP_REMOVE_CONTACT, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
+ return CONTACTS_ERROR_IPC;
+ }
+
+ if (indata)
+ {
+ pims_ipc_data_destroy(indata);
+ }
+
+ if (outdata)
+ {
+ // check result
+ unsigned int size = 0;
+ ret = *(int*) pims_ipc_data_get(outdata, &size);
+
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
+
+ pims_ipc_data_destroy(outdata);
+ }
+
+ return ret;
+}
+
+API int contacts_group_set_group_order(int group_id, int previous_group_id, int next_group_id)
+{
+ int ret = CONTACTS_ERROR_NONE;
+
+ pims_ipc_data_h indata = NULL;
+ pims_ipc_data_h outdata = NULL;
+
+ RETVM_IF(group_id <= 0 || previous_group_id < 0 || next_group_id < 0, CONTACTS_ERROR_INVALID_PARAMETER,"id should be greater than 0");
+ RETVM_IF(ctsvc_get_ipc_handle() == NULL,CONTACTS_ERROR_IPC,"contacts not connected");
+
+ // make indata
+ indata = pims_ipc_data_create(0);
+ if (indata == NULL)
+ {
+ CTS_ERR("ipc data created fail!");
+ ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+ return ret;
+ }
+
+ ret = ctsvc_ipc_marshal_int( group_id, indata);
+ if (ret != CONTACTS_ERROR_NONE)
+ {
+ CTS_ERR("marshal fail");
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_int( previous_group_id, indata);
+ if (ret != CONTACTS_ERROR_NONE)
+ {
+ CTS_ERR("marshal fail");
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_int( next_group_id, indata);
+ if (ret != CONTACTS_ERROR_NONE)
+ {
+ CTS_ERR("marshal fail");
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+
+ // ipc call
+ if (ctsvc_ipc_call(CTSVC_IPC_GROUP_MODULE, CTSVC_IPC_SERVER_GROUP_SET_GROUP_ORDER, indata, &outdata) != 0)
+ {
+ CTS_ERR("ctsvc_ipc_call failed");
+ pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(outdata, &size);
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
+
pims_ipc_data_destroy(outdata);
}
return ret;
+
}
#include <pims-ipc-data.h>
#include "ctsvc_mutex.h"
-static __thread pims_ipc_h contacts_ipc = NULL;
+static __thread pims_ipc_h __contacts_ipc = NULL;
+static pims_ipc_h __contacts_global_ipc = NULL;
-static pims_ipc_h contacts_global_ipc = NULL;
+static __thread int __contacts_change_version = 0;
+static int __contacts_global_change_version = 0;
int ctsvc_ipc_connect_on_thread(void)
{
- int ret = CONTACTS_ERROR_NONE;
- pims_ipc_data_h indata = NULL;
- pims_ipc_data_h outdata = NULL;
-
- // ipc create
- if (contacts_ipc == NULL)
- {
- contacts_ipc = pims_ipc_create(CTSVC_IPC_SOCKET_PATH);
- if (contacts_ipc == NULL)
- {
- CTS_ERR("pims_ipc_create() Failed(%d)", CONTACTS_ERROR_IPC_NOT_AVALIABLE);
- return CONTACTS_ERROR_IPC_NOT_AVALIABLE;
- }
- }
- else
- {
- CTS_DBG("contacts already connected");
- return CONTACTS_ERROR_NONE;
- }
-
- // ipc call
- if (pims_ipc_call(contacts_ipc, CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_CONNECT, indata, &outdata) != 0)
- {
- CTS_ERR("pims_ipc_call failed");
- return CONTACTS_ERROR_IPC;
- }
-
- if (outdata)
- {
- // check outdata
- unsigned int size = 0;
- ret = *(int*) pims_ipc_data_get(outdata,&size);
-
- pims_ipc_data_destroy(outdata);
-
- if (ret == CONTACTS_ERROR_NONE)
- {
-
- }
- else
- {
- pims_ipc_destroy(contacts_ipc);
- contacts_ipc = NULL;
- }
- }
+ int ret = CONTACTS_ERROR_NONE;
+ pims_ipc_data_h indata = NULL;
+ pims_ipc_data_h outdata = NULL;
+
+ // ipc create
+ if (__contacts_ipc == NULL)
+ {
+ __contacts_ipc = pims_ipc_create(CTSVC_IPC_SOCKET_PATH);
+ if (__contacts_ipc == NULL)
+ {
+ CTS_ERR("pims_ipc_create() Failed(%d)", CONTACTS_ERROR_IPC_NOT_AVALIABLE);
+ return CONTACTS_ERROR_IPC_NOT_AVALIABLE;
+ }
+ }
+ else
+ {
+ CTS_DBG("contacts already connected");
+ return CONTACTS_ERROR_NONE;
+ }
+
+ // ipc call
+ if (pims_ipc_call(__contacts_ipc, CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_CONNECT, indata, &outdata) != 0)
+ {
+ CTS_ERR("pims_ipc_call failed");
+ return CONTACTS_ERROR_IPC;
+ }
+
+ if (outdata)
+ {
+ // check outdata
+ unsigned int size = 0;
+ ret = *(int*) pims_ipc_data_get(outdata,&size);
+
+ pims_ipc_data_destroy(outdata);
+
+ if (ret == CONTACTS_ERROR_NONE)
+ {
+
+ }
+ else
+ {
+ pims_ipc_destroy(__contacts_ipc);
+ __contacts_ipc = NULL;
+ }
+ }
return ret;
}
int ctsvc_ipc_disconnect_on_thread(void)
{
- int ret = CONTACTS_ERROR_NONE;
- pims_ipc_data_h indata = NULL;
- pims_ipc_data_h outdata = NULL;
-
- RETVM_IF(contacts_ipc == NULL, CONTACTS_ERROR_IPC, "contacts not connected");
-
- // ipc call
- if (pims_ipc_call(contacts_ipc, CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_DISCONNECT, indata, &outdata) != 0)
- {
- CTS_ERR("pims_ipc_call failed");
- return CONTACTS_ERROR_IPC;
- }
-
- if (outdata)
- {
- // check outdata
- unsigned int size = 0;
- ret = *(int*) pims_ipc_data_get(outdata,&size);
-
- pims_ipc_data_destroy(outdata);
- }
-
- if (contacts_ipc && ret != CONTACTS_ERROR_NONE)
- {
- pims_ipc_destroy(contacts_ipc);
- contacts_ipc = NULL;
- }
-
- return ret;
+ int ret = CONTACTS_ERROR_NONE;
+ pims_ipc_data_h indata = NULL;
+ pims_ipc_data_h outdata = NULL;
+
+ RETVM_IF(__contacts_ipc == NULL, CONTACTS_ERROR_IPC, "contacts not connected");
+
+ // ipc call
+ if (pims_ipc_call(__contacts_ipc, CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_DISCONNECT, indata, &outdata) != 0)
+ {
+ CTS_ERR("pims_ipc_call failed");
+ return CONTACTS_ERROR_IPC;
+ }
+
+ if (outdata)
+ {
+ // check outdata
+ unsigned int size = 0;
+ ret = *(int*) pims_ipc_data_get(outdata,&size);
+
+ pims_ipc_data_destroy(outdata);
+ }
+
+ if (__contacts_ipc && ret != CONTACTS_ERROR_NONE)
+ {
+ pims_ipc_destroy(__contacts_ipc);
+ __contacts_ipc = NULL;
+ }
+
+ return ret;
}
pims_ipc_h ctsvc_get_ipc_handle()
{
- if(contacts_ipc == NULL)
+ if(__contacts_ipc == NULL)
{
- if(contacts_global_ipc == NULL )
+ if(__contacts_global_ipc == NULL )
{
ASSERT_NOT_REACHED("IPC haven't been initialized yet.");
return NULL;
}
CTS_DBG("fallback to global ipc channel");
- return contacts_global_ipc;
+ return __contacts_global_ipc;
}
- return contacts_ipc;
+ return __contacts_ipc;
}
bool ctsvc_ipc_is_busy()
{
bool ret = false;
- if(contacts_ipc != NULL)
+ if(__contacts_ipc != NULL)
{
- ret = pims_ipc_is_call_in_progress(contacts_ipc);
+ ret = pims_ipc_is_call_in_progress(__contacts_ipc);
if(ret)
{
CTS_ERR("thread local ipc channel is busy.");
}
}
else {
- ret = pims_ipc_is_call_in_progress(contacts_global_ipc);
+ ret = pims_ipc_is_call_in_progress(__contacts_global_ipc);
if(ret)
{
CTS_ERR("global ipc channel is busy.");
int ctsvc_ipc_connect(void)
{
- int ret = CONTACTS_ERROR_NONE;
- pims_ipc_data_h indata = NULL;
- pims_ipc_data_h outdata = NULL;
-
- // ipc create
- if (contacts_global_ipc == NULL)
- {
- contacts_global_ipc = pims_ipc_create(CTSVC_IPC_SOCKET_PATH);
- if (contacts_global_ipc == NULL)
- {
- CTS_ERR("[GLOBAL_IPC_CHANNEL] pims_ipc_create() Failed(%d)", CONTACTS_ERROR_IPC_NOT_AVALIABLE);
- return CONTACTS_ERROR_IPC_NOT_AVALIABLE;
- }
- }
- else
- {
- CTS_DBG("[GLOBAL_IPC_CHANNEL] contacts already connected");
- return CONTACTS_ERROR_NONE;
- }
-
- // ipc call
- if (pims_ipc_call(contacts_global_ipc, CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_CONNECT, indata, &outdata) != 0)
- {
- CTS_ERR("[GLOBAL_IPC_CHANNEL] pims_ipc_call failed");
- return CONTACTS_ERROR_IPC;
- }
-
- if (outdata)
- {
- // check outdata
- unsigned int size = 0;
- ret = *(int*) pims_ipc_data_get(outdata,&size);
-
- pims_ipc_data_destroy(outdata);
-
- if (ret == CONTACTS_ERROR_NONE)
- {
-
- }
- else
- {
- pims_ipc_destroy(contacts_global_ipc);
- contacts_global_ipc = NULL;
- }
- }
+ int ret = CONTACTS_ERROR_NONE;
+ pims_ipc_data_h indata = NULL;
+ pims_ipc_data_h outdata = NULL;
+
+ // ipc create
+ if (__contacts_global_ipc == NULL)
+ {
+ __contacts_global_ipc = pims_ipc_create(CTSVC_IPC_SOCKET_PATH);
+ if (__contacts_global_ipc == NULL)
+ {
+ CTS_ERR("[GLOBAL_IPC_CHANNEL] pims_ipc_create() Failed(%d)", CONTACTS_ERROR_IPC_NOT_AVALIABLE);
+ return CONTACTS_ERROR_IPC_NOT_AVALIABLE;
+ }
+ }
+ else
+ {
+ CTS_DBG("[GLOBAL_IPC_CHANNEL] contacts already connected");
+ return CONTACTS_ERROR_NONE;
+ }
+
+ // ipc call
+ if (pims_ipc_call(__contacts_global_ipc, CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_CONNECT, indata, &outdata) != 0)
+ {
+ CTS_ERR("[GLOBAL_IPC_CHANNEL] pims_ipc_call failed");
+ return CONTACTS_ERROR_IPC;
+ }
+
+ if (outdata)
+ {
+ // check outdata
+ unsigned int size = 0;
+ ret = *(int*) pims_ipc_data_get(outdata,&size);
+
+ pims_ipc_data_destroy(outdata);
+
+ if (ret == CONTACTS_ERROR_NONE)
+ {
+
+ }
+ else
+ {
+ pims_ipc_destroy(__contacts_global_ipc);
+ __contacts_global_ipc = NULL;
+ }
+ }
return ret;
}
int ctsvc_ipc_disconnect(void)
{
- int ret = CONTACTS_ERROR_NONE;
- pims_ipc_data_h indata = NULL;
- pims_ipc_data_h outdata = NULL;
-
- RETVM_IF(contacts_global_ipc == NULL, CONTACTS_ERROR_IPC, "[GLOBAL_IPC_CHANNEL] contacts not connected");
-
- // ipc call
- if (pims_ipc_call(contacts_global_ipc, CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_DISCONNECT, indata, &outdata) != 0)
- {
- CTS_ERR("[GLOBAL_IPC_CHANNEL] pims_ipc_call failed");
- return CONTACTS_ERROR_IPC;
- }
-
- if (outdata)
- {
- // check outdata
- unsigned int size = 0;
- ret = *(int*) pims_ipc_data_get(outdata,&size);
-
- pims_ipc_data_destroy(outdata);
- }
-
- if (contacts_global_ipc && ret == CONTACTS_ERROR_NONE)
- {
- pims_ipc_destroy(contacts_global_ipc);
- contacts_global_ipc = NULL;
- }
- else
- {
- CTS_ERR("[GLOBAL_IPC_CHANNEL] pims_ipc didn't destroyed!!!(%d)", ret);
- }
-
- return ret;
-}
+ int ret = CONTACTS_ERROR_NONE;
+ pims_ipc_data_h indata = NULL;
+ pims_ipc_data_h outdata = NULL;
+
+ RETVM_IF(__contacts_global_ipc == NULL, CONTACTS_ERROR_IPC, "[GLOBAL_IPC_CHANNEL] contacts not connected");
+
+ // ipc call
+ if (pims_ipc_call(__contacts_global_ipc, CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_DISCONNECT, indata, &outdata) != 0)
+ {
+ CTS_ERR("[GLOBAL_IPC_CHANNEL] pims_ipc_call failed");
+ return CONTACTS_ERROR_IPC;
+ }
+
+ if (outdata)
+ {
+ // check outdata
+ unsigned int size = 0;
+ ret = *(int*) pims_ipc_data_get(outdata,&size);
+
+ pims_ipc_data_destroy(outdata);
+ }
+
+ if (__contacts_global_ipc && ret == CONTACTS_ERROR_NONE)
+ {
+ pims_ipc_destroy(__contacts_global_ipc);
+ __contacts_global_ipc = NULL;
+ }
+ else
+ {
+ CTS_ERR("[GLOBAL_IPC_CHANNEL] pims_ipc didn't destroyed!!!(%d)", ret);
+ }
+ return ret;
+}
-void __ctsvc_ipc_lock()
+static void __ctsvc_ipc_lock()
{
- if (contacts_ipc == NULL)
- {
- ctsvc_mutex_lock(CTS_MUTEX_PIMS_IPC_CALL);
- }
+ if (__contacts_ipc == NULL)
+ {
+ ctsvc_mutex_lock(CTS_MUTEX_PIMS_IPC_CALL);
+ }
}
-void __ctsvc_ipc_unlock(void)
+static void __ctsvc_ipc_unlock(void)
{
- if (contacts_ipc == NULL)
- {
- ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_CALL);
- }
+ if (__contacts_ipc == NULL)
+ {
+ ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_CALL);
+ }
}
int ctsvc_ipc_call(char *module, char *function, pims_ipc_h data_in, pims_ipc_data_h *data_out)
{
- pims_ipc_h ipc_handle = ctsvc_get_ipc_handle();
+ pims_ipc_h ipc_handle = ctsvc_get_ipc_handle();
- __ctsvc_ipc_lock();
+ __ctsvc_ipc_lock();
- int ret = pims_ipc_call(ipc_handle, module, function, data_in, data_out);
+ int ret = pims_ipc_call(ipc_handle, module, function, data_in, data_out);
- __ctsvc_ipc_unlock();
+ __ctsvc_ipc_unlock();
- return ret;
+ return ret;
}
int ctsvc_ipc_call_async(char *module, char *function, pims_ipc_h data_in, pims_ipc_call_async_cb callback, void *userdata)
{
- pims_ipc_h ipc_handle = ctsvc_get_ipc_handle();
+ pims_ipc_h ipc_handle = ctsvc_get_ipc_handle();
- __ctsvc_ipc_lock();
+ __ctsvc_ipc_lock();
- int ret = pims_ipc_call_async(ipc_handle, module, function, data_in, callback, userdata);
+ int ret = pims_ipc_call_async(ipc_handle, module, function, data_in, callback, userdata);
- __ctsvc_ipc_unlock();
+ __ctsvc_ipc_unlock();
- return ret;
+ return ret;
+}
+
+void ctsvc_client_ipc_set_change_version(int version)
+{
+ if (__contacts_ipc == NULL) {
+ __contacts_global_change_version = version;
+ CTS_DBG("change_version = %d", version);
+ return;
+ }
+ __contacts_change_version = version;
+ CTS_DBG("change_version = %d", version);
}
+
+int ctsvc_client_ipc_get_change_version(void)
+{
+ if (__contacts_ipc == NULL)
+ return __contacts_global_change_version;
+
+ return __contacts_change_version;
+}
+
int ctsvc_ipc_call(char *module, char *function, pims_ipc_h data_in, pims_ipc_data_h *data_out);
int ctsvc_ipc_call_async(char *module, char *function, pims_ipc_h data_in, pims_ipc_call_async_cb callback, void *userdata);
+void ctsvc_client_ipc_set_change_version(int version);
+int ctsvc_client_ipc_get_change_version(void);
#endif /* __TIZEN_SOCIAL_CTSVC_CLIENT_IPC_H__ */
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_LINK_PERSON, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
+ pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(outdata, &size);
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
+
pims_ipc_data_destroy(outdata);
}
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_UNLINK_CONTACT, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
ret = *(int*) pims_ipc_data_get(outdata, &size);
if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+
if (unlinked_person_id)
*unlinked_person_id = *(int*)pims_ipc_data_get(outdata,&size);
}
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_RESET_USAGE, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(outdata, &size);
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
+
pims_ipc_data_destroy(outdata);
}
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_SET_FAVORITE_ORDER, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
+ pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(outdata, &size);
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
+
pims_ipc_data_destroy(outdata);
}
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_SET_DEFAULT_PROPERTY, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
// check result
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(outdata, &size);
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
pims_ipc_data_destroy(outdata);
}
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_GET_DEFAULT_PROPERTY,
indata, &outdata) != 0) {
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
// ipc call
if (ctsvc_ipc_call(CTSVC_IPC_PHONELOG_MODULE, CTSVC_IPC_SERVER_PHONELOG_RESET_STATISTICS, indata, &outdata) != 0)
{
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
return CONTACTS_ERROR_IPC;
}
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(outdata, &size);
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
+
pims_ipc_data_destroy(outdata);
}
if (ctsvc_ipc_call(CTSVC_IPC_PHONELOG_MODULE,
CTSVC_IPC_SERVER_PHONELOG_DELETE, indata, &outdata) != 0) {
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
pims_ipc_data_destroy(indata);
return CONTACTS_ERROR_IPC;
}
if (outdata) {
unsigned int size = 0;
ret = *(int*) pims_ipc_data_get(outdata, &size);
+
+ if (CONTACTS_ERROR_NONE == ret) {
+ int transaction_ver = 0;
+ transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
+ ctsvc_client_ipc_set_change_version(transaction_ver);
+ }
+
pims_ipc_data_destroy(outdata);
}
static int ctsvc_connection = 0;
-static int __thread ctsvc_connection_on_thread = 0;
+static __thread int ctsvc_connection_on_thread = 0;
API int contacts_connect_with_flags(unsigned int flags)
{
if (flags & CONTACTS_CONNECT_FLAG_RETRY) {
int i;
int waiting_time = 500;
- for (i=0;i<6;i++) {
+ for (i=0;i<7;i++) {
usleep(waiting_time * 1000);
DBG("retry cnt=%d, ret=%x, %d",(i+1), ret, waiting_time);
ret = contacts_connect2();
if (ctsvc_ipc_call(CTSVC_IPC_SIM_MODULE, CTSVC_IPC_SERVER_SIM_INSERT_CONTACT, indata, &outdata) != 0)
{
pims_ipc_data_destroy(indata);
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
return CONTACTS_ERROR_IPC;
}
if (ctsvc_ipc_call(CTSVC_IPC_SIM_MODULE, CTSVC_IPC_SERVER_SIM_UPDATE_CONTACT, indata, &outdata) != 0)
{
pims_ipc_data_destroy(indata);
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
return CONTACTS_ERROR_IPC;
}
if (ctsvc_ipc_call(CTSVC_IPC_SIM_MODULE, CTSVC_IPC_SERVER_SIM_DELETE_CONTACT, indata, &outdata) != 0)
{
pims_ipc_data_destroy(indata);
- CTS_ERR("pims_ipc_call failed");
+ CTS_ERR("ctsvc_ipc_call failed");
return CONTACTS_ERROR_IPC;
}
property_info_s *p = (property_info_s*)&(properties[i]);
if (property_id == p->property_id) {
if (p->property_type == CTSVC_SEARCH_PROPERTY_ALL || p->property_type == CTSVC_SEARCH_PROPERTY_FILTER) {
- *type = p->type;
+ *type = (property_id & CTSVC_VIEW_DATA_TYPE_MASK);
return true;
}
else
//#undef API
#endif
-
//#define CONTACTS_DEBUGGING
//#define CONTACTS_TIMECHECK
-
#define LOG_TAG "CONTACTS_SERVICE"
#include <dlog.h>
#define DLOG(prio, fmt, arg...) \
RETV_IF(NULL == list_s->deleted_records, CONTACTS_ERROR_NO_DATA);
- *record = (ctsvc_record_s *)g_list_nth_data(list_s->deleted_records, index);
+ *record = (contacts_record_h)g_list_nth_data(list_s->deleted_records, index);
return CONTACTS_ERROR_NONE;
}
#define CTSVC_HAN_HALF_START (UChar)0xFFA0
#define CTSVC_HAN_HALF_END (UChar)0xFFDC
+/* korean -Hangul Syllables */
+#define CTSVC_HAN_SYLLABLES_START (UChar)0xAC00
+#define CTSVC_HAN_SYLLABLES_END (UChar)0xD7A3
+
+
+/* japanese - katakana */
+#define CTSVC_JAPANESE_KATAKANA_START 0x30A0
+#define CTSVC_JAPANESE_KATAKANA_END 0x30FF
+
+/* japanese - katakana phonetic extensions */
+#define CTSVC_JAPANESE_KATAKANA_PHONETIC_EXTENSIONS_START 0x31F0
+#define CTSVC_JAPANESE_KATAKANA_PHONETIC_EXTENSIONS_END 0x31FF
+
+/* japanese - halfwidth and fullwidth forms */
+#define CTSVC_JAPANESE_HALFWIDTH_AND_FULLWIDTH_FORMS_START 0xFF00
+#define CTSVC_JAPANESE_HALFWIDTH_AND_FULLWIDTH_FORMS_END 0xFFEF
+
+/* japanese - hiragana */
+#define CTSVC_JAPANESE_HIRAGANA_START 0x3040
+#define CTSVC_JAPANESE_HIRAGANA_END 0x309F
+
static const char hangul_compatibility_choseong[] = {
0x31, 0x32, 0x34, 0x37, 0x38, 0x39, 0x40, 0x41,
0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80,
0x81, 0x84, 0x85, 0x86, 0x00};
+
static const unsigned char hangul_jamo_choseong[] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x1A, 0x06, 0x07, // to choseong 0x1100~0x115F
0x08, 0x21, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E,
0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x87, 0x88,
0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x00};
+
static const unsigned char hangul_jamo_jungseong[] = {
0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, // to jungseong 0x1160~0x11A7
0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72,
0x33, 0x35, 0x36, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E,
0x3F, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D,
0x6F, 0x70, 0x82, 0x83, 0x00};
+
static const unsigned char hangul_jamo_jongseong[] = {
0xAA, 0xAC, 0xAD, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, // to jongseong 0x11A8~0x11FF
0xC7, 0xC8, 0xCC, 0xCE, 0xD3, 0xD7, 0xD9, 0xDF, 0xF1, 0xF2, 0x00};
+static const unsigned char japanese_halfwidth_katakana_to_hiragana[] = { // 0xff66 - 0xff9f
+ 0x92, 0x41, 0x43, 0x45, 0x47, 0x49, 0x83, 0x85, 0x87, 0x63,
+ 0x00, 0x42, 0x44, 0x46, 0x48, 0x4A, 0x4B, 0x4D, 0x4F, 0x51,
+ 0x53, 0x55, 0x57, 0x59, 0x5B, 0x5D, 0x5F, 0x61, 0x64, 0x66,
+ 0x68, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x72, 0x75, 0x78,
+ 0x7B, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x84, 0x86, 0x88, 0x89,
+ 0x8A, 0x8B, 0x8C, 0x8D, 0x8F, 0x93};
+
+static const unsigned char japanese_halfwidth_katakana_sonant_to_hiragana[] = { // 0xff76 - 0xff89
+ 0x4C, 0x4E, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5A, 0x5C, 0x5E,
+ 0x60, 0x62, 0x65, 0x67, 0x69, 0x70, 0x73, 0x76, 0x79, 0x7C};
+
+static const unsigned char japanese_halfwidth_katakana_half_dullness_to_hiragana[] = { // 0xff8a - 0xff8e
+ 0x71, 0x74, 0x77, 0x7A, 0x7D};
+
int ctsvc_check_utf8(char c)
{
if ((c & 0xff) < (128 & 0xff))
return CONTACTS_ERROR_INVALID_PARAMETER;
}
+static inline bool is_chosung(UChar src)
+{
+ int unicode_value1 = 0;
+ int unicode_value2 = 0;
+
+ unicode_value1 = (0xFF00 & (src)) >> 8;
+ unicode_value2 = (0xFF & (src));
+
+ if (unicode_value1 == 0x31
+ && (unicode_value2 >= 0x30 && unicode_value2 <= 0x4e))
+ return true;
+ return false;
+}
+
static inline bool is_hangul(UChar src)
{
if ((0x1100 == (src & 0xFF00)) /* korean -Hangul Jamo*/
|| CTSVC_COMPARE_BETWEEN(CTSVC_JAMO_A_START, src, CTSVC_JAMO_A_END)
|| CTSVC_COMPARE_BETWEEN(CTSVC_JAMO_B_START, src, CTSVC_JAMO_B_END)
|| CTSVC_COMPARE_BETWEEN(CTSVC_HAN_C_START, src, CTSVC_HAN_C_END)
- || CTSVC_COMPARE_BETWEEN(CTSVC_HAN_HALF_START, src, CTSVC_HAN_HALF_END))
+ || CTSVC_COMPARE_BETWEEN(CTSVC_HAN_HALF_START, src, CTSVC_HAN_HALF_END)
+ || CTSVC_COMPARE_BETWEEN(CTSVC_HAN_SYLLABLES_START, src, CTSVC_HAN_SYLLABLES_END))
return true;
else
return FALSE;
}
+static inline bool is_japanese(UChar src)
+{
+ if (CTSVC_COMPARE_BETWEEN(CTSVC_JAPANESE_KATAKANA_START, src, CTSVC_JAPANESE_KATAKANA_END )
+ || CTSVC_COMPARE_BETWEEN(CTSVC_JAPANESE_KATAKANA_PHONETIC_EXTENSIONS_START, src, CTSVC_JAPANESE_KATAKANA_PHONETIC_EXTENSIONS_END )
+ || CTSVC_COMPARE_BETWEEN(CTSVC_JAPANESE_HALFWIDTH_AND_FULLWIDTH_FORMS_START, src, CTSVC_JAPANESE_HALFWIDTH_AND_FULLWIDTH_FORMS_END )
+ || CTSVC_COMPARE_BETWEEN(CTSVC_JAPANESE_HIRAGANA_START, src, CTSVC_JAPANESE_HIRAGANA_END ))
+ return true;
+ else
+ return false;
+}
+
static inline void hangul_compatibility2jamo(UChar *src)
{
int unicode_value1 = 0;
}
}
+static inline int __ctsvc_convert_japanese_to_hiragana(UChar *src, UChar *dest, int dest_size)
+{
+ int i, j = 0, len = 0;
+
+ len = u_strlen(src);
+
+ for(i = 0; i < len; i++) {
+ int unicode_value1 = 0;
+ int unicode_value2 = 0;
+
+ unicode_value1 = 0x30;
+ unicode_value2 = (0xFF & (src[i]));
+
+ if (CTSVC_COMPARE_BETWEEN(CTSVC_JAPANESE_KATAKANA_START, src[i], CTSVC_JAPANESE_KATAKANA_END)) {
+ if ((unicode_value2 >= 0xa1 && unicode_value2 <= 0xef )
+ || (unicode_value2 == 0xF2 || unicode_value2 == 0xF3) ) {
+ unicode_value2 -= 0x60;
+ dest[j] = unicode_value1 << 8 | unicode_value2;
+ }
+ else
+ dest[j] = src[i];
+ }
+ else if (CTSVC_COMPARE_BETWEEN(CTSVC_JAPANESE_HALFWIDTH_AND_FULLWIDTH_FORMS_START, src[i], CTSVC_JAPANESE_HALFWIDTH_AND_FULLWIDTH_FORMS_END)) {
+ if (i+1 < len && (0xFF & (src[i+1])) == 0x9E
+ && unicode_value2 >= 0x76 && unicode_value2 <= 0x89) {
+ unicode_value2 = japanese_halfwidth_katakana_sonant_to_hiragana[unicode_value2 - 0x76];
+ dest[j] = unicode_value1 << 8 | unicode_value2;
+ i++;
+ }
+ else if (i+1 < len && (0xFF & (src[i])) == 0x9F
+ && unicode_value2 >= 0x8a && unicode_value2 <= 0x8e) {
+ unicode_value2 = japanese_halfwidth_katakana_half_dullness_to_hiragana[unicode_value2 - 0x8a];
+ dest[j] = unicode_value1 << 8 | unicode_value2;
+ i++;
+ }
+ else if (unicode_value2 >= 0x66 && unicode_value2 <= 0x9f) {
+ unicode_value2 = japanese_halfwidth_katakana_to_hiragana[unicode_value2 - 0x66];
+ dest[j] = unicode_value1 << 8 | unicode_value2;
+ }
+ else
+ dest[j] = src[i];
+
+ } else
+ dest[j] = src[i];
+ j++;
+ }
+
+ dest[j] = 0x0;
+
+ return j;
+}
+
+int ctsvc_convert_japanese_to_hiragana(const char *src, char **dest)
+{
+ int ret = CONTACTS_ERROR_NONE;
+ UChar *tmp_result = NULL;
+ UChar *result = NULL;
+ UErrorCode status = 0;
+ int32_t size;
+
+ u_strFromUTF8(NULL, 0, &size, src, strlen(src), &status);
+ if (U_FAILURE(status) && status != U_BUFFER_OVERFLOW_ERROR) {
+ CTS_ERR("u_strFromUTF8 to get the dest length Failed(%s)", u_errorName(status));
+ ret = CONTACTS_ERROR_SYSTEM;
+ goto DATA_FREE;
+ }
+ status = U_ZERO_ERROR;
+ tmp_result = calloc(1, sizeof(UChar) * (size + 1));
+ u_strFromUTF8(tmp_result, size + 1, NULL, src, -1, &status);
+ if (U_FAILURE(status)){
+ CTS_ERR("u_strFromUTF8 Failed(%s)", u_errorName(status));
+ ret = CONTACTS_ERROR_SYSTEM;
+ goto DATA_FREE;
+ }
+ result = calloc(1, sizeof(UChar) * (size + 1));
+
+ __ctsvc_convert_japanese_to_hiragana(tmp_result, result, size + 1 );
+
+ u_strToUTF8(NULL, 0, &size, result, -1, &status);
+ if (U_FAILURE(status) && status != U_BUFFER_OVERFLOW_ERROR) {
+ CTS_ERR("u_strToUTF8 to get the dest length Failed(%s)", u_errorName(status));
+ ret = CONTACTS_ERROR_SYSTEM;
+ goto DATA_FREE;
+ }
+
+ status = U_ZERO_ERROR;
+ *dest = calloc(1, sizeof(char)*(size+1));
+
+ u_strToUTF8(*dest, size + 1, &size, result, -1, &status);
+
+ if (U_FAILURE(status) ) {
+ CTS_ERR("u_strToUTF8 Failed(%s)", u_errorName(status));
+ ret = CONTACTS_ERROR_SYSTEM;
+ goto DATA_FREE;
+ }
+
+DATA_FREE:
+
+ free(tmp_result);
+ free(result);
+
+ return ret;
+}
+
int ctsvc_check_language(UChar *word)
{
int type;
else if (is_hangul(word[0])){
type = CTSVC_LANG_KOREAN;
}
- else if (0x4E00 <= *word && *word <= 0x9FA5) {
- type = CTSVC_LANG_ENGLISH;
+ else if (CTSVC_COMPARE_BETWEEN(0x4E00, word[0], 0x9FA5)) {
+ type = CTSVC_LANG_CHINESE;
+ }
+ else if (is_japanese(word[0])) {
+ type = CTSVC_LANG_JAPANESE;
}
#if 0 // TODO
return CONTACTS_ERROR_INVALID_PARAMETER;
}
+int ctsvc_get_name_sort_type(const char *src)
+{
+ UErrorCode status = 0;
+ UChar tmp_result[10];
+ int ret = CTSVC_SORT_OTHERS;
+ int char_len = 0;
+ int language_type;
+ char char_src[10];
+
+
+ char_len = ctsvc_check_utf8(src[0]);
+ RETVM_IF(char_len <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "check_utf8 failed");
+
+ memcpy(char_src, &src[0], char_len);
+ char_src[char_len] = '\0';
+
+ u_strFromUTF8(tmp_result, array_sizeof(tmp_result), NULL, char_src, -1, &status);
+ RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
+ "u_strFromUTF8() Failed(%s)", u_errorName(status));
+
+ language_type = ctsvc_check_language(tmp_result);
+
+ switch(language_type)
+ {
+ case CTSVC_LANG_CHINESE:
+ ret = CTSVC_SORT_CJK;
+ break;
+ case CTSVC_LANG_JAPANESE:
+ ret = CTSVC_SORT_JAPANESE;
+ break;
+ case CTSVC_LANG_KOREAN:
+ ret = CTSVC_SORT_KOREAN;
+ break;
+ case CTSVC_LANG_ENGLISH:
+ ret = CTSVC_SORT_WESTERN;
+ break;
+ case CTSVC_LANG_NUMBER:
+ ret = CTSVC_SORT_NUMBER;
+ break;
+ default:
+ ret = CTSVC_SORT_OTHERS;
+ }
+
+ return ret;
+}
+
void ctsvc_extra_normalize(UChar *word, int32_t word_size)
{
int i;
}
}
+const char *ctsvc_get_language(int lang)
+{
+ switch(lang)
+ {
+ case CTSVC_LANG_AZERBAIJAN: // az, Azerbaijan
+ return "az";
+ case CTSVC_LANG_ARABIC: // ar, Bahrain - Arabic
+ return "ar";
+ case CTSVC_LANG_BULGARIAN: // bg, Bulgaria - Bulgarian
+ return "bg";
+ case CTSVC_LANG_CATALAN: // ca, Spain - Catalan
+ return "ca";
+ case CTSVC_LANG_CZECH: // cs, Czech Republic - Czech
+ return "cs";
+ case CTSVC_LANG_DANISH: // da, Denmark - Danish
+ return "da";
+ case CTSVC_LANG_GERMAN: // de, Germany - German
+ return "de";
+ case CTSVC_LANG_GREEK: // el, Greece - Greek
+ return "el";
+ case CTSVC_LANG_ENGLISH: // en, en_PH, en_US
+ return "en";
+ case CTSVC_LANG_SPANISH: // es_ES, es_US, El Salvador - Spanish
+ return "es";
+ case CTSVC_LANG_ESTONIAN: // et, Estonia - Estonian
+ return "et";
+ case CTSVC_LANG_BASQUE: // eu, Spain - Basque
+ return "eu";
+ case CTSVC_LANG_FINNISH: // fi, Finland - Finnish
+ return "fi";
+ case CTSVC_LANG_FRENCH: // fr_CA, fr_FR
+ return "fr";
+ case CTSVC_LANG_IRISH: // ga, Ireland - Irish
+ return "ga";
+ case CTSVC_LANG_GALICIAN: // gl, Spain - Galician
+ return "gl";
+ case CTSVC_LANG_HINDI: // hi, India - Hindi
+ return "hi";
+ case CTSVC_LANG_CROATIAN: // hr, Bosnia and Herzegovina - Croatian
+ return "hr";
+ case CTSVC_LANG_HUNGARIAN: // hu, Hungary - Hungarian
+ return "hu";
+ case CTSVC_LANG_ARMENIAN: // hy, Armenia - Armenian
+ return "hy";
+ case CTSVC_LANG_ICELANDIC: // is, Iceland - Icelandic
+ return "is";
+ case CTSVC_LANG_ITALIAN: // it_IT, Italy - Italian
+ return "it";
+ case CTSVC_LANG_JAPANESE: // ja_JP, japan
+ return "ja";
+ case CTSVC_LANG_GEORGIAN: // ka, Georgia - Georgian
+ return "ka";
+ case CTSVC_LANG_KAZAKHSTAN: // kk, Kazakhstan
+ return "kk";
+ case CTSVC_LANG_KOREAN: // ko, ko_KR
+ return "ko";
+ case CTSVC_LANG_LITHUANIAN: // lt, Lithuania - Lithuanian
+ return "lt";
+ case CTSVC_LANG_LATVIAN: // lv, Latvia - Latvian
+ return "lv";
+ case CTSVC_LANG_MACEDONIA: // mk, Macedonia
+ return "mk";
+ case CTSVC_LANG_NORWAY: // nb, Norway
+ return "nb";
+ case CTSVC_LANG_DUTCH: // nl_Nl, Netherlands Dutch
+ return "nl";
+ case CTSVC_LANG_POLISH: // pl, Polish
+ return "pl";
+ case CTSVC_LANG_PORTUGUESE: // pt_BR, pt_PT, Portugal
+ return "pt";
+ case CTSVC_LANG_ROMANIA: // ro, Romania
+ return "ro";
+ case CTSVC_LANG_RUSSIAN: // ru_RU, Russia
+ return "ru";
+ case CTSVC_LANG_SLOVAK: // sk, Slovakia - Slovak
+ return "sk";
+ case CTSVC_LANG_SLOVENIAN: // sl, Slovenia - Slovenian
+ return "sl";
+ case CTSVC_LANG_SERBIAN: // sr, Serbia - Serbian
+ return "sr";
+ case CTSVC_LANG_SWEDISH: // sv, Finland - Swedish
+ return "sv";
+ case CTSVC_LANG_TURKISH: // tr_TR, Turkey - Turkish
+ return "tr";
+ case CTSVC_LANG_UKRAINE: // uk, Ukraine
+ return "uk";
+ case CTSVC_LANG_CHINESE: // zh_CN, zh_HK, zh_SG, zh_TW
+ return "zh";
+ }
+
+ return "";
+}
+
int ctsvc_get_language_type(const char *system_lang)
{
int type;
(UChar *)result, array_sizeof(result), &status);
RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
"unorm_normalize(%s) Failed(%s)", src, u_errorName(status));
-
+ ctsvc_extra_normalize(result, size);
u_strToUTF8(temp, dest_size, &size, result, -1, &status);
RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
"u_strToUTF8() Failed(%s)", u_errorName(status));
return count;
}
+int ctsvc_get_korean_search_pattern(const char *src, char *dest, int dest_size)
+{
+ int32_t size;
+ UErrorCode status = 0;
+ UChar tmp_result[10];
+ UChar result[10];
+ int i=0, j=0, count=0;
+ int char_len = 0;
+ int str_len = strlen(src);
+
+
+ for (i=0;i<str_len;i+=char_len) {
+ char char_src[10];
+ char_len = ctsvc_check_utf8(src[i]);
+ RETVM_IF(char_len <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "check_utf8 failed");
+
+ memcpy(char_src, &src[i], char_len);
+ char_src[char_len] = '\0';
+
+ u_strFromUTF8(tmp_result, array_sizeof(tmp_result), NULL, char_src, -1, &status);
+ RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
+ "u_strFromUTF8() Failed(%s)", u_errorName(status));
+
+ if (is_chosung(tmp_result[0]))
+ {
+ hangul_compatibility2jamo(tmp_result);
+
+ u_strToUTF8(&dest[j], dest_size - j, &size, tmp_result, -1, &status);
+ RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
+ "u_strToUTF8() Failed(%s)", u_errorName(status));
+ j += size;
+ dest[j] = '*';
+ j++;
+ }
+ else {
+ u_strToUpper(tmp_result, array_sizeof(tmp_result), tmp_result, -1, NULL, &status);
+ RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
+ "u_strToUpper() Failed(%s)", u_errorName(status));
+ size = unorm_normalize(tmp_result, -1, UNORM_NFD, 0,
+ (UChar *)result, array_sizeof(result), &status);
+ RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
+ "unorm_normalize(%s) Failed(%s)", src, u_errorName(status));
+ ctsvc_extra_normalize(result, size);
+ u_strToUTF8(&dest[j], dest_size - j, &size, result, -1, &status);
+ RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
+ "u_strToUTF8() Failed(%s)", u_errorName(status));
+ j += size;
+
+ }
+ count++;
+ }
+
+ dest[j] = '\0';
+
+ return count;
+}
#include <unicode/utypes.h>
+enum SORTTYPE{
+ CTSVC_SORT_NUMBER, // 0
+ CTSVC_SORT_PRIMARY, // 1
+ CTSVC_SORT_SECONDARY, // 2
+ CTSVC_SORT_WESTERN, // 3
+ CTSVC_SORT_KOREAN, // 4
+ CTSVC_SORT_JAPANESE, // 5
+ CTSVC_SORT_CJK, // 6
+ CTSVC_SORT_OTHERS = 100,// 0
+};
+
int ctsvc_check_utf8(char c);
int ctsvc_check_language(UChar *word);
int ctsvc_check_language_type(const char *src);
+int ctsvc_get_name_sort_type(const char *src);
int ctsvc_get_language_type(const char *system_lang);
+const char *ctsvc_get_language(int lang);
void ctsvc_extra_normalize(UChar *word, int32_t word_size);
int ctsvc_get_chosung(const char *src, char *dest, int dest_size);
+int ctsvc_convert_japanese_to_hiragana(const char *src, char **dest);
+int ctsvc_get_korean_search_pattern(const char *src, char *dest, int dest_size);
+
#endif // __TIZEN_SOCIAL_CTSVC_LOCALIZE_H__
int ctsvc_convert_chinese_to_pinyin(const char *src, pinyin_name_s **name, int *size)
{
- char spell[CHINESE_PINYIN_MAX_LEN][CHINESE_DUOYINZI_MAX_COUNT][CHINESE_PINYIN_SPELL_MAX_LEN]
- = {NULL};
- int pinyin_spell_count[CHINESE_PINYIN_MAX_LEN] = {0};;
+ char spell[CHINESE_PINYIN_MAX_LEN][CHINESE_DUOYINZI_MAX_COUNT][CHINESE_PINYIN_SPELL_MAX_LEN];
+ int pinyin_spell_count[CHINESE_PINYIN_MAX_LEN] = {0};
UChar temp_result[strlen(src)+1];
int count = 0, len=0, total_count=0;
int ret, i, j;
RETVM_IF(src==NULL, CONTACTS_ERROR_SYSTEM, "src is NULL");
RETVM_IF(!*src, CONTACTS_ERROR_SYSTEM, "*src is NULL");
+ memset(spell, 0x0, CHINESE_PINYIN_MAX_LEN * CHINESE_DUOYINZI_MAX_COUNT * CHINESE_PINYIN_SPELL_MAX_LEN);
+
u_strFromUTF8(temp_result, array_sizeof(temp_result), NULL, src, -1, &status);
if (U_FAILURE(status)){
CTS_ERR("u_strFromUTF8 Failed(%s)", u_errorName(status));
}
if (spell[i][index][0]) {
+ if(temp_name[j].pinyin_name[0])
+ name_len[j] += snprintf(temp_name[j].pinyin_name + name_len[j], sizeof(temp_name[j].pinyin_name) - name_len[j], " ");
+
name_len[j] += snprintf(temp_name[j].pinyin_name + name_len[j], sizeof(temp_name[j].pinyin_name) - name_len[j],
- "%s ", spell[i][index]);
+ "%s", spell[i][index]);
initial_len[j] += snprintf(temp_name[j].pinyin_initial + initial_len[j], sizeof(temp_name[j].pinyin_initial) - initial_len[j],
"%c", spell[i][index][0]);
}
repeat *= pinyin_spell_count[i];
}
-// for(j=0;j<total_count;j++) {
-// DBG("temp_name[%d]->pinyin_name %s", j, temp_name[j].pinyin_name);
-// DBG("temp_name[%d]->pinyin_initial %s", j, temp_name[j].pinyin_initial);
-// }
-
*name = temp_name;
return CONTACTS_ERROR_NONE;
*
*/
+#include <ctype.h>
#include <unicode/ulocdata.h>
#include <unicode/ustring.h>
#include <unicode/unorm.h>
#include "ctsvc_internal.h"
#include "ctsvc_normalize.h"
#include "ctsvc_localize.h"
+#include "ctsvc_localize_ch.h"
+#include "ctsvc_setting.h"
+
+
-#define CTSVC_NORMALIZED_NUMBER_SIZE_MAX 7
#define CTSVC_NORMALIZED_MAX_LEN 1024
+#define CTSVC_COMBINING_DIACRITICAL_MARKS_START 0x0300
+#define CTSVC_COMBINING_DIACRITICAL_MARKS_END 0x036f
+
+typedef struct {
+ UChar letter;
+ char start;
+ char end;
+}hiragana_group_letter;
+
+static hiragana_group_letter hiragana_group[13] = {
+ {0x3042, 0x41, 0x4a}, // ぁ あ ぃ い ぅ う ぇ え ぉ お
+ {0x3042, 0x94, 0x94}, // ゔ
+ {0x304b, 0x4b, 0x54}, // か が き ぎ く ぐ け げ こ ご
+ {0x304b, 0x95, 0x96}, // ゕ ゖ
+ {0x3055, 0x55, 0x5e}, // さ ざ し じ す ず せ ぜ そ ぞ
+ {0x305f, 0x5f, 0x69}, // た だ ち ぢ っ つ づ て で と ど
+ {0x306a, 0x6a, 0x6e}, // な に ぬ ね の
+ {0x306f, 0x6f, 0x7d}, // は ば ぱ ひ び ぴ ふ ぶ ぷ へ べ ぺ ほ ぼ ぽ
+ {0x307e, 0x7e, 0x82}, // ま み む め も
+ {0x3084, 0x83, 0x88}, // ゃ や ゅ ゆ ょ よ
+ {0x3089, 0x89, 0x8d}, // ら り る れ ろ
+ {0x308f, 0x8e, 0x92}, // ゎ わ
+ {0x3093, 0x93, 0x93}, // ゐ ゑ を
+};
static inline bool __ctsvc_check_dirty_number(char digit)
return &src[ret];
}
-int ctsvc_normalize_number(const char *src, char *dest, int dest_size)
+static int __ctsvc_normalize_number(const char *src, char *dest, int dest_size, int min_match)
{
int i;
int len;
if (0 < len) {
while(0 <= (len-d_pos-1) && temp_number[len-d_pos-1]
- && d_pos < CTSVC_NORMALIZED_NUMBER_SIZE_MAX) {
+ && d_pos < min_match) {
if (dest_size-d_pos == 0) {
CTS_ERR("Destination string buffer is not enough(%s)", src);
return CONTACTS_ERROR_INTERNAL;
return CONTACTS_ERROR_NONE;
}
+
+int ctsvc_normalize_number(const char *src, char *dest, int dest_size, int min_match)
+{
+ int ret;
+
+ ret = __ctsvc_normalize_number(src, dest, dest_size, min_match);
+ if (ret != CONTACTS_ERROR_NONE) {
+ CTS_ERR("__ctsvc_normalize_number(src) failed(%d)", src, ret);
+ return ret;
+ }
+
+ return CONTACTS_ERROR_NONE;
+}
+
static int __ctsvc_remove_special_char(const char *src, char *dest, int dest_size)
{
int s_pos=0, d_pos=0, char_type, src_size;
return __ctsvc_collation_str(temp, dest);
}
-static int __ctsvc_normalize_str(const char *src, char *dest, int dest_size)
+static int __ctsvc_normalize_str(const char *src, char **dest)
{
- int type = CTSVC_LANG_OTHERS;
- int32_t size;
+ int ret;
+ int32_t tmp_size = 100;
+ int32_t size = 100;
UErrorCode status = 0;
- UChar tmp_result[dest_size*2];
- UChar result[dest_size*2];
- int i = 0;
- int j = 0;
- int str_len = strlen(src);
- int char_len = 0;
-
- for (i=0;i<str_len;i+=char_len) {
- char char_src[10];
- char_len = ctsvc_check_utf8(src[i]);
- if( char_len < 0 )
- {
- return char_len;
+ UChar *tmp_result = NULL;
+ UChar *result = NULL;
+
+ tmp_result = calloc(1, sizeof(UChar)*(tmp_size+1));
+ result = calloc(1, sizeof(UChar)*(size+1));
+ u_strFromUTF8(tmp_result, tmp_size + 1, &tmp_size, src, -1, &status);
+
+ if (status == U_BUFFER_OVERFLOW_ERROR) {
+ status = U_ZERO_ERROR;
+ free(tmp_result);
+ tmp_result = calloc(1, sizeof(UChar) * (tmp_size + 1));
+ u_strFromUTF8(tmp_result, tmp_size + 1, NULL, src, -1, &status);
+ if (U_FAILURE(status)) {
+ CTS_ERR("u_strFromUTF8()Failed(%s)", u_errorName(status));
+ ret = CONTACTS_ERROR_SYSTEM;
+ goto DATA_FREE;
+ }
+ }
+ else if (U_FAILURE(status)) {
+ CTS_ERR("u_strFromUTF8() Failed(%s)", u_errorName(status));
+ ret = CONTACTS_ERROR_SYSTEM;
+ goto DATA_FREE;
+ }
+
+ u_strToUpper(tmp_result, tmp_size + 1, tmp_result, -1, NULL, &status);
+ if (U_FAILURE(status)) {
+ CTS_ERR("u_strToUpper() Failed(%s)", u_errorName(status));
+ ret = CONTACTS_ERROR_SYSTEM;
+ goto DATA_FREE;
+ }
+
+ size = unorm_normalize(tmp_result, -1, UNORM_NFD, 0,
+ (UChar *)result, size + 1, &status);
+
+ if (status == U_BUFFER_OVERFLOW_ERROR) {
+ status = U_ZERO_ERROR;
+ free(result);
+ result = calloc(1, sizeof(UChar) * (size + 1));
+ size = unorm_normalize(tmp_result, -1, UNORM_NFD, 0, (UChar *)result, size + 1, &status);
+ if (U_FAILURE(status)) {
+ CTS_ERR("unorm_normalize() Failed(%s)", u_errorName(status));
+ ret = CONTACTS_ERROR_SYSTEM;
+ goto DATA_FREE;
}
+ }
+ else if (U_FAILURE(status)) {
+ CTS_ERR("unorm_normalize() Failed(%s)", u_errorName(status));
+ ret = CONTACTS_ERROR_SYSTEM;
+ goto DATA_FREE;
+ }
+
+ ret = ctsvc_check_language(result);
+ ctsvc_extra_normalize(result, size);
+
+ u_strToUTF8(NULL, 0, &size, result, -1, &status);
+ status = U_ZERO_ERROR;
+ *dest = calloc(1, sizeof(char) * (size+1));
+
+ u_strToUTF8(*dest, size+1, NULL, result, -1, &status);
+ if (U_FAILURE(status)) {
+ CTS_ERR("u_strToUTF8() Failed(%s)", u_errorName(status));
+ ret = CONTACTS_ERROR_SYSTEM;
+ free(*dest);
+ goto DATA_FREE;
+ }
- memcpy(char_src, &src[i], char_len);
- char_src[char_len] = '\0';
+DATA_FREE:
+ free(tmp_result);
+ free(result);
+ return ret;
- u_strFromUTF8(tmp_result, array_sizeof(tmp_result), NULL, char_src, -1, &status);
- RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
- "u_strFromUTF8() Failed(%s)", u_errorName(status));
+}
- u_strToUpper(tmp_result, array_sizeof(tmp_result), tmp_result, -1, NULL, &status);
- RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
- "u_strToLower() Failed(%s)", u_errorName(status));
+static int __ctsvc_normalize_str_to_unicode(const char *src, int src_size, UChar *dest, int dest_size)
+{
+ int ret;
+ int32_t size = dest_size;
+ UErrorCode status = 0;
+ UChar tmp_result[dest_size];
- size = unorm_normalize(tmp_result, -1, UNORM_NFD, 0,
- (UChar *)result, array_sizeof(result), &status);
- RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
- "unorm_normalize(%s) Failed(%s)", src, u_errorName(status));
+ u_strFromUTF8(tmp_result, dest_size, &size, src, src_size, &status);
- if (i == 0)
- type = ctsvc_check_language(result);
- ctsvc_extra_normalize(result, size);
+ if (U_FAILURE(status)) {
+ CTS_ERR("u_strFromUTF8() Failed(%s)", u_errorName(status));
+ return CONTACTS_ERROR_SYSTEM;
+ }
+
+ u_strToUpper(tmp_result, dest_size, tmp_result, -1, NULL, &status);
+ if (U_FAILURE(status)) {
+ CTS_ERR("u_strToUpper() Failed(%s)", u_errorName(status));
+ return CONTACTS_ERROR_SYSTEM;
+ }
- u_strToUTF8(&dest[j], dest_size-j, &size, result, -1, &status);
- RETVM_IF(U_FAILURE(status), CONTACTS_ERROR_SYSTEM,
- "u_strToUTF8() Failed(%s)", u_errorName(status));
- j += size;
- //dest[j++] = 0x7E;
+ size = unorm_normalize(tmp_result, -1, UNORM_NFD, 0,
+ (UChar *)dest, dest_size, &status);
+ if (U_FAILURE(status)) {
+ CTS_ERR("unorm_normalize() Failed(%s)", u_errorName(status));
+ return CONTACTS_ERROR_SYSTEM;
}
- dest[j]='\0';
- return type;
+ ret = ctsvc_check_language(dest);
+ ctsvc_extra_normalize(dest, size);
+
+ dest[size] = 0x00;
+
+ return ret;
}
-int ctsvc_normalize_str(const char *src, char *dest, int dest_size)
+int ctsvc_normalize_str(const char *src, char **dest)
{
int ret = CONTACTS_ERROR_NONE;
- char temp[dest_size];
+ char temp[strlen(src) + 1];
- dest[0] = '\0';
- ret = __ctsvc_remove_special_char(src, temp, dest_size);
+ ret = __ctsvc_remove_special_char(src, temp, strlen(src) + 1);
RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "__ctsvc_remove_special_char() Failed(%d)", ret);
- ret = __ctsvc_normalize_str(temp, dest, dest_size);
+ ret = __ctsvc_normalize_str(temp, dest);
return ret;
}
-int ctsvc_normalize_index(const char *src, char *dest, int dest_size)
+static void __ctsvc_convert_japanese_group_letter(char *dest)
+{
+ int i, size, dest_len;
+ UErrorCode status = 0;
+ UChar tmp_result[2];
+ UChar result[2] = {0x00};
+ int unicode_value1, unicode_value2;
+
+ dest_len = strlen(dest) + 1;
+ u_strFromUTF8(tmp_result, array_sizeof(tmp_result), NULL, dest, -1, &status);
+ RETM_IF(U_FAILURE(status), "u_strFromUTF8() Failed(%s)", u_errorName(status));
+
+ unicode_value1 = (0xFF00 & (tmp_result[0])) >> 8;
+ unicode_value2 = (0xFF & (tmp_result[0]));
+
+
+ for(i=0; i < 13; i++)
+ {
+ if (hiragana_group[i].start <= unicode_value2
+ && unicode_value2 <= hiragana_group[i].end)
+ result[0] = hiragana_group[i].letter;
+ }
+
+ u_strToUTF8(dest, dest_len, &size, result, -1, &status);
+ RETM_IF(U_FAILURE(status), "u_strToUTF8() Failed(%s)", u_errorName(status));
+
+}
+
+int ctsvc_normalize_index(const char *src, char **dest)
{
int ret = CONTACTS_ERROR_NONE;
char first_str[10] = {0};
int length = 0;
- dest[0] = '\0';
-
length = ctsvc_check_utf8(src[0]);
RETVM_IF(length <= 0, CONTACTS_ERROR_INTERNAL, "check_utf8 is failed");
if (length != strlen(first_str))
return CONTACTS_ERROR_INVALID_PARAMETER;
- ret = __ctsvc_normalize_str(first_str, dest, dest_size);
- if (dest[0] != '\0') {
- length = ctsvc_check_utf8(dest[0]);
- dest[length] = '\0';
+ ret = __ctsvc_normalize_str(first_str, dest);
+ if ((*dest)[0] != '\0') {
+ length = ctsvc_check_utf8((*dest)[0]);
+ (*dest)[length] = '\0';
+ }
+
+ if (ret == CTSVC_LANG_JAPANESE) {
+ __ctsvc_convert_japanese_group_letter(*dest);
}
return ret;
}
{
const char *first;
const char *second;
- int lang_first;
- int lang_second;
+ int lang_first = CTSVC_LANG_ENGLISH;
+ int lang_second = CTSVC_LANG_KOREAN;
+ int sort_first, sort_second;
char **first_list = NULL;
char **second_list = NULL;
char list[1024] = {0,};
}
strcat(list, ":");
- first = vconf_get_str(VCONFKEY_LANGSET);
- lang_first = ctsvc_get_language_type(first);
+
+
+ sort_first = ctsvc_get_default_language();
+ switch(sort_first)
+ {
+ case CTSVC_SORT_WESTERN:
+ lang_first = CTSVC_LANG_ENGLISH;
+ break;
+ case CTSVC_SORT_KOREAN:
+ lang_first = CTSVC_LANG_KOREAN;
+ break;
+ case CTSVC_SORT_JAPANESE:
+ lang_first = CTSVC_LANG_JAPANESE;
+ break;
+ default:
+ CTS_ERR("The default language is not valid");
+ }
+
+ first = ctsvc_get_language(lang_first);
__ctsvc_get_language_index(first, &first_list, &first_len);
for (i=0;i<first_len;i++) {
strcat(list, first_list[i]);
}
free(first_list);
- second = vconf_get_str(VCONFKEY_CONTACTS_SVC_SECONDARY_LANGUAGE);
- lang_second = ctsvc_get_language_type(second);
+ sort_second = ctsvc_get_secondary_language();
+ switch(sort_second)
+ {
+ case CTSVC_SORT_WESTERN:
+ lang_second = CTSVC_LANG_ENGLISH;
+ break;
+ case CTSVC_SORT_KOREAN:
+ lang_second = CTSVC_LANG_KOREAN;
+ break;
+ case CTSVC_SORT_JAPANESE:
+ lang_second = CTSVC_LANG_JAPANESE;
+ break;
+ default:
+ CTS_ERR("The default language is not valid");
+ }
+ second = ctsvc_get_language(lang_second);
if (lang_first != lang_second)
__ctsvc_get_language_index(second, &second_list, &second_len);
return false;
}
-static inline bool __ctsvc_compare_unicode(const char *str1, const char *str2, int str2_len)
+static inline bool __ctsvc_compare_utf8(const char *str1, const char *str2, int str2_len)
{
int k;
for (k=0; k<str2_len;k++)
return true;
}
+#define SMALL_BUFFER_SIZE 10
+
+static bool __ctsvc_compare_pinyin_letter(const char *haystack, int haystack_lang, const char *needle, int needle_lang, int *h_len, int *n_len)
+{
+ pinyin_name_s *pinyinname = NULL;
+ int size, ret = false;
+ int len, i, j, k;
+ char temp_needle[strlen(needle) + 1];
+ char temp[SMALL_BUFFER_SIZE];
+ bool match = false, initial_match = false;
+
+ if (haystack_lang != CTSVC_LANG_CHINESE || needle_lang != CTSVC_LANG_ENGLISH)
+ return false;
+
+ for(i=0, k=0; i < strlen(temp_needle); i++)
+ {
+ if (isupper(needle[i]))
+ temp_needle[i] = tolower(needle[i]);
+ else
+ temp_needle[i] = needle[i];
+ }
+
+ for(i=0, j=0; i < strlen(haystack) && j < strlen(temp_needle) ; i+=len)
+ {
+ len = ctsvc_check_utf8(haystack[i]);
+ memcpy(temp, haystack + i, len );
+ temp[len] = '\0';
+
+ ret = ctsvc_convert_chinese_to_pinyin(temp, &pinyinname, &size);
+ if (ret != CONTACTS_ERROR_NONE) {
+ return false;
+ }
+
+ for(k=0; k<size; k++) {
+ if (!initial_match &&
+ strlen(pinyinname[k].pinyin_name) <= strlen(temp_needle + j) &&
+ strncmp(pinyinname[k].pinyin_name, temp_needle + j, strlen(pinyinname[k].pinyin_name)) == 0) {
+ DBG("A name matched");
+ match = true;
+ j+=strlen(pinyinname[k].pinyin_name);
+ break;
+
+ }
+ else if (!initial_match &&
+ strlen(pinyinname[k].pinyin_name) > strlen(temp_needle + j) &&
+ strncmp(pinyinname[k].pinyin_name, temp_needle + j, strlen(temp_needle + j)) == 0) {
+ match = true;
+ j+=strlen(temp_needle + j);
+ break;
+
+ }
+ else if (pinyinname[k].pinyin_initial[0] == temp_needle[j]) {
+ initial_match = true;
+ match = true;
+ j++;
+ break;
+ }
+ else
+ match = false;
+ }
+ free(pinyinname);
+
+ if (match==false) {
+ break;
+ }
+
+ }
+
+ if (match) {
+ *h_len = i;
+ *n_len = j;
+ }
+
+ return match;
+}
+
+static bool __ctsvc_compare_unicode_letter(const UChar* haystack, int haystack_lang, const UChar *needle, int needle_lang)
+{
+ int i, j;
+ bool ret = false;
+
+ switch (haystack_lang)
+ {
+ case CTSVC_LANG_ENGLISH:
+ {
+ switch(needle_lang)
+ {
+ case CTSVC_LANG_ENGLISH:
+ for(i=0, j=0; i<u_strlen(haystack) && j<u_strlen(needle);) {
+ if (CTSVC_COMPARE_BETWEEN(CTSVC_COMBINING_DIACRITICAL_MARKS_START,
+ haystack[i], CTSVC_COMBINING_DIACRITICAL_MARKS_END)) {
+ i++;
+ continue;
+ }
+ if (CTSVC_COMPARE_BETWEEN(CTSVC_COMBINING_DIACRITICAL_MARKS_START,
+ needle[j], CTSVC_COMBINING_DIACRITICAL_MARKS_END)) {
+ j++;
+ continue;
+ }
+
+ if(haystack[i] == needle[j])
+ ret = true;
+ else {
+ ret = false;
+ break;
+ }
+
+ i++;
+ j++;
+ }
+ return ret;
+ default:
+ return false;
+ }
+ }
+ break;
+ case CTSVC_LANG_KOREAN:
+ {
+ if(needle_lang != CTSVC_LANG_KOREAN)
+ break;
+
+ if (u_strlen(needle) == 1
+ && CTSVC_COMPARE_BETWEEN(0x3130, needle[0], 0x314e)
+ && haystack[0] == needle[0]) {
+ return true;
+ }
+
+ for(i=0, j=0; i<u_strlen(haystack) && j<u_strlen(needle);) {
+ if(haystack[i] == needle[j])
+ ret = true;
+ else {
+ ret = false;
+ break;
+ }
+ i++;
+ j++;
+ }
+ return ret;
+
+ }
+ break;
+ case CTSVC_LANG_JAPANESE:
+ case CTSVC_LANG_CHINESE:
+ {
+ if(needle_lang == haystack_lang
+ && haystack[0] == needle[0])
+ ret = true;
+ }
+ return ret;
+ }
+
+ return false;
+}
+
+/**
+ * This function compares compares two strings which is not normalized.
+ * If search_str is included in str, this function return #sCONTACTS_ERROR_NONE. \n
+ * The behavior of this function cannot fix because of localization.
+ * So, The behavior can be different from each other.
+ *
+ * @param[in] haystack Base string.
+ * @param[in] needle searching string
+ * @param[out] len substring length
+ * @return a position of the beginning of the substring, Negative value(#cts_error) on error or difference.
+ * @par example
+ * @code
+ ret = contacts_strstr(str1, str2, &len);
+ if(CONTACTS_ERROR_NONE == ret) {
+ snprintf(first, ret+1, "%s", item_data->display);
+ snprintf(middle, len+1, "%s", item_data->display + ret);
+ printf("%s -> %s, %s, %s", item_data->display, first, middle, item_data->display + ret + len);
+ } else
+ printf("str1 doesn't has str2");
+ * @endcode
+ */
+
+
+API int contacts_utils_strstr(const char *haystack,
+ const char *needle, int *len)
+{
+
+ int ret, h_len, n_len, i, j;
+ UChar haystack_letter[SMALL_BUFFER_SIZE];
+ UChar needle_letter[SMALL_BUFFER_SIZE];
+ UChar first_needle_letter[SMALL_BUFFER_SIZE];
+ int haystack_letter_lang;
+ int needle_letter_lang;
+ int first_needle_letter_lang;
+
+ bool matching=false;
+ int match_len = 0;
+ int match_start = -1;
+
+ char temp_haystack[strlen(haystack) + 1];
+ char temp_needle[strlen(needle) + 1];
+
+
+ RETVM_IF(NULL == haystack, -1, "The parameter(haystack) is NULL");
+ RETVM_IF(NULL == needle, -1, "The parameter(needle) is NULL");
+ CTS_VERBOSE("haystack = %s, needle = %s", haystack, needle);
+
+ *len = 0;
+
+ ret = __ctsvc_remove_special_char(haystack, temp_haystack, strlen(haystack) + 1);
+ ret = __ctsvc_remove_special_char(needle, temp_needle, strlen(needle) + 1);
+
+ n_len = ctsvc_check_utf8(temp_needle[0]);
+
+ first_needle_letter_lang = __ctsvc_normalize_str_to_unicode(temp_needle, n_len, first_needle_letter, SMALL_BUFFER_SIZE);
+ RETVM_IF(first_needle_letter_lang < CONTACTS_ERROR_NONE , -1, "The __ctsvc_normalize_str_to_unicode failed(%d)", first_needle_letter_lang);
+
+
+ for (i=0, j=0;i<strlen(temp_haystack) && j<strlen(temp_needle);i+=h_len) {
+ h_len = ctsvc_check_utf8(temp_haystack[i]);
+
+ haystack_letter_lang = __ctsvc_normalize_str_to_unicode(temp_haystack + i, h_len, haystack_letter, SMALL_BUFFER_SIZE);
+ RETVM_IF(haystack_letter_lang < CONTACTS_ERROR_NONE , -1, "The __ctsvc_normalize_str_to_unicode failed(%d)", haystack_letter_lang);
+
+ if (matching == false)
+ {
+ if (__ctsvc_compare_unicode_letter(haystack_letter, haystack_letter_lang, first_needle_letter, first_needle_letter_lang)
+ || __ctsvc_compare_pinyin_letter(temp_haystack + i, haystack_letter_lang, temp_needle + j, first_needle_letter_lang, &h_len, &n_len)) {
+ matching = true;
+ j+=n_len;
+ match_start = i;
+ match_len = h_len;
+
+ if (temp_needle[j] == '\0') {
+ *len = match_len;
+ return match_start;
+ }
+ }
+ continue;
+ }
+ else if (matching == true) {
+ n_len = ctsvc_check_utf8(temp_needle[j]);
+
+ needle_letter_lang = __ctsvc_normalize_str_to_unicode(temp_needle + j, n_len, needle_letter, SMALL_BUFFER_SIZE);
+ RETVM_IF(needle_letter_lang < CONTACTS_ERROR_NONE , -1, "The __ctsvc_normalize_str_to_unicode failed(%d)", needle_letter_lang);
+
+ if (__ctsvc_compare_unicode_letter(haystack_letter, haystack_letter_lang, needle_letter, needle_letter_lang )){
+ j+=n_len;
+ match_len += h_len;
+
+ if (temp_needle[j] == '\0') {
+ *len = match_len;
+ return match_start;
+ }
+ continue;
+ }
+ else {
+ j = 0;
+ matching = false;
+ match_start = -1;
+ match_len = 0;
+ }
+ }
+ }
+
+ CTS_VERBOSE("NOT match");
+ return -1;
+}
+
/**
* This function compares compares two strings which must have been normalized already.
* If search_str is included in str, this function return #sCONTACTS_ERROR_NONE. \n
}
if (wind == 0 && j && 0 < i) {
- if (h_len == first_needle_len && __ctsvc_compare_unicode(&haystack[i], needle, first_needle_len)
+ if (h_len == first_needle_len && __ctsvc_compare_utf8(&haystack[i], needle, first_needle_len)
&& !__ctsvc_is_diacritical(&haystack[i])) {
unsigned short tmp;
}
}
- equal = __ctsvc_compare_unicode(&haystack[i], &needle[j], n_len);
+ equal = __ctsvc_compare_utf8(&haystack[i], &needle[j], n_len);
if (equal) {
if (!counted) {
API int contacts_normalize_str(const char *src, char *dest, const int dest_len)
{
int ret;
+ char *temp = NULL;
RETV_IF(NULL == dest, CONTACTS_ERROR_INVALID_PARAMETER);
RETVM_IF(dest_len <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "dest_len(%d) is Invalid", dest_len);
+ dest[0] = '\0';
- ret = ctsvc_normalize_str(src, dest, dest_len);
+ ret = ctsvc_normalize_str(src, &temp);
RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_normalize_str() Failed(%d)", ret);
+ snprintf(dest, dest_len, "%s", temp);
+ free(temp);
+
return CONTACTS_ERROR_NONE;
}
#ifndef __TIZEN_SOCIAL_CTSVC_NORMALIZE_H__\r
#define __TIZEN_SOCIAL_CTSVC_NORMALIZE_H__\r
\r
-#define VCONFKEY_CONTACTS_SVC_SECONDARY_LANGUAGE "db/contacts-svc/secondary_lang" // It should be added to vconf-internal-keys\r
+#define CTSVC_MIN_MATCH_NORMALIZED_NUMBER_SIZE 8\r
\r
enum LANGTYPE{\r
CTSVC_LANG_NUMBER = 0,\r
};\r
\r
int ctsvc_clean_number(const char *src, char *dest, int dest_size);\r
-int ctsvc_normalize_number(const char *src, char *dest, int dest_size);\r
-int ctsvc_normalize_str(const char *src, char *dest, int dest_size);\r
+int ctsvc_normalize_number(const char *src, char *dest, int dest_size, int min_match);\r
+int ctsvc_normalize_str(const char *src, char **dest);\r
int ctsvc_collation_str(char *src, char **dest);\r
-int ctsvc_normalize_index(const char *src, char *dest, int dest_size);\r
+int ctsvc_normalize_index(const char *src, char **dest);\r
\r
#endif /* __TIZEN_SOCIAL_CTSVC_NORMALIZE_H__ */\r
#define CTSVC_NOTI_PERSON_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_PERSON_CHANGED"\r
#define CTSVC_NOTI_SIMPLE_CONTACT_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_SIMPLE_CONTACT_CHANGED"\r
#define CTSVC_NOTI_CONTACT_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_DB_CHANGED"\r
-#define CTSVC_NOTI_MY_PROFILE_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_MYPROFILE_CHANGED"\r
+#define CTSVC_NOTI_MY_PROFILE_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_MY_PROFILE_CHANGED"\r
#define CTSVC_NOTI_NAME_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_NAME_CHANGED"\r
#define CTSVC_NOTI_NUMBER_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_NUMBER_CHANGED"\r
#define CTSVC_NOTI_EMAIL_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_EMAIL_CHANGED"\r
#define CTSVC_NOTI_EVENT_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_EVENT_CHANGED"\r
#define CTSVC_NOTI_URL_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_URL_CHANGED"\r
-#define CTSVC_NOTI_GROUP_RELATION_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_GROUP_REL_CHANGED"\r
+#define CTSVC_NOTI_GROUP_RELATION_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_GROUP_RELATION_CHANGED"\r
#define CTSVC_NOTI_ADDRESS_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_ADDRESS_CHANGED"\r
#define CTSVC_NOTI_NOTE_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_NOTE_CHANGED"\r
#define CTSVC_NOTI_COMPANY_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_COMPANY_CHANGED"\r
#define CTSVC_NOTI_PROFILE_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_PROFILE_CHANGED"\r
#define CTSVC_NOTI_ACTIVITY_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_ACTIVITY_CHANGED"\r
#define CTSVC_NOTI_PHONELOG_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_PLOG_CHANGED"\r
-#define CTSVC_NOTI_FAVORITE_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_FAVOR_CHANGED"\r
#define CTSVC_NOTI_SPEEDDIAL_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_SPEED_CHANGED"\r
-#define CTSVC_NOTI_MISSED_CALL_CHANGED "/opt/usr/data/contacts-svc/.CONTACTS_SVC_MISSED_CHANGED"\r
\r
\r
#endif /* __TIZEN_SOCIAL_CTSVC_NOTIFY_H__ */\r
ASSERT_NOT_REACHED("Invalid parameter: Operation restricted."); \
return CONTACTS_ERROR_INVALID_PARAMETER;
-static inline bool __ctsvc_record_check_property_flag(const ctsvc_record_s* s_record, unsigned int property_id, contacts_property_flag_e flag)
+bool ctsvc_record_check_property_flag(const ctsvc_record_s* s_record, unsigned int property_id, contacts_property_flag_e flag)
{
int index = property_id & 0x000000FF;
- if ( s_record->properties_flags == NULL)
+ if (CTSVC_RECORD_RESULT == s_record->r_type)
return true;
+ // Check it when getting value of property
+ // property_flag and properties_flags is set when getting record with query
+ if (CTSVC_PROPERTY_FLAG_PROJECTION == flag) {
+ // all property get.
+ if (NULL == s_record->properties_flags)
+ return true;
+ // Or before inserting record from DB, just get after setting.
+ // properties_flags is not NULL when just setting dirty
+ if (0 == (CTSVC_PROPERTY_FLAG_PROJECTION & s_record->property_flag))
+ return true;
+ }
+
+ // Check it when updating record
+ if (CTSVC_PROPERTY_FLAG_DIRTY == flag) {
+ // all property is clean
+ if (NULL == s_record->properties_flags)
+ return false;
+ }
return ( s_record->properties_flags[index] & flag) ? true : false;
}
-static inline contacts_property_flag_e __ctsvc_record_get_property_flag(const ctsvc_record_s* s_record, unsigned int index)
+int ctsvc_record_set_property_flag(ctsvc_record_s* _record, int property_id, contacts_property_flag_e flag)
{
- return s_record->properties_flags[index] & 0x0000000F;
-}
+ int index = property_id & 0x000000FF;
-static inline void __ctsvc_record_set_property_flag(ctsvc_record_s* _record, unsigned int index, contacts_property_flag_e flag)
-{
+ if (CTSVC_RECORD_RESULT == _record->r_type)
+ return CONTACTS_ERROR_NONE;
+
+ if (NULL == _record->properties_flags) {
+ unsigned int count = 0;
+ ctsvc_view_get_all_property_infos(_record->view_uri, &count);
+ RETVM_IF(count < 0, CONTACTS_ERROR_INVALID_PARAMETER, "ctsvc_view_get_all_property_infos() Failed");
+
+ _record->properties_flags = calloc(count, sizeof(char));
+ _record->property_max_count = count;
+ RETVM_IF(NULL == _record->properties_flags, CONTACTS_ERROR_INTERNAL, "calloc Failed");
+ }
+ _record->property_flag |= flag;
_record->properties_flags[index] |= flag;
+
+ return CONTACTS_ERROR_NONE;
}
#define __CHECK_READ_ONLY_PROPERTY() \
}
#define __CHECK_PROJECTED_PROPERTY() \
- if( __ctsvc_record_check_property_flag( s_record, property_id, CTSVC_PROPERTY_FLAG_PROJECTION ) ) \
+ if( false == ctsvc_record_check_property_flag( s_record, property_id, CTSVC_PROPERTY_FLAG_PROJECTION ) ) \
{ \
CTS_ERR("Invalid parameter: Don't try to get un-projected property(0x%0x).", property_id); \
return CONTACTS_ERROR_INVALID_PARAMETER; \
RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
s_record = (ctsvc_record_s *)record;
-// __CHECK_PROJECTED_PROPERTY();
+ __CHECK_PROJECTED_PROPERTY();
if (s_record->plugin_cbs && s_record->plugin_cbs->get_str)
return s_record->plugin_cbs->get_str(record, property_id, out_str);
RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
s_record = (ctsvc_record_s *)record;
-// __CHECK_PROJECTED_PROPERTY();
+ __CHECK_PROJECTED_PROPERTY();
if (s_record->plugin_cbs && s_record->plugin_cbs->get_lli)
return s_record->plugin_cbs->get_lli(record, property_id, value);
RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
s_record = (ctsvc_record_s *)record;
-// __CHECK_PROJECTED_PROPERTY();
+ __CHECK_PROJECTED_PROPERTY();
if (s_record->plugin_cbs && s_record->plugin_cbs->get_double)
return s_record->plugin_cbs->get_double(record, property_id, value);
RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
s_record = (ctsvc_record_s *)record;
-// __CHECK_PROJECTED_PROPERTY();
+ __CHECK_PROJECTED_PROPERTY();
if (s_record->plugin_cbs && s_record->plugin_cbs->get_str_p)
return s_record->plugin_cbs->get_str_p(record, property_id, out_str );
RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
s_record = (ctsvc_record_s *)record;
-// __CHECK_PROJECTED_PROPERTY();
+ __CHECK_PROJECTED_PROPERTY();
if (s_record->plugin_cbs && s_record->plugin_cbs->get_int)
return s_record->plugin_cbs->get_int(record, property_id, out_value);
{
char *str;
ctsvc_record_s *s_record;
+ int ret;
s_record = (ctsvc_record_s *)record;
+ __CHECK_PROJECTED_PROPERTY();
if (value && *value)
str = (char *)value;
else
str = NULL;
- if (s_record->plugin_cbs && s_record->plugin_cbs->set_str)
- return s_record->plugin_cbs->set_str(record, property_id, str);
+ if (s_record->plugin_cbs && s_record->plugin_cbs->set_str) {
+ ret = s_record->plugin_cbs->set_str(record, property_id, str);
+ if (CONTACTS_ERROR_NONE == ret)
+ ctsvc_record_set_property_flag(s_record, property_id, CTSVC_PROPERTY_FLAG_DIRTY);
+ return ret;
+ }
__INVALID_PARAMETER_ERROR_HANDLING();
}
RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
s_record = (ctsvc_record_s *)record;
-// __CHECK_PROJECTED_PROPERTY();
+ __CHECK_PROJECTED_PROPERTY();
if (s_record->plugin_cbs && s_record->plugin_cbs->get_bool)
return s_record->plugin_cbs->get_bool(record, property_id, value);
int ctsvc_record_set_bool( contacts_record_h record, unsigned int property_id, bool value )
{
+ int ret;
ctsvc_record_s *s_record;
s_record = (ctsvc_record_s *)record;
+ __CHECK_PROJECTED_PROPERTY();
- if (s_record->plugin_cbs && s_record->plugin_cbs->set_bool)
- return s_record->plugin_cbs->set_bool(record, property_id, value);
+ if (s_record->plugin_cbs && s_record->plugin_cbs->set_bool) {
+ ret = s_record->plugin_cbs->set_bool(record, property_id, value);
+ if (CONTACTS_ERROR_NONE == ret)
+ ctsvc_record_set_property_flag(s_record, property_id, CTSVC_PROPERTY_FLAG_DIRTY);
+ return ret;
+ }
__INVALID_PARAMETER_ERROR_HANDLING();
}
int ctsvc_record_set_int( contacts_record_h record, unsigned int property_id, int value )
{
+ int ret;
ctsvc_record_s *s_record;
s_record = (ctsvc_record_s *)record;
+ __CHECK_PROJECTED_PROPERTY();
- if (s_record->plugin_cbs && s_record->plugin_cbs->set_int)
- return s_record->plugin_cbs->set_int(record, property_id, value);
-
+ if (s_record->plugin_cbs && s_record->plugin_cbs->set_int) {
+ ret = s_record->plugin_cbs->set_int(record, property_id, value);
+ if (CONTACTS_ERROR_NONE == ret)
+ ctsvc_record_set_property_flag(s_record, property_id, CTSVC_PROPERTY_FLAG_DIRTY);
+ return ret;
+ }
__INVALID_PARAMETER_ERROR_HANDLING();
}
int ctsvc_record_set_lli( contacts_record_h record, unsigned int property_id, long long int value )
{
+ int ret;
ctsvc_record_s *s_record;
s_record = (ctsvc_record_s *)record;
+ __CHECK_PROJECTED_PROPERTY();
- if (s_record->plugin_cbs && s_record->plugin_cbs->set_lli)
- return s_record->plugin_cbs->set_lli(record, property_id, value);
+ if (s_record->plugin_cbs && s_record->plugin_cbs->set_lli) {
+ ret = s_record->plugin_cbs->set_lli(record, property_id, value);
+ if (CONTACTS_ERROR_NONE == ret)
+ ctsvc_record_set_property_flag(s_record, property_id, CTSVC_PROPERTY_FLAG_DIRTY);
+ return ret;
+ }
__INVALID_PARAMETER_ERROR_HANDLING();
}
int ctsvc_record_set_double( contacts_record_h record, unsigned int property_id, double value )
{
+ int ret;
ctsvc_record_s *s_record;
s_record = (ctsvc_record_s *)record;
+ __CHECK_PROJECTED_PROPERTY();
- if (s_record->plugin_cbs && s_record->plugin_cbs->set_double)
- return s_record->plugin_cbs->set_double(record, property_id, value);
+ if (s_record->plugin_cbs && s_record->plugin_cbs->set_double) {
+ ret = s_record->plugin_cbs->set_double(record, property_id, value);
+ if (CONTACTS_ERROR_NONE == ret)
+ ctsvc_record_set_property_flag(s_record, property_id, CTSVC_PROPERTY_FLAG_DIRTY);
+ return ret;
+ }
__INVALID_PARAMETER_ERROR_HANDLING();
}
__INVALID_PARAMETER_ERROR_HANDLING();
}
-
-int ctsvc_record_set_projection_flags( contacts_record_h record, const unsigned int *projection,
- const unsigned int projection_count, const unsigned int property_max_count)
+int ctsvc_record_set_projection_flags( contacts_record_h record, const unsigned int *projection, const unsigned int projection_count, const unsigned int property_max_count)
{
+ int i;
+ unsigned int count;
+ const property_info_s *property_info;
+
RETV_IF(record == NULL, CONTACTS_ERROR_INVALID_PARAMETER);
ctsvc_record_s *_record = (ctsvc_record_s *)record;
_record->property_max_count = property_max_count;
- int i;
- for (i = 0; i < projection_count; i++)
- {
- unsigned int index = projection[i] & 0x00000FFF;
- if( index >= property_max_count ) {
- ASSERT_NOT_REACHED("Boundary Check failed");
- return CONTACTS_ERROR_INTERNAL;
- }
- __ctsvc_record_set_property_flag(_record, index, CTSVC_PROPERTY_FLAG_PROJECTION);
+ property_info = ctsvc_view_get_all_property_infos(_record->view_uri, &count);
+ if (CTSVC_RECORD_RESULT == _record->r_type)
+ _record->property_flag |= CTSVC_PROPERTY_FLAG_PROJECTION;
+ else {
+ for (i=0;i<projection_count;i++)
+ ctsvc_record_set_property_flag(_record, projection[i], CTSVC_PROPERTY_FLAG_PROJECTION);
}
return CONTACTS_ERROR_NONE;
}\\r
} while (0)\r
\r
+#define CTSVC_RECORD_RESET_PROPERTY_FLAGS(base)do {\\r
+ if ((base)->properties_flags) \\r
+ {\\r
+ free((base)->properties_flags); \\r
+ (base)->property_max_count = 0;\\r
+ (base)->properties_flags = NULL;\\r
+ (base)->property_flag = 0;\\r
+ }\\r
+} while (0)\r
+\r
+int ctsvc_record_set_property_flag(ctsvc_record_s* _record, int property_id, contacts_property_flag_e flag);\r
int ctsvc_record_set_projection_flags( contacts_record_h record, const unsigned int *projection, const unsigned int projection_count, const unsigned int property_max_count);\r
int ctsvc_record_set_str( contacts_record_h record, unsigned int property_id, const char* value );\r
int ctsvc_record_set_bool( contacts_record_h record, unsigned int property_id, bool value );\r
int ctsvc_record_set_int( contacts_record_h record, unsigned int property_id, int value );\r
int ctsvc_record_set_lli( contacts_record_h record, unsigned int property_id, long long int value );\r
int ctsvc_record_set_double( contacts_record_h record, unsigned int property_id, double value );\r
+bool ctsvc_record_check_property_flag(const ctsvc_record_s* s_record, unsigned int property_id, contacts_property_flag_e flag);\r
\r
#endif /* __TIZEN_SOCIAL_CTSVC_RECORD_H__ */\r
free(contact->image_thumbnail_path);
free(contact->ringtone_path);
free(contact->vibration);
+ free(contact->sort_name);
+ free(contact->reverse_sort_name);
free(contact->sortkey);
free(contact->reverse_sortkey);
free(contact->sync_data1);
FREEandSTRDUP(company->role, str);
break;
case CTSVC_PROPERTY_COMPANY_LOGO:
+ company->logo_changed = true;
FREEandSTRDUP(company->logo, str);
break;
case CTSVC_PROPERTY_COMPANY_LOCATION:
out_data->ringtone_path = SAFE_STRDUP(src_data->ringtone_path);
out_data->vibration = SAFE_STRDUP(src_data->vibration);
out_data->image_thumbnail_path = SAFE_STRDUP(src_data->image_thumbnail_path);
+ out_data->sort_name = SAFE_STRDUP(src_data->sort_name);
+ out_data->reverse_sort_name = SAFE_STRDUP(src_data->reverse_sort_name);
out_data->sortkey = SAFE_STRDUP(src_data->sortkey);
out_data->reverse_sortkey = SAFE_STRDUP(src_data->reverse_sortkey);
out_data->sync_data1 = SAFE_STRDUP(src_data->sync_data1);
out_data->id = src_data->id;
out_data->logo_changed= src_data->logo_changed;
out_data->contact_id = src_data->contact_id;
+ out_data->is_default = src_data->is_default;
+ out_data->type = src_data->type;
+ out_data->label = SAFE_STRDUP(src_data->label);
out_data->name = SAFE_STRDUP(src_data->name);
out_data->department = SAFE_STRDUP(src_data->department);
out_data->job_title = SAFE_STRDUP(src_data->job_title);
out_data->type = src_data->type;
out_data->label = SAFE_STRDUP(src_data->label);
out_data->date = src_data->date;
+ out_data->is_lunar = src_data->is_lunar;
+ out_data->lunar_date = src_data->lunar_date;
CTSVC_RECORD_COPY_BASE(&(out_data->base), &(src_data->base));
static int __ctsvc_my_profile_get_int(contacts_record_h record, unsigned int property_id, int *out)
{
- ctsvc_contact_s *contact = (ctsvc_contact_s *)record;
+ ctsvc_my_profile_s *my_profile = (ctsvc_my_profile_s *)record;
switch(property_id) {
case CTSVC_PROPERTY_MY_PROFILE_ID:
- *out = contact->id;
+ *out = my_profile->id;
break;
case CTSVC_PROPERTY_MY_PROFILE_ADDRESSBOOK_ID:
- *out = contact->addressbook_id;
+ *out = my_profile->addressbook_id;
break;
case CTSVC_PROPERTY_MY_PROFILE_CHANGED_TIME:
- *out = contact->changed_time;
+ *out = my_profile->changed_time;
break;
default:
- ASSERT_NOT_REACHED("Invalid parameter : property_id(%d) is not supported in value(contact)", property_id);
+ ASSERT_NOT_REACHED("Invalid parameter : property_id(%d) is not supported in value(my_profile)", property_id);
return CONTACTS_ERROR_INVALID_PARAMETER;
}
return CONTACTS_ERROR_NONE;
static int __ctsvc_my_profile_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy )
{
- ctsvc_contact_s *contact = (ctsvc_contact_s*)record;
+ ctsvc_my_profile_s *my_profile = (ctsvc_my_profile_s*)record;
switch(property_id) {
case CTSVC_PROPERTY_MY_PROFILE_DISPLAY_NAME:
- *out_str = GET_STR(copy, contact->display_name);
+ *out_str = GET_STR(copy, my_profile->display_name);
break;
case CTSVC_PROPERTY_MY_PROFILE_IMAGE_THUMBNAIL:
- *out_str = GET_STR(copy, contact->image_thumbnail_path);
+ *out_str = GET_STR(copy, my_profile->image_thumbnail_path);
break;
case CTSVC_PROPERTY_MY_PROFILE_UID:
- *out_str = GET_STR(copy, contact->uid);
+ *out_str = GET_STR(copy, my_profile->uid);
break;
default :
- CTS_ERR("Invalid parameter : property_id(%d) is not supported in value(contact)", property_id);
+ CTS_ERR("Invalid parameter : property_id(%d) is not supported in value(my_profile)", property_id);
return CONTACTS_ERROR_INVALID_PARAMETER;
}
return CONTACTS_ERROR_NONE;
src_data = (ctsvc_my_profile_s*)record;
out_data = calloc(1, sizeof(ctsvc_my_profile_s));
RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
- "Out of memeory : calloc(ctsvc_contact_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
+ "Out of memeory : calloc(ctsvc_my_profile_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
out_data->id = src_data->id;
out_data->addressbook_id = src_data->addressbook_id;
"Out of memeory : calloc(ctsvc_person_s) Failed(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
out_data->name_contact_id_changed = src_data->name_contact_id_changed;
- out_data->image_thumbnail_changed = src_data->image_thumbnail_changed;
out_data->ringtone_changed = src_data->ringtone_changed;
out_data->vibration_changed = src_data->vibration_changed;
out_data->is_favorite_changed = src_data->is_favorite_changed;
case CTSVC_PROPERTY_PERSON_ACCOUNT_ID3:
person->account_id3 = value;
break;
-/*
- ASSERT_NOT_REACHED("The field(0x%0x) is a read-only value (person)", property_id);
- return CONTACTS_ERROR_INVALID_PARAMETER;
-*/
default:
ASSERT_NOT_REACHED("This field(0x%0x) is not supported in value(person)", property_id);
return CONTACTS_ERROR_INVALID_PARAMETER;
case CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX:
FREEandSTRDUP( person->display_name_index, str);
break;
-/*
- ASSERT_NOT_REACHED("The field(%d) is a read-only value (contact)", property_id);
- return CONTACTS_ERROR_INVALID_PARAMETER;
-*/
+ case CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL:
+ FREEandSTRDUP(person->image_thumbnail_path, str);
+ break;
case CTSVC_PROPERTY_PERSON_RINGTONE:
FREEandSTRDUP(person->ringtone_path, str);
person->ringtone_changed = true;
break;
- case CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL:
- FREEandSTRDUP(person->image_thumbnail_path, str);
- person->image_thumbnail_changed = true;
- break;
case CTSVC_PROPERTY_PERSON_VIBRATION:
FREEandSTRDUP(person->vibration, str);
person->vibration_changed = true;
static int __ctsvc_updated_info_clone(contacts_record_h record, contacts_record_h *out_record);
static int __ctsvc_updated_info_get_int(contacts_record_h record, unsigned int property_id, int *out);
static int __ctsvc_updated_info_set_int(contacts_record_h record, unsigned int property_id, int value);
+static int __ctsvc_updated_info_get_bool(contacts_record_h record, unsigned int property_id, bool *out);
+static int __ctsvc_updated_info_set_bool(contacts_record_h record, unsigned int property_id, bool value);
ctsvc_record_plugin_cb_s updated_info_plugin_cbs = {
.create = __ctsvc_updated_info_create,
.get_str = NULL,
.get_str_p = NULL,
.get_int = __ctsvc_updated_info_get_int,
- .get_bool = NULL,
+ .get_bool = __ctsvc_updated_info_get_bool,
.get_lli = NULL,
.get_double = NULL,
.set_str = NULL,
.set_int = __ctsvc_updated_info_set_int,
- .set_bool = NULL,
+ .set_bool = __ctsvc_updated_info_set_bool,
.set_lli = NULL,
.set_double = NULL,
.add_child_record = NULL,
case CTSVC_PROPERTY_UPDATE_INFO_VERSION:
*out = updated_info->changed_ver;
break;
+ case CTSVC_PROPERTY_UPDATE_INFO_LAST_CHANGED_TYPE:
+ *out = updated_info->last_changed_type;
+ break;
default:
ASSERT_NOT_REACHED("This field(%d) is not supported in value(updated_info)", property_id);
return CONTACTS_ERROR_INVALID_PARAMETER;
case CTSVC_PROPERTY_UPDATE_INFO_VERSION:
updated_info->changed_ver = value;
break;
+ case CTSVC_PROPERTY_UPDATE_INFO_LAST_CHANGED_TYPE:
+ updated_info->last_changed_type = value;
+ break;
+ default:
+ ASSERT_NOT_REACHED("This field(%d) is not supported in value(updated_info)", property_id);
+ return CONTACTS_ERROR_INVALID_PARAMETER;
+ }
+ return CONTACTS_ERROR_NONE;
+}
+
+static int __ctsvc_updated_info_get_bool(contacts_record_h record, unsigned int property_id, bool *out)
+{
+ ctsvc_updated_info_s* updated_info = (ctsvc_updated_info_s*)record;
+
+ switch(property_id) {
+ case CTSVC_PROPERTY_UPDATE_INFO_IMAGE_CHANGED :
+ *out = updated_info->image_changed;
+ break;
+ default:
+ ASSERT_NOT_REACHED("This field(%d) is not supported in value(updated_info)", property_id);
+ return CONTACTS_ERROR_INVALID_PARAMETER;
+ }
+ return CONTACTS_ERROR_NONE;
+}
+
+static int __ctsvc_updated_info_set_bool(contacts_record_h record, unsigned int property_id, bool value)
+{
+ ctsvc_updated_info_s* updated_info = (ctsvc_updated_info_s*)record;
+
+ switch(property_id) {
+ case CTSVC_PROPERTY_UPDATE_INFO_IMAGE_CHANGED :
+ updated_info->image_changed = value;
+ break;
default:
ASSERT_NOT_REACHED("This field(%d) is not supported in value(updated_info)", property_id);
return CONTACTS_ERROR_INVALID_PARAMETER;
#include "ctsvc_internal.h"
#include "ctsvc_setting.h"
#include "ctsvc_normalize.h"
+#include "ctsvc_localize.h"
static int name_display_order = -1;
-static int default_lang = -1;
-static int secondary_lang = -1;
+static int primary_sort = -1;
+static int secondary_sort = -1;
static const char *CTSVC_VCONF_DISPLAY_ORDER = VCONFKEY_CONTACTS_SVC_NAME_DISPLAY_ORDER;
return "file/private/contacts-service/default_lang";
}
-const char* ctsvc_get_secondary_language_vconfkey(void)
-{
- return "file/private/contacts-service/secondary_lang";
-}
-
API int contacts_setting_get_name_display_order(contacts_name_display_order_e *order)
{
int ret;
static void ctsvc_vconf_language_cb(keynode_t *key, void *data)
{
- default_lang = vconf_keynode_get_int(key);
-}
-
-static void ctsvc_vconf_secondary_language_cb(keynode_t *key, void *data)
-{
- secondary_lang = vconf_keynode_get_int(key);
+ primary_sort = vconf_keynode_get_int(key);
+ {
+ if (primary_sort==CTSVC_SORT_KOREAN)
+ secondary_sort = CTSVC_SORT_WESTERN;
+ else if (primary_sort==CTSVC_SORT_WESTERN)
+ secondary_sort = CTSVC_SORT_KOREAN;
+ else
+ secondary_sort = CTSVC_SORT_WESTERN;
+ }
}
int ctsvc_register_vconf(void)
name_display_order = CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST;
}
- ret = vconf_get_int(ctsvc_get_default_language_vconfkey(), &default_lang);
+ ret = vconf_get_int(ctsvc_get_default_language_vconfkey(), &primary_sort);
WARN_IF(ret < 0, "vconf_get_int() Failed(%d)", ret);
- ret = vconf_get_int(ctsvc_get_secondary_language_vconfkey(), &secondary_lang);
- WARN_IF(ret < 0, "vconf_get_int() Failed(%d)", ret);
+ {
+ if (primary_sort==CTSVC_SORT_KOREAN)
+ secondary_sort = CTSVC_SORT_WESTERN;
+ else if (primary_sort==CTSVC_SORT_WESTERN)
+ secondary_sort = CTSVC_SORT_KOREAN;
+ else
+ secondary_sort = CTSVC_SORT_WESTERN;
+ }
ret = vconf_notify_key_changed(CTSVC_VCONF_DISPLAY_ORDER,
ctsvc_vconf_diplay_order_cb, NULL);
RETVM_IF(ret<0, CONTACTS_ERROR_SYSTEM, "vconf_notify_key_changed(%s) Failed(%d)",
ctsvc_get_default_language_vconfkey(), ret);
- ret = vconf_notify_key_changed(ctsvc_get_secondary_language_vconfkey(),
- ctsvc_vconf_secondary_language_cb, NULL);
- RETVM_IF(ret<0, CONTACTS_ERROR_SYSTEM, "vconf_notify_key_changed(%s) Failed(%d)",
- ctsvc_get_secondary_language_vconfkey(), ret);
-
return CONTACTS_ERROR_NONE;
}
RETM_IF(ret<0,"vconf_ignore_key_changed(%s) Failed(%d)",CTSVC_VCONF_DISPLAY_ORDER,ret);
ret = vconf_ignore_key_changed(ctsvc_get_default_language_vconfkey(), ctsvc_vconf_language_cb);
RETM_IF(ret<0,"vconf_ignore_key_changed(%s) Failed(%d)", ctsvc_get_default_language_vconfkey(),ret);
- ret = vconf_ignore_key_changed(ctsvc_get_secondary_language_vconfkey(), ctsvc_vconf_secondary_language_cb);
- RETM_IF(ret<0,"vconf_ignore_key_changed(%s) Failed(%d)", ctsvc_get_secondary_language_vconfkey(),ret);
}
int ctsvc_get_default_language(void)
{
- if (default_lang < 0) {
+ if (primary_sort < 0) {
int ret;
- ret = vconf_get_int(ctsvc_get_default_language_vconfkey(), &default_lang);
+ ret = vconf_get_int(ctsvc_get_default_language_vconfkey(), &primary_sort);
WARN_IF(ret < 0, "vconf_get_int() Failed(%d)", ret);
+ {
+ if (primary_sort==CTSVC_SORT_KOREAN)
+ secondary_sort = CTSVC_SORT_WESTERN;
+ else if (primary_sort==CTSVC_SORT_WESTERN)
+ secondary_sort = CTSVC_SORT_KOREAN;
+ else
+ secondary_sort = CTSVC_SORT_WESTERN;
+ }
}
- return default_lang;
+
+ return primary_sort;
}
int ctsvc_get_secondary_language(void)
{
- if (secondary_lang < 0) {
- int ret;
- ret = vconf_get_int(ctsvc_get_secondary_language_vconfkey(), &secondary_lang);
- WARN_IF(ret < 0, "vconf_get_int() Failed(%d)", ret);
- }
- return secondary_lang;
+ return secondary_sort;
}
CTSVC_FILTER_COMPOSITE,
}ctsvc_filter_type_e;
-/*
-typedef enum {
- TYPE_BOOL,
- TYPE_INT,
- TYPE_LLI,
- TYPE_STR,
- TYPE_DOUBLE,
- TYPE_PTR,
-}value_type_e;
-
-typedef enum {
- PROPERTY_NONE,
- PROPERTY_FILTER,
- PROPERTY_PROJECTION,
- PROPERTY_ALL,
-}property_type_e;
-*/
-
typedef struct{
unsigned int property_id;
- int type;
int property_type;
void* fields;
}property_info_s;
typedef struct {
int r_type;
- bool deleted;
const ctsvc_record_plugin_cb_s *plugin_cbs;
const char* view_uri;
unsigned int property_max_count;
unsigned char* properties_flags;
+ unsigned char property_flag;
}ctsvc_record_s;
typedef struct {
typedef struct {
ctsvc_record_s base;
bool name_contact_id_changed;
- bool image_thumbnail_changed;
bool ringtone_changed;
bool vibration_changed;
bool is_favorite_changed;
char *reverse_display_name;
int display_source_type;
int display_name_language;
+ char *sort_name;
+ char *reverse_sort_name;
char *sortkey;
char *reverse_sortkey;
char *uid;
int id;
int changed_ver;
int addressbook_id;
+ bool image_changed;
+ int last_changed_type; // it is used for _contacts_my_profile_updated_info
}ctsvc_updated_info_s;
typedef struct {
CTSVC_VCARD_VALUE_FN,
CTSVC_VCARD_VALUE_N,
CTSVC_VCARD_VALUE_PHONETIC_FIRST_NAME,
+ CTSVC_VCARD_VALUE_PHONETIC_MIDDLE_NAME,
CTSVC_VCARD_VALUE_PHONETIC_LAST_NAME,
CTSVC_VCARD_VALUE_NICKNAME,
CTSVC_VCARD_VALUE_PHOTO,
CTSVC_VCARD_VALUE_BDAY,
+ CTSVC_VCARD_VALUE_X_ANNIVERSARY,
+ CTSVC_VCARD_VALUE_X_TIZEN_EVENT,
CTSVC_VCARD_VALUE_ADR,
CTSVC_VCARD_VALUE_LABEL,
CTSVC_VCARD_VALUE_TEL,
CTSVC_VCARD_VALUE_ROLE,
CTSVC_VCARD_VALUE_LOGO,
CTSVC_VCARD_VALUE_ORG,
+ CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_LOCATION,
+ CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_DESCRIPTION,
+ CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_PHONETIC_NAME,
+ CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_ASSISTANT_NAME,
CTSVC_VCARD_VALUE_NOTE,
CTSVC_VCARD_VALUE_REV,
CTSVC_VCARD_VALUE_UID,
CTSVC_VCARD_VALUE_URL,
- CTSVC_VCARD_VALUE_X_ANNIVERSARY,
CTSVC_VCARD_VALUE_X_MSN,
CTSVC_VCARD_VALUE_X_YAHOO,
CTSVC_VCARD_VALUE_X_ICQ,
CTSVC_VCARD_VALUE_X_AIM,
CTSVC_VCARD_VALUE_X_JABBER,
+ CTSVC_VCARD_VALUE_X_SKYPE_USERNAME,
CTSVC_VCARD_VALUE_X_SKYPE,
CTSVC_VCARD_VALUE_X_QQ,
CTSVC_VCARD_VALUE_X_GOOGLE_TALK,
+ CTSVC_VCARD_VALUE_X_TIZEN_MESSENGER,
+ CTSVC_VCARD_VALUE_X_TIZEN_RELATIONSHIP,
CTSVC_VCARD_VALUE_END,
CTSVC_VCARD_VALUE_MAX
};
content_name[CTSVC_VCARD_VALUE_FN] = "FN";
content_name[CTSVC_VCARD_VALUE_N] = "N";
content_name[CTSVC_VCARD_VALUE_PHONETIC_FIRST_NAME] = "X-PHONETIC-FIRST-NAME";
+ content_name[CTSVC_VCARD_VALUE_PHONETIC_MIDDLE_NAME] = "X-PHONETIC-MIDDLE-NAME";
content_name[CTSVC_VCARD_VALUE_PHONETIC_LAST_NAME] = "X-PHONETIC-LAST-NAME";
content_name[CTSVC_VCARD_VALUE_NICKNAME] = "NICKNAME";
content_name[CTSVC_VCARD_VALUE_PHOTO] = "PHOTO";
content_name[CTSVC_VCARD_VALUE_BDAY] = "BDAY";
+ content_name[CTSVC_VCARD_VALUE_X_ANNIVERSARY] = "ANNIVERSARY";
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_EVENT] = "X-TIZEN-EVENT";
content_name[CTSVC_VCARD_VALUE_ADR] = "ADR";
content_name[CTSVC_VCARD_VALUE_LABEL] = "LABEL"; /* not supported */
content_name[CTSVC_VCARD_VALUE_TEL] = "TEL";
content_name[CTSVC_VCARD_VALUE_LOGO] = "LOGO";
//content_name[CTSVC_VCARD_VALUE_AGENT] = "AGENT"; /* not supported */
content_name[CTSVC_VCARD_VALUE_ORG] = "ORG";
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_LOCATION] = "X-TIZEN-COMPANY-LOCATION";
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_DESCRIPTION] = "X-TIZEN-COMPANY-DESCRIPTION";
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_PHONETIC_NAME] = "X-TIZEN-COMPANY-PHONETIC-NAME";
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_ASSISTANT_NAME] = "X-TIZEN-COMPANY-ASSISTANT-NAME";
//content_name[CTSVC_VCARD_VALUE_CATEGORIES] = "CATEGORIES"; /* not supported */
content_name[CTSVC_VCARD_VALUE_NOTE] = "NOTE";
//content_name[CTSVC_VCARD_VALUE_PRODID] = "PRODID"; /* not supported */
//content_name[CTSVC_VCARD_VALUE_VERSION] = "VERSION"; /* not supported */
//content_name[CTSVC_VCARD_VALUE_CLASS] = "CLASS"; /* not supported */
//content_name[CTSVC_VCARD_VALUE_KEY] = "KEY"; /* not supported */
- content_name[CTSVC_VCARD_VALUE_X_ANNIVERSARY] = "X-ANNIVERSARY";
content_name[CTSVC_VCARD_VALUE_X_MSN] = "X-MSN";
content_name[CTSVC_VCARD_VALUE_X_YAHOO] = "X-YAHOO";
content_name[CTSVC_VCARD_VALUE_X_ICQ] = "X-ICQ";
content_name[CTSVC_VCARD_VALUE_X_AIM] = "X-AIM";
content_name[CTSVC_VCARD_VALUE_X_JABBER] = "X-JABBER";
+ content_name[CTSVC_VCARD_VALUE_X_SKYPE_USERNAME] = "X-SKYPE-USERNAME";
content_name[CTSVC_VCARD_VALUE_X_SKYPE] = "X-SKYPE";
content_name[CTSVC_VCARD_VALUE_X_QQ] = "X-QQ";
content_name[CTSVC_VCARD_VALUE_X_GOOGLE_TALK] = "X-GOOGLE-TALK";
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_MESSENGER] = "X-TIZEN-MESSENGER";
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_RELATIONSHIP] = "X-TIZEN-RELATIONSHIP";
//content_name[CTSVC_VCARD_VALUE_X_CHILDREN] = "X-CHILDREN";
content_name[CTSVC_VCARD_VALUE_END] = "END";
}
RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
}
+ if (name->phonetic_middle) {
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
+ content_name[CTSVC_VCARD_VALUE_PHONETIC_MIDDLE_NAME], name->phonetic_middle, CTSVC_CRLF);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+ }
+
if (name->phonetic_last) {
ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
content_name[CTSVC_VCARD_VALUE_PHONETIC_LAST_NAME], name->phonetic_last, CTSVC_CRLF);
return ret;
}
+static inline int __ctsvc_vcard_put_company_type(int type, char *label, char *dest, int dest_size)
+{
+ int ret_len = 0;
+ if (type == CONTACTS_COMPANY_TYPE_WORK)
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "WORK");
+ else if (type == CONTACTS_COMPANY_TYPE_CUSTOM)
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=X-%s", label);
+ return ret_len;
+}
+
static inline int __ctsvc_vcard_append_company(ctsvc_list_s *company_list,
char *dest, int dest_size)
{
int ret_len = 0;
- GList *cursor = company_list->records;
+ GList *cursor;
ctsvc_company_s *company;
- RETV_IF(NULL == cursor, 0);
- company = (ctsvc_company_s *)cursor->data;
+ for (cursor=company_list->records;cursor;cursor=cursor->next) {
+ company = (ctsvc_company_s *)cursor->data;
- ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s",
- content_name[CTSVC_VCARD_VALUE_ORG],
- SAFE_STR(company->name));
- RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
-
- if (company->department) {
- ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";%s",
- company->department);
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s",
+ content_name[CTSVC_VCARD_VALUE_ORG]);
RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
- }
-
- ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s", CTSVC_CRLF);
- RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
- if (company->job_title) {
- ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
- content_name[CTSVC_VCARD_VALUE_TITLE],
- company->job_title, CTSVC_CRLF);
+ ret_len += __ctsvc_vcard_put_company_type(company->type, SAFE_STR(company->label), dest+ret_len, dest_size-ret_len);
RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
- }
- if (company->role) {
- ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
- content_name[CTSVC_VCARD_VALUE_ROLE],
- company->role, CTSVC_CRLF);
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ":%s", SAFE_STR(company->name));
RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
- }
- if (company->logo) {
- ret_len += __ctsvc_vcard_put_company_logo(company->logo, dest+ret_len, dest_size-ret_len);
+ if (company->department) {
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";%s",
+ company->department);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+ }
+
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s", CTSVC_CRLF);
RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+
+ if (company->job_title) {
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
+ content_name[CTSVC_VCARD_VALUE_TITLE],
+ company->job_title, CTSVC_CRLF);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+ }
+
+ if (company->role) {
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
+ content_name[CTSVC_VCARD_VALUE_ROLE],
+ company->role, CTSVC_CRLF);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+ }
+
+ if (company->location) {
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_LOCATION],
+ company->location, CTSVC_CRLF);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+ }
+
+ if (company->description) {
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_DESCRIPTION],
+ company->description, CTSVC_CRLF);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+ }
+
+ if (company->phonetic_name) {
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_PHONETIC_NAME],
+ company->phonetic_name, CTSVC_CRLF);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+ }
+
+ if (company->assistant_name) {
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_ASSISTANT_NAME],
+ company->assistant_name, CTSVC_CRLF);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+ }
+
+ if (company->logo) {
+ ret_len += __ctsvc_vcard_put_company_logo(company->logo, dest+ret_len, dest_size-ret_len);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+ }
}
return ret_len;
char *dest, int dest_size)
{
int ret_len = 0;
- GList *cursor = note_list->records;
+ GList *cursor;
ctsvc_note_s *note;
- RETV_IF(NULL == cursor, 0);
-
- note = (ctsvc_note_s *)cursor->data;
-
- if (note->note) {
- ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
- content_name[CTSVC_VCARD_VALUE_NOTE],
- SAFE_STR(note->note), CTSVC_CRLF);
- RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+ for (cursor=note_list->records;cursor;cursor=cursor->next) {
+ note = (ctsvc_note_s *)cursor->data;
+ if (note->note) {
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
+ content_name[CTSVC_VCARD_VALUE_NOTE],
+ SAFE_STR(note->note), CTSVC_CRLF);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+ }
}
return ret_len;
{
int ret_len = 0;
- if (type & CONTACTS_ADDRESS_TYPE_DOM)
+ if (type == CONTACTS_ADDRESS_TYPE_DOM)
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "DOM");
- if (type & CONTACTS_ADDRESS_TYPE_INTL)
+ if (type == CONTACTS_ADDRESS_TYPE_INTL)
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "INTL");
- if (type & CONTACTS_ADDRESS_TYPE_HOME)
+ if (type == CONTACTS_ADDRESS_TYPE_HOME)
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "HOME");
- if (type & CONTACTS_ADDRESS_TYPE_WORK)
+ if (type == CONTACTS_ADDRESS_TYPE_WORK)
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "WORK");
- if (type & CONTACTS_ADDRESS_TYPE_POSTAL)
+ if (type == CONTACTS_ADDRESS_TYPE_POSTAL)
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "POSTAL");
- if (type & CONTACTS_ADDRESS_TYPE_PARCEL)
+ if (type == CONTACTS_ADDRESS_TYPE_PARCEL)
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "PARCEL");
- if (type & CONTACTS_ADDRESS_TYPE_CUSTOM)
+ if (type == CONTACTS_ADDRESS_TYPE_CUSTOM)
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=X-%s", label);
return ret_len;
content_name[CTSVC_VCARD_VALUE_ADR]);
RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
- ret_len += __ctsvc_vcard_put_postal_type(address->type, address->label, dest+ret_len,
+ ret_len += __ctsvc_vcard_put_postal_type(address->type, SAFE_STR(address->label), dest+ret_len,
dest_size-ret_len);
RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "VOICE");
if (type & CONTACTS_NUMBER_TYPE_FAX)
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "FAX");
- if (type & CONTACTS_NUMBER_TYPE_VOICE)
- ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "VOICE");
if (type & CONTACTS_NUMBER_TYPE_CELL)
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "CELL");
if (type & CONTACTS_NUMBER_TYPE_VIDEO)
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "PCS");
if (type & CONTACTS_NUMBER_TYPE_ASSISTANT)
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "X-ASSISTANT");
- if (type & CONTACTS_NUMBER_TYPE_CUSTOM)
+ if (type == CONTACTS_NUMBER_TYPE_CUSTOM)
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=X-%s", label);
return ret_len;
}
content_name[CTSVC_VCARD_VALUE_TEL]);
RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
- ret_len += __ctsvc_vcard_put_number_type(number->type, number->label, dest+ret_len, dest_size-ret_len);
+ ret_len += __ctsvc_vcard_put_number_type(number->type, SAFE_STR(number->label), dest+ret_len, dest_size-ret_len);
if (number->is_default) {
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";%s", "PREF");
RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
{
int ret_len = 0;
- if (CONTACTS_EMAIL_TYPE_HOME & type)
+ if (CONTACTS_EMAIL_TYPE_HOME == type)
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "HOME");
- if (CONTACTS_EMAIL_TYPE_WORK & type)
+ else if (CONTACTS_EMAIL_TYPE_WORK == type)
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "WORK");
- if (CONTACTS_EMAIL_TYPE_CUSTOM & type)
+ else if (CONTACTS_EMAIL_TYPE_MOBILE == type)
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "CELL");
+ else if (CONTACTS_EMAIL_TYPE_CUSTOM == type)
ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=X-%s", label);
return ret_len;
content_name[CTSVC_VCARD_VALUE_EMAIL]);
RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
- ret_len += __ctsvc_vcard_put_email_type(email->type, email->label, dest+ret_len, dest_size-ret_len);
+ ret_len += __ctsvc_vcard_put_email_type(email->type, SAFE_STR(email->label), dest+ret_len, dest_size-ret_len);
RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
if (email->is_default) {
return ret_len;
}
+static inline int __ctsvc_vcard_put_url_type(int type, char *label, char *dest, int dest_size)
+{
+ int ret_len = 0;
+
+ if (CONTACTS_URL_TYPE_HOME == type)
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "HOME");
+ else if (CONTACTS_URL_TYPE_WORK == type)
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "WORK");
+ else if (CONTACTS_URL_TYPE_CUSTOM == type)
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=X-%s", label);
+
+ return ret_len;
+}
+
static inline int __ctsvc_vcard_append_webs(ctsvc_list_s *url_list,
char *dest, int dest_size)
{
for (cursor=url_list->records;cursor;cursor=cursor->next) {
url = cursor->data;
- if (url->url && *url->url) {
- ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
- content_name[CTSVC_VCARD_VALUE_URL],
- url->url, CTSVC_CRLF);
- RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
- }
+
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s",
+ content_name[CTSVC_VCARD_VALUE_URL]);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+
+ ret_len += __ctsvc_vcard_put_url_type(url->type, SAFE_STR(url->label), dest+ret_len, dest_size-ret_len);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ":%s%s",
+ url->url, CTSVC_CRLF);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
}
return ret_len;
if (!data->date) continue;
if (CONTACTS_EVENT_TYPE_BIRTH == data->type) {
- ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%d-%02d-%d%s",
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%d-%02d-%02d%s",
content_name[CTSVC_VCARD_VALUE_BDAY],
data->date/10000, (data->date%10000)/100, data->date%100,
CTSVC_CRLF);
RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
}
else if (CONTACTS_EVENT_TYPE_ANNIVERSARY == data->type) {
- ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%d-%02d-%d%s",
- content_name[CTSVC_VCARD_VALUE_X_ANNIVERSARY],
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s;TYPE=ANNIVERSARY:%d-%02d-%02d%s",
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_EVENT],
+ data->date/10000, (data->date%10000)/100, data->date%100,
+ CTSVC_CRLF);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+ }
+ else if (CONTACTS_EVENT_TYPE_CUSTOM == data->type) {
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s;X-%s:%d-%02d-%02d%s",
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_EVENT],
+ SAFE_STR(data->label),
+ data->date/10000, (data->date%10000)/100, data->date%100,
+ CTSVC_CRLF);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+ }
+ else {
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%d-%02d-%02d%s",
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_EVENT],
data->date/10000, (data->date%10000)/100, data->date%100,
CTSVC_CRLF);
RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
break;
case CONTACTS_MESSENGER_TYPE_SKYPE:
ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
- content_name[CTSVC_VCARD_VALUE_X_SKYPE], messenger->im_id, CTSVC_CRLF);
+ content_name[CTSVC_VCARD_VALUE_X_SKYPE_USERNAME], messenger->im_id, CTSVC_CRLF);
break;
case CONTACTS_MESSENGER_TYPE_QQ:
ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
content_name[CTSVC_VCARD_VALUE_X_GOOGLE_TALK], messenger->im_id, CTSVC_CRLF);
break;
+ case CONTACTS_MESSENGER_TYPE_FACEBOOK:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s;TYPE=FACEBOOK:%s%s",
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_MESSENGER], messenger->im_id, CTSVC_CRLF);
+ break;
+ case CONTACTS_MESSENGER_TYPE_IRC:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s;TYPE=IRC:%s%s",
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_MESSENGER], messenger->im_id, CTSVC_CRLF);
+ break;
+ case CONTACTS_MESSENGER_TYPE_CUSTOM:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s;TYPE=X-%s:%s%s",
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_MESSENGER], SAFE_STR(messenger->label), messenger->im_id, CTSVC_CRLF);
+ break;
default:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
+ content_name[CTSVC_VCARD_VALUE_X_TIZEN_MESSENGER], messenger->im_id, CTSVC_CRLF);
break;
}
RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
return ret_len;
}
+static inline int __ctsvc_vcard_put_relationship_type(int type, char *label, char *dest, int dest_size)
+{
+ int ret_len = 0;
+ switch (type) {
+ case CONTACTS_RELATIONSHIP_TYPE_ASSISTANT:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "ASSISTANT");
+ break;
+ case CONTACTS_RELATIONSHIP_TYPE_BROTHER:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "BROTHER");
+ break;
+ case CONTACTS_RELATIONSHIP_TYPE_CHILD:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "CHILD");
+ break;
+ case CONTACTS_RELATIONSHIP_TYPE_DOMESTIC_PARTNER:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "DOMESTIC_PARTNER");
+ break;
+ case CONTACTS_RELATIONSHIP_TYPE_FATHER:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "FATHER");
+ break;
+ case CONTACTS_RELATIONSHIP_TYPE_FRIEND:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "FRIEND");
+ break;
+ case CONTACTS_RELATIONSHIP_TYPE_MANAGER:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "MANAGER");
+ break;
+ case CONTACTS_RELATIONSHIP_TYPE_MOTHER:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "MOTHER");
+ break;
+ case CONTACTS_RELATIONSHIP_TYPE_PARENT:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "PARENT");
+ break;
+ case CONTACTS_RELATIONSHIP_TYPE_PARTNER:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "PARTNER");
+ break;
+ case CONTACTS_RELATIONSHIP_TYPE_REFERRED_BY:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "REFERRED_BY");
+ break;
+ case CONTACTS_RELATIONSHIP_TYPE_RELATIVE:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "RELATIVE");
+ break;
+ case CONTACTS_RELATIONSHIP_TYPE_SISTER:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "SISTER");
+ break;
+ case CONTACTS_RELATIONSHIP_TYPE_SPOUSE:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=%s", "SPOUSE");
+ break;
+ case CONTACTS_RELATIONSHIP_TYPE_CUSTOM:
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ";TYPE=X-%s", label);
+ break;
+ }
+ return ret_len;
+}
+
+
+
+static inline int __ctsvc_vcard_append_relationships(ctsvc_list_s *relationship_list, char *dest, int dest_size)
+{
+ int ret_len = 0;
+ GList *cursor;
+ ctsvc_relationship_s *relationship;
+
+ for (cursor=relationship_list->records;cursor;cursor=cursor->next) {
+ relationship = cursor->data;
+
+ if (relationship->name) {
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "X-TIZEN-RELATIONSHIP");
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+
+ ret_len += __ctsvc_vcard_put_relationship_type(relationship->type, SAFE_STR(relationship->label), dest+ret_len, dest_size-ret_len);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, ":%s%s", relationship->name, CTSVC_CRLF);
+ RETV_IF(dest_size <= ret_len, CONTACTS_ERROR_INTERNAL);
+ }
+ }
+
+ return ret_len;
+}
+
static inline int __ctsvc_vcard_put_photo(ctsvc_list_s *image_list, char *dest, int dest_size)
{
int ret = 0, fd, type;
RETV_IF(ret < 0, ret);
ret_len += ret;
}
+ if (contact->relationships) {
+ ret = __ctsvc_vcard_append_relationships(contact->relationships, dest+ret_len, dest_size-ret_len);
+ RETV_IF(ret < 0, ret);
+ ret_len += ret;
+ }
if (contact->uid)
ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
content_name[CTSVC_VCARD_VALUE_UID],
CTSVC_CRLF);
}
#if 0
- char *image_path;
- ctsvc_list_s* grouprelations;
ctsvc_list_s* profile;
- ctsvc_list_s* relationships;
#endif
return ret_len;
}
+static inline int __ctsvc_vcard_append_my_profile(ctsvc_my_profile_s *my_profile, char *dest, int dest_size)
+{
+ int ret_len = 0;
+ int ret;
+
+ if (my_profile->name) {
+ ret = __ctsvc_vcard_append_name(my_profile->name,
+ dest+ret_len, dest_size-ret_len);
+ RETV_IF(ret < 0, ret);
+ ret_len += ret;
+ }
+ if (my_profile->company) {
+ ret = __ctsvc_vcard_append_company(my_profile->company,
+ dest+ret_len, dest_size-ret_len);
+ RETV_IF(ret < 0, ret);
+ ret_len += ret;
+ }
+ if (my_profile->note) {
+ ret = __ctsvc_vcard_append_note(my_profile->note,
+ dest+ret_len, dest_size-ret_len);
+ RETV_IF(ret < 0, ret);
+ ret_len += ret;
+ }
+ if (my_profile->postal_addrs) {
+ ret = __ctsvc_vcard_append_postals(my_profile->postal_addrs,
+ dest+ret_len, dest_size-ret_len);
+ RETV_IF(ret < 0, ret);
+ ret_len += ret;
+ }
+ if (my_profile->numbers) {
+ ret = __ctsvc_vcard_append_numbers(my_profile->numbers,
+ dest+ret_len, dest_size-ret_len);
+ RETV_IF(ret < 0, ret);
+ ret_len += ret;
+ }
+ if (my_profile->emails) {
+ ret = __ctsvc_vcard_append_emails(my_profile->emails,
+ dest+ret_len, dest_size-ret_len);
+ RETV_IF(ret < 0, ret);
+ ret_len += ret;
+ }
+ if (my_profile->nicknames) {
+ ret = __ctsvc_vcard_append_nicknames(my_profile->nicknames,
+ dest+ret_len, dest_size-ret_len);
+ RETV_IF(ret < 0, ret);
+ ret_len += ret;
+ }
+ if (my_profile->urls) {
+ ret = __ctsvc_vcard_append_webs(my_profile->urls,
+ dest+ret_len, dest_size-ret_len);
+ RETV_IF(ret < 0, ret);
+ ret_len += ret;
+ }
+ if (my_profile->events) {
+ ret = __ctsvc_vcard_append_events(my_profile->events,
+ dest+ret_len, dest_size-ret_len);
+ RETV_IF(ret < 0, ret);
+ ret_len += ret;
+ }
+ if (my_profile->images) {
+ ret = __ctsvc_vcard_put_photo(my_profile->images,
+ dest+ret_len, dest_size-ret_len);
+ RETV_IF(ret < 0, ret);
+ ret_len += ret;
+ }
+ if (my_profile->messengers) {
+ ret = __ctsvc_vcard_append_messengers(my_profile->messengers, dest+ret_len, dest_size-ret_len);
+ RETV_IF(ret < 0, ret);
+ ret_len += ret;
+ }
+ if (my_profile->relationships) {
+ ret = __ctsvc_vcard_append_relationships(my_profile->relationships, dest+ret_len, dest_size-ret_len);
+ RETV_IF(ret < 0, ret);
+ ret_len += ret;
+ }
+ if (my_profile->uid)
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%s%s",
+ content_name[CTSVC_VCARD_VALUE_UID],
+ my_profile->uid, CTSVC_CRLF);
+ if (my_profile->changed_time) {
+ struct tm ts;
+ gmtime_r((time_t *)&my_profile->changed_time, &ts);
+ ret_len += snprintf(dest+ret_len, dest_size-ret_len, "%s:%04d-%02d-%02dT%02d:%02d:%02dZ%s",
+ content_name[CTSVC_VCARD_VALUE_REV],
+ 1900+ts.tm_year, 1+ts.tm_mon, ts.tm_mday,
+ ts.tm_hour, ts.tm_min, ts.tm_sec,
+ CTSVC_CRLF);
+ }
+#if 0
+ ctsvc_list_s* profile;
+#endif
+ return ret_len;
+
+}
+
static int __ctsvc_vcard_make(ctsvc_contact_s *contact, char **vcard_stream)
{
int ret_len, ret;
return CONTACTS_ERROR_NONE;
}
+static int __ctsvc_vcard_make_from_my_profile(ctsvc_my_profile_s *my_profile, char **vcard_stream)
+{
+ int ret_len, ret;
+ char result[CTSVC_VCARD_FILE_MAX_SIZE] = {0};
+
+ __ctsvc_vcard_initial();
+
+ ret_len = snprintf(result, sizeof(result), "%s%s", "BEGIN:VCARD", CTSVC_CRLF);
+ ret_len += snprintf(result+ret_len, sizeof(result)-ret_len,
+ "%s%s%s", "VERSION:", "3.0", CTSVC_CRLF);
+
+ ret = __ctsvc_vcard_append_my_profile(my_profile,
+ result+ret_len, sizeof(result)-ret_len);
+ RETVM_IF(ret < 0, CONTACTS_ERROR_INTERNAL,
+ "This contact has too many information");
+ ret_len += ret;
+ RETVM_IF(sizeof(result)-ret_len <= 0, CONTACTS_ERROR_INTERNAL,
+ "This contact has too many information");
+
+ ret_len += snprintf(result+ret_len, sizeof(result)-ret_len,
+ "%s%s", "END:VCARD", CTSVC_CRLF);
+
+ ret = __ctsvc_vcard_add_folding(result);
+ RETV_IF (CONTACTS_ERROR_NONE != ret, ret);
+
+ *vcard_stream = strdup(result);
+
+ return CONTACTS_ERROR_NONE;
+}
+
+
API int contacts_vcard_make_from_contact(contacts_record_h record, char **vcard_stream)
{
ctsvc_contact_s *contact;
RETVM_IF(CTSVC_RECORD_CONTACT != contact->base.r_type, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : The record is not conatct record (type : %d)", contact->base.r_type);
- __ctsvc_vcard_make(contact, vcard_stream);
- return CONTACTS_ERROR_NONE;
+ return __ctsvc_vcard_make(contact, vcard_stream);
+}
+
+API int contacts_vcard_make_from_my_profile(contacts_record_h record, char **vcard_stream)
+{
+ ctsvc_my_profile_s *my_profile;
+ RETV_IF(NULL == vcard_stream, CONTACTS_ERROR_INVALID_PARAMETER);
+ *vcard_stream = NULL;
+
+ RETVM_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER,
+ "Invalid parameter : my_profile(%p), vcard_stream(%p)", record, vcard_stream);
+
+ my_profile = (ctsvc_my_profile_s*)record;
+ RETVM_IF(CTSVC_RECORD_MY_PROFILE != my_profile->base.r_type, CONTACTS_ERROR_INVALID_PARAMETER,
+ "Invalid parameter : The record is not conatct record (type : %d)", my_profile->base.r_type);
+
+ return __ctsvc_vcard_make_from_my_profile(my_profile, vcard_stream);
}
+
static int __ctsvc_vcard_append_person(ctsvc_person_s *person, ctsvc_list_s *list_contacts, char *dest, int dest_size)
{
int ret;
total_len += ret_len;
}
}
+
+ for(cursor=list_contacts->records;cursor;cursor=cursor->next) {
+ simple_contact = (ctsvc_simple_contact_s *)cursor->data;
+ ret = contacts_db_get_record(_contacts_contact._uri, simple_contact->contact_id, (contacts_record_h *)&contact);
+ if (CONTACTS_ERROR_NONE == ret && contact && contact->relationships && contact->relationships->cursor) {
+ ret_len = __ctsvc_vcard_append_relationships(contact->relationships, dest+total_len, dest_size-total_len);
+ RETVM_IF(ret_len < 0, CONTACTS_ERROR_INTERNAL, "This person has too many information");
+ total_len += ret_len;
+ }
+ }
+
for(cursor=list_contacts->records;cursor;cursor=cursor->next) {
simple_contact = (ctsvc_simple_contact_s *)cursor->data;
ret = contacts_db_get_record(_contacts_contact._uri, simple_contact->contact_id, (contacts_record_h *)&contact);
total_len += ret_len;
}
#if 0
- char *image_path;
- ctsvc_list_s* grouprelations;
ctsvc_list_s* profile;
- ctsvc_list_s* relationships;
#endif
return total_len;
}
person = (ctsvc_person_s *)record;
RETVM_IF(CTSVC_RECORD_PERSON != person->base.r_type, CONTACTS_ERROR_INVALID_PARAMETER,
- "Invalid paramter : The record is not conatct record (type : %d)", person->base.r_type);
+ "Invalid parameter : The record is not conatct record (type : %d)", person->base.r_type);
contacts_filter_create(_contacts_simple_contact._uri, &filter);
ret = contacts_filter_add_int(filter, _contacts_simple_contact.person_id, CONTACTS_MATCH_EQUAL, person->person_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("Invalid paramter : contacts_filter_add_int is failed", ret);
+ CTS_ERR("Invalid parameter : contacts_filter_add_int is failed", ret);
contacts_filter_destroy(filter);
return CONTACTS_ERROR_INVALID_PARAMETER;
}
ret = contacts_db_get_records_with_query(query, 0, 0, &list);
if (ret == CONTACTS_ERROR_NONE)
- __ctsvc_vcard_make_from_person(person, (ctsvc_list_s *)list, vcard_stream);
+ ret = __ctsvc_vcard_make_from_person(person, (ctsvc_list_s *)list, vcard_stream);
contacts_query_destroy(query);
contacts_filter_destroy(filter);
contacts_list_destroy(list, true);
- return CONTACTS_ERROR_NONE;
+ return ret;
}
////////////////////////////////////////////////////////////////////////////
__ctsvc_strtok(start, separator);
if (CTSVC_VCARD_VALUE_PHONETIC_FIRST_NAME == type)
contacts_record_set_str(name, _contacts_name.phonetic_first, start);
- else
+ else if (CTSVC_VCARD_VALUE_PHONETIC_MIDDLE_NAME == type)
+ contacts_record_set_str(name, _contacts_name.phonetic_middle, start);
+ else if (CTSVC_VCARD_VALUE_PHONETIC_LAST_NAME == type)
contacts_record_set_str(name, _contacts_name.phonetic_last, start);
return CONTACTS_ERROR_NONE;
return CONTACTS_ERROR_NONE;
}
+static inline void __ctsvc_vcard_get_event_type(contacts_record_h event, char *val)
+{
+ int type = CONTACTS_EVENT_TYPE_OTHER;
+ char *temp, *result, *last = NULL;
+ char *lower, *lower_temp;
+
+ temp = strtok_r(val, ";", &last);
+ while (temp) {
+ lower = strdup(temp);
+ lower_temp = lower;
+ while (*lower_temp) {
+ *lower_temp = tolower(*lower_temp);
+ lower_temp++;
+ }
+ if (strstr(lower, "anniversary"))
+ type = CONTACTS_EVENT_TYPE_ANNIVERSARY;
+ else if (NULL != (result = strstr(lower, "x-"))) {
+ type = CONTACTS_EVENT_TYPE_CUSTOM;
+ contacts_record_set_str(event, _contacts_event.label, temp+(result-lower)+2);
+ }
+
+ free(lower);
+ temp = strtok_r(NULL, ";", &last);
+ }
+ contacts_record_set_int(event, _contacts_event.type, type);
+}
+
+
static inline int __ctsvc_vcard_get_event(ctsvc_list_s *event_list, int type, char *val)
{
int ret;
contacts_record_h event;
- char *dest, *src;
+ char *dest, *src, *temp, *cpy;
+
+ cpy = strdup(val);
+ temp = __ctsvc_get_content_value(cpy);
+ if (NULL == temp) {
+ free(cpy);
+ ERR("Invalid parameter : vcard(%s)", val);
+ return CONTACTS_ERROR_INVALID_PARAMETER;
+ }
dest = src = val;
while (*src) {
break;
}
*dest = '\0';
-
- RETVM_IF('\0' == *val, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : val(%d)", val);
+ if ('\0' == *val) {
+ free(cpy);
+ ERR("Invalid parameter : val(%d)", val);
+ return CONTACTS_ERROR_INVALID_PARAMETER;
+ }
ret = contacts_record_create(_contacts_event._uri, &event);
- RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+ if (ret < CONTACTS_ERROR_NONE) {
+ free(cpy);
+ ERR("contacts_record_create is failed(%d)", ret);
+ return ret;
+ }
contacts_record_set_int(event, _contacts_event.date, atoi(val));
- contacts_record_set_int(event, _contacts_event.type, type);
+
+ if (CTSVC_VCARD_VALUE_BDAY == type)
+ contacts_record_set_int(event, _contacts_event.type, CONTACTS_EVENT_TYPE_BIRTH);
+ else if (CTSVC_VCARD_VALUE_X_ANNIVERSARY == type)
+ contacts_record_set_int(event, _contacts_event.type, CONTACTS_EVENT_TYPE_ANNIVERSARY);
+ else if (CTSVC_VCARD_VALUE_X_TIZEN_EVENT == type) {
+ if (temp != cpy) {
+ *(temp-1) = '\0';
+ __ctsvc_vcard_get_event_type(event, cpy);
+ }
+ }
contacts_list_add((contacts_list_h)event_list, event);
+ free(cpy);
+ return CONTACTS_ERROR_NONE;
+}
+
+
+static inline void __ctsvc_vcard_get_company_type(contacts_record_h company, char *val)
+{
+ char *temp, *result, *last = NULL;
+ char *lower, *lower_temp;
+ int type = CONTACTS_COMPANY_TYPE_OTHER;
+
+ temp = strtok_r(val, ";", &last);
+ while (temp) {
+ lower = strdup(temp);
+ lower_temp = lower;
+ while (*lower_temp) {
+ *lower_temp = tolower(*lower_temp);
+ lower_temp++;
+ }
+ result = strstr(lower, "work");
+ if (result) type = CONTACTS_COMPANY_TYPE_WORK;
+ result = strstr(lower, "x-");
+ if (result) {
+ type = CONTACTS_COMPANY_TYPE_CUSTOM;
+ contacts_record_set_str(company, _contacts_company.label, temp+(result-lower)+2);
+ }
+ free(lower);
+ temp = strtok_r(NULL, ";", &last);
+ }
+ contacts_record_set_int(company, _contacts_company.type, type);
+}
+
+static inline int __ctsvc_vcard_get_company_value(ctsvc_list_s *company_list, int property_id, char *val)
+{
+ unsigned int count;
+ char *value;
+ contacts_record_h company;
+
+ contacts_list_get_count((contacts_list_h)company_list, &count);
+ RETVM_IF(count == 0, CONTACTS_ERROR_INVALID_PARAMETER, "list is empty");
+
+ contacts_list_last((contacts_list_h)company_list);
+ contacts_list_get_current_record_p((contacts_list_h)company_list, &company);
+ RETVM_IF(NULL == company, CONTACTS_ERROR_INVALID_PARAMETER, "contacts_list_get_current_record_p() return NULL");
+
+ value = __ctsvc_get_content_value(val);
+ RETV_IF(NULL == value, CONTACTS_ERROR_NO_DATA);
+
+ contacts_record_set_str(company, property_id, value);
return CONTACTS_ERROR_NONE;
}
-static inline int __ctsvc_vcard_get_company(ctsvc_list_s *company_list, unsigned int property_id, char *val)
+
+static inline int __ctsvc_vcard_get_company(ctsvc_list_s *company_list, char *val)
{
int ret;
- unsigned int count;
char *temp, *start;
contacts_record_h company;
- contacts_list_get_count((contacts_list_h)company_list, &count);
- if (count <= 0) {
- ret = contacts_record_create(_contacts_company._uri, &company);
- RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
- contacts_list_add((contacts_list_h)company_list, company);
- }
- else {
- contacts_list_get_current_record_p((contacts_list_h)company_list, &company);
- }
+ ret = contacts_record_create(_contacts_company._uri, &company);
+ RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+ contacts_list_add((contacts_list_h)company_list, company);
- if (property_id == _contacts_company.name) {
- start = __ctsvc_get_content_value(val);
- RETV_IF(NULL == start, CONTACTS_ERROR_NO_DATA);
+ start = __ctsvc_get_content_value(val);
+ RETV_IF(NULL == start, CONTACTS_ERROR_NO_DATA);
- temp = strchr(start, ';');
- if (temp) {
- *temp = '\0';
- contacts_record_set_str(company, property_id, start);
- contacts_record_set_str(company, _contacts_company.department, temp+1);
- }
- else
- contacts_record_set_str(company, property_id, start);
+ temp = strchr(start, ';');
+ if (NULL == temp) {
+ contacts_record_set_str(company, _contacts_company.name, start);
+ return CONTACTS_ERROR_NONE;
}
- else if (property_id == _contacts_company.job_title
- || property_id == _contacts_company.role) {
- contacts_record_set_str(company, property_id, val);
+
+ *temp = '\0';
+ contacts_record_set_str(company, _contacts_company.name, start);
+ contacts_record_set_str(company, _contacts_company.department, temp+1);
+
+ if (val != temp) {
+ *(temp-1) = '\0';
+ __ctsvc_vcard_get_company_type(company, val);
}
- else
- return CONTACTS_ERROR_INVALID_PARAMETER;
return CONTACTS_ERROR_NONE;
}
contacts_record_h company;
contacts_list_get_count((contacts_list_h)company_list, &count);
- if (count <= 0) {
- ret = contacts_record_create(_contacts_company._uri, &company);
- RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
- contacts_list_add((contacts_list_h)company_list, company);
- }
- else {
- contacts_list_get_current_record_p((contacts_list_h)company_list, &company);
- }
+ RETVM_IF(count == 0, CONTACTS_ERROR_INVALID_PARAMETER, "list is empty");
+
+ contacts_list_last((contacts_list_h)company_list);
+ contacts_list_get_current_record_p((contacts_list_h)company_list, &company);
+ RETVM_IF(NULL == company, CONTACTS_ERROR_INVALID_PARAMETER, "contacts_list_get_current_record_p() return NULL");
temp = strchr(val , ':');
RETVM_IF(NULL == temp, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : val is invalid(%s)", val);
static inline int __ctsvc_vcard_get_note(ctsvc_list_s *note_list, char *val)
{
int ret;
- unsigned int count;
char *temp;
contacts_record_h note;
- contacts_list_get_count((contacts_list_h)note_list, &count);
- if (count <= 0) {
- ret = contacts_record_create(_contacts_note._uri, ¬e);
- RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
- contacts_list_add((contacts_list_h)note_list, note);
- }
- else {
- contacts_list_get_current_record_p((contacts_list_h)note_list, ¬e);
- }
+ ret = contacts_record_create(_contacts_note._uri, ¬e);
+ RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+ contacts_list_add((contacts_list_h)note_list, note);
temp = __ctsvc_get_content_value(val);
RETV_IF(NULL == temp, CONTACTS_ERROR_NO_DATA);
+
contacts_record_set_str(note, _contacts_note.note, g_strcompress(temp));
return CONTACTS_ERROR_NONE;
return (int)mktime(&ts);
}
+static inline void __ctsvc_vcard_get_url_type(contacts_record_h url, char *val)
+{
+ char *temp, *result, *last = NULL;
+ char *lower, *lower_temp;
+ int type = CONTACTS_URL_TYPE_OTHER;
+
+ temp = strtok_r(val, ";", &last);
+ while (temp) {
+ lower = strdup(temp);
+ lower_temp = lower;
+ while (*lower_temp) {
+ *lower_temp = tolower(*lower_temp);
+ lower_temp++;
+ }
+ result = strstr(lower, "home");
+ if (result) type = CONTACTS_URL_TYPE_HOME;
+ result = strstr(lower, "work");
+ if (result) type = CONTACTS_URL_TYPE_WORK;
+ result = strstr(lower, "x-");
+ if (result) {
+ type = CONTACTS_URL_TYPE_CUSTOM;
+ contacts_record_set_str(url, _contacts_url.label, temp+(result-lower)+2);
+ }
+
+ free(lower);
+ temp = strtok_r(NULL, ";", &last);
+ }
+ contacts_record_set_int(url, _contacts_url.type, type);
+}
static inline int __ctsvc_vcard_get_url(ctsvc_list_s* url_list, char *val)
{
contacts_record_set_str(url, _contacts_url.url, temp);
if (val != temp) {
*(temp-1) = '\0';
- temp = val;
- while (*temp) {
- *temp = tolower(*temp);
- temp++;
- }
-
- temp = strchr(val, ';');
- if (temp) {
- if (strstr(val, "home"))
- contacts_record_set_int(url, _contacts_url.type, CONTACTS_URL_TYPE_HOME);
- else if (strstr(val, "work"))
- contacts_record_set_int(url, _contacts_url.type, CONTACTS_URL_TYPE_WORK);
- }
+ __ctsvc_vcard_get_url_type(url, val);
}
contacts_list_add((contacts_list_h)url_list, url);
*lower_temp = tolower(*lower_temp);
lower_temp++;
}
- result = strstr(lower, "home");
- if (result) type = CONTACTS_EMAIL_TYPE_HOME;
- result = strstr(lower, "work");
- if (result) type = CONTACTS_EMAIL_TYPE_WORK;
- result = strstr(lower, "pref");
- if (result) pref = true;
- result = strstr(lower, "x-");
- if (result) {
+ if (strstr(lower, "pref"))
+ pref = true;
+ if (strstr(lower, "home"))
+ type = CONTACTS_EMAIL_TYPE_HOME;
+ else if (strstr(lower, "work"))
+ type = CONTACTS_EMAIL_TYPE_WORK;
+ else if (strstr(lower, "cell"))
+ type = CONTACTS_EMAIL_TYPE_MOBILE;
+ else if (NULL != (result = strstr(lower, "x-"))) {
type = CONTACTS_EMAIL_TYPE_CUSTOM;
contacts_record_set_str(email, _contacts_email.label, temp+(result-lower)+2);
}
return CONTACTS_ERROR_NONE;
}
+static inline void __ctsvc_vcard_get_messenger_type(contacts_record_h messenger, char *val)
+{
+ char *temp, *result, *last = NULL;
+ char *lower, *lower_temp;
+ int type = CONTACTS_MESSENGER_TYPE_OTHER;
+
+ temp = strtok_r(val, ";", &last);
+ while (temp) {
+ lower = strdup(temp);
+ lower_temp = lower;
+ while (*lower_temp) {
+ *lower_temp = tolower(*lower_temp);
+ lower_temp++;
+ }
+ result = strstr(lower, "facebook");
+ if (result) type = CONTACTS_MESSENGER_TYPE_FACEBOOK;
+ result = strstr(lower, "irc");
+ if (result) type = CONTACTS_MESSENGER_TYPE_IRC;
+ result = strstr(lower, "x-");
+ if (result) {
+ type = CONTACTS_MESSENGER_TYPE_CUSTOM;
+ contacts_record_set_str(messenger, _contacts_messenger.label, temp+(result-lower)+2);
+ }
+ free(lower);
+ temp = strtok_r(NULL, ";", &last);
+ }
+ contacts_record_set_int(messenger, _contacts_messenger.type, type);
+}
+
static inline int __ctsvc_vcard_get_messenger(ctsvc_list_s* messenger_list, int type, char *val)
{
int ret;
case CTSVC_VCARD_VALUE_X_JABBER:
contacts_record_set_int(messenger, _contacts_messenger.type, CONTACTS_MESSENGER_TYPE_JABBER);
break;
+ case CTSVC_VCARD_VALUE_X_SKYPE_USERNAME:
case CTSVC_VCARD_VALUE_X_SKYPE:
contacts_record_set_int(messenger, _contacts_messenger.type, CONTACTS_MESSENGER_TYPE_SKYPE);
break;
case CTSVC_VCARD_VALUE_X_GOOGLE_TALK:
contacts_record_set_int(messenger, _contacts_messenger.type, CONTACTS_MESSENGER_TYPE_GOOGLE);
break;
+ case CTSVC_VCARD_VALUE_X_TIZEN_MESSENGER:
+ if (val != temp) {
+ *(temp-1) = '\0';
+ __ctsvc_vcard_get_messenger_type(messenger, val);
+ }
+ break;
}
contacts_list_add((contacts_list_h)messenger_list, messenger);
return CONTACTS_ERROR_NONE;
}
+static inline void __ctsvc_vcard_get_relationship_type(contacts_record_h relationship, char *val)
+{
+ char *temp, *result, *last = NULL;
+ char *lower, *lower_temp;
+ int type = CONTACTS_RELATIONSHIP_TYPE_OTHER;
+
+ temp = strtok_r(val, ";", &last);
+ while (temp) {
+ lower = strdup(temp);
+ lower_temp = lower;
+ while (*lower_temp) {
+ *lower_temp = tolower(*lower_temp);
+ lower_temp++;
+ }
+ if (strstr(lower, "assistant"))
+ type = CONTACTS_RELATIONSHIP_TYPE_ASSISTANT;
+ else if (strstr(lower, "brother"))
+ type = CONTACTS_RELATIONSHIP_TYPE_BROTHER;
+ else if (strstr(lower, "child"))
+ type = CONTACTS_RELATIONSHIP_TYPE_CHILD;
+ else if (strstr(lower, "domestic_partner"))
+ type = CONTACTS_RELATIONSHIP_TYPE_DOMESTIC_PARTNER;
+ else if (strstr(lower, "father"))
+ type = CONTACTS_RELATIONSHIP_TYPE_FATHER;
+ else if (strstr(lower, "friend"))
+ type = CONTACTS_RELATIONSHIP_TYPE_FRIEND;
+ else if (strstr(lower, "manager"))
+ type = CONTACTS_RELATIONSHIP_TYPE_MANAGER;
+ else if (strstr(lower, "mother"))
+ type = CONTACTS_RELATIONSHIP_TYPE_MOTHER;
+ else if (strstr(lower, "parent"))
+ type = CONTACTS_RELATIONSHIP_TYPE_PARENT;
+ else if (strstr(lower, "partner"))
+ type = CONTACTS_RELATIONSHIP_TYPE_PARTNER;
+ else if (strstr(lower, "referred_by"))
+ type = CONTACTS_RELATIONSHIP_TYPE_REFERRED_BY;
+ else if (strstr(lower, "relative"))
+ type = CONTACTS_RELATIONSHIP_TYPE_RELATIVE;
+ else if (strstr(lower, "sister"))
+ type = CONTACTS_RELATIONSHIP_TYPE_SISTER;
+ else if (strstr(lower, "spouse"))
+ type = CONTACTS_RELATIONSHIP_TYPE_SPOUSE;
+ else if (NULL != (result = strstr(lower, "x-"))) {
+ type = CONTACTS_RELATIONSHIP_TYPE_CUSTOM;
+ contacts_record_set_str(relationship, _contacts_relationship.label, temp+(result-lower)+2);
+ }
+ free(lower);
+ temp = strtok_r(NULL, ";", &last);
+ }
+ contacts_record_set_int(relationship, _contacts_relationship.type, type);
+}
+
+
+static inline int __ctsvc_vcard_get_relationship(ctsvc_list_s* relationship_list, int type, char *val)
+{
+ int ret;
+ char *temp;
+ contacts_record_h relationship;
+
+ temp = __ctsvc_get_content_value(val);
+ RETVM_IF(NULL == temp, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : vcard(%s)", val);
+
+ ret = contacts_record_create(_contacts_relationship._uri, &relationship);
+ RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "contacts_record_create is failed(%d)", ret);
+
+ contacts_record_set_str(relationship, _contacts_relationship.name, temp);
+ if (val != temp) {
+ *(temp-1) = '\0';
+ __ctsvc_vcard_get_relationship_type(relationship, val);
+ }
+ contacts_list_add((contacts_list_h)relationship_list, relationship);
+
+ return CONTACTS_ERROR_NONE;
+
+}
+
static inline int __ctsvc_vcard_get_contact(int ver, char *vcard, contacts_record_h *record)
{
int type;
free(val);
break;
case CTSVC_VCARD_VALUE_PHONETIC_FIRST_NAME:
+ case CTSVC_VCARD_VALUE_PHONETIC_MIDDLE_NAME:
case CTSVC_VCARD_VALUE_PHONETIC_LAST_NAME:
__ctsvc_vcard_get_phonetic_name(contact->name, type, val);
free(val);
free(val);
break;
case CTSVC_VCARD_VALUE_BDAY:
- __ctsvc_vcard_get_event(contact->events, CONTACTS_EVENT_TYPE_BIRTH, val);
+ case CTSVC_VCARD_VALUE_X_ANNIVERSARY:
+ case CTSVC_VCARD_VALUE_X_TIZEN_EVENT:
+ __ctsvc_vcard_get_event(contact->events, type, val);
free(val);
break;
case CTSVC_VCARD_VALUE_ADR:
free(val);
break;
case CTSVC_VCARD_VALUE_TITLE:
- __ctsvc_vcard_get_company(contact->company, _contacts_company.job_title, val);
+ __ctsvc_vcard_get_company_value(contact->company, _contacts_company.job_title, val);
free(val);
break;
case CTSVC_VCARD_VALUE_ROLE:
- __ctsvc_vcard_get_company(contact->company, _contacts_company.role, val);
+ __ctsvc_vcard_get_company_value(contact->company, _contacts_company.role, val);
+ free(val);
+ break;
+ case CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_LOCATION:
+ __ctsvc_vcard_get_company_value(contact->company, _contacts_company.location, val);
+ free(val);
+ break;
+ case CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_DESCRIPTION:
+ __ctsvc_vcard_get_company_value(contact->company, _contacts_company.description, val);
+ free(val);
+ break;
+ case CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_PHONETIC_NAME:
+ __ctsvc_vcard_get_company_value(contact->company, _contacts_company.phonetic_name, val);
+ free(val);
+ break;
+ case CTSVC_VCARD_VALUE_X_TIZEN_COMPANY_ASSISTANT_NAME:
+ __ctsvc_vcard_get_company_value(contact->company, _contacts_company.assistant_name, val);
free(val);
break;
case CTSVC_VCARD_VALUE_LOGO:
free(val);
break;
case CTSVC_VCARD_VALUE_ORG:
- __ctsvc_vcard_get_company(contact->company, _contacts_company.name, val);
+ __ctsvc_vcard_get_company(contact->company, val);
free(val);
break;
case CTSVC_VCARD_VALUE_NOTE:
__ctsvc_vcard_get_url(contact->urls, val);
free(val);
break;
- case CTSVC_VCARD_VALUE_X_ANNIVERSARY:
- __ctsvc_vcard_get_event(contact->events, CONTACTS_EVENT_TYPE_ANNIVERSARY, val);
- free(val);
- break;
case CTSVC_VCARD_VALUE_X_MSN:
case CTSVC_VCARD_VALUE_X_YAHOO:
case CTSVC_VCARD_VALUE_X_ICQ:
case CTSVC_VCARD_VALUE_X_AIM:
case CTSVC_VCARD_VALUE_X_JABBER:
+ case CTSVC_VCARD_VALUE_X_SKYPE_USERNAME:
case CTSVC_VCARD_VALUE_X_SKYPE:
case CTSVC_VCARD_VALUE_X_QQ:
case CTSVC_VCARD_VALUE_X_GOOGLE_TALK:
+ case CTSVC_VCARD_VALUE_X_TIZEN_MESSENGER:
__ctsvc_vcard_get_messenger(contact->messengers, type, val);
free(val);
break;
+
+ case CTSVC_VCARD_VALUE_X_TIZEN_RELATIONSHIP:
+ __ctsvc_vcard_get_relationship(contact->relationships, type, val);
+ free(val);
+ break;
case CTSVC_VCARD_VALUE_END:
free(val);
return CONTACTS_ERROR_NONE;
.address_book_id = CTSVC_PROPERTY_UPDATE_INFO_ADDRESSBOOK_ID,
.type = CTSVC_PROPERTY_UPDATE_INFO_TYPE,
.version = CTSVC_PROPERTY_UPDATE_INFO_VERSION,
+ .image_changed = CTSVC_PROPERTY_UPDATE_INFO_IMAGE_CHANGED,
+};
+
+API const _contacts_my_profile_updated_info_property_ids _contacts_my_profile_updated_info = {
+ ._uri = CTSVC_VIEW_URI_MY_PROFILE_UPDATED_INFO,
+ .address_book_id = CTSVC_PROPERTY_UPDATE_INFO_ADDRESSBOOK_ID,
+ .last_changed_type = CTSVC_PROPERTY_UPDATE_INFO_LAST_CHANGED_TYPE,
+ .version = CTSVC_PROPERTY_UPDATE_INFO_VERSION,
};
API const _contacts_group_updated_info_property_ids _contacts_group_updated_info = {
.ringtone_path = CTSVC_PROPERTY_CONTACT_RINGTONE,
.image_thumbnail_path = CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL,
.group_id = CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID,
- .group_name = CTSVC_PROPERTY_GROUP_RELATION_GROUP_NAME
+ .group_name = CTSVC_PROPERTY_GROUP_RELATION_GROUP_NAME
};
API const _contacts_contact_activity_property_ids _contacts_contact_activity = {
};
const property_info_s __property_addressbook[] = {
- {CTSVC_PROPERTY_ADDRESSBOOK_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
- {CTSVC_PROPERTY_ADDRESSBOOK_ACCOUNT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "account_id"},
- {CTSVC_PROPERTY_ADDRESSBOOK_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_name"},
- {CTSVC_PROPERTY_ADDRESSBOOK_MODE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "mode"},
+ {CTSVC_PROPERTY_ADDRESSBOOK_ID, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
+ {CTSVC_PROPERTY_ADDRESSBOOK_ACCOUNT_ID, CTSVC_SEARCH_PROPERTY_ALL, "account_id"},
+ {CTSVC_PROPERTY_ADDRESSBOOK_NAME, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_name"},
+ {CTSVC_PROPERTY_ADDRESSBOOK_MODE, CTSVC_SEARCH_PROPERTY_ALL, "mode"},
};
const property_info_s __property_snd[] = {
- {CTSVC_PROPERTY_SDN_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_SDN_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "name"},
- {CTSVC_PROPERTY_SDN_NUMBER, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "number"},
+ {CTSVC_PROPERTY_SDN_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_SDN_NAME, CTSVC_SEARCH_PROPERTY_ALL, "name"},
+ {CTSVC_PROPERTY_SDN_NUMBER, CTSVC_SEARCH_PROPERTY_ALL, "number"},
};
const property_info_s __property_group[] = {
- {CTSVC_PROPERTY_GROUP_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "group_id"},
- {CTSVC_PROPERTY_GROUP_ADDRESSBOOK_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
- {CTSVC_PROPERTY_GROUP_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "group_name"},
- {CTSVC_PROPERTY_GROUP_RINGTONE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "ringtone_path"},
- {CTSVC_PROPERTY_GROUP_IMAGE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "image_thumbnail_path"},
- {CTSVC_PROPERTY_GROUP_VIBRATION, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "vibration"},
- {CTSVC_PROPERTY_GROUP_SYSTEM_ID, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "system_id"},
- {CTSVC_PROPERTY_GROUP_IS_READ_ONLY, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "is_read_only"},
+ {CTSVC_PROPERTY_GROUP_ID, CTSVC_SEARCH_PROPERTY_ALL, "group_id"},
+ {CTSVC_PROPERTY_GROUP_ADDRESSBOOK_ID, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
+ {CTSVC_PROPERTY_GROUP_NAME, CTSVC_SEARCH_PROPERTY_ALL, "group_name"},
+ {CTSVC_PROPERTY_GROUP_RINGTONE, CTSVC_SEARCH_PROPERTY_ALL, "ringtone_path"},
+ {CTSVC_PROPERTY_GROUP_IMAGE, CTSVC_SEARCH_PROPERTY_ALL, "image_thumbnail_path"},
+ {CTSVC_PROPERTY_GROUP_VIBRATION, CTSVC_SEARCH_PROPERTY_ALL, "vibration"},
+ {CTSVC_PROPERTY_GROUP_SYSTEM_ID, CTSVC_SEARCH_PROPERTY_ALL, "system_id"},
+ {CTSVC_PROPERTY_GROUP_IS_READ_ONLY, CTSVC_SEARCH_PROPERTY_ALL, "is_read_only"},
};
const property_info_s __property_person[] = {
- {CTSVC_PROPERTY_PERSON_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
- {CTSVC_PROPERTY_PERSON_DISPLAY_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "name_contact_id"},
- {CTSVC_PROPERTY_PERSON_RINGTONE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "ringtone_path"},
- {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "image_thumbnail_path"},
- {CTSVC_PROPERTY_PERSON_VIBRATION, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "vibration"},
- {CTSVC_PROPERTY_PERSON_STATUS, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "status"},
- {CTSVC_PROPERTY_PERSON_IS_FAVORITE, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "is_favorite"},
- {CTSVC_PROPERTY_PERSON_FAVORITE_PRIORITY, CTSVC_VIEW_DATA_TYPE_DOUBLE,CTSVC_SEARCH_PROPERTY_FILTER, "favorite_prio"},
- {CTSVC_PROPERTY_PERSON_LINK_COUNT, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "link_count"},
- {CTSVC_PROPERTY_PERSON_ACCOUNT_ID1, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "account_id1"},
- {CTSVC_PROPERTY_PERSON_ACCOUNT_ID2, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "account_id2"},
- {CTSVC_PROPERTY_PERSON_ACCOUNT_ID3, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "account_id3"},
- {CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "addressbook_ids"},
- {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
- {CTSVC_PROPERTY_PERSON_HAS_EMAIL, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
+ {CTSVC_PROPERTY_PERSON_ID, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
+ {CTSVC_PROPERTY_PERSON_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX, CTSVC_SEARCH_PROPERTY_PROJECTION, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID,CTSVC_SEARCH_PROPERTY_ALL, "name_contact_id"},
+ {CTSVC_PROPERTY_PERSON_RINGTONE, CTSVC_SEARCH_PROPERTY_ALL, "ringtone_path"},
+ {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL, CTSVC_SEARCH_PROPERTY_ALL, "image_thumbnail_path"},
+ {CTSVC_PROPERTY_PERSON_VIBRATION, CTSVC_SEARCH_PROPERTY_ALL, "vibration"},
+ {CTSVC_PROPERTY_PERSON_STATUS, CTSVC_SEARCH_PROPERTY_ALL, "status"},
+ {CTSVC_PROPERTY_PERSON_IS_FAVORITE, CTSVC_SEARCH_PROPERTY_ALL, "is_favorite"},
+ {CTSVC_PROPERTY_PERSON_FAVORITE_PRIORITY, CTSVC_SEARCH_PROPERTY_FILTER, "favorite_prio"},
+ {CTSVC_PROPERTY_PERSON_LINK_COUNT, CTSVC_SEARCH_PROPERTY_ALL, "link_count"},
+ {CTSVC_PROPERTY_PERSON_ACCOUNT_ID1, CTSVC_SEARCH_PROPERTY_ALL, "account_id1"},
+ {CTSVC_PROPERTY_PERSON_ACCOUNT_ID2, CTSVC_SEARCH_PROPERTY_ALL, "account_id2"},
+ {CTSVC_PROPERTY_PERSON_ACCOUNT_ID3, CTSVC_SEARCH_PROPERTY_ALL, "account_id3"},
+ {CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS, CTSVC_SEARCH_PROPERTY_PROJECTION, "addressbook_ids"},
+ {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
+ {CTSVC_PROPERTY_PERSON_HAS_EMAIL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
};
const property_info_s __property_simple_contact[] = {
- {CTSVC_PROPERTY_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "display_name_source"},
- {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
- {CTSVC_PROPERTY_CONTACT_RINGTONE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "ringtone_path"},
- {CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL,CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "image_thumbnail_path"},
- {CTSVC_PROPERTY_CONTACT_IS_FAVORITE, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "is_favorite"},
- {CTSVC_PROPERTY_CONTACT_HAS_PHONENUMBER,CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
- {CTSVC_PROPERTY_CONTACT_HAS_EMAIL, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
- {CTSVC_PROPERTY_CONTACT_PERSON_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
- {CTSVC_PROPERTY_CONTACT_UID, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "uid"},
- {CTSVC_PROPERTY_CONTACT_VIBRATION, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "vibration"},
- {CTSVC_PROPERTY_CONTACT_CHANGED_TIME, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "changed_time"},
+ {CTSVC_PROPERTY_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID, CTSVC_SEARCH_PROPERTY_ALL, "display_name_source"},
+ {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
+ {CTSVC_PROPERTY_CONTACT_RINGTONE, CTSVC_SEARCH_PROPERTY_ALL, "ringtone_path"},
+ {CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL,CTSVC_SEARCH_PROPERTY_ALL, "image_thumbnail_path"},
+ {CTSVC_PROPERTY_CONTACT_IS_FAVORITE, CTSVC_SEARCH_PROPERTY_ALL, "is_favorite"},
+ {CTSVC_PROPERTY_CONTACT_HAS_PHONENUMBER, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
+ {CTSVC_PROPERTY_CONTACT_HAS_EMAIL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
+ {CTSVC_PROPERTY_CONTACT_PERSON_ID, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
+ {CTSVC_PROPERTY_CONTACT_UID, CTSVC_SEARCH_PROPERTY_ALL, "uid"},
+ {CTSVC_PROPERTY_CONTACT_VIBRATION, CTSVC_SEARCH_PROPERTY_ALL, "vibration"},
+ {CTSVC_PROPERTY_CONTACT_CHANGED_TIME, CTSVC_SEARCH_PROPERTY_ALL, "changed_time"},
};
const property_info_s __property_name[] = {
- {CTSVC_PROPERTY_NAME_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_NAME_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_NAME_FIRST, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "first"},
- {CTSVC_PROPERTY_NAME_LAST, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "last"},
- {CTSVC_PROPERTY_NAME_ADDITION, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "addition"},
- {CTSVC_PROPERTY_NAME_PREFIX, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "prefix"},
- {CTSVC_PROPERTY_NAME_SUFFIX, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "suffix"},
- {CTSVC_PROPERTY_NAME_PHONETIC_FIRST, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "phonetic_first"},
- {CTSVC_PROPERTY_NAME_PHONETIC_MIDDLE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "phonetic_middle"},
- {CTSVC_PROPERTY_NAME_PHONETIC_LAST, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "phonetic_last"},
+ {CTSVC_PROPERTY_NAME_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_NAME_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_NAME_FIRST, CTSVC_SEARCH_PROPERTY_ALL, "data2"},
+ {CTSVC_PROPERTY_NAME_LAST, CTSVC_SEARCH_PROPERTY_ALL, "data3"},
+ {CTSVC_PROPERTY_NAME_ADDITION, CTSVC_SEARCH_PROPERTY_ALL, "data4"},
+ {CTSVC_PROPERTY_NAME_PREFIX, CTSVC_SEARCH_PROPERTY_ALL, "data5"},
+ {CTSVC_PROPERTY_NAME_SUFFIX, CTSVC_SEARCH_PROPERTY_ALL, "data6"},
+ {CTSVC_PROPERTY_NAME_PHONETIC_FIRST, CTSVC_SEARCH_PROPERTY_ALL, "data7"},
+ {CTSVC_PROPERTY_NAME_PHONETIC_MIDDLE, CTSVC_SEARCH_PROPERTY_ALL, "data8"},
+ {CTSVC_PROPERTY_NAME_PHONETIC_LAST, CTSVC_SEARCH_PROPERTY_ALL, "data9"},
};
const property_info_s __property_number[] = {
- {CTSVC_PROPERTY_NUMBER_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_NUMBER_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_NUMBER_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "type"},
- {CTSVC_PROPERTY_NUMBER_LABEL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "label"},
- {CTSVC_PROPERTY_NUMBER_IS_DEFAULT, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "is_default"},
- {CTSVC_PROPERTY_NUMBER_NUMBER, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "number"},
+ {CTSVC_PROPERTY_NUMBER_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_NUMBER_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_NUMBER_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "data1"},
+ {CTSVC_PROPERTY_NUMBER_LABEL, CTSVC_SEARCH_PROPERTY_ALL, "data2"},
+ {CTSVC_PROPERTY_NUMBER_IS_DEFAULT, CTSVC_SEARCH_PROPERTY_ALL, "is_default"},
+ {CTSVC_PROPERTY_NUMBER_NUMBER, CTSVC_SEARCH_PROPERTY_ALL, "data3"},
};
const property_info_s __property_email[] = {
- {CTSVC_PROPERTY_EMAIL_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_EMAIL_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_EMAIL_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "type"},
- {CTSVC_PROPERTY_EMAIL_LABEL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "label"},
- {CTSVC_PROPERTY_EMAIL_IS_DEFAULT, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "is_default"},
- {CTSVC_PROPERTY_EMAIL_EMAIL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "email"},
+ {CTSVC_PROPERTY_EMAIL_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_EMAIL_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_EMAIL_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "data1"},
+ {CTSVC_PROPERTY_EMAIL_LABEL, CTSVC_SEARCH_PROPERTY_ALL, "data2"},
+ {CTSVC_PROPERTY_EMAIL_IS_DEFAULT, CTSVC_SEARCH_PROPERTY_ALL, "is_default"},
+ {CTSVC_PROPERTY_EMAIL_EMAIL, CTSVC_SEARCH_PROPERTY_ALL, "data3"},
};
const property_info_s __property_address[] = {
- {CTSVC_PROPERTY_ADDRESS_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_ADDRESS_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_ADDRESS_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "type"},
- {CTSVC_PROPERTY_ADDRESS_LABEL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "label"},
- {CTSVC_PROPERTY_ADDRESS_POSTBOX, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "postbox"},
- {CTSVC_PROPERTY_ADDRESS_POSTAL_CODE,CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "postal_code"},
- {CTSVC_PROPERTY_ADDRESS_REGION, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "region"},
- {CTSVC_PROPERTY_ADDRESS_LOCALITY, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "locality"},
- {CTSVC_PROPERTY_ADDRESS_STREET, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "street"},
- {CTSVC_PROPERTY_ADDRESS_COUNTRY, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "country"},
- {CTSVC_PROPERTY_ADDRESS_EXTENDED, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "extend"},
- {CTSVC_PROPERTY_ADDRESS_IS_DEFAULT, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "is_default"},
+ {CTSVC_PROPERTY_ADDRESS_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_ADDRESS_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_ADDRESS_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "data1"},
+ {CTSVC_PROPERTY_ADDRESS_LABEL, CTSVC_SEARCH_PROPERTY_ALL, "data2"},
+ {CTSVC_PROPERTY_ADDRESS_POSTBOX, CTSVC_SEARCH_PROPERTY_ALL, "data3"},
+ {CTSVC_PROPERTY_ADDRESS_POSTAL_CODE,CTSVC_SEARCH_PROPERTY_ALL, "data4"},
+ {CTSVC_PROPERTY_ADDRESS_REGION, CTSVC_SEARCH_PROPERTY_ALL, "data5"},
+ {CTSVC_PROPERTY_ADDRESS_LOCALITY, CTSVC_SEARCH_PROPERTY_ALL, "data6"},
+ {CTSVC_PROPERTY_ADDRESS_STREET, CTSVC_SEARCH_PROPERTY_ALL, "data7"},
+ {CTSVC_PROPERTY_ADDRESS_COUNTRY, CTSVC_SEARCH_PROPERTY_ALL, "data9"},
+ {CTSVC_PROPERTY_ADDRESS_EXTENDED, CTSVC_SEARCH_PROPERTY_ALL, "data8"},
+ {CTSVC_PROPERTY_ADDRESS_IS_DEFAULT, CTSVC_SEARCH_PROPERTY_ALL, "is_default"},
};
const property_info_s __property_url[] = {
- {CTSVC_PROPERTY_URL_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_URL_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_URL_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "type"},
- {CTSVC_PROPERTY_URL_LABEL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "label"},
- {CTSVC_PROPERTY_URL_URL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "url"},
+ {CTSVC_PROPERTY_URL_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_URL_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_URL_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "data1"},
+ {CTSVC_PROPERTY_URL_LABEL, CTSVC_SEARCH_PROPERTY_ALL, "data2"},
+ {CTSVC_PROPERTY_URL_URL, CTSVC_SEARCH_PROPERTY_ALL, "data3"},
};
const property_info_s __property_event[] = {
- {CTSVC_PROPERTY_EVENT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_EVENT_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_EVENT_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "type"},
- {CTSVC_PROPERTY_EVENT_LABEL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "label"},
- {CTSVC_PROPERTY_EVENT_DATE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "date"},
- {CTSVC_PROPERTY_EVENT_IS_LUNAR, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "is_lunar"},
- {CTSVC_PROPERTY_EVENT_LUNAR_DATE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "lunar_date"},
+ {CTSVC_PROPERTY_EVENT_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_EVENT_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_EVENT_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "data1"},
+ {CTSVC_PROPERTY_EVENT_LABEL, CTSVC_SEARCH_PROPERTY_ALL, "data2"},
+ {CTSVC_PROPERTY_EVENT_DATE, CTSVC_SEARCH_PROPERTY_ALL, "data3"},
+ {CTSVC_PROPERTY_EVENT_IS_LUNAR, CTSVC_SEARCH_PROPERTY_ALL, "data4"},
+ {CTSVC_PROPERTY_EVENT_LUNAR_DATE, CTSVC_SEARCH_PROPERTY_ALL, "data5"},
};
const property_info_s __property_group_relation[] = {
-// {CTSVC_PROPERTY_GROUP_RELATION_ID, CTSVC_VIEW_DATA_TYPE_INT, "id"},
- {CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "group_id"},
- {CTSVC_PROPERTY_GROUP_RELATION_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_GROUP_RELATION_GROUP_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "group_name"},
+ {CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID, CTSVC_SEARCH_PROPERTY_ALL, "group_id"},
+ {CTSVC_PROPERTY_GROUP_RELATION_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_GROUP_RELATION_GROUP_NAME,CTSVC_SEARCH_PROPERTY_ALL, "group_name"},
};
const property_info_s __property_relationship[] = {
- {CTSVC_PROPERTY_RELATIONSHIP_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_RELATIONSHIP_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_RELATIONSHIP_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "type"},
- {CTSVC_PROPERTY_RELATIONSHIP_LABEL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "label"},
- {CTSVC_PROPERTY_RELATIONSHIP_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "name"},
+ {CTSVC_PROPERTY_RELATIONSHIP_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_RELATIONSHIP_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_RELATIONSHIP_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "data1"},
+ {CTSVC_PROPERTY_RELATIONSHIP_LABEL, CTSVC_SEARCH_PROPERTY_ALL, "data2"},
+ {CTSVC_PROPERTY_RELATIONSHIP_NAME, CTSVC_SEARCH_PROPERTY_ALL, "data3"},
};
const property_info_s __property_image[] = {
- {CTSVC_PROPERTY_IMAGE_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_IMAGE_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_IMAGE_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "type"},
- {CTSVC_PROPERTY_IMAGE_LABEL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "label"},
- {CTSVC_PROPERTY_IMAGE_PATH, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "path"},
- {CTSVC_PROPERTY_IMAGE_IS_DEFAULT, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "is_default"},
+ {CTSVC_PROPERTY_IMAGE_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_IMAGE_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_IMAGE_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "data1"},
+ {CTSVC_PROPERTY_IMAGE_LABEL, CTSVC_SEARCH_PROPERTY_ALL, "data2"},
+ {CTSVC_PROPERTY_IMAGE_PATH, CTSVC_SEARCH_PROPERTY_ALL, "data3"},
+ {CTSVC_PROPERTY_IMAGE_IS_DEFAULT, CTSVC_SEARCH_PROPERTY_ALL, "is_default"},
};
const property_info_s __property_company[] = {
- {CTSVC_PROPERTY_COMPANY_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_COMPANY_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_COMPANY_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "type"},
- {CTSVC_PROPERTY_COMPANY_LABEL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "label"},
- {CTSVC_PROPERTY_COMPANY_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "name"},
- {CTSVC_PROPERTY_COMPANY_DEPARTMENT, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "department"},
- {CTSVC_PROPERTY_COMPANY_JOB_TITLE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "job_title"},
- {CTSVC_PROPERTY_COMPANY_ASSISTANT_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "assistant"},
- {CTSVC_PROPERTY_COMPANY_ROLE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "role"},
- {CTSVC_PROPERTY_COMPANY_LOGO, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "logo"},
- {CTSVC_PROPERTY_COMPANY_LOCATION, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "location"},
- {CTSVC_PROPERTY_COMPANY_DESCRIPTION, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "description"},
- {CTSVC_PROPERTY_COMPANY_PHONETIC_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "phonetic_name"},
+ {CTSVC_PROPERTY_COMPANY_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_COMPANY_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_COMPANY_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "data1"},
+ {CTSVC_PROPERTY_COMPANY_LABEL, CTSVC_SEARCH_PROPERTY_ALL, "data2"},
+ {CTSVC_PROPERTY_COMPANY_NAME, CTSVC_SEARCH_PROPERTY_ALL, "data3"},
+ {CTSVC_PROPERTY_COMPANY_DEPARTMENT, CTSVC_SEARCH_PROPERTY_ALL, "data4"},
+ {CTSVC_PROPERTY_COMPANY_JOB_TITLE, CTSVC_SEARCH_PROPERTY_ALL, "data5"},
+ {CTSVC_PROPERTY_COMPANY_ASSISTANT_NAME,CTSVC_SEARCH_PROPERTY_ALL, "data6"},
+ {CTSVC_PROPERTY_COMPANY_ROLE, CTSVC_SEARCH_PROPERTY_ALL, "data7"},
+ {CTSVC_PROPERTY_COMPANY_LOGO, CTSVC_SEARCH_PROPERTY_ALL, "data8"},
+ {CTSVC_PROPERTY_COMPANY_LOCATION, CTSVC_SEARCH_PROPERTY_ALL, "data9"},
+ {CTSVC_PROPERTY_COMPANY_DESCRIPTION, CTSVC_SEARCH_PROPERTY_ALL, "data10"},
+ {CTSVC_PROPERTY_COMPANY_PHONETIC_NAME, CTSVC_SEARCH_PROPERTY_ALL, "data11"},
};
const property_info_s __property_nickname[] = {
- {CTSVC_PROPERTY_NICKNAME_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id",},
- {CTSVC_PROPERTY_NICKNAME_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_NICKNAME_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "nickname"},
+ {CTSVC_PROPERTY_NICKNAME_ID, CTSVC_SEARCH_PROPERTY_ALL, "id",},
+ {CTSVC_PROPERTY_NICKNAME_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_NICKNAME_NAME, CTSVC_SEARCH_PROPERTY_ALL, "data3"},
};
const property_info_s __property_messenger[] = {
- {CTSVC_PROPERTY_MESSENGER_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_MESSENGER_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_MESSENGER_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "type"},
- {CTSVC_PROPERTY_MESSENGER_LABEL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "label"},
- {CTSVC_PROPERTY_MESSENGER_IM_ID, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "im_id"},
+ {CTSVC_PROPERTY_MESSENGER_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_MESSENGER_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_MESSENGER_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "data1"},
+ {CTSVC_PROPERTY_MESSENGER_LABEL, CTSVC_SEARCH_PROPERTY_ALL, "data2"},
+ {CTSVC_PROPERTY_MESSENGER_IM_ID, CTSVC_SEARCH_PROPERTY_ALL, "data3"},
};
const property_info_s __property_note[] = {
- {CTSVC_PROPERTY_NOTE_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_NOTE_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_NOTE_NOTE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "note"},
+ {CTSVC_PROPERTY_NOTE_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_NOTE_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_NOTE_NOTE, CTSVC_SEARCH_PROPERTY_ALL, "data3"},
};
const property_info_s __property_profile[] = {
- {CTSVC_PROPERTY_PROFILE_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_PROFILE_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_PROFILE_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "type"},
- {CTSVC_PROPERTY_PROFILE_LABEL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "label"},
- {CTSVC_PROPERTY_PROFILE_UID, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "uid"},
- {CTSVC_PROPERTY_PROFILE_TEXT, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "text"},
- {CTSVC_PROPERTY_PROFILE_ORDER, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "profile_order"},
- {CTSVC_PROPERTY_PROFILE_APPSVC_OPERATION, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "appsvc_op"},
- {CTSVC_PROPERTY_PROFILE_DATA1, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "data1"},
- {CTSVC_PROPERTY_PROFILE_DATA2, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "data2"},
- {CTSVC_PROPERTY_PROFILE_DATA3, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "data3"},
- {CTSVC_PROPERTY_PROFILE_DATA4, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "data4"},
+ {CTSVC_PROPERTY_PROFILE_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_PROFILE_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_PROFILE_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "data1"},
+ {CTSVC_PROPERTY_PROFILE_LABEL, CTSVC_SEARCH_PROPERTY_ALL, "data2"},
+ {CTSVC_PROPERTY_PROFILE_UID, CTSVC_SEARCH_PROPERTY_ALL, "data3"},
+ {CTSVC_PROPERTY_PROFILE_TEXT, CTSVC_SEARCH_PROPERTY_ALL, "data4"},
+ {CTSVC_PROPERTY_PROFILE_ORDER, CTSVC_SEARCH_PROPERTY_ALL, "data5"},
+ {CTSVC_PROPERTY_PROFILE_APPSVC_OPERATION, CTSVC_SEARCH_PROPERTY_ALL, "data6"},
+ {CTSVC_PROPERTY_PROFILE_DATA1, CTSVC_SEARCH_PROPERTY_ALL, "data7"},
+ {CTSVC_PROPERTY_PROFILE_DATA2, CTSVC_SEARCH_PROPERTY_ALL, "data8"},
+ {CTSVC_PROPERTY_PROFILE_DATA3, CTSVC_SEARCH_PROPERTY_ALL, "data9"},
+ {CTSVC_PROPERTY_PROFILE_DATA4, CTSVC_SEARCH_PROPERTY_ALL, "data10"},
};
const property_info_s __property_activity_photo[] = {
- {CTSVC_PROPERTY_ACTIVITY_PHOTO_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_ACTIVITY_PHOTO_ACTIVITY_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "activity_id"},
- {CTSVC_PROPERTY_ACTIVITY_PHOTO_URL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "photo_url"},
- {CTSVC_PROPERTY_ACTIVITY_PHOTO_SORT_INDEX, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "sort_index"},
+ {CTSVC_PROPERTY_ACTIVITY_PHOTO_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_ACTIVITY_PHOTO_ACTIVITY_ID, CTSVC_SEARCH_PROPERTY_ALL, "activity_id"},
+ {CTSVC_PROPERTY_ACTIVITY_PHOTO_URL, CTSVC_SEARCH_PROPERTY_ALL, "photo_url"},
+ {CTSVC_PROPERTY_ACTIVITY_PHOTO_SORT_INDEX, CTSVC_SEARCH_PROPERTY_ALL, "sort_index"},
};
const property_info_s __property_activity[] = {
- {CTSVC_PROPERTY_ACTIVITY_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_ACTIVITY_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_ACTIVITY_SOURCE_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "source_name"},
- {CTSVC_PROPERTY_ACTIVITY_STATUS, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "status"},
- {CTSVC_PROPERTY_ACTIVITY_TIMESTAMP, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "timestamp"},
- {CTSVC_PROPERTY_ACTIVITY_SYNC_DATA1, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "sync_data1"},
- {CTSVC_PROPERTY_ACTIVITY_SYNC_DATA2, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "sync_data2"},
- {CTSVC_PROPERTY_ACTIVITY_SYNC_DATA3, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "sync_data3"},
- {CTSVC_PROPERTY_ACTIVITY_SYNC_DATA4, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "sync_data4"},
- {CTSVC_PROPERTY_ACTIVITY_ACTIVITY_PHOTO,CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE, (void*)__property_activity_photo},
+ {CTSVC_PROPERTY_ACTIVITY_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_ACTIVITY_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_ACTIVITY_SOURCE_NAME, CTSVC_SEARCH_PROPERTY_ALL, "source_name"},
+ {CTSVC_PROPERTY_ACTIVITY_STATUS, CTSVC_SEARCH_PROPERTY_ALL, "status"},
+ {CTSVC_PROPERTY_ACTIVITY_TIMESTAMP, CTSVC_SEARCH_PROPERTY_ALL, "timestamp"},
+ {CTSVC_PROPERTY_ACTIVITY_SYNC_DATA1, CTSVC_SEARCH_PROPERTY_ALL, "sync_data1"},
+ {CTSVC_PROPERTY_ACTIVITY_SYNC_DATA2, CTSVC_SEARCH_PROPERTY_ALL, "sync_data2"},
+ {CTSVC_PROPERTY_ACTIVITY_SYNC_DATA3, CTSVC_SEARCH_PROPERTY_ALL, "sync_data3"},
+ {CTSVC_PROPERTY_ACTIVITY_SYNC_DATA4, CTSVC_SEARCH_PROPERTY_ALL, "sync_data4"},
+ {CTSVC_PROPERTY_ACTIVITY_ACTIVITY_PHOTO,CTSVC_SEARCH_PROPERTY_NONE, (void*)__property_activity_photo},
};
const property_info_s __property_extension[] = {
- {CTSVC_PROPERTY_EXTENSION_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_EXTENSION_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_EXTENSION_DATA1, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "data1"},
- {CTSVC_PROPERTY_EXTENSION_DATA2, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "data2"},
- {CTSVC_PROPERTY_EXTENSION_DATA3, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "data3"},
- {CTSVC_PROPERTY_EXTENSION_DATA4, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "data4"},
- {CTSVC_PROPERTY_EXTENSION_DATA5, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "data5"},
- {CTSVC_PROPERTY_EXTENSION_DATA6, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "data6"},
- {CTSVC_PROPERTY_EXTENSION_DATA7, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "data7"},
- {CTSVC_PROPERTY_EXTENSION_DATA8, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "data8"},
- {CTSVC_PROPERTY_EXTENSION_DATA9, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "data9"},
- {CTSVC_PROPERTY_EXTENSION_DATA10, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "data10"},
- {CTSVC_PROPERTY_EXTENSION_DATA11, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "data11"},
- {CTSVC_PROPERTY_EXTENSION_DATA12, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "data12"},
+ {CTSVC_PROPERTY_EXTENSION_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_EXTENSION_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_EXTENSION_DATA1, CTSVC_SEARCH_PROPERTY_ALL, "data1"},
+ {CTSVC_PROPERTY_EXTENSION_DATA2, CTSVC_SEARCH_PROPERTY_ALL, "data2"},
+ {CTSVC_PROPERTY_EXTENSION_DATA3, CTSVC_SEARCH_PROPERTY_ALL, "data3"},
+ {CTSVC_PROPERTY_EXTENSION_DATA4, CTSVC_SEARCH_PROPERTY_ALL, "data4"},
+ {CTSVC_PROPERTY_EXTENSION_DATA5, CTSVC_SEARCH_PROPERTY_ALL, "data5"},
+ {CTSVC_PROPERTY_EXTENSION_DATA6, CTSVC_SEARCH_PROPERTY_ALL, "data6"},
+ {CTSVC_PROPERTY_EXTENSION_DATA7, CTSVC_SEARCH_PROPERTY_ALL, "data7"},
+ {CTSVC_PROPERTY_EXTENSION_DATA8, CTSVC_SEARCH_PROPERTY_ALL, "data8"},
+ {CTSVC_PROPERTY_EXTENSION_DATA9, CTSVC_SEARCH_PROPERTY_ALL, "data9"},
+ {CTSVC_PROPERTY_EXTENSION_DATA10, CTSVC_SEARCH_PROPERTY_ALL, "data10"},
+ {CTSVC_PROPERTY_EXTENSION_DATA11, CTSVC_SEARCH_PROPERTY_ALL, "data11"},
+ {CTSVC_PROPERTY_EXTENSION_DATA12, CTSVC_SEARCH_PROPERTY_ALL, "data12"},
};
const property_info_s __property_contact[] = {
- {CTSVC_PROPERTY_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, NULL}, //dispaly_name, reverse_display_name
- {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "display_name_source"},
- {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
- {CTSVC_PROPERTY_CONTACT_RINGTONE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "ringtone_path"},
- {CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "image_thumbnail_path"},
- {CTSVC_PROPERTY_CONTACT_IS_FAVORITE, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "is_favorite"},
- {CTSVC_PROPERTY_CONTACT_HAS_PHONENUMBER, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
- {CTSVC_PROPERTY_CONTACT_HAS_EMAIL, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
- {CTSVC_PROPERTY_CONTACT_PERSON_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
- {CTSVC_PROPERTY_CONTACT_UID, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "uid"},
- {CTSVC_PROPERTY_CONTACT_VIBRATION, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "vibration"},
- {CTSVC_PROPERTY_CONTACT_CHANGED_TIME, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "changed_time"},
- {CTSVC_PROPERTY_CONTACT_NAME, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE, (void*)__property_name},
- {CTSVC_PROPERTY_CONTACT_COMPANY, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_company},
- {CTSVC_PROPERTY_CONTACT_NOTE, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_note},
- {CTSVC_PROPERTY_CONTACT_NUMBER, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_number},
- {CTSVC_PROPERTY_CONTACT_EMAIL, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_email},
- {CTSVC_PROPERTY_CONTACT_EVENT, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_event},
- {CTSVC_PROPERTY_CONTACT_MESSENGER, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_messenger},
- {CTSVC_PROPERTY_CONTACT_ADDRESS, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_address},
- {CTSVC_PROPERTY_CONTACT_URL, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_url},
- {CTSVC_PROPERTY_CONTACT_NICKNAME, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_nickname},
- {CTSVC_PROPERTY_CONTACT_PROFILE, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_profile},
- {CTSVC_PROPERTY_CONTACT_RELATIONSHIP, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_relationship},
- {CTSVC_PROPERTY_CONTACT_IMAGE, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_image},
- {CTSVC_PROPERTY_CONTACT_GROUP_RELATION, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_group_relation},
- {CTSVC_PROPERTY_CONTACT_EXTENSION, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_extension},
+ {CTSVC_PROPERTY_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL, NULL}, //dispaly_name, reverse_display_name
+ {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID, CTSVC_SEARCH_PROPERTY_ALL, "display_name_source"},
+ {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
+ {CTSVC_PROPERTY_CONTACT_RINGTONE, CTSVC_SEARCH_PROPERTY_ALL, "ringtone_path"},
+ {CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL, CTSVC_SEARCH_PROPERTY_ALL, "image_thumbnail_path"},
+ {CTSVC_PROPERTY_CONTACT_IS_FAVORITE, CTSVC_SEARCH_PROPERTY_ALL, "is_favorite"},
+ {CTSVC_PROPERTY_CONTACT_HAS_PHONENUMBER, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
+ {CTSVC_PROPERTY_CONTACT_HAS_EMAIL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
+ {CTSVC_PROPERTY_CONTACT_PERSON_ID, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
+ {CTSVC_PROPERTY_CONTACT_UID, CTSVC_SEARCH_PROPERTY_ALL, "uid"},
+ {CTSVC_PROPERTY_CONTACT_VIBRATION, CTSVC_SEARCH_PROPERTY_ALL, "vibration"},
+ {CTSVC_PROPERTY_CONTACT_CHANGED_TIME, CTSVC_SEARCH_PROPERTY_ALL, "changed_time"},
+ {CTSVC_PROPERTY_CONTACT_NAME, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_name},
+ {CTSVC_PROPERTY_CONTACT_COMPANY, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_company},
+ {CTSVC_PROPERTY_CONTACT_NOTE, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_note},
+ {CTSVC_PROPERTY_CONTACT_NUMBER, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_number},
+ {CTSVC_PROPERTY_CONTACT_EMAIL, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_email},
+ {CTSVC_PROPERTY_CONTACT_EVENT, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_event},
+ {CTSVC_PROPERTY_CONTACT_MESSENGER, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_messenger},
+ {CTSVC_PROPERTY_CONTACT_ADDRESS, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_address},
+ {CTSVC_PROPERTY_CONTACT_URL, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_url},
+ {CTSVC_PROPERTY_CONTACT_NICKNAME, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_nickname},
+ {CTSVC_PROPERTY_CONTACT_PROFILE, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_profile},
+ {CTSVC_PROPERTY_CONTACT_RELATIONSHIP, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_relationship},
+ {CTSVC_PROPERTY_CONTACT_IMAGE, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_image},
+ {CTSVC_PROPERTY_CONTACT_GROUP_RELATION, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_group_relation},
+ {CTSVC_PROPERTY_CONTACT_EXTENSION, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_extension},
};
const property_info_s __property_my_profile[] = {
- {CTSVC_PROPERTY_MY_PROFILE_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "my_profile_id"},
- {CTSVC_PROPERTY_MY_PROFILE_DISPLAY_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, NULL}, //dispaly_name, reverse_display_name
- {CTSVC_PROPERTY_MY_PROFILE_ADDRESSBOOK_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
- {CTSVC_PROPERTY_MY_PROFILE_IMAGE_THUMBNAIL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "image_thumbnail_path"},
- {CTSVC_PROPERTY_MY_PROFILE_UID, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "uid"},
- {CTSVC_PROPERTY_MY_PROFILE_CHANGED_TIME, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "changed_time"},
- {CTSVC_PROPERTY_MY_PROFILE_NAME, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE, (void*)__property_name},
- {CTSVC_PROPERTY_MY_PROFILE_COMPANY, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_company},
- {CTSVC_PROPERTY_MY_PROFILE_NOTE, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_note},
- {CTSVC_PROPERTY_MY_PROFILE_NUMBER, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_number},
- {CTSVC_PROPERTY_MY_PROFILE_EMAIL, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_email},
- {CTSVC_PROPERTY_MY_PROFILE_EVENT, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_event},
- {CTSVC_PROPERTY_MY_PROFILE_MESSENGER, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_messenger},
- {CTSVC_PROPERTY_MY_PROFILE_ADDRESS, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_address},
- {CTSVC_PROPERTY_MY_PROFILE_URL, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_url},
- {CTSVC_PROPERTY_MY_PROFILE_NICKNAME, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_nickname},
- {CTSVC_PROPERTY_MY_PROFILE_PROFILE, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_profile},
- {CTSVC_PROPERTY_MY_PROFILE_RELATIONSHIP, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_relationship},
- {CTSVC_PROPERTY_MY_PROFILE_IMAGE, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_image},
- {CTSVC_PROPERTY_MY_PROFILE_EXTENSION, CTSVC_VIEW_DATA_TYPE_REC, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_extension},
+ {CTSVC_PROPERTY_MY_PROFILE_ID, CTSVC_SEARCH_PROPERTY_ALL, "my_profile_id"},
+ {CTSVC_PROPERTY_MY_PROFILE_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL, NULL}, //dispaly_name, reverse_display_name
+ {CTSVC_PROPERTY_MY_PROFILE_ADDRESSBOOK_ID, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
+ {CTSVC_PROPERTY_MY_PROFILE_IMAGE_THUMBNAIL, CTSVC_SEARCH_PROPERTY_ALL, "image_thumbnail_path"},
+ {CTSVC_PROPERTY_MY_PROFILE_UID, CTSVC_SEARCH_PROPERTY_ALL, "uid"},
+ {CTSVC_PROPERTY_MY_PROFILE_CHANGED_TIME, CTSVC_SEARCH_PROPERTY_ALL, "changed_time"},
+ {CTSVC_PROPERTY_MY_PROFILE_NAME, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_name},
+ {CTSVC_PROPERTY_MY_PROFILE_COMPANY, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_company},
+ {CTSVC_PROPERTY_MY_PROFILE_NOTE, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_note},
+ {CTSVC_PROPERTY_MY_PROFILE_NUMBER, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_number},
+ {CTSVC_PROPERTY_MY_PROFILE_EMAIL, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_email},
+ {CTSVC_PROPERTY_MY_PROFILE_EVENT, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_event},
+ {CTSVC_PROPERTY_MY_PROFILE_MESSENGER, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_messenger},
+ {CTSVC_PROPERTY_MY_PROFILE_ADDRESS, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_address},
+ {CTSVC_PROPERTY_MY_PROFILE_URL, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_url},
+ {CTSVC_PROPERTY_MY_PROFILE_NICKNAME, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_nickname},
+ {CTSVC_PROPERTY_MY_PROFILE_PROFILE, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_profile},
+ {CTSVC_PROPERTY_MY_PROFILE_RELATIONSHIP, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_relationship},
+ {CTSVC_PROPERTY_MY_PROFILE_IMAGE, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_image},
+ {CTSVC_PROPERTY_MY_PROFILE_EXTENSION, CTSVC_SEARCH_PROPERTY_NONE,(void*)__property_extension},
};
const property_info_s __property_speeddial[] = {
- {CTSVC_PROPERTY_SPEEDDIAL_DIAL_NUMBER, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "speed_number"},
- {CTSVC_PROPERTY_SPEEDDIAL_NUMBER_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "number_id"},
- {CTSVC_PROPERTY_SPEEDDIAL_NUMBER, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "number"},
- {CTSVC_PROPERTY_SPEEDDIAL_NUMBER_LABEL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "label"},
- {CTSVC_PROPERTY_SPEEDDIAL_NUMBER_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "type"},
- {CTSVC_PROPERTY_SPEEDDIAL_PERSON_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
- {CTSVC_PROPERTY_SPEEDDIAL_DISPLAY_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // display_name or reverse_display_name
- {CTSVC_PROPERTY_SPEEDDIAL_IMAGE_THUMBNAIL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "image_thumbnail_path"},
+ {CTSVC_PROPERTY_SPEEDDIAL_DIAL_NUMBER, CTSVC_SEARCH_PROPERTY_ALL, "speed_number"},
+ {CTSVC_PROPERTY_SPEEDDIAL_NUMBER_ID, CTSVC_SEARCH_PROPERTY_ALL, "number_id"},
+ {CTSVC_PROPERTY_SPEEDDIAL_NUMBER, CTSVC_SEARCH_PROPERTY_ALL, "number"},
+ {CTSVC_PROPERTY_SPEEDDIAL_NUMBER_LABEL, CTSVC_SEARCH_PROPERTY_ALL, "label"},
+ {CTSVC_PROPERTY_SPEEDDIAL_NUMBER_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "type"},
+ {CTSVC_PROPERTY_SPEEDDIAL_PERSON_ID, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
+ {CTSVC_PROPERTY_SPEEDDIAL_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // display_name or reverse_display_name
+ {CTSVC_PROPERTY_SPEEDDIAL_IMAGE_THUMBNAIL, CTSVC_SEARCH_PROPERTY_ALL, "image_thumbnail_path"},
};
const property_info_s __property_phonelog[] = {
- {CTSVC_PROPERTY_PHONELOG_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_PHONELOG_PERSON_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
- {CTSVC_PROPERTY_PHONELOG_ADDRESS, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "number"},
- {CTSVC_PROPERTY_PHONELOG_LOG_TIME, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "log_time"},
- {CTSVC_PROPERTY_PHONELOG_LOG_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "log_type"},
- {CTSVC_PROPERTY_PHONELOG_EXTRA_DATA1, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "data1"}, // duration
- {CTSVC_PROPERTY_PHONELOG_EXTRA_DATA2, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "data2"}, // short message, email subject
+ {CTSVC_PROPERTY_PHONELOG_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_PHONELOG_PERSON_ID, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
+ {CTSVC_PROPERTY_PHONELOG_ADDRESS, CTSVC_SEARCH_PROPERTY_ALL, "number"},
+ {CTSVC_PROPERTY_PHONELOG_LOG_TIME, CTSVC_SEARCH_PROPERTY_ALL, "log_time"},
+ {CTSVC_PROPERTY_PHONELOG_LOG_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "log_type"},
+ {CTSVC_PROPERTY_PHONELOG_EXTRA_DATA1, CTSVC_SEARCH_PROPERTY_ALL, "data1"}, // duration
+ {CTSVC_PROPERTY_PHONELOG_EXTRA_DATA2, CTSVC_SEARCH_PROPERTY_ALL, "data2"}, // short message, email subject
};
+#if 0
const property_info_s __property_updated_info[] = {
- {CTSVC_PROPERTY_UPDATE_INFO_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_UPDATE_INFO_ADDRESSBOOK_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
- {CTSVC_PROPERTY_UPDATE_INFO_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "type"},
- {CTSVC_PROPERTY_UPDATE_INFO_VERSION, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "version"},
+ {CTSVC_PROPERTY_UPDATE_INFO_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_UPDATE_INFO_ADDRESSBOOK_ID, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
+ {CTSVC_PROPERTY_UPDATE_INFO_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "type"},
+ {CTSVC_PROPERTY_UPDATE_INFO_VERSION, CTSVC_SEARCH_PROPERTY_ALL, "version"},
+ {CTSVC_PROPERTY_UPDATE_INFO_IMAGE_CHANGED, CTSVC_SEARCH_PROPERTY_ALL, "image_changed"},
+ {CTSVC_PROPERTY_UPDATE_INFO_LAST_CHANGED_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "is_deleted"},
};
const property_info_s __property_grouprel_updated_info[] = {
- {CTSVC_PROPERTY_GROUP_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "group_id"},
- {CTSVC_PROPERTY_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_ADDRESSBOOK_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
- {CTSVC_PROPERTY_UPDATE_INFO_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "type"},
- {CTSVC_PROPERTY_UPDATE_INFO_VERSION, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "version"},
+ {CTSVC_PROPERTY_GROUP_ID, CTSVC_SEARCH_PROPERTY_ALL, "group_id"},
+ {CTSVC_PROPERTY_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_ADDRESSBOOK_ID, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
+ {CTSVC_PROPERTY_UPDATE_INFO_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "type"},
+ {CTSVC_PROPERTY_UPDATE_INFO_VERSION, CTSVC_SEARCH_PROPERTY_ALL, "version"},
};
+#endif
// search properties ///////////////////////////////////////////////////////////////////////////////////////////////////
const property_info_s __property_person_contact[] = { // _contacts_person_contact
- {CTSVC_PROPERTY_PERSON_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
- {CTSVC_PROPERTY_PERSON_DISPLAY_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_PROJECTION, "name_contact_id"},
- {CTSVC_PROPERTY_PERSON_RINGTONE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
- {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
- {CTSVC_PROPERTY_PERSON_VIBRATION, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "vibration"},
- {CTSVC_PROPERTY_PERSON_STATUS, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "status"},
- {CTSVC_PROPERTY_PERSON_IS_FAVORITE, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "is_favorite"},
- {CTSVC_PROPERTY_PERSON_LINK_COUNT, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "link_count"},
- {CTSVC_PROPERTY_PERSON_ACCOUNT_ID1, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "account_id1"},
- {CTSVC_PROPERTY_PERSON_ACCOUNT_ID2, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "account_id2"},
- {CTSVC_PROPERTY_PERSON_ACCOUNT_ID3, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "account_id3"},
- {CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "addressbook_ids"},
- {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
- {CTSVC_PROPERTY_PERSON_HAS_EMAIL, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
+ {CTSVC_PROPERTY_PERSON_ID, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
+ {CTSVC_PROPERTY_PERSON_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX, CTSVC_SEARCH_PROPERTY_PROJECTION, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID, CTSVC_SEARCH_PROPERTY_PROJECTION, "name_contact_id"},
+ {CTSVC_PROPERTY_PERSON_RINGTONE, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
+ {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
+ {CTSVC_PROPERTY_PERSON_VIBRATION, CTSVC_SEARCH_PROPERTY_PROJECTION, "vibration"},
+ {CTSVC_PROPERTY_PERSON_STATUS, CTSVC_SEARCH_PROPERTY_PROJECTION, "status"},
+ {CTSVC_PROPERTY_PERSON_IS_FAVORITE, CTSVC_SEARCH_PROPERTY_ALL, "is_favorite"},
+ {CTSVC_PROPERTY_PERSON_LINK_COUNT, CTSVC_SEARCH_PROPERTY_ALL, "link_count"},
+ {CTSVC_PROPERTY_PERSON_ACCOUNT_ID1, CTSVC_SEARCH_PROPERTY_ALL, "account_id1"},
+ {CTSVC_PROPERTY_PERSON_ACCOUNT_ID2, CTSVC_SEARCH_PROPERTY_ALL, "account_id2"},
+ {CTSVC_PROPERTY_PERSON_ACCOUNT_ID3, CTSVC_SEARCH_PROPERTY_ALL, "account_id3"},
+ {CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS, CTSVC_SEARCH_PROPERTY_PROJECTION, "addressbook_ids"},
+ {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
+ {CTSVC_PROPERTY_PERSON_HAS_EMAIL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
// contact
- {CTSVC_PROPERTY_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
+ {CTSVC_PROPERTY_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
// addressbook
- {CTSVC_PROPERTY_ADDRESSBOOK_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_name"},
- {CTSVC_PROPERTY_ADDRESSBOOK_MODE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_mode"},
+ {CTSVC_PROPERTY_ADDRESSBOOK_NAME, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_name"},
+ {CTSVC_PROPERTY_ADDRESSBOOK_MODE, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_mode"},
};
const property_info_s __property_person_number[] = { // _contacts_person_number
- {CTSVC_PROPERTY_PERSON_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
- {CTSVC_PROPERTY_PERSON_DISPLAY_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_PROJECTION, "name_contact_id"},
- {CTSVC_PROPERTY_PERSON_RINGTONE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
- {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
- {CTSVC_PROPERTY_PERSON_VIBRATION, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "vibration"},
- {CTSVC_PROPERTY_PERSON_IS_FAVORITE, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "is_favorite"},
- {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
- {CTSVC_PROPERTY_PERSON_HAS_EMAIL, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
+ {CTSVC_PROPERTY_PERSON_ID, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
+ {CTSVC_PROPERTY_PERSON_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX, CTSVC_SEARCH_PROPERTY_PROJECTION, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID, CTSVC_SEARCH_PROPERTY_PROJECTION, "name_contact_id"},
+ {CTSVC_PROPERTY_PERSON_RINGTONE, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
+ {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
+ {CTSVC_PROPERTY_PERSON_VIBRATION, CTSVC_SEARCH_PROPERTY_PROJECTION, "vibration"},
+ {CTSVC_PROPERTY_PERSON_IS_FAVORITE, CTSVC_SEARCH_PROPERTY_ALL, "is_favorite"},
+ {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
+ {CTSVC_PROPERTY_PERSON_HAS_EMAIL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
// number
- {CTSVC_PROPERTY_NUMBER_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "number_id"},
- {CTSVC_PROPERTY_DATA_IS_PRIMARY_DEFAULT, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "is_primary_default"},
- {CTSVC_PROPERTY_NUMBER_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_PROJECTION, "type"},
- {CTSVC_PROPERTY_NUMBER_LABEL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "label"},
- {CTSVC_PROPERTY_NUMBER_NUMBER, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "number"},
- {CTSVC_PROPERTY_NUMBER_NUMBER_FILTER, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_FILTER, "normalized_number"},
+ {CTSVC_PROPERTY_NUMBER_ID, CTSVC_SEARCH_PROPERTY_ALL, "number_id"},
+ {CTSVC_PROPERTY_DATA_IS_PRIMARY_DEFAULT, CTSVC_SEARCH_PROPERTY_ALL, "is_primary_default"},
+ {CTSVC_PROPERTY_NUMBER_TYPE, CTSVC_SEARCH_PROPERTY_PROJECTION, "type"},
+ {CTSVC_PROPERTY_NUMBER_LABEL, CTSVC_SEARCH_PROPERTY_PROJECTION, "label"},
+ {CTSVC_PROPERTY_NUMBER_NUMBER, CTSVC_SEARCH_PROPERTY_ALL, "number"},
+ {CTSVC_PROPERTY_NUMBER_NUMBER_FILTER, CTSVC_SEARCH_PROPERTY_FILTER, "normalized_number"},
};
const property_info_s __property_person_email[] = { // _contacts_person_email
- {CTSVC_PROPERTY_PERSON_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
- {CTSVC_PROPERTY_PERSON_DISPLAY_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_PROJECTION, "name_contact_id"},
- {CTSVC_PROPERTY_PERSON_RINGTONE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
- {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
- {CTSVC_PROPERTY_PERSON_VIBRATION, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "vibration"},
- {CTSVC_PROPERTY_PERSON_IS_FAVORITE, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "is_favorite"},
- {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
- {CTSVC_PROPERTY_PERSON_HAS_EMAIL, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
+ {CTSVC_PROPERTY_PERSON_ID, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
+ {CTSVC_PROPERTY_PERSON_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX, CTSVC_SEARCH_PROPERTY_PROJECTION, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID, CTSVC_SEARCH_PROPERTY_PROJECTION, "name_contact_id"},
+ {CTSVC_PROPERTY_PERSON_RINGTONE, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
+ {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
+ {CTSVC_PROPERTY_PERSON_VIBRATION, CTSVC_SEARCH_PROPERTY_PROJECTION, "vibration"},
+ {CTSVC_PROPERTY_PERSON_IS_FAVORITE, CTSVC_SEARCH_PROPERTY_ALL, "is_favorite"},
+ {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
+ {CTSVC_PROPERTY_PERSON_HAS_EMAIL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
// email
- {CTSVC_PROPERTY_EMAIL_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "email_id"},
- {CTSVC_PROPERTY_EMAIL_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_PROJECTION, "type"},
- {CTSVC_PROPERTY_EMAIL_LABEL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "label"},
- {CTSVC_PROPERTY_DATA_IS_PRIMARY_DEFAULT, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "is_primary_default"},
- {CTSVC_PROPERTY_EMAIL_EMAIL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "email"},
+ {CTSVC_PROPERTY_EMAIL_ID, CTSVC_SEARCH_PROPERTY_ALL, "email_id"},
+ {CTSVC_PROPERTY_EMAIL_TYPE, CTSVC_SEARCH_PROPERTY_PROJECTION, "type"},
+ {CTSVC_PROPERTY_EMAIL_LABEL, CTSVC_SEARCH_PROPERTY_PROJECTION, "label"},
+ {CTSVC_PROPERTY_DATA_IS_PRIMARY_DEFAULT, CTSVC_SEARCH_PROPERTY_ALL, "is_primary_default"},
+ {CTSVC_PROPERTY_EMAIL_EMAIL, CTSVC_SEARCH_PROPERTY_ALL, "email"},
};
const property_info_s __property_person_grouprel[] = { // _contacts_person_grouprel
- {CTSVC_PROPERTY_PERSON_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
- {CTSVC_PROPERTY_PERSON_DISPLAY_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_PROJECTION, "name_contact_id"},
- {CTSVC_PROPERTY_PERSON_RINGTONE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
- {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
- {CTSVC_PROPERTY_PERSON_VIBRATION, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "vibration"},
- {CTSVC_PROPERTY_PERSON_STATUS, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "status"},
- {CTSVC_PROPERTY_PERSON_IS_FAVORITE, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "is_favorite"},
- {CTSVC_PROPERTY_PERSON_LINK_COUNT, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "link_count"},
- {CTSVC_PROPERTY_PERSON_ACCOUNT_ID1, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "account_id1"},
- {CTSVC_PROPERTY_PERSON_ACCOUNT_ID2, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "account_id2"},
- {CTSVC_PROPERTY_PERSON_ACCOUNT_ID3, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "account_id3"},
- {CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "addressbook_ids"},
- {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
- {CTSVC_PROPERTY_PERSON_HAS_EMAIL, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
+ {CTSVC_PROPERTY_PERSON_ID, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
+ {CTSVC_PROPERTY_PERSON_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX, CTSVC_SEARCH_PROPERTY_PROJECTION, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID, CTSVC_SEARCH_PROPERTY_PROJECTION, "name_contact_id"},
+ {CTSVC_PROPERTY_PERSON_RINGTONE, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
+ {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
+ {CTSVC_PROPERTY_PERSON_VIBRATION, CTSVC_SEARCH_PROPERTY_PROJECTION, "vibration"},
+ {CTSVC_PROPERTY_PERSON_STATUS, CTSVC_SEARCH_PROPERTY_PROJECTION, "status"},
+ {CTSVC_PROPERTY_PERSON_IS_FAVORITE, CTSVC_SEARCH_PROPERTY_ALL, "is_favorite"},
+ {CTSVC_PROPERTY_PERSON_LINK_COUNT, CTSVC_SEARCH_PROPERTY_ALL, "link_count"},
+ {CTSVC_PROPERTY_PERSON_ACCOUNT_ID1, CTSVC_SEARCH_PROPERTY_ALL, "account_id1"},
+ {CTSVC_PROPERTY_PERSON_ACCOUNT_ID2, CTSVC_SEARCH_PROPERTY_ALL, "account_id2"},
+ {CTSVC_PROPERTY_PERSON_ACCOUNT_ID3, CTSVC_SEARCH_PROPERTY_ALL, "account_id3"},
+ {CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS, CTSVC_SEARCH_PROPERTY_PROJECTION, "addressbook_ids"},
+ {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
+ {CTSVC_PROPERTY_PERSON_HAS_EMAIL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
// contacts
- {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
+ {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
// group relation
- {CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "group_id"},
+ {CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID, CTSVC_SEARCH_PROPERTY_ALL, "group_id"},
// addressbook
- {CTSVC_PROPERTY_ADDRESSBOOK_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_name"},
- {CTSVC_PROPERTY_ADDRESSBOOK_MODE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_mode"},
- {CTSVC_PROPERTY_GROUP_RELATION_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_PROJECTION, "contact_id"},
+ {CTSVC_PROPERTY_ADDRESSBOOK_NAME, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_name"},
+ {CTSVC_PROPERTY_ADDRESSBOOK_MODE, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_mode"},
+ {CTSVC_PROPERTY_GROUP_RELATION_CONTACT_ID, CTSVC_SEARCH_PROPERTY_PROJECTION, "contact_id"},
};
const property_info_s __property_person_phonelog[] = { // _contacts_person_phone_log
- {CTSVC_PROPERTY_PERSON_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "id"},
- {CTSVC_PROPERTY_PERSON_DISPLAY_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
+ {CTSVC_PROPERTY_PERSON_ID, CTSVC_SEARCH_PROPERTY_ALL, "id"},
+ {CTSVC_PROPERTY_PERSON_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
// phonelog
- {CTSVC_PROPERTY_PHONELOG_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "phonelog_id"},
- {CTSVC_PROPERTY_PHONELOG_ADDRESS, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "address"},
- {CTSVC_PROPERTY_DATA_DATA1, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_PROJECTION, "address_type"},
- {CTSVC_PROPERTY_PHONELOG_LOG_TIME, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "log_time"},
- {CTSVC_PROPERTY_PHONELOG_LOG_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "log_type"},
- {CTSVC_PROPERTY_PHONELOG_EXTRA_DATA1, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_PROJECTION, "data1"}, // duration
- {CTSVC_PROPERTY_PHONELOG_EXTRA_DATA2, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "data2"}, // message_id
+ {CTSVC_PROPERTY_PHONELOG_ID, CTSVC_SEARCH_PROPERTY_ALL, "phonelog_id"},
+ {CTSVC_PROPERTY_PHONELOG_ADDRESS, CTSVC_SEARCH_PROPERTY_ALL, "address"},
+ {CTSVC_PROPERTY_DATA_DATA1, CTSVC_SEARCH_PROPERTY_PROJECTION, "address_type"},
+ {CTSVC_PROPERTY_PHONELOG_LOG_TIME, CTSVC_SEARCH_PROPERTY_ALL, "log_time"},
+ {CTSVC_PROPERTY_PHONELOG_LOG_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "log_type"},
+ {CTSVC_PROPERTY_PHONELOG_EXTRA_DATA1, CTSVC_SEARCH_PROPERTY_PROJECTION, "data1"}, // duration
+ {CTSVC_PROPERTY_PHONELOG_EXTRA_DATA2, CTSVC_SEARCH_PROPERTY_PROJECTION, "data2"}, // message_id
};
const property_info_s __property_person_usage[] = { // _contacts_person_usage
- {CTSVC_PROPERTY_PERSON_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
- {CTSVC_PROPERTY_PERSON_DISPLAY_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_PROJECTION, "name_contact_id"},
- {CTSVC_PROPERTY_PERSON_RINGTONE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
- {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
- {CTSVC_PROPERTY_PERSON_VIBRATION, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "vibration"},
- {CTSVC_PROPERTY_PERSON_IS_FAVORITE, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "is_favorite"},
- {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
- {CTSVC_PROPERTY_PERSON_HAS_EMAIL, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
+ {CTSVC_PROPERTY_PERSON_ID, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
+ {CTSVC_PROPERTY_PERSON_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX, CTSVC_SEARCH_PROPERTY_PROJECTION, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID, CTSVC_SEARCH_PROPERTY_PROJECTION, "name_contact_id"},
+ {CTSVC_PROPERTY_PERSON_RINGTONE, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
+ {CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
+ {CTSVC_PROPERTY_PERSON_VIBRATION, CTSVC_SEARCH_PROPERTY_PROJECTION, "vibration"},
+ {CTSVC_PROPERTY_PERSON_IS_FAVORITE, CTSVC_SEARCH_PROPERTY_ALL, "is_favorite"},
+ {CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
+ {CTSVC_PROPERTY_PERSON_HAS_EMAIL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
// contact_stat
- {CTSVC_PROPERTY_PERSON_USAGE_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "usage_type"},
- {CTSVC_PROPERTY_PERSON_TIMES_USED, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "times_used"},
+ {CTSVC_PROPERTY_PERSON_USAGE_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "usage_type"},
+ {CTSVC_PROPERTY_PERSON_TIMES_USED, CTSVC_SEARCH_PROPERTY_ALL, "times_used"},
};
const property_info_s __property_contact_number[] = { // _contacts_contact_number
- {CTSVC_PROPERTY_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_PROJECTION, "display_name_source"},
- {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
- {CTSVC_PROPERTY_CONTACT_PERSON_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
- {CTSVC_PROPERTY_CONTACT_RINGTONE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
- {CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL,CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
+ {CTSVC_PROPERTY_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID, CTSVC_SEARCH_PROPERTY_PROJECTION, "display_name_source"},
+ {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
+ {CTSVC_PROPERTY_CONTACT_PERSON_ID, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
+ {CTSVC_PROPERTY_CONTACT_RINGTONE, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
+ {CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
// number
- {CTSVC_PROPERTY_NUMBER_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "number_id"},
- {CTSVC_PROPERTY_NUMBER_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_PROJECTION, "type"},
- {CTSVC_PROPERTY_NUMBER_LABEL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "label"},
- {CTSVC_PROPERTY_NUMBER_IS_DEFAULT, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "is_default"},
- {CTSVC_PROPERTY_NUMBER_NUMBER, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "number"},
- {CTSVC_PROPERTY_NUMBER_NUMBER_FILTER, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_FILTER, "normalized_number"},
+ {CTSVC_PROPERTY_NUMBER_ID, CTSVC_SEARCH_PROPERTY_ALL, "number_id"},
+ {CTSVC_PROPERTY_NUMBER_TYPE, CTSVC_SEARCH_PROPERTY_PROJECTION, "type"},
+ {CTSVC_PROPERTY_NUMBER_LABEL, CTSVC_SEARCH_PROPERTY_PROJECTION, "label"},
+ {CTSVC_PROPERTY_NUMBER_IS_DEFAULT, CTSVC_SEARCH_PROPERTY_ALL, "is_default"},
+ {CTSVC_PROPERTY_NUMBER_NUMBER, CTSVC_SEARCH_PROPERTY_ALL, "number"},
+ {CTSVC_PROPERTY_NUMBER_NUMBER_FILTER, CTSVC_SEARCH_PROPERTY_FILTER, "normalized_number"},
};
const property_info_s __property_contact_email[] = { // _contacts_contact_email
- {CTSVC_PROPERTY_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "display_name_source"},
- {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
- {CTSVC_PROPERTY_CONTACT_PERSON_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
- {CTSVC_PROPERTY_CONTACT_RINGTONE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
- {CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
+ {CTSVC_PROPERTY_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID, CTSVC_SEARCH_PROPERTY_ALL, "display_name_source"},
+ {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
+ {CTSVC_PROPERTY_CONTACT_PERSON_ID, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
+ {CTSVC_PROPERTY_CONTACT_RINGTONE, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
+ {CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
// email
- {CTSVC_PROPERTY_EMAIL_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "email_id"},
- {CTSVC_PROPERTY_EMAIL_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_PROJECTION, "type"},
- {CTSVC_PROPERTY_EMAIL_LABEL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "label"},
- {CTSVC_PROPERTY_EMAIL_IS_DEFAULT, CTSVC_VIEW_DATA_TYPE_BOOL, CTSVC_SEARCH_PROPERTY_ALL, "is_default"},
- {CTSVC_PROPERTY_EMAIL_EMAIL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "email"},
+ {CTSVC_PROPERTY_EMAIL_ID, CTSVC_SEARCH_PROPERTY_ALL, "email_id"},
+ {CTSVC_PROPERTY_EMAIL_TYPE, CTSVC_SEARCH_PROPERTY_PROJECTION, "type"},
+ {CTSVC_PROPERTY_EMAIL_LABEL, CTSVC_SEARCH_PROPERTY_PROJECTION, "label"},
+ {CTSVC_PROPERTY_EMAIL_IS_DEFAULT, CTSVC_SEARCH_PROPERTY_ALL, "is_default"},
+ {CTSVC_PROPERTY_EMAIL_EMAIL, CTSVC_SEARCH_PROPERTY_ALL, "email"},
};
const property_info_s __property_contact_grouprel[] = { // _contacts_contact_grouprel
- {CTSVC_PROPERTY_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_PROJECTION, "display_name_source"},
- {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
- {CTSVC_PROPERTY_CONTACT_PERSON_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
- {CTSVC_PROPERTY_CONTACT_RINGTONE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
- {CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
+ {CTSVC_PROPERTY_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID, CTSVC_SEARCH_PROPERTY_PROJECTION, "display_name_source"},
+ {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
+ {CTSVC_PROPERTY_CONTACT_PERSON_ID, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
+ {CTSVC_PROPERTY_CONTACT_RINGTONE, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
+ {CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
// group relation
- {CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "group_id"},
- {CTSVC_PROPERTY_GROUP_RELATION_GROUP_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "group_name"},
+ {CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID, CTSVC_SEARCH_PROPERTY_ALL, "group_id"},
+ {CTSVC_PROPERTY_GROUP_RELATION_GROUP_NAME, CTSVC_SEARCH_PROPERTY_PROJECTION, "group_name"},
};
const property_info_s __property_contact_activity[] = { // _contacts_contact_activity
- {CTSVC_PROPERTY_CONTACT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
- {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
- {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_PROJECTION, "display_name_source"},
- {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
- {CTSVC_PROPERTY_CONTACT_PERSON_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
- {CTSVC_PROPERTY_CONTACT_RINGTONE, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
- {CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
- {CTSVC_PROPERTY_ACTIVITY_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "activity_id"},
- {CTSVC_PROPERTY_ACTIVITY_SOURCE_NAME, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "source_name"},
- {CTSVC_PROPERTY_ACTIVITY_STATUS, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "status"},
- {CTSVC_PROPERTY_ACTIVITY_TIMESTAMP, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "timestamp"},
- {CTSVC_PROPERTY_ACTIVITY_SYNC_DATA1, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "sync_data1"},
- {CTSVC_PROPERTY_ACTIVITY_SYNC_DATA2, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "sync_data2"},
- {CTSVC_PROPERTY_ACTIVITY_SYNC_DATA3, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "sync_data3"},
- {CTSVC_PROPERTY_ACTIVITY_SYNC_DATA4, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_PROJECTION, "sync_data4"},
- {CTSVC_PROPERTY_ADDRESSBOOK_ACCOUNT_ID, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "account_id"},
+ {CTSVC_PROPERTY_CONTACT_ID, CTSVC_SEARCH_PROPERTY_ALL, "contact_id"},
+ {CTSVC_PROPERTY_CONTACT_DISPLAY_NAME, CTSVC_SEARCH_PROPERTY_ALL, NULL}, // "dispaly_name" or "reverse_dispaly_name"
+ {CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID, CTSVC_SEARCH_PROPERTY_PROJECTION, "display_name_source"},
+ {CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_id"},
+ {CTSVC_PROPERTY_CONTACT_PERSON_ID, CTSVC_SEARCH_PROPERTY_ALL, "person_id"},
+ {CTSVC_PROPERTY_CONTACT_RINGTONE, CTSVC_SEARCH_PROPERTY_PROJECTION, "ringtone_path"},
+ {CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL, CTSVC_SEARCH_PROPERTY_PROJECTION, "image_thumbnail_path"},
+ {CTSVC_PROPERTY_ACTIVITY_ID, CTSVC_SEARCH_PROPERTY_ALL, "activity_id"},
+ {CTSVC_PROPERTY_ACTIVITY_SOURCE_NAME, CTSVC_SEARCH_PROPERTY_ALL, "source_name"},
+ {CTSVC_PROPERTY_ACTIVITY_STATUS, CTSVC_SEARCH_PROPERTY_PROJECTION, "status"},
+ {CTSVC_PROPERTY_ACTIVITY_TIMESTAMP, CTSVC_SEARCH_PROPERTY_ALL, "timestamp"},
+ {CTSVC_PROPERTY_ACTIVITY_SYNC_DATA1, CTSVC_SEARCH_PROPERTY_PROJECTION, "sync_data1"},
+ {CTSVC_PROPERTY_ACTIVITY_SYNC_DATA2, CTSVC_SEARCH_PROPERTY_PROJECTION, "sync_data2"},
+ {CTSVC_PROPERTY_ACTIVITY_SYNC_DATA3, CTSVC_SEARCH_PROPERTY_PROJECTION, "sync_data3"},
+ {CTSVC_PROPERTY_ACTIVITY_SYNC_DATA4, CTSVC_SEARCH_PROPERTY_PROJECTION, "sync_data4"},
+ {CTSVC_PROPERTY_ADDRESSBOOK_ACCOUNT_ID, CTSVC_SEARCH_PROPERTY_ALL, "account_id"},
};
const property_info_s __property_phonelog_number[] = { //_contacts_phone_log_number
- {CTSVC_PROPERTY_PHONELOG_ADDRESS, CTSVC_VIEW_DATA_TYPE_STR, CTSVC_SEARCH_PROPERTY_ALL, "number"},
+ {CTSVC_PROPERTY_PHONELOG_ADDRESS, CTSVC_SEARCH_PROPERTY_ALL, "number"},
};
const property_info_s __property_phonelog_stat[] = { //_contacts_phone_log_stat
- {CTSVC_PROPERTY_PHONELOG_STAT_LOG_COUNT, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_PROJECTION, "log_count"},
- {CTSVC_PROPERTY_PHONELOG_STAT_LOG_TYPE, CTSVC_VIEW_DATA_TYPE_INT, CTSVC_SEARCH_PROPERTY_ALL, "log_type"},
+ {CTSVC_PROPERTY_PHONELOG_STAT_LOG_COUNT, CTSVC_SEARCH_PROPERTY_PROJECTION, "log_count"},
+ {CTSVC_PROPERTY_PHONELOG_STAT_LOG_TYPE, CTSVC_SEARCH_PROPERTY_ALL, "log_type"},
};
typedef struct {
static const view_uri_info_s __tables[] = {
{CTSVC_VIEW_URI_ADDRESSBOOK, CTSVC_RECORD_ADDRESSBOOK, PTR_COUNT(__property_addressbook)},
{CTSVC_VIEW_URI_GROUP, CTSVC_RECORD_GROUP, PTR_COUNT(__property_group)},
- {CTSVC_VIEW_URI_PERSON, CTSVC_RECORD_PERSON, PTR_COUNT(__property_person)},
+ {CTSVC_VIEW_URI_PERSON, CTSVC_RECORD_PERSON, PTR_COUNT(__property_person)},
{CTSVC_VIEW_URI_SIMPLE_CONTACT, CTSVC_RECORD_SIMPLE_CONTACT, PTR_COUNT(__property_simple_contact)},
{CTSVC_VIEW_URI_CONTACT, CTSVC_RECORD_CONTACT, PTR_COUNT(__property_contact)},
{CTSVC_VIEW_URI_MY_PROFILE, CTSVC_RECORD_MY_PROFILE, PTR_COUNT(__property_my_profile)},
{CTSVC_VIEW_URI_ACTIVITY_PHOTO, CTSVC_RECORD_ACTIVITY_PHOTO, PTR_COUNT(__property_activity_photo)},
{CTSVC_VIEW_URI_PHONELOG, CTSVC_RECORD_PHONELOG, PTR_COUNT(__property_phonelog)},
{CTSVC_VIEW_URI_SPEEDDIAL, CTSVC_RECORD_SPEEDDIAL, PTR_COUNT(__property_speeddial)},
- {CTSVC_VIEW_URI_SDN, CTSVC_RECORD_SDN, PTR_COUNT(__property_snd)},
+ {CTSVC_VIEW_URI_SDN, CTSVC_RECORD_SDN, PTR_COUNT(__property_snd)},
{CTSVC_VIEW_URI_NAME, CTSVC_RECORD_NAME, PTR_COUNT(__property_name)},
{CTSVC_VIEW_URI_COMPANY, CTSVC_RECORD_COMPANY, PTR_COUNT(__property_company)},
- {CTSVC_VIEW_URI_NUMBER, CTSVC_RECORD_NUMBER, PTR_COUNT(__property_number)},
+ {CTSVC_VIEW_URI_NUMBER, CTSVC_RECORD_NUMBER, PTR_COUNT(__property_number)},
{CTSVC_VIEW_URI_EMAIL, CTSVC_RECORD_EMAIL, PTR_COUNT(__property_email)},
{CTSVC_VIEW_URI_URL, CTSVC_RECORD_URL, PTR_COUNT(__property_url)},
- {CTSVC_VIEW_URI_ADDRESS, CTSVC_RECORD_ADDRESS, PTR_COUNT(__property_address)},
+ {CTSVC_VIEW_URI_ADDRESS, CTSVC_RECORD_ADDRESS, PTR_COUNT(__property_address)},
{CTSVC_VIEW_URI_PROFILE, CTSVC_RECORD_PROFILE, PTR_COUNT(__property_profile)},
{CTSVC_VIEW_URI_RELATIONSHIP, CTSVC_RECORD_RELATIONSHIP, PTR_COUNT(__property_relationship)},
{CTSVC_VIEW_URI_IMAGE, CTSVC_RECORD_IMAGE, PTR_COUNT(__property_image)},
{CTSVC_VIEW_URI_GROUP_RELATION, CTSVC_RECORD_GROUP_RELATION, PTR_COUNT(__property_group_relation)},
{CTSVC_VIEW_URI_EXTENSION, CTSVC_RECORD_EXTENSION, PTR_COUNT(__property_extension)},
- {CTSVC_VIEW_URI_GROUPS_UPDATED_INFO, CTSVC_RECORD_UPDATED_INFO, PTR_COUNT(__property_updated_info)},
- {CTSVC_VIEW_URI_GROUPS_MEMBER_UPDATED_INFO, CTSVC_RECORD_UPDATED_INFO, PTR_COUNT(__property_updated_info)},
- {CTSVC_VIEW_URI_CONTACTS_UPDATED_INFO, CTSVC_RECORD_UPDATED_INFO, PTR_COUNT(__property_updated_info)},
- {CTSVC_VIEW_URI_GROUPRELS_UPDATED_INFO, CTSVC_RECORD_RESULT, PTR_COUNT(__property_grouprel_updated_info)},
+ {CTSVC_VIEW_URI_GROUPS_UPDATED_INFO, CTSVC_RECORD_UPDATED_INFO, NULL, 0},
+ {CTSVC_VIEW_URI_GROUPS_MEMBER_UPDATED_INFO, CTSVC_RECORD_UPDATED_INFO, NULL, 0},
+ {CTSVC_VIEW_URI_CONTACTS_UPDATED_INFO, CTSVC_RECORD_UPDATED_INFO, NULL, 0},
+ {CTSVC_VIEW_URI_MY_PROFILE_UPDATED_INFO, CTSVC_RECORD_UPDATED_INFO, NULL, 0},
+ {CTSVC_VIEW_URI_GROUPRELS_UPDATED_INFO, CTSVC_RECORD_RESULT, NULL, 0},
{CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT, CTSVC_RECORD_RESULT, PTR_COUNT(__property_person_contact)},
{CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER, CTSVC_RECORD_RESULT, PTR_COUNT(__property_person_number)},
void ctsvc_view_uri_init()
{
int i;
+ int count;
if (__ctsvc_view_uri_hash)
return;
__ctsvc_view_uri_hash = g_hash_table_new(g_str_hash, g_str_equal);
i = 0;
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_ADDRESSBOOK, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_GROUP, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_PERSON, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_SIMPLE_CONTACT, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_CONTACT, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_MY_PROFILE, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_ACTIVITY, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_ACTIVITY_PHOTO, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_PHONELOG, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_SPEEDDIAL, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_SDN, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_NAME, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_COMPANY, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_NUMBER, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_EMAIL, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_URL, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_ADDRESS, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_PROFILE, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_RELATIONSHIP, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_IMAGE, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_NOTE, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_NICKNAME, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_EVENT, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_MESSENGER, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_GROUP_RELATION, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_EXTENSION, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_GROUPS_UPDATED_INFO, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_GROUPS_MEMBER_UPDATED_INFO, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_CONTACTS_UPDATED_INFO, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_GROUPRELS_UPDATED_INFO, GINT_TO_POINTER(&__tables[i++]));
-
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_READ_ONLY_PERSON_EMAIL, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_READ_ONLY_PERSON_PHONELOG, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_READ_ONLY_PERSON_USAGE, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_READ_ONLY_CONTACT_NUMBER, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_READ_ONLY_CONTACT_EMAIL, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_READ_ONLY_CONTACT_GROUP, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_READ_ONLY_CONTACT_ACTIVITY, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_READ_ONLY_PHONELOG_NUMBER, GINT_TO_POINTER(&__tables[i++]));
- g_hash_table_insert(__ctsvc_view_uri_hash, CTSVC_VIEW_URI_READ_ONLY_PHONELOG_STAT, GINT_TO_POINTER(&__tables[i++]));
+ count = sizeof(__tables)/sizeof(view_uri_info_s);
+ for (i=0;i<count;i++)
+ g_hash_table_insert(__ctsvc_view_uri_hash, __tables[i].view_uri, GINT_TO_POINTER(&__tables[i]));
}
void ctsvc_view_uri_deinit()
#define CTSVC_VIEW_URI_SPEEDDIAL "tizen.contacts_view.speeddial"
#define CTSVC_VIEW_URI_SDN "tizen.contacts_view.sdn"
#define CTSVC_VIEW_URI_CONTACTS_UPDATED_INFO "tizen.contacts_view.contacts_updated_info"
+#define CTSVC_VIEW_URI_MY_PROFILE_UPDATED_INFO "tizen.contacts_view.my_profile_updated_info"
#define CTSVC_VIEW_URI_GROUPS_UPDATED_INFO "tizen.contacts_view.groups_updated_info"
#define CTSVC_VIEW_URI_GROUPS_MEMBER_UPDATED_INFO "tizen.contacts_view.groups_member_updated_info"
#define CTSVC_VIEW_URI_GROUPRELS_UPDATED_INFO "tizen.contacts_view.group_relations_updated_info"
} contacts_property_flag_e;
-// for type check // data_type mask 0x000FF000
+// for type check // data_type mask 0x000FF000
#define CTSVC_VIEW_DATA_TYPE_MASK 0x000F0000
#define CTSVC_VIEW_DATA_TYPE_BOOL 0x00010000
#define CTSVC_VIEW_DATA_TYPE_INT 0x00020000
#define CTSVC_READ_WRITE_TYPE_MASK 0x0000F000
#define CTSVC_READ_ONLY_PROPERTY 0x00001000
-#define CTSVC_WRIET_ONCE_PROPERTY 0x00002000
+#define CTSVC_WRITE_ONCE_PROPERTY 0x00002000
#define CTSVC_READ_ONLY_CHECK(property_id, data_type) \
((property_id & CTSVC_READ_WRITE_TYPE_MASK) == data_type ? true : false)
-// for property // 0x0FF00000
+// for property // 0x0FF00000
#define CTSVC_PROPERTY_MASK 0x0FF00000
-#define CTSVC_PROPERTY_ADDRESSBOOK 0x00100000
-#define CTSVC_PROPERTY_GROUP 0x00200000
-#define CTSVC_PROPERTY_PERSON 0x00300000
-#define CTSVC_PROPERTY_ACTIVITY 0x00500000
-#define CTSVC_PROPERTY_DATA 0x00600000
-#define CTSVC_PROPERTY_SPEEDDIAL 0x00700000
-#define CTSVC_PROPERTY_PHONELOG 0x00800000
-#define CTSVC_PROPERTY_UPDATE_INFO 0x00900000
-#define CTSVC_PROPERTY_SDN 0x00A00000
-#define CTSVC_PROPERTY_PHONELOG_STAT 0x00B00000
-
-#define CTSVC_PROPERTY_CONTACT 0x01000000
-#define CTSVC_PROPERTY_NAME 0x01100000
-#define CTSVC_PROPERTY_NUMBER 0x01200000
-#define CTSVC_PROPERTY_EMAIL 0x01300000
-#define CTSVC_PROPERTY_ADDRESS 0x01400000
-#define CTSVC_PROPERTY_URL 0x01500000
-#define CTSVC_PROPERTY_EVENT 0x01600000
-#define CTSVC_PROPERTY_GROUP_RELATION 0x01700000
-#define CTSVC_PROPERTY_RELATIONSHIP 0x01800000
-#define CTSVC_PROPERTY_COMPANY 0x01900000
-#define CTSVC_PROPERTY_NICKNAME 0x01A00000
-#define CTSVC_PROPERTY_MESSENGER 0x01B00000
-#define CTSVC_PROPERTY_NOTE 0x01C00000
-#define CTSVC_PROPERTY_PROFILE 0x01D00000
-#define CTSVC_PROPERTY_IMAGE 0x01E00000
-#define CTSVC_PROPERTY_EXTENSION 0x01F00000
-#define CTSVC_PROPERTY_MY_PROFILE 0x02000000
-#define CTSVC_PROPERTY_ACTIVITY_PHOTO 0x02100000
+#define CTSVC_PROPERTY_ADDRESSBOOK 0x00100000
+#define CTSVC_PROPERTY_GROUP 0x00200000
+#define CTSVC_PROPERTY_PERSON 0x00300000
+#define CTSVC_PROPERTY_ACTIVITY 0x00500000
+#define CTSVC_PROPERTY_DATA 0x00600000
+#define CTSVC_PROPERTY_SPEEDDIAL 0x00700000
+#define CTSVC_PROPERTY_PHONELOG 0x00800000
+#define CTSVC_PROPERTY_UPDATE_INFO 0x00900000
+#define CTSVC_PROPERTY_SDN 0x00A00000
+#define CTSVC_PROPERTY_PHONELOG_STAT 0x00B00000
+
+
+#define CTSVC_PROPERTY_CONTACT 0x01000000
+#define CTSVC_PROPERTY_NAME 0x01100000
+#define CTSVC_PROPERTY_NUMBER 0x01200000
+#define CTSVC_PROPERTY_EMAIL 0x01300000
+#define CTSVC_PROPERTY_ADDRESS 0x01400000
+#define CTSVC_PROPERTY_URL 0x01500000
+#define CTSVC_PROPERTY_EVENT 0x01600000
+#define CTSVC_PROPERTY_GROUP_RELATION 0x01700000
+#define CTSVC_PROPERTY_RELATIONSHIP 0x01800000
+#define CTSVC_PROPERTY_COMPANY 0x01900000
+#define CTSVC_PROPERTY_NICKNAME 0x01A00000
+#define CTSVC_PROPERTY_MESSENGER 0x01B00000
+#define CTSVC_PROPERTY_NOTE 0x01C00000
+#define CTSVC_PROPERTY_PROFILE 0x01D00000
+#define CTSVC_PROPERTY_IMAGE 0x01E00000
+#define CTSVC_PROPERTY_EXTENSION 0x01F00000
+#define CTSVC_PROPERTY_MY_PROFILE 0x02000000
+#define CTSVC_PROPERTY_ACTIVITY_PHOTO 0x02100000
#define CTSVC_PROPERTY_CHECK(property_id,data_type) \
((property_id & CTSVC_PROPERTY_MASK) == data_type ? true : false)
-#define CTSVC_SEARCH_PROPERTY_MASK 0xF0000000
-#define CTSVC_SEARCH_PROPERTY_NONE 0x10000000
-#define CTSVC_SEARCH_PROPERTY_FILTER 0x20000000
-#define CTSVC_SEARCH_PROPERTY_PROJECTION 0x30000000
-#define CTSVC_SEARCH_PROPERTY_ALL 0x40000000
+#define CTSVC_SEARCH_PROPERTY_MASK 0xF0000000
+#define CTSVC_SEARCH_PROPERTY_NONE 0x10000000
+#define CTSVC_SEARCH_PROPERTY_FILTER 0x20000000
+#define CTSVC_SEARCH_PROPERTY_PROJECTION 0x30000000
+#define CTSVC_SEARCH_PROPERTY_ALL 0x40000000
#define CTSVC_SEARCH_PROPERTY_CHECK(property_id,data_type) \
((property_id & CTSVC_SEARCH_PROPERTY_MASK) == data_type ? true : false)
CTSVC_PROPERTY_PERSON_DISPLAY_NAME = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +1,
CTSVC_PROPERTY_PERSON_DISPLAY_CONTACT_ID = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_INT ) +2,
CTSVC_PROPERTY_PERSON_RINGTONE = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_STR) +3,
- CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_STR) +4,
+ CTSVC_PROPERTY_PERSON_IMAGE_THUMBNAIL = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +4,
CTSVC_PROPERTY_PERSON_VIBRATION = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_STR) +5,
CTSVC_PROPERTY_PERSON_IS_FAVORITE = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_BOOL) +6,
CTSVC_PROPERTY_PERSON_FAVORITE_PRIORITY = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_DOUBLE | CTSVC_READ_ONLY_PROPERTY) +7,
CTSVC_PROPERTY_CONTACT_RINGTONE = (CTSVC_PROPERTY_CONTACT | CTSVC_VIEW_DATA_TYPE_STR) +4,
CTSVC_PROPERTY_CONTACT_IMAGE = (CTSVC_PROPERTY_CONTACT | CTSVC_VIEW_DATA_TYPE_REC) +5,
CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL = (CTSVC_PROPERTY_CONTACT | CTSVC_VIEW_DATA_TYPE_STR) +6,
- CTSVC_PROPERTY_CONTACT_IS_FAVORITE = (CTSVC_PROPERTY_CONTACT | CTSVC_VIEW_DATA_TYPE_BOOL | CTSVC_READ_ONLY_PROPERTY) +7,
+ CTSVC_PROPERTY_CONTACT_IS_FAVORITE = (CTSVC_PROPERTY_CONTACT | CTSVC_VIEW_DATA_TYPE_BOOL) +7,
CTSVC_PROPERTY_CONTACT_HAS_PHONENUMBER = (CTSVC_PROPERTY_CONTACT | CTSVC_VIEW_DATA_TYPE_BOOL | CTSVC_READ_ONLY_PROPERTY) +8,
CTSVC_PROPERTY_CONTACT_HAS_EMAIL = (CTSVC_PROPERTY_CONTACT | CTSVC_VIEW_DATA_TYPE_BOOL | CTSVC_READ_ONLY_PROPERTY) +9,
CTSVC_PROPERTY_CONTACT_PERSON_ID = (CTSVC_PROPERTY_CONTACT | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY) +10,
CTSVC_PROPERTY_ADDRESS_STREET = (CTSVC_PROPERTY_ADDRESS | CTSVC_VIEW_DATA_TYPE_STR) +8,
CTSVC_PROPERTY_ADDRESS_COUNTRY = (CTSVC_PROPERTY_ADDRESS | CTSVC_VIEW_DATA_TYPE_STR) +9,
CTSVC_PROPERTY_ADDRESS_EXTENDED = (CTSVC_PROPERTY_ADDRESS | CTSVC_VIEW_DATA_TYPE_STR) +10,
- CTSVC_PROPERTY_ADDRESS_IS_DEFAULT = (CTSVC_PROPERTY_ADDRESS | CTSVC_VIEW_DATA_TYPE_STR) +11,
+ CTSVC_PROPERTY_ADDRESS_IS_DEFAULT = (CTSVC_PROPERTY_ADDRESS | CTSVC_VIEW_DATA_TYPE_BOOL) +11,
// contact_url
CTSVC_PROPERTY_URL_ID = (CTSVC_PROPERTY_URL | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
// speeddial
CTSVC_PROPERTY_SPEEDDIAL_DIAL_NUMBER = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_INT),
CTSVC_PROPERTY_SPEEDDIAL_NUMBER_ID = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_INT) +1,
- CTSVC_PROPERTY_SPEEDDIAL_NUMBER = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY) +2,
- CTSVC_PROPERTY_SPEEDDIAL_NUMBER_LABEL = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY) +3,
+ CTSVC_PROPERTY_SPEEDDIAL_NUMBER = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +2,
+ CTSVC_PROPERTY_SPEEDDIAL_NUMBER_LABEL = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +3,
CTSVC_PROPERTY_SPEEDDIAL_NUMBER_TYPE = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY) +4,
CTSVC_PROPERTY_SPEEDDIAL_PERSON_ID = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY) +5,
- CTSVC_PROPERTY_SPEEDDIAL_DISPLAY_NAME = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY) +6,
- CTSVC_PROPERTY_SPEEDDIAL_IMAGE_THUMBNAIL = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY) +7,
+ CTSVC_PROPERTY_SPEEDDIAL_DISPLAY_NAME = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +6,
+ CTSVC_PROPERTY_SPEEDDIAL_IMAGE_THUMBNAIL = (CTSVC_PROPERTY_SPEEDDIAL | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +7,
// phonelog
CTSVC_PROPERTY_PHONELOG_ID = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
CTSVC_PROPERTY_PHONELOG_EXTRA_DATA1 = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_INT) +5, // duration, message_id, email_id
CTSVC_PROPERTY_PHONELOG_EXTRA_DATA2 = (CTSVC_PROPERTY_PHONELOG | CTSVC_VIEW_DATA_TYPE_STR) +6, // short message, subject
- // contact_updated_info : read only
+ // updated_info : read only
CTSVC_PROPERTY_UPDATE_INFO_ID = (CTSVC_PROPERTY_UPDATE_INFO | CTSVC_VIEW_DATA_TYPE_INT),
CTSVC_PROPERTY_UPDATE_INFO_ADDRESSBOOK_ID = (CTSVC_PROPERTY_UPDATE_INFO | CTSVC_VIEW_DATA_TYPE_INT) +1,
CTSVC_PROPERTY_UPDATE_INFO_TYPE = (CTSVC_PROPERTY_UPDATE_INFO | CTSVC_VIEW_DATA_TYPE_INT) +2,
CTSVC_PROPERTY_UPDATE_INFO_VERSION = (CTSVC_PROPERTY_UPDATE_INFO | CTSVC_VIEW_DATA_TYPE_INT) +3,
+ CTSVC_PROPERTY_UPDATE_INFO_IMAGE_CHANGED = (CTSVC_PROPERTY_UPDATE_INFO | CTSVC_VIEW_DATA_TYPE_BOOL) +4,
+ CTSVC_PROPERTY_UPDATE_INFO_LAST_CHANGED_TYPE = (CTSVC_PROPERTY_UPDATE_INFO | CTSVC_VIEW_DATA_TYPE_INT)+5, // now, it is used for _contacts_my_profile_updated_info
// contact_sdn
CTSVC_PROPERTY_SDN_ID = (CTSVC_PROPERTY_SDN | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
if (ctsvc_ipc_unmarshal_string(ipc_data, &pcontact->reverse_display_name) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_int(ipc_data, &pcontact->display_source_type) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_int(ipc_data, &pcontact->display_name_language) != CONTACTS_ERROR_NONE) break;
+ if (ctsvc_ipc_unmarshal_string(ipc_data, &pcontact->sort_name) != CONTACTS_ERROR_NONE) break;
+ if (ctsvc_ipc_unmarshal_string(ipc_data, &pcontact->reverse_sort_name) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_string(ipc_data, &pcontact->sortkey) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_string(ipc_data, &pcontact->reverse_sortkey) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_string(ipc_data, &pcontact->uid) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_string((pcontact->reverse_display_name),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_int((pcontact->display_source_type),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_int((pcontact->display_name_language),ipc_data) != CONTACTS_ERROR_NONE) break;
+ if (ctsvc_ipc_marshal_string((pcontact->sort_name),ipc_data) != CONTACTS_ERROR_NONE) break;
+ if (ctsvc_ipc_marshal_string((pcontact->reverse_sort_name),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_string((pcontact->sortkey),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_string((pcontact->reverse_sortkey),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_string((pcontact->uid),ipc_data) != CONTACTS_ERROR_NONE) break;
#define CTSVC_IPC_SERVER_GROUP_ADD_CONTACT "group_add_contact"
#define CTSVC_IPC_SERVER_GROUP_REMOVE_CONTACT "group_remove_contact"
+#define CTSVC_IPC_SERVER_GROUP_SET_GROUP_ORDER "group_set_group_order"
#define CTSVC_IPC_SERVER_PERSON_LINK_PERSON "person_link_person"
#define CTSVC_IPC_SERVER_PERSON_UNLINK_CONTACT "person_unlink_contact"
if (ctsvc_ipc_unmarshal_int(ipc_data, &event_p->type) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_string(ipc_data, &event_p->label) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_int(ipc_data, &event_p->date) != CONTACTS_ERROR_NONE) break;
+ if (ctsvc_ipc_unmarshal_bool(ipc_data, &event_p->is_lunar) != CONTACTS_ERROR_NONE) break;
+ if (ctsvc_ipc_unmarshal_int(ipc_data, &event_p->lunar_date) != CONTACTS_ERROR_NONE) break;
return CONTACTS_ERROR_NONE;
} while(0);
if (ctsvc_ipc_marshal_int((event_p->type),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_string((event_p->label),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_int((event_p->date),ipc_data) != CONTACTS_ERROR_NONE) break;
+ if (ctsvc_ipc_marshal_bool((event_p->is_lunar),ipc_data) != CONTACTS_ERROR_NONE) break;
+ if (ctsvc_ipc_marshal_int((event_p->lunar_date),ipc_data) != CONTACTS_ERROR_NONE) break;
return CONTACTS_ERROR_NONE;
} while(0);
int ret = CONTACTS_ERROR_NONE;
ctsvc_record_s common = {0,};
+ ctsvc_record_s *precord_common = NULL;
if (ctsvc_ipc_unmarshal_record_common(ipc_data, &common) != CONTACTS_ERROR_NONE)
{
ret = contacts_record_create(common.view_uri, precord);
RETVM_IF(ret != CONTACTS_ERROR_NONE, ret, "create activity record fail");
+ precord_common = (ctsvc_record_s *)(*precord);
+ precord_common->property_max_count = common.property_max_count;
+ precord_common->properties_flags = common.properties_flags;
+ precord_common->property_flag = common.property_flag;
+
ctsvc_ipc_marshal_record_plugin_cb_s *plugin_cb = __ctsvc_ipc_marshal_get_plugin_cb(common.r_type);
RETVM_IF(NULL == plugin_cb || NULL == plugin_cb->unmarshal_record, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
common->view_uri = ctsvc_view_get_uri(str);
common->property_max_count = *(unsigned int*)pims_ipc_data_get(ipc_data,&size);
- tmp = pims_ipc_data_get(ipc_data,&size);
- if ( tmp == NULL ){
- CTS_ERR("pims_ipc_data unmarshal fail");
- return CONTACTS_ERROR_INVALID_PARAMETER;
- }
- int length = *(int*)tmp;
- if(length == -1)
- {
- CTS_VERBOSE("properties_flags is null");
- }
- else {
- tmp = (unsigned char*)pims_ipc_data_get(ipc_data,&size);
- {
- common->properties_flags = calloc(common->property_max_count, sizeof(unsigned char));
- if (common->properties_flags == NULL)
- {
- CTS_ERR("calloc fail");
- return CONTACTS_ERROR_OUT_OF_MEMORY;
- }
- memcpy(common->properties_flags, tmp, sizeof(unsigned char)*(common->property_max_count));
+ if (common->property_max_count > 0) {
+ unsigned char *tmp_properties_flags;
+ tmp_properties_flags = (unsigned char*)pims_ipc_data_get(ipc_data, &size);
+ common->properties_flags = calloc(common->property_max_count, sizeof(char));
+ if (common->properties_flags == NULL) {
+ ERR("calloc fail");
+ return CONTACTS_ERROR_OUT_OF_MEMORY;
}
+ memcpy(common->properties_flags, tmp_properties_flags, sizeof(char)*common->property_max_count);
}
+ tmp = pims_ipc_data_get(ipc_data,&size);
+ common->property_flag = *(unsigned char*)tmp;
+
return CONTACTS_ERROR_NONE;
}
return CONTACTS_ERROR_INVALID_PARAMETER;
}
- if(pims_ipc_data_put(ipc_data,(void*)&common->property_max_count,sizeof(unsigned int)) < 0)
+ if (pims_ipc_data_put(ipc_data,(void*)&common->property_max_count,sizeof(unsigned int)) < 0)
{
return CONTACTS_ERROR_NO_DATA;
}
- if (common->properties_flags != NULL)
+ if (0 < common->property_max_count)
{
- int length = common->property_max_count;
- if (pims_ipc_data_put(ipc_data,(void*)&length,sizeof(int)) != 0)
- {
- CTS_ERR("_ctsvc_ipc_marshal fail");
- return CONTACTS_ERROR_OUT_OF_MEMORY;
- }
- if(pims_ipc_data_put(ipc_data,(void*)common->properties_flags,sizeof(unsigned char)*common->property_max_count) < 0)
+ if (pims_ipc_data_put(ipc_data,(void*)common->properties_flags,sizeof(unsigned char)*common->property_max_count) < 0)
{
CTS_ERR("_ctsvc_ipc_marshal fail");
return CONTACTS_ERROR_NO_DATA;
}
}
- else
+
+ if (pims_ipc_data_put(ipc_data,(void*)&common->property_flag,sizeof(char)) < 0)
{
- int length = -1;
- if (pims_ipc_data_put(ipc_data,(void*)&length,sizeof(int)) != 0)
- {
- CTS_ERR("_ctsvc_ipc_marshal fail");
- return CONTACTS_ERROR_OUT_OF_MEMORY;
- }
+ return CONTACTS_ERROR_NO_DATA;
}
-
return CONTACTS_ERROR_NONE;
}
}
else
{
- contacts_filter_h filter = (contacts_filter_h)que->filter;
+ contacts_filter_h filter;
if (contacts_filter_create(que->view_uri,&filter) != CONTACTS_ERROR_NONE)
{
CTS_ERR("contacts_filter_create fail");
if (ctsvc_ipc_unmarshal_unsigned_int(ipc_data,&(count)) != CONTACTS_ERROR_NONE)
{
+ contacts_list_destroy(*list, true);
CTS_ERR("_ctsvc_ipc_unmarshal fail");
return CONTACTS_ERROR_INVALID_PARAMETER;
}
do {
if (ctsvc_ipc_unmarshal_bool(ipc_data, &person_p->name_contact_id_changed) != CONTACTS_ERROR_NONE) break;
- if (ctsvc_ipc_unmarshal_bool(ipc_data, &person_p->image_thumbnail_changed) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_bool(ipc_data, &person_p->ringtone_changed) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_bool(ipc_data, &person_p->vibration_changed) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_bool(ipc_data, &person_p->is_favorite_changed) != CONTACTS_ERROR_NONE) break;
do {
if (ctsvc_ipc_marshal_bool((person_p->name_contact_id_changed),ipc_data) != CONTACTS_ERROR_NONE) break;
- if (ctsvc_ipc_marshal_bool((person_p->image_thumbnail_changed),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_bool((person_p->ringtone_changed),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_bool((person_p->vibration_changed),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_bool((person_p->is_favorite_changed),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_int(ipc_data,&updated_info_p->id) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_int(ipc_data,&updated_info_p->changed_ver) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_int(ipc_data,&updated_info_p->addressbook_id) != CONTACTS_ERROR_NONE) break;
+ if (ctsvc_ipc_unmarshal_bool(ipc_data,&updated_info_p->image_changed) != CONTACTS_ERROR_NONE) break;
+ if (ctsvc_ipc_unmarshal_int(ipc_data,&updated_info_p->last_changed_type) != CONTACTS_ERROR_NONE) break;
return CONTACTS_ERROR_NONE;
} while(0);
if (ctsvc_ipc_marshal_int((updated_info_p->id),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_int((updated_info_p->changed_ver),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_int((updated_info_p->addressbook_id),ipc_data) != CONTACTS_ERROR_NONE) break;
+ if (ctsvc_ipc_marshal_bool((updated_info_p->image_changed),ipc_data) != CONTACTS_ERROR_NONE) break;
+ if (ctsvc_ipc_marshal_int((updated_info_p->last_changed_type),ipc_data) != CONTACTS_ERROR_NONE) break;
return CONTACTS_ERROR_NONE;
} while(0);
<provide>
<label name="contacts-service::db"/>
</provide>
+ <request>
+ <smack request="sys-assert::core" type="rwxat"/>
+ </request>
</define>
<assign>
- <filesystem path="/usr/lib/libcontacts-service2.so.0.9.24.8" label="_"/>
+ <filesystem path="/usr/lib/libcontacts-service2.so.0.9.45.3" label="_"/>
<filesystem path="/usr/lib/libcontacts-service2.so.0" label="_"/>
- <filesystem path="/usr/lib/libcontacts-service3.so.0.9.24.8" label="_"/>
+ <filesystem path="/usr/lib/libcontacts-service3.so.0.9.45.3" label="_"/>
<filesystem path="/usr/lib/libcontacts-service3.so.0" label="_"/>
+ <filesystem path="/opt/usr/dbspace/.contacts-svc.db" label="contacts-service::db"/>
+ <filesystem path="/opt/usr/dbspace/.contacts-svc.db-journal" label="contacts-service::db"/>
<filesystem path="/etc/rc.d/init.d/contacts-service-ipcd.sh" label="_" exec_label="none"/>
<filesystem path="/etc/rc.d/rc3.d/S50contacts-svc-helper" label="_" exec_label="none"/>
<filesystem path="/etc/rc.d/rc5.d/S50contacts-svc-helper" label="_" exec_label="none"/>
+ <filesystem path="/usr/lib/systemd/user/contacts-service.service" label="_" exec_label="none" />
+ <filesystem path="/usr/lib/systemd/user/tizen-middleware.target.wants/contacts-service.service" label="_" exec_label="none" />
</assign>
<request>
<domain name="contacts-service" />
* <tr><td>string</td><td> display_name_index </td><td>read only</td><td> The first character of first string for grouping. This is normalized using icu. </td></tr>
* <tr><td>integer</td><td> display_contact_id </td><td>read only</td><td> </td></tr>
* <tr><td>string</td><td> ringtone_path </td><td>read, write</td><td> </td></tr>
- * <tr><td>string</td><td> image_thumbnail_path </td><td>read, write</td><td> </td></tr>
+ * <tr><td>string</td><td> image_thumbnail_path </td><td>read only</td><td> </td></tr>
* <tr><td>string</td><td> vibration </td><td>read, write</td><td> </td></tr>
* <tr><td>string</td><td> status </td><td>read only</td><td> </td></tr>
* <tr><td>boolean</td><td> is_favorite </td><td>read, write</td><td> </td></tr>
* <tr><td>integer</td><td> contact_id </td><td>read, write once</td><td> </td></tr>
* <tr><td>integer</td><td> type </td><td>read, write</td><td> </td></tr>
* <tr><td>string</td><td> label </td><td>read, write</td><td> </td></tr>
- * <tr><td>integer</td><td> date </td><td>read, write</td><td> </td></tr>
+ * <tr><td>integer</td><td> date </td><td>read, write</td><td> year * 10000 + month * 100 + day </td></tr>
* <tr><td>integer</td><td> is_lunar </td><td>read, write</td><td> </td></tr>
* <tr><td>integer</td><td> lunar_date </td><td>read, write</td><td> </td></tr>
* </table>
* <tr><td>integer</td><td> contact_id </td><td>*</td><td> </td></tr>
* <tr><td>integer</td><td> address_book_id </td><td></td><td> </td></tr>
* <tr><td>integer</td><td> type </td><td></td><td> </td></tr>
+ * <tr><td>integer</td><td> version </td><td></td><td> </td></tr>
+ * <tr><td>boolean</td><td> image_changed </td><td></td><td> </td></tr>
+ * </table>
+ *
+ * @section CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_my_profile_updated_info _contacts_my_profile_updated_info view
+ * <table>
+ * <tr>
+ * <th>Type</th>
+ * <th>Property ID</th>
+ * <th>Primay Key</th>
+ * <th>Description</th>
+ * </tr>
+ * <tr><td>string</td><td>_uri</td><td></td><td> </td></tr>
+ * <tr><td>integer</td><td> address_book_id </td><td></td><td> </td></tr>
+ * <tr><td>integer</td><td> last_changed_type </td><td></td><td> </td></tr>
+ * <tr><td>integer</td><td> version </td><td></td><td> </td></tr>
* </table>
*
* @section CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_group_updated_info _contacts_group_updated_info view
* <tr><td>integer</td><td> group_id </td><td>*</td><td> </td></tr>
* <tr><td>integer</td><td> address_book_id </td><td></td><td> </td></tr>
* <tr><td>integer</td><td> type </td><td></td><td> </td></tr>
+ * <tr><td>integer</td><td> version </td><td></td><td> </td></tr>
+ * </table>
+ *
+ * @section CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_group_member_updated_info _contacts_group_member_updated_info view
+ * <table>
+ * <tr>
+ * <th>Type</th>
+ * <th>Property ID</th>
+ * <th>Primary Key</th>
+ * <th>Description</th>
+ * </tr>
+ * <tr><td>string</td><td>_uri</td><td></td><td> </td></tr>
+ * <tr><td>integer</td><td> group_id </td><td>*</td><td> </td></tr>
+ * <tr><td>integer</td><td> address_book_id </td><td></td><td> </td></tr>
+ * <tr><td>integer</td><td> version </td><td></td><td> </td></tr>
* </table>
*
* @section CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person_number _contacts_person_number view
/**
* @brief Inserts multiple records as batch operation to the contacts database.
*
+ * @remarks @The purpose of async API is for UI not to create thread.
+ * If you have to display progress during DB operation, you can use this API.
+ * The callback function will be called in main loop.
+ * Do not use this API in thread.
+ * During executint this API, you can not call the other DB operation API.
+ *
* @param[in] record_list The record list handle
* @param[in] callback The callback function to invoke which lets you know result of batch operation
* @param[in] user_data The user data to be passed to the callback function
API int contacts_db_get_count_with_query( contacts_query_h query, int *count);
/**
+ * @brief Gets the last change contacts database version on current connection.
+ *
+ * @param[out] last_change_version The contacts database version on current connection
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #CONTACTS_ERROR_NONE Successful
+ * @retval #CONTACTS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #CONTACTS_ERROR_DB_FAILED Database operation failure
+ *
+ * @pre This function requires an open connection to the contacts service by contacts_connect2().
+ *
+ * @see contacts_connect2()
+ * @see contacts_db_get_current_version()
+ */
+API int contacts_db_get_last_change_version(int* last_change_version);
+
+/**
* @}
*/
typedef enum
{
- CONTACTS_MATCH_EXACTLY, /**< . */
+ CONTACTS_MATCH_EXACTLY, /**< case-sensitive */
CONTACTS_MATCH_FULLSTRING, /**< . */
CONTACTS_MATCH_CONTAINS, /**< . */
CONTACTS_MATCH_STARTSWITH, /**< . */
API int contacts_group_remove_contact(int group_id, int contact_id);
/**
+ * @brief Sets a group place between a previous group and a next group.
+ *
+ * @param[in] group_id The group ID to move
+ * @param[in] previous_group_id The previous group ID
+ * @param[in] next_group_id The back group ID
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #CONTACTS_ERROR_NONE Successful
+ * @retval #CONTACTS_ERROR_DB Database operation failure
+ *
+ * @pre This function requires an open connection to contacts service by contacts_connect2().
+ *
+ * @see contacts_connect2()
+ */
+API int contacts_group_set_group_order(int group_id, int previous_group_id, int next_group_id);
+
+
+/**
* @}
*/
API int contacts_utils_get_index_characters(char **index_string);\r
\r
/**\r
+ * This function compares compares two strings which is not normalized.\r
+ * If search_str is included in str, this function return #sCONTACTS_ERROR_NONE. \n\r
+ * The behavior of this function cannot fix because of localization.\r
+ * So, The behavior can be different from each other.\r
+ *\r
+ * @param[in] haystack Base string.\r
+ * @param[in] needle searching string\r
+ * @param[out] len substring length\r
+ * @return a position of the beginning of the substring, Negative value(#cts_error) on error or difference.\r
+ * @par example\r
+ * @code\r
+ ret = contacts_strstr(str1, str2, &len);\r
+ if(CONTACTS_ERROR_NONE == ret) {\r
+ snprintf(first, ret+1, "%s", item_data->display);\r
+ snprintf(middle, len+1, "%s", item_data->display + ret);\r
+ printf("%s -> %s, %s, %s", item_data->display, first, middle, item_data->display + ret + len);\r
+ } else\r
+ printf("str1 doesn't has str2");\r
+ * @endcode\r
+ */\r
+API int contacts_utils_strstr(const char *haystack, const char *needle, int *len);\r
+\r
+/**\r
* @}\r
*/\r
\r
API int contacts_vcard_make_from_contact(contacts_record_h contact, char **vcard_stream);
/**
+ * @brief Retrieves vCard stream from a contact.
+ *
+ * @param[in] my_profile The my_profile record handle
+ * @param[out] vcard_stream The vCard stream
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #CONTACTS_ERROR_NONE Successful
+ * @retval #CONTACTS_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #CONTACTS_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+API int contacts_vcard_make_from_my_profile(contacts_record_h my_profile, char **vcard_stream);
+
+
+/**
* @brief Retrieves vCard stream from a person.
*
* @param[in] person The person record handle
_CONTACTS_PROPERTY_STR( display_name_index) // read only
_CONTACTS_PROPERTY_INT( display_contact_id ) // read, write
_CONTACTS_PROPERTY_STR( ringtone_path ) // read, write
- _CONTACTS_PROPERTY_STR( image_thumbnail_path ) // read, write
+ _CONTACTS_PROPERTY_STR( image_thumbnail_path ) // read only
_CONTACTS_PROPERTY_STR( vibration ) // read, write
_CONTACTS_PROPERTY_STR( status ) // read only
_CONTACTS_PROPERTY_BOOL( is_favorite ) // read, write
_CONTACTS_PROPERTY_INT( address_book_id )
_CONTACTS_PROPERTY_INT( type ) // insert/update/delete
_CONTACTS_PROPERTY_INT( version )
+ _CONTACTS_PROPERTY_BOOL( image_changed )
_CONTACTS_END_READ_ONLY_VIEW( _contacts_contact_updated_info )
+// my_profile_updated_info : read only
+_CONTACTS_BEGIN_READ_ONLY_VIEW()
+ _CONTACTS_PROPERTY_INT( address_book_id )
+ _CONTACTS_PROPERTY_INT( last_changed_type )
+ _CONTACTS_PROPERTY_INT( version )
+_CONTACTS_END_READ_ONLY_VIEW( _contacts_my_profile_updated_info )
+
// group_updated_info : read only
_CONTACTS_BEGIN_READ_ONLY_VIEW()
_CONTACTS_PROPERTY_INT( group_id )
}\r
\r
ctsvc_set_activity_noti();\r
-\r
-/* why notify twice?\r
- ctsvc_set_contact_noti();\r
- ctsvc_db_contact_update_changed_time(contact_id);\r
-*/\r
+ ctsvc_set_person_noti();\r
\r
ret = ctsvc_end_trans(true);\r
return ret;\r
}\r
\r
ctsvc_set_activity_noti();\r
-/*\r
- ctsvc_set_contact_noti();\r
- ctsvc_db_contact_update_changed_time(contact_id);\r
-*/\r
+ ctsvc_set_person_noti();\r
\r
ret = ctsvc_end_trans(true);\r
return ret;\r
{CTSVC_VIEW_URI_PERSON, CTSVC_DB_VIEW_PERSON},
{CTSVC_VIEW_URI_SIMPLE_CONTACT, CTSVC_DB_VIEW_CONTACT},
{CTSVC_VIEW_URI_CONTACT, CTSVC_DB_VIEW_CONTACT},
- {CTSVC_VIEW_URI_MY_PROFILE, CTS_TABLE_MY_PROFILES},
+ {CTSVC_VIEW_URI_MY_PROFILE, CTSVC_DB_VIEW_MY_PROFILE},
{CTSVC_VIEW_URI_ACTIVITY, CTSVC_DB_VIEW_ACTIVITY},
{CTSVC_VIEW_URI_PHONELOG, CTS_TABLE_PHONELOGS},
{CTSVC_VIEW_URI_SPEEDDIAL, CTSVC_DB_VIEW_SPEEDIDAL},
// {CTSVC_VIEW_URI_GROUPS_UPDATED_INFO, CTSVC_DB_VIEW_GROUPS_UPDATED_INFO},
// {CTSVC_VIEW_URI_GROUPS_MEMBER_UPDATED_INFO, CTSVC_DB_VIEW_GROUPS_MEMBER_UPDATED_INFO},
// {CTSVC_VIEW_URI_CONTACTS_UPDATED_INFO, CTSVC_DB_VIEW_CONTACTS_UPDATED_INFO},
+// {CTSVC_VIEW_URI_MY_PROFILE_UPDATED_INFO, NULL},
// {CTSVC_VIEW_URI_GROUPRELS_UPDATED_INFO, NULL, NULL},
{CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT, CTSVC_DB_VIEW_PERSON_CONTACT},
__ctsvc_db_view_hash_table = g_hash_table_new(g_str_hash, g_str_equal);
if (__ctsvc_db_view_hash_table) {
- i = 0;
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_ADDRESSBOOK, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_GROUP, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_PERSON, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_SIMPLE_CONTACT, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_CONTACT, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_MY_PROFILE, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_ACTIVITY, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_PHONELOG, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_SPEEDDIAL, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_SDN, GINT_TO_POINTER(&(__db_tables[i++])));
-
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_NAME, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_COMPANY, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_NUMBER, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_EMAIL, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_URL, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_ADDRESS, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_PROFILE, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_RELATIONSHIP, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_IMAGE, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_NOTE, GINT_TO_POINTER(&(__db_tables[i++])) );
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_NICKNAME, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_EVENT, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_MESSENGER, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_GROUP_RELATION, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_EXTENSION, GINT_TO_POINTER(&(__db_tables[i++])));
-
-// g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_GROUPS_UPDATED_INFO, GINT_TO_POINTER(&(__db_tables[i++])) );
-// g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_GROUPS_MEMBER_UPDATED_INFO, GINT_TO_POINTER(&(__db_tables[i++])) );
-// g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_CONTACTS_UPDATED_INFO, GINT_TO_POINTER(&(__db_tables[i++])) );
-// g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_GROUPRELS_UPDATED_INFO, GINT_TO_POINTER(&(__db_tables[i++])) );
-
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_READ_ONLY_PERSON_EMAIL, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_READ_ONLY_PERSON_PHONELOG, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_READ_ONLY_PERSON_USAGE, GINT_TO_POINTER(&(__db_tables[i++])));
-
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_READ_ONLY_CONTACT_NUMBER, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_READ_ONLY_CONTACT_EMAIL, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_READ_ONLY_CONTACT_GROUP, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_READ_ONLY_CONTACT_ACTIVITY, GINT_TO_POINTER(&(__db_tables[i++])));
-
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_READ_ONLY_PHONELOG_NUMBER, GINT_TO_POINTER(&(__db_tables[i++])));
- g_hash_table_insert(__ctsvc_db_view_hash_table, CTSVC_VIEW_URI_READ_ONLY_PHONELOG_STAT, GINT_TO_POINTER(&(__db_tables[i++])));
+ int count = sizeof(__db_tables) /sizeof(db_table_info_s);
+ for (i=0;i<count;i++)
+ g_hash_table_insert(__ctsvc_db_view_hash_table, __db_tables[i].view_uri, GINT_TO_POINTER(&(__db_tables[i])));
+
}
return CONTACTS_ERROR_NONE;
}
return &ctsvc_db_plugin_person;
case CTSVC_RECORD_CONTACT:
return &ctsvc_db_plugin_contact;
+ case CTSVC_RECORD_MY_PROFILE:
+ return &ctsvc_db_plugin_my_profile;
case CTSVC_RECORD_SIMPLE_CONTACT:
return &ctsvc_db_plugin_simple_contact;
case CTSVC_RECORD_NAME:
"CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_CONTACT" AS "
"SELECT * FROM "CTS_TABLE_CONTACTS" WHERE deleted = 0");
ret = ctsvc_query_exec(query);
+ RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_execs() Failed(%d)", ret);
+
+ // CTSVC_DB_VIEW_MY_PROFILE
+ snprintf(query, sizeof(query),
+ "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_MY_PROFILE" AS "
+ "SELECT * FROM "CTS_TABLE_MY_PROFILES" WHERE deleted = 0");
+ ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
// CTSVC_DB_VIEW_PERSON
"SELECT persons.person_id, "
"display_name, reverse_display_name, "
"display_name_language, "
+ "sort_name, reverse_sort_name, "
"sortkey, reverse_sortkey, "
"name_contact_id, "
"persons.ringtone_path, "
"CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_NAME" AS "
"SELECT id, "
"data.contact_id, "
- "data2 first, "
- "data3 last, "
- "data4 addition, "
- "data5 prefix, "
- "data6 suffix, "
- "data7 phonetic_first, "
- "data8 phonetic_middle, "
- "data9 phonetic_last "
+ "data2, "
+ "data3, "
+ "data4, "
+ "data5, "
+ "data6, "
+ "data7, "
+ "data8, "
+ "data9 "
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
"SELECT id, "
"data.contact_id, "
"is_default, "
- "data1 type, "
- "data2 label, "
- "data3 number, "
- "data4 lookup "
+ "data1, "
+ "data2, "
+ "data3, "
+ "data4 "
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
"SELECT id, "
"data.contact_id, "
"is_default, "
- "data1 type, "
- "data2 label, "
- "data3 email "
+ "data1, "
+ "data2, "
+ "data3 "
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
"SELECT id, "
"data.contact_id, "
"is_default, "
- "data1 type, "
- "data2 label, "
- "data3 postbox, "
- "data4 postal_code, "
- "data5 region, "
- "data6 locality, "
- "data7 street, "
- "data8 extend, "
- "data9 country "
+ "data1, "
+ "data2, "
+ "data3, "
+ "data4, "
+ "data5, "
+ "data6, "
+ "data7, "
+ "data8, "
+ "data9 "
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
"CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_URL" AS "
"SELECT id, "
"data.contact_id, "
- "data1 type, "
- "data2 label, "
- "data3 url "
+ "data1, "
+ "data2, "
+ "data3 "
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
"CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_EVENT" AS "
"SELECT id, "
"data.contact_id, "
- "data1 type, "
- "data2 label, "
- "data3 date "
+ "data1, "
+ "data2, "
+ "data3, "
+ "data4, "
+ "data5 "
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
"group_name "
"FROM "CTS_TABLE_GROUP_RELATIONS", "CTS_TABLE_GROUPS" "
"ON "CTS_TABLE_GROUP_RELATIONS".group_id = "CTS_TABLE_GROUPS".group_id AND deleted = 0 "
- "ORDER BY group_name COLLATE NOCASE");
+ "ORDER BY group_prio");
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
"CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_RELATIONSHIP" AS "
"SELECT id, "
"data.contact_id, "
- "data1 type, "
- "data2 label, "
- "data3 name "
+ "data1, "
+ "data2, "
+ "data3 "
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
"SELECT id, "
"is_default, "
"data.contact_id, "
- "data1 type, "
- "data2 label, "
- "data3 path "
+ "data1, "
+ "data2, "
+ "data3 "
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
"CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_COMPANY" AS "
"SELECT id, "
"data.contact_id, "
- "data1 type, "
- "data2 label, "
- "data3 name, "
- "data4 department, "
- "data5 job_title, "
- "data6 assistant, "
- "data7 role, "
- "data8 logo, "
- "data9 location, "
- "data10 description, "
- "data11 phonetic_name "
+ "data1, "
+ "data2, "
+ "data3, "
+ "data4, "
+ "data5, "
+ "data6, "
+ "data7, "
+ "data8, "
+ "data9, "
+ "data10, "
+ "data11 "
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
"CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_NICKNAME" AS "
"SELECT id, "
"data.contact_id, "
- "data3 nickname "
+ "data3 "
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
"CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_MESSENGER" AS "
"SELECT id, "
"data.contact_id, "
- "data1 type, "
- "data2 label, "
- "data3 im_id "
+ "data1, "
+ "data2, "
+ "data3 "
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
"CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_NOTE" AS "
"SELECT id, "
"data.contact_id, "
- "data3 note "
+ "data3 "
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
"CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PROFILE" AS "
"SELECT id, "
"data.contact_id, "
- "data1 type, "
- "data2 label, "
- "data3 uid, "
- "data4 text, "
- "data5 profile_order, "
- "data6 appsvc_op, "
- "data7 data1, "
- "data8 data2, "
- "data9 data3, "
- "data10 data4 "
+ "data1, "
+ "data2, "
+ "data3, "
+ "data4, "
+ "data5, "
+ "data6, "
+ "data7, "
+ "data8, "
+ "data9, "
+ "data10 "
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
"SELECT persons.person_id, "
"name_contacts.display_name, name_contacts.reverse_display_name, "
"name_contacts.display_name_language, "
+ "name_contacts.sort_name, name_contacts.reverse_sort_name, "
"name_contacts.sortkey, name_contacts.reverse_sortkey, "
"persons.image_thumbnail_path, "
"data.id number_id, "
CONTACTS_CHANGE_INSERTED, CONTACTS_CHANGE_UPDATED, CONTACTS_CHANGE_DELETED);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
-#endif
// CTSVC_DB_VIEW_GROUPS_MEMBER_UPDATED_INFO
snprintf(query, sizeof(query),
"FROM "CTS_TABLE_GROUPS);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
+#endif
// CTSVC_DB_VIEW_PERSON_CONTACT
snprintf(query, sizeof(query),
"SELECT C.id phonelog_id, "
"F.display_name, F.reverse_display_name, "
"F.display_name_language, "
+ "F.sort_name, F.reverse_sort_name, "
"F.sortkey, F.reverse_sortkey, "
"F.image_thumbnail_path, "
"C.number address, "
"AND A.normal_num = data4)) "
"GROUP BY A.id) C "
"LEFT JOIN (SELECT D.person_id, D.display_name, D.reverse_display_name, "
- "D.display_name_language, D.sortkey, D.reverse_sortkey, "
+ "D.display_name_language, "
+ "D.sort_name, D.reverse_sort_name, "
+ "D.sortkey, D.reverse_sortkey, "
"E.image_thumbnail_path "
"FROM "CTS_TABLE_CONTACTS" D, "CTS_TABLE_PERSONS" E "
"ON E.name_contact_id = D.contact_id) F "
"A.display_name_source, "
"A.reverse_display_name, "
"A.display_name_language, "
+ "A.sort_name, A.reverse_sort_name, "
"A.sortkey, A.reverse_sortkey, "
"A.addressbook_id, "
"AB.account_id, "
#ifdef _CONTACTS_IPC_SERVER
ret = __ctsvc_db_create_views();
+ if (ret != CONTACTS_ERROR_NONE) {
+ CTS_ERR("__ctsvc_db_create_views() Failed(%d)", ret);
+ return ret;
+ }
#endif
return ret;
stmt = cts_query_prepare(query);
RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
-
cts_stmt_bind_text(stmt, 1, photo->photo_url);
ret = cts_stmt_step(stmt);
}
ctsvc_set_activity_noti();
- ctsvc_set_contact_noti();
-
- ret = ctsvc_db_contact_update_changed_time(activity->contact_id);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_query_exec() Failed(%d)", ret);
- ctsvc_end_trans(false);
- return ret;
- }
+ ctsvc_set_person_noti();
if (id)
*id = activity_id;
cts_stmt stmt = NULL;
contacts_record_h record;
-
snprintf(query, sizeof(query), "SELECT id, contact_id, source_name, status, "
"timestamp, sync_data1, sync_data2, sync_data3, sync_data4 "
"FROM "CTSVC_DB_VIEW_ACTIVITY" WHERE id = %d", id);
if (CONTACTS_ERROR_NONE != ret ) {
CTS_ERR("No data : id (%d)", id);
ctsvc_end_trans(false);
- return CONTACTS_ERROR_NO_DATA;
+ return ret;
}
snprintf(query, sizeof(query),
}
ctsvc_set_activity_noti();
- ctsvc_set_contact_noti();
-
- ret = ctsvc_db_contact_update_changed_time(contact_id);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_query_exec() Failed(%d)", ret);
- ctsvc_end_trans(false);
- return ret;
- }
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
#include "ctsvc_record.h"
#include "ctsvc_db_query.h"
#include "ctsvc_list.h"
+#include "ctsvc_notification.h"
+
static int __ctsvc_db_address_insert_record( contacts_record_h record, int *id );
static int __ctsvc_db_address_get_record( int id, contacts_record_h* out_record );
ret = ctsvc_db_contact_update_changed_time(address->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
return CONTACTS_ERROR_NONE;
}
-
static int __ctsvc_db_address_update_record( contacts_record_h record )
{
int ret;
snprintf(query, sizeof(query),
"SELECT contact_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", address->contact_id);
+
ret = ctsvc_query_get_first_int_result(query, &contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
+ CTS_ERR("No data : contact_id (%d) is not exist", address->contact_id);
ctsvc_end_trans(false);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ return ret;
}
- ret = ctsvc_db_address_update(record, address->contact_id, false);
+ ret = ctsvc_db_address_update(record, false);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+ CTS_ERR("update record failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
ret = ctsvc_db_contact_update_changed_time(address->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
ret = ctsvc_begin_trans();
RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
- snprintf(query, sizeof(query), "SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d", id);
+ snprintf(query, sizeof(query),
+ "SELECT contact_id FROM "CTSVC_DB_VIEW_CONTACT" "
+ "WHERE contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d)", id);
ret = ctsvc_query_get_first_int_result(query, &contact_id);
if (CONTACTS_ERROR_NONE != ret ) {
CTS_ERR("No data : id (%d)", id);
ctsvc_end_trans(false);
- return CONTACTS_ERROR_NO_DATA;
+ return ret;
}
- ret = ctsvc_db_address_delete(id);
+ ret = ctsvc_db_address_delete(id, false);
if (CONTACTS_ERROR_NONE != ret) {
- ret = ctsvc_db_contact_update_changed_time(contact_id);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
- ctsvc_end_trans(false);
- return ret;
- }
- ret = ctsvc_end_trans(true);
+ CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ ctsvc_end_trans(false);
+ return ret;
}
- else
+
+ ret = ctsvc_db_contact_update_changed_time(contact_id);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
+ return ret;
+ }
+ ctsvc_set_person_noti();
+
+ ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
return ret;
ctsvc_address_s *address;
snprintf(query, sizeof(query),
- "SELECT data.contact_id, is_default, "
+ "SELECT id, data.contact_id, is_default, "
"data1, data2, data3, data4, data5, data6, data7, data8, data9 "
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
#include "ctsvc_schema.h"
#include "ctsvc_sqlite.h"
#include "ctsvc_db_init.h"
+#include "ctsvc_db_query.h"
#include "ctsvc_db_plugin_address_helper.h"
#include "ctsvc_record.h"
#include "ctsvc_notification.h"
ctsvc_address_s *address = (ctsvc_address_s*)record;
char query[CTS_SQL_MAX_LEN] = {0};
-// RETVM_IF(address->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted address record");
RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact_id(%d) is mandatory field to insert address record ", address->contact_id);
RETVM_IF(0 < address->id, CONTACTS_ERROR_INVALID_PARAMETER,
return CONTACTS_ERROR_NONE;
}
-int ctsvc_db_address_update(contacts_record_h record, int contact_id, bool is_my_profile)
+int ctsvc_db_address_update(contacts_record_h record, bool is_my_profile)
{
- int ret;
- cts_stmt stmt = NULL;
- ctsvc_address_s *address = (ctsvc_address_s*)record;
+ int id;
+ int ret = CONTACTS_ERROR_NONE;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
+ ctsvc_address_s *address = (ctsvc_address_s*)record;
char query[CTS_SQL_MAX_LEN] = {0};
-// RETVM_IF(address->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted address record");
+ RETVM_IF(address->id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
+ "Invalid parameter : id(%d), This record is already inserted", address->id);
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (address->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
RETVM_IF(NULL == address->pobox && NULL == address->postalcode && address->region
&& address->locality && address->street && address->extended && address->country,
CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : address is NULL");
- RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
- "Invalid parameter : contact_id(%d) is mandatory field to insert address record ", address->contact_id);
- RETVM_IF(address->id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
- "Invalid parameter : id(%d), This record is already inserted", address->id);
snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_DATA" SET is_my_profile=%d, is_default=?, data1 = ?, data2 = ?, data3 = ?, "
- "data4 = ?, data5 = ?, data6 = ?, data7 = ?, data8 = ?, data9 = ? "
- "WHERE id = %d", is_my_profile, address->id);
-
- stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
-
- sqlite3_bind_int(stmt, 1, address->is_default);
- sqlite3_bind_int(stmt, 2, address->type);
-
- if (address->label)
- sqlite3_bind_text(stmt, 3, address->label,
- strlen(address->label), SQLITE_STATIC);
- if (address->pobox)
- sqlite3_bind_text(stmt, 4, address->pobox,
- strlen(address->pobox), SQLITE_STATIC);
- if (address->postalcode)
- sqlite3_bind_text(stmt, 5, address->postalcode,
- strlen(address->postalcode), SQLITE_STATIC);
- if (address->region)
- sqlite3_bind_text(stmt, 6, address->region,
- strlen(address->region), SQLITE_STATIC);
- if (address->locality)
- sqlite3_bind_text(stmt, 7, address->locality,
- strlen(address->locality), SQLITE_STATIC);
- if (address->street)
- sqlite3_bind_text(stmt, 8, address->street,
- strlen(address->street), SQLITE_STATIC);
- if (address->extended)
- sqlite3_bind_text(stmt, 9, address->extended,
- strlen(address->extended), SQLITE_STATIC);
- if (address->country)
- sqlite3_bind_text(stmt, 10, address->country,
- strlen(address->country), SQLITE_STATIC);
-
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
- }
- cts_stmt_finalize(stmt);
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", address->id);
+ ret = ctsvc_query_get_first_int_result(query, &id);
+ RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
- if (!is_my_profile)
- ctsvc_set_address_noti();
+ do {
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, address->id))) break;
+ if (!is_my_profile)
+ ctsvc_set_address_noti();
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
+ }
- return CONTACTS_ERROR_NONE;
+ return ret;
}
-int ctsvc_db_address_delete(int id)
+int ctsvc_db_address_delete(int id, bool is_my_profile)
{
int ret;
- cts_stmt stmt;
char query[CTS_SQL_MIN_LEN] = {0};
snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE datatype = %d AND id = %d",
CTSVC_DATA_POSTAL, id);
- stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
+ ret = ctsvc_query_exec(query);
+ RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : cts_query_exec() Fail(%d)", ret);
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
- }
- cts_stmt_finalize(stmt);
-
- ctsvc_set_address_noti();
+ if (!is_my_profile)
+ ctsvc_set_address_noti();
return ret;
}
#include "ctsvc_sqlite.h"
int ctsvc_db_address_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_address_update(contacts_record_h record, int contact_id, bool is_my_profile);
-int ctsvc_db_address_delete(int id);
+int ctsvc_db_address_update(contacts_record_h record, bool is_my_profile);
+int ctsvc_db_address_delete(int id, bool is_my_profile);
int ctsvc_db_address_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
#endif // __CTSVC_DB_PLUGIN_ADDRESS_HELPER_H__
static int __ctsvc_db_addressbook_update_record( contacts_record_h record )
{
+ int ret = CONTACTS_ERROR_NONE;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
ctsvc_addressbook_s *addressbook = (ctsvc_addressbook_s *)record;
RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (addressbook->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
RETV_IF(NULL == addressbook->name, CONTACTS_ERROR_INVALID_PARAMETER);
RETVM_IF(CTSVC_RECORD_ADDRESSBOOK != addressbook->base.r_type, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : record is invalid type(%d)", addressbook->base.r_type);
- cts_stmt stmt = NULL;
- char query[CTS_SQL_MIN_LEN] = {0};
-
- snprintf(query, sizeof(query),
- "UPDATE %s SET addressbook_name=?, account_id=%d, mode=%d "
- "WHERE addressbook_id=%d", CTS_TABLE_ADDRESSBOOKS,
- addressbook->account_id, addressbook->mode, addressbook->id);
+ ret = ctsvc_begin_trans();
+ RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
- stmt = cts_query_prepare(query);
- if (NULL == stmt) {
- CTS_ERR("DB error : cts_query_prepare() Failed");
- return CONTACTS_ERROR_DB;
- }
-
- cts_stmt_bind_text(stmt, 1, addressbook->name);
+ do {
+ char query[CTS_SQL_MAX_LEN] = {0};
+ cts_stmt stmt = NULL;
- /* BEGIN_TRANSACTION */
- int ret = ctsvc_begin_trans();
- if( ret < CONTACTS_ERROR_NONE )
- {
- CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
- }
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (NULL == set || '\0' == *set)
+ break;
- /* DOING JOB */
- do {
+ snprintf(query, sizeof(query), "UPDATE %s SET %s WHERE addressbook_id = %d", CTS_TABLE_ADDRESSBOOKS, set, addressbook->id);
+ stmt = cts_query_prepare(query);
+ if (NULL == stmt) {
+ CTS_ERR("DB error : cts_query_prepare() Failed");
+ ret = CONTACTS_ERROR_DB;
+ break;
+ }
+ if (bind_text) {
+ int i = 0;
+ for (cursor=bind_text,i=1;cursor;cursor=cursor->next,i++) {
+ const char *text = cursor->data;
+ if (text && *text)
+ cts_stmt_bind_text(stmt, i, text);
+ }
+ }
ret = cts_stmt_step(stmt);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : cts_stmt_step() Failed(%d)", ret);
+ CTS_ERR("cts_stmt_step() Failed(%d)", ret);
cts_stmt_finalize(stmt);
break;
}
cts_stmt_finalize(stmt);
ctsvc_set_addressbook_noti();
+ } while (0);
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
+ }
- ret = ctsvc_end_trans(true);
- if(ret < CONTACTS_ERROR_NONE )
- {
- CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
- return ret;
- }
-
- return CONTACTS_ERROR_NONE;
-
- } while(0);
+ if (CONTACTS_ERROR_NONE != ret) {
+ ctsvc_end_trans(false);
+ return ret;
+ }
- /* ROLLBACK TRANSACTION */
- ctsvc_end_trans(false);
+ ret = ctsvc_end_trans(true);
+ RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
- return ret;
+ return CONTACTS_ERROR_NONE;
}
static inline int __ctsvc_db_addressbook_reset_internal_addressbook(void)
ctsvc_set_contact_noti();
ctsvc_set_my_profile_noti();
+ // person noti will set in ctsvc_person_do_garbage_collection : ctsvc_set_person_noti();
ctsvc_set_group_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE) {
if (0 < ret) {
ctsvc_set_my_profile_noti();
ctsvc_set_contact_noti();
+ // person noti will set in ctsvc_person_do_garbage_collection : ctsvc_set_person_noti();
ctsvc_set_group_noti();
ctsvc_set_addressbook_noti();
}
addressbook = (ctsvc_addressbook_s*)record;
if (0 == s_query->projection_count)
field_count = s_query->property_count;
- else
- {
+ else {
field_count = s_query->projection_count;
+ ret = ctsvc_record_set_projection_flags(record, s_query->projection,
+ s_query->projection_count, s_query->property_count);
- if( CONTACTS_ERROR_NONE != ctsvc_record_set_projection_flags(record, s_query->projection, s_query->projection_count, s_query->property_count) )
- {
+ if (CONTACTS_ERROR_NONE != ret)
ASSERT_NOT_REACHED("To set projection is failed.\n");
- }
}
for(i=0;i<field_count;i++) {
#include "ctsvc_db_query.h"
#include "ctsvc_list.h"
-#define CTS_LOGO_IMAGE_LOCATION "/opt/usr/data/contacts-svc/img/logo"
-
static int __ctsvc_db_company_insert_record( contacts_record_h record, int *id );
static int __ctsvc_db_company_get_record( int id, contacts_record_h* out_record );
static int __ctsvc_db_company_update_record( contacts_record_h record );
ret = ctsvc_db_contact_update_changed_time(company->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
-
- ctsvc_set_contact_noti();
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
"SELECT contact_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", company->contact_id);
ret = ctsvc_query_get_first_int_result(query, &contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
+ CTS_ERR("No data : contact_id (%d) is not exist", company->contact_id);
ctsvc_end_trans(false);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ return ret;
}
ret = ctsvc_db_company_update(record, company->contact_id, false);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+ CTS_ERR("Update record Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
// TODO ; contact display company update
ret = ctsvc_db_contact_update_changed_time(company->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
- ctsvc_set_contact_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
{
if( ret != CONTACTS_ERROR_NONE ) {
CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
ctsvc_end_trans(false);
- return contact_id;
+ return ret;
}
- ret = ctsvc_db_company_delete(id);
+ ret = ctsvc_db_company_delete(id, false);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
ctsvc_end_trans(false);
ret = ctsvc_db_contact_update_changed_time(contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
-
- ctsvc_set_contact_noti();
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
#include "ctsvc_sqlite.h"
#include "ctsvc_utils.h"
#include "ctsvc_db_init.h"
+#include "ctsvc_db_query.h"
#include "ctsvc_db_plugin_company_helper.h"
#include "ctsvc_record.h"
#include "ctsvc_notification.h"
#define CTS_LOGO_IMAGE_LOCATION "/opt/usr/data/contacts-svc/img/logo"
-static int __ctsvc_company_add_logo_file(int index, char *src_img, char *dest_name, int dest_size)
+static int __ctsvc_company_add_logo_file(int parent_id, int company_id, char *src_img, char *dest_name, int dest_size)
{
int ret;
char *ext;
if (NULL == ext || strchr(ext, '/'))
ext = "";
- snprintf(dest, sizeof(dest), "%s/%d%s",
- CTS_LOGO_IMAGE_LOCATION, index, ext);
+ snprintf(dest, sizeof(dest), "%s/%d_%d%s",
+ CTS_LOGO_IMAGE_LOCATION, parent_id, company_id, ext);
ret = ctsvc_copy_image(src_img, dest);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "cts_copy_file() Failed(%d)", ret);
- snprintf(dest_name, dest_size, "%d%s", index, ext);
+ snprintf(dest_name, dest_size, "%d_%d%s", parent_id, company_id, ext);
return CONTACTS_ERROR_NONE;
}
-static int __ctsvc_company_update_logo_file(int index, char *src_img, char *dest_name, int dest_size)
+static int __ctsvc_company_delete_logo_file(int company_id)
+{
+ int ret;
+ cts_stmt stmt;
+ char *tmp_path;
+ char query[CTS_SQL_MIN_LEN] = {0};
+ snprintf(query, sizeof(query),
+ "SELECT data8 FROM %s WHERE id = %d AND datatype = %d",
+ CTS_TABLE_DATA, company_id, CTSVC_DATA_COMPANY);
+
+ stmt = cts_query_prepare(query);
+ if (NULL == stmt) {
+ CTS_ERR("cts_query_prepare() Failed");
+ cts_stmt_finalize(stmt);
+ return CONTACTS_ERROR_DB;
+ }
+
+ ret = cts_stmt_step(stmt);
+ if (1 /*CTS_TRUE*/ != ret) {
+ CTS_DBG("cts_stmt_step() Failed(%d)", ret);
+ cts_stmt_finalize(stmt);
+ return CONTACTS_ERROR_NO_DATA;
+ }
+
+ tmp_path = ctsvc_stmt_get_text(stmt, 0);
+ if (tmp_path) {
+ char full_path[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
+ snprintf(full_path, sizeof(full_path), "%s/%s", CTS_LOGO_IMAGE_LOCATION, tmp_path);
+ ret = unlink(full_path);
+ WARN_IF(ret < 0, "unlink(%s) Failed(%d)", full_path, errno);
+ }
+ cts_stmt_finalize(stmt);
+
+ return CONTACTS_ERROR_NONE;
+}
+
+
+static int __ctsvc_company_update_logo_file(int parent_id, int company_id, char *src_img, char *dest_name, int dest_size)
{
int ret;
dest_name[0] = '\0';
- ret = ctsvc_company_delete_logo_file(index);
+ ret = __ctsvc_company_delete_logo_file(company_id);
RETVM_IF(CONTACTS_ERROR_NONE != ret && CONTACTS_ERROR_NO_DATA != ret,
ret, "ccts_company_delete_logo_file() Failed(%d)", ret);
if (src_img) {
- ret = __ctsvc_company_add_logo_file(index, src_img, dest_name, dest_size);
+ ret = __ctsvc_company_add_logo_file(parent_id, company_id, src_img, dest_name, dest_size);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_company_add_logo_file() Failed(%d)", ret);
}
return ret;
int ctsvc_db_company_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id)
{
int ret;
+ int company_id = 0;
cts_stmt stmt = NULL;
ctsvc_company_s *company = (ctsvc_company_s*)record;
char query[CTS_SQL_MAX_LEN] = {0};
-// RETVM_IF(company->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted company record");
RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact_id(%d) is mandatory field to insert company record ", company->contact_id);
RETVM_IF(0 < company->id, CONTACTS_ERROR_INVALID_PARAMETER,
if (company->name || company->department || company->job_title || company->role
|| company->assistant_name || company->logo || company->location || company->description
|| company->phonetic_name) {
+
+ ret = cts_db_get_next_id(CTS_TABLE_DATA);
+ if (ret < CONTACTS_ERROR_NONE) {
+ CTS_ERR("cts_db_get_next_id() Failed(%d)", ret);
+ ctsvc_end_trans(false);
+ return ret;
+ }
+ company_id = ret;
+
snprintf(query, sizeof(query),
- "INSERT INTO "CTS_TABLE_DATA"(contact_id, is_my_profile, datatype, is_default, data1, data2, data3, data4, "
+ "INSERT INTO "CTS_TABLE_DATA"(id, contact_id, is_my_profile, datatype, is_default, data1, data2, data3, data4, "
"data5, data6, data7, data8, data9, data10, data11, data12) "
- "VALUES(%d, %d, %d, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
- contact_id, is_my_profile, CTSVC_DATA_COMPANY);
+ "VALUES(%d, %d, %d, %d, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
+ company_id, contact_id, is_my_profile, CTSVC_DATA_COMPANY);
stmt = cts_query_prepare(query);
RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
__ctsvc_company_bind_stmt(stmt, company, 1);
if (company->logo) {
char image[CTS_SQL_MAX_LEN] = {0};
- ret = __ctsvc_company_add_logo_file(company->contact_id, company->logo, image, sizeof(image));
+ ret = __ctsvc_company_add_logo_file(contact_id, company->id, company->logo, image, sizeof(image));
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("__ctsvc_company_add_logo_file() Failed(%d)", ret);
cts_stmt_finalize(stmt);
cts_stmt_finalize(stmt);
return ret;
}
- if (id)
- *id = cts_db_get_last_insert_id();
cts_stmt_finalize(stmt);
+ company->id = company_id;
+ if (id)
+ *id = company_id;
+
if (!is_my_profile)
ctsvc_set_company_noti();
}
int ctsvc_db_company_update(contacts_record_h record, int contact_id, bool is_my_profile)
{
- int ret;
- ctsvc_company_s *company = (ctsvc_company_s*)record;
+ int id;
+ int ret = CONTACTS_ERROR_NONE;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
char query[CTS_SQL_MAX_LEN] = {0};
- cts_stmt stmt;
+ ctsvc_company_s *company = (ctsvc_company_s*)record;
RETVM_IF(!company->id, CONTACTS_ERROR_INVALID_PARAMETER, "company of contact has no ID.");
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (company->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
- if (company->name || company->department || company->job_title || company->role
- || company->assistant_name || company->logo || company->location || company->description
- || company->phonetic_name) {
- snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_DATA" SET contact_id=%d, is_my_profile=%d, is_default=?, data1=?, data2=?, data3=?, data4=?,"
- "data5=?, data6=?, data7=?, data8=?, data9=?, data10=?, data11=?, data12=? WHERE id=%d",
- contact_id, is_my_profile, company->id);
-
- stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
+ snprintf(query, sizeof(query),
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", company->id);
+ ret = ctsvc_query_get_first_int_result(query, &id);
+ RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
- __ctsvc_company_bind_stmt(stmt, company, 1);
- if (company->logo_changed) {
- char dest[CTS_SQL_MAX_LEN] = {0};
- __ctsvc_company_update_logo_file(contact_id, company->logo, dest, sizeof(dest));
- if (*dest)
- cts_stmt_bind_text(stmt, 9, dest);
- company->logo_changed = false;
- }
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
+ if (company->logo_changed) {
+ char dest[CTS_SQL_MAX_LEN] = {0};
+ __ctsvc_company_update_logo_file(contact_id, company->id, company->logo, dest, sizeof(dest));
+ if (*dest) {
+ free(company->logo);
+ company->logo = strdup(dest);
}
+ company->logo_changed = false;
+ }
- cts_stmt_finalize(stmt);
-
+ do {
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, company->id))) break;
if (!is_my_profile)
ctsvc_set_company_noti();
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
}
- return CONTACTS_ERROR_NONE;
+
+ return ret;
}
-int ctsvc_db_company_delete(int id)
+int ctsvc_db_company_delete(int id, bool is_my_profile)
{
int ret;
char query[CTS_SQL_MIN_LEN] = {0};
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
- ctsvc_set_company_noti();
+ if (!is_my_profile)
+ ctsvc_set_company_noti();
return CONTACTS_ERROR_NONE;
}
-int ctsvc_company_delete_logo_file(int index)
+void ctsvc_db_data_company_delete_callback(sqlite3_context *context, int argc, sqlite3_value ** argv)
{
int ret;
- cts_stmt stmt;
- char *tmp_path;
- char query[CTS_SQL_MIN_LEN] = {0};
- snprintf(query, sizeof(query),
- "SELECT data8 FROM %s WHERE contact_id = %d AND datatype = %d AND is_my_profile = 0",
- CTS_TABLE_DATA, index, CTSVC_DATA_COMPANY);
+ const unsigned char* logo_path;
- stmt = cts_query_prepare(query);
- if (NULL == stmt) {
- CTS_ERR("cts_query_prepare() Failed");
- cts_stmt_finalize(stmt);
- return CONTACTS_ERROR_DB;
+ if (argc > 1) {
+ sqlite3_result_null(context);
+ return;
}
+ logo_path = sqlite3_value_text(argv[0]);
- ret = cts_stmt_step(stmt);
- if (1 /*CTS_TRUE*/ != ret) {
- CTS_DBG("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return CONTACTS_ERROR_NO_DATA;
- }
-
- tmp_path = ctsvc_stmt_get_text(stmt, 0);
- if (tmp_path) {
+ if (logo_path) {
char full_path[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
- snprintf(full_path, sizeof(full_path), "%s/%s", CTS_LOGO_IMAGE_LOCATION, tmp_path);
+ snprintf(full_path, sizeof(full_path), "%s/%s", CTS_LOGO_IMAGE_LOCATION, logo_path);
ret = unlink(full_path);
WARN_IF(ret < 0, "unlink(%s) Failed(%d)", full_path, errno);
}
- cts_stmt_finalize(stmt);
- return CONTACTS_ERROR_NONE;
+ return;
}
+
int ctsvc_db_company_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
int ctsvc_db_company_update(contacts_record_h record, int contact_id, bool is_my_profile);
-int ctsvc_db_company_delete(int id);
-
+int ctsvc_db_company_delete(int id, bool is_my_profile);
int ctsvc_db_company_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
-int ctsvc_company_delete_logo_file(int index);
+void ctsvc_db_data_company_delete_callback(sqlite3_context *context, int argc, sqlite3_value ** argv);
#endif // __CTSVC_DB_PLUGIN_COMPANY_HELPER_H__
#define CTSVC_MY_IMAGE_LOCATION "/opt/usr/data/contacts-svc/img/my"
-#define CTSVC_CONTACT_DISPLAY_NAME_MAX_LEN 1024
-#define CTSVC_CONTACT_SEARCH_DATA_MAX_LEN 1024
#define CTSVC_CONTACT_INITIAL_DATA_MAX_LEN 128
static int __ctsvc_db_contact_insert_record( contacts_record_h record, int *id );
char query[CTS_SQL_MAX_LEN] = {0};
cts_stmt stmt = NULL;
+ ret = ctsvc_begin_trans();
+ RETVM_IF(ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
+
snprintf(query, sizeof(query),
"SELECT addressbook_id, person_id "
"FROM "CTS_TABLE_CONTACTS" WHERE contact_id = %d AND deleted = 0", id);
stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB , "DB error : cts_query_prepare() Failed");
+ if (NULL == stmt) {
+ CTS_ERR("DB error : cts_query_prepare() Failed");
+ ctsvc_end_trans(false);
+ return CONTACTS_ERROR_DB;
+ }
ret = cts_stmt_step(stmt);
if (1 != ret) {
CTS_ERR("DB error : cts_stmt_step() Failed(%d)", ret);
cts_stmt_finalize(stmt);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ ctsvc_end_trans(false);
+ if (CONTACTS_ERROR_NONE == ret)
+ return CONTACTS_ERROR_NO_DATA;
+ else
+ return ret;
}
addressbook_id = ctsvc_stmt_get_int(stmt, 0);
CTS_DBG("addressbook_id : %d, person_id : %d", addressbook_id, person_id);
cts_stmt_finalize(stmt);
- ret = ctsvc_begin_trans();
- RETVM_IF(ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
-
snprintf(query, sizeof(query),
"UPDATE %s SET member_changed_ver=%d "
"WHERE group_id IN (SELECT group_id FROM %s WHERE contact_id = %d AND deleted = 0) ",
return strcmp(s1, s2);
}
-static inline void __ctsvc_update_contact_display_name(ctsvc_contact_s *contact)
-{
- char *temp_display_name = NULL;
- char *display = NULL;
- char *sortkey = NULL;
- GList *cur;
- int ret, len=0, display_len=0;
-
- ctsvc_name_s *name = NULL;
- if ( contact->name->count > 0 && contact->name->records != NULL && contact->name->records->data != NULL )
- {
- name = (ctsvc_name_s *)contact->name->records->data;
- }
-
- if ( name && ( name->first || name->last) ) {
- if (name->first && name->last){
- temp_display_name = calloc(1, SAFE_STRLEN(name->first) + SAFE_STRLEN(name->first) + 2 );
- snprintf(temp_display_name, SAFE_STRLEN(name->first) + SAFE_STRLEN(name->first) + 2, "%s %s",name->first,name->last);
- }
- else if (name->first)
- temp_display_name = strdup(name->first);
- else
- temp_display_name = strdup(name->last);
-
- if (0 != __ctsvc_safe_strcmp(contact->display_name, temp_display_name)
- || CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NAME != contact->display_source_type) {
- contact->display_name_changed = true;
-
- // make display name
- display_len = SAFE_STRLEN(name->first)
- + SAFE_STRLEN(name->addition)
- + SAFE_STRLEN(name->last)
- + SAFE_STRLEN(name->suffix) + 5;
-
- display = calloc(1, display_len);
-
- if(name->first)
- len += snprintf(display + len, display_len - len, "%s", name->first);
-
- if(name->addition) {
- if (*display)
- len += snprintf(display + len, display_len - len, " ");
- len += snprintf(display + len, display_len - len, "%s", name->addition);
- }
-
- if(name->last) {
- if (*display)
- len += snprintf(display + len, display_len - len, " ");
- len += snprintf(display + len, display_len - len, "%s", name->last);
- }
-
- if(name->suffix) {
- if (*display)
- len += snprintf(display + len, display_len - len, " ");
- len += snprintf(display + len, display_len - len, "%s", name->suffix);
- }
- contact->display_name = display;
-
- display = calloc(1, display_len);
- // make reverse_display_name
- len = 0;
- if(name->last) {
- len += snprintf(display + len, display_len - len, "%s", name->last);
-
- if(name->first || name->addition)
- len += snprintf(display + len, display_len - len, ",");
- }
-
- if(name->first) {
- if (*display)
- len += snprintf(display + len, display_len - len, " ");
- len += snprintf(display + len, display_len - len, "%s", name->first);
- }
-
- if(name->addition) {
- if (*display)
- len += snprintf(display + len, display_len - len, " ");
- len += snprintf(display + len, display_len - len, "%s", name->addition);
- }
-
- if(name->suffix) {
- if (*display)
- len += snprintf(display + len, sizeof(display) - len, " ");
- len += snprintf(display + len, sizeof(display) - len, "%s", name->suffix);
- }
-
-
- contact->reverse_display_name = display;
-
- ret = ctsvc_check_language_type(contact->display_name);
- if (0 <= ret) {
- if (ctsvc_get_default_language() == ret)
- contact->display_name_language = CTSVC_LANG_DEFAULT;
- else if (ctsvc_get_secondary_language() == ret)
- contact->display_name_language = CTSVC_LANG_SECONDARY;
- else
- contact->display_name_language = ret;
- }
-
- ret = ctsvc_collation_str(contact->display_name, &sortkey);
- if (CONTACTS_ERROR_NONE == ret)
- contact->sortkey = sortkey;
- else
- free(sortkey);
- sortkey = NULL;
-
- ret = ctsvc_collation_str(contact->reverse_display_name, &sortkey);
- if (CONTACTS_ERROR_NONE == ret)
- contact->reverse_sortkey = sortkey;
- else
- free(sortkey);
- contact->display_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NAME;
- }
-
- free(temp_display_name);
- }
-
- else {
- if (contact->company && contact->company->records) {
- for (cur=contact->company->records;cur;cur=cur->next) {
- ctsvc_company_s *company = (ctsvc_company_s *)cur->data;
- if (company && company->name) {
- if (__ctsvc_safe_strcmp(contact->display_name, company->name)
- || CONTACTS_DISPLAY_NAME_SOURCE_TYPE_COMPANY != contact->display_source_type) {
- contact->display_name_changed = true;
- contact->display_name = SAFE_STRDUP(company->name);
- contact->display_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_COMPANY;
- break;
- }
- }
- }
- }
- else if (contact->nicknames && contact->nicknames->records) {
- for (cur=contact->nicknames->records;cur;cur=cur->next) {
- ctsvc_nickname_s *nickname = (ctsvc_nickname_s *)cur->data;
- if (nickname && nickname->nickname) {
- if (__ctsvc_safe_strcmp(contact->display_name, nickname->nickname)
- || CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NICKNAME != contact->display_source_type) {
- contact->display_name = SAFE_STRDUP(nickname->nickname);
- contact->display_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NICKNAME;
- break;
- }
- }
- }
- }
- else if (contact->numbers && contact->numbers->records) {
- for (cur=contact->numbers->records;cur;cur=cur->next) {
- ctsvc_number_s *number = (ctsvc_number_s *)cur->data;
- if (number && number->number) {
- if (__ctsvc_safe_strcmp(contact->display_name, number->number)
- || CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NUMBER != contact->display_source_type) {
- contact->display_name_changed = true;
- contact->display_name = SAFE_STRDUP(number->number);
- contact->display_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NUMBER;
- break;
- }
- }
- }
- }
- else if (contact->emails && contact->emails->records) {
- for (cur=contact->emails->records;cur;cur=cur->next) {
- ctsvc_email_s *email = (ctsvc_email_s*)cur->data;
- if (email && email->email_addr) {
- if (__ctsvc_safe_strcmp(contact->display_name, email->email_addr)
- || CONTACTS_DISPLAY_NAME_SOURCE_TYPE_EMAIL != contact->display_source_type) {
- contact->display_name_changed = true;
- contact->display_name = SAFE_STRDUP(email->email_addr);
- contact->display_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_EMAIL;
- break;
- }
- }
- }
- }
-
- if (contact->display_name_changed) {
- contact->reverse_display_name = SAFE_STRDUP(contact->display_name);
-
- ret = ctsvc_check_language_type(contact->display_name);
- if (0 <= ret) {
- if (ctsvc_get_default_language() == ret)
- contact->display_name_language = CTSVC_LANG_DEFAULT;
- else if (ctsvc_get_secondary_language() == ret)
- contact->display_name_language = CTSVC_LANG_SECONDARY;
- else
- contact->display_name_language = ret;
- }
-
- ret = ctsvc_collation_str(contact->display_name, &sortkey);
- if (CONTACTS_ERROR_NONE == ret) {
- contact->sortkey = sortkey;
- contact->reverse_sortkey = strdup(sortkey);
- }
- else
- free(sortkey);
- }
- }
- return;
-}
-
static inline int __ctsvc_update_contact_data(ctsvc_contact_s *contact)
{
int ret;
if (contact->display_name) {
if (ctsvc_has_chinese(contact->display_name)) {
- pinyin_name_s *pinyinname;
- int size, i;
+ if (CTSVC_LANG_JAPANESE == ctsvc_check_language_type(contact->sort_name)) {
+ char *normalized_display_name=NULL;
- ret = ctsvc_convert_chinese_to_pinyin(contact->display_name, &pinyinname, &size);
+ ctsvc_normalize_str(contact->display_name, &normalized_display_name);
+ buf_size = SAFE_STRLEN(normalized_display_name) + strlen(contact->sort_name) + 2;
+ name = calloc(1, buf_size);
+ snprintf(name, buf_size, "%s %s", normalized_display_name, contact->sort_name);
- if (CONTACTS_ERROR_NONE == ret) {
- char *name_nospace = calloc(1, CHINESE_PINYIN_SPELL_MAX_LEN);
- char *temp_name = NULL;
+ free(normalized_display_name);
+ }
+ else {
+ pinyin_name_s *pinyinname;
+ int size, i, len;
- name = calloc(1, strlen(contact->display_name)* 5);
+ ret = ctsvc_convert_chinese_to_pinyin(contact->display_name, &pinyinname, &size);
- ctsvc_normalize_str(contact->display_name, name, strlen(contact->display_name)* 5);
+ if (CONTACTS_ERROR_NONE == ret) {
+ char *name_nospace = calloc(1, CHINESE_PINYIN_SPELL_MAX_LEN);
+ char *temp_name = NULL;
- for(i=0; i<size; i++) {
- __ctsvc_remove_space(pinyinname[i].pinyin_name, name_nospace, CHINESE_PINYIN_SPELL_MAX_LEN*(CHINESE_PINYIN_MAX_LEN+1));
+ ctsvc_normalize_str(contact->display_name, &name);
- buf_size = SAFE_STRLEN(name)
- + SAFE_STRLEN(pinyinname[i].pinyin_name)
- + SAFE_STRLEN(name_nospace) + 4;
- temp_name = calloc(1, buf_size);
- snprintf(temp_name, buf_size, "%s %s %s %s",
- name, pinyinname[i].pinyin_name, name_nospace, pinyinname[i].pinyin_initial);
+ for(i=0; i<size; i++) {
+ __ctsvc_remove_space(pinyinname[i].pinyin_name, name_nospace, CHINESE_PINYIN_SPELL_MAX_LEN*(CHINESE_PINYIN_MAX_LEN+1));
- free(name);
- name = temp_name;
- }
+ buf_size = SAFE_STRLEN(name)
+ + SAFE_STRLEN(pinyinname[i].pinyin_name)
+ + SAFE_STRLEN(name_nospace)
+ + SAFE_STRLEN(pinyinname[i].pinyin_initial)
+ + 4;
+ temp_name = calloc(1, buf_size);
+ snprintf(temp_name, buf_size, "%s %s %s %s",
+ name, pinyinname[i].pinyin_name, name_nospace, pinyinname[i].pinyin_initial);
- free(name_nospace);
- free(pinyinname);
- }
- else {
- char initial[CTSVC_CONTACT_INITIAL_DATA_MAX_LEN] = {0,};
- char *normalized_display_name = NULL;
+ free(name);
+ name = temp_name;
+ }
- normalized_display_name = calloc(1, strlen(contact->display_name)* 5);
+ len = ctsvc_check_utf8(contact->display_name[0]);
+ for(i=len; i < strlen(contact->display_name); i+=len) {
+ len = ctsvc_check_utf8(contact->display_name[i]);
- ctsvc_normalize_str(contact->display_name, normalized_display_name, strlen(contact->display_name)* 5);
- __ctsvc_contact_get_initial(contact->display_name, initial, sizeof(initial), false);
- buf_size = SAFE_STRLEN(normalized_display_name) + strlen(initial) + 2;
- name = calloc(1, buf_size);
- snprintf(name, buf_size, "%s %s", normalized_display_name, initial);
+ buf_size = SAFE_STRLEN(name) + SAFE_STRLEN(&contact->display_name[i]) + 2;
+ temp_name = calloc(1, buf_size);
- free(normalized_display_name);
+ snprintf(temp_name, buf_size, "%s %s", name, &contact->display_name[i]);
+
+ free(name);
+ name = temp_name;
+ }
+
+ free(name_nospace);
+ free(pinyinname);
+ }
+ else {
+ char initial[CTSVC_CONTACT_INITIAL_DATA_MAX_LEN] = {0,};
+ char *normalized_display_name = NULL;
+
+ ctsvc_normalize_str(contact->display_name, &normalized_display_name);
+ __ctsvc_contact_get_initial(contact->display_name, initial, sizeof(initial), false);
+ buf_size = SAFE_STRLEN(normalized_display_name) + strlen(initial) + 2;
+ name = calloc(1, buf_size);
+ snprintf(name, buf_size, "%s %s", normalized_display_name, initial);
+
+ free(normalized_display_name);
+ }
}
}
else if (CTSVC_LANG_KOREAN == ctsvc_check_language_type(contact->display_name)) {
char *temp_name = NULL;
- char *chosung = calloc(1, strlen(contact->display_name) + 1);
+ char *chosung = calloc(1, strlen(contact->display_name) * 5);
int count, i, j;
int full_len, chosung_len;
int total_len = strlen(contact->display_name);
- count = ctsvc_get_chosung(contact->display_name, chosung, strlen(contact->display_name) + 1 );
-
- name = calloc(1, strlen(contact->display_name)* 5);
+ count = ctsvc_get_chosung(contact->display_name, chosung, strlen(contact->display_name) * 5 );
- ctsvc_normalize_str(contact->display_name, name, strlen(contact->display_name)* 5);
+ ctsvc_normalize_str(contact->display_name, &name);
if (count > 0) {
for(i=0, j=0; i < total_len; i+=full_len, j+=chosung_len) {
}
free(chosung);
}
+ else if (CTSVC_LANG_JAPANESE == ctsvc_check_language_type(contact->display_name)) {
+ ctsvc_convert_japanese_to_hiragana(contact->display_name, &name);
+ }
else {
char initial[CTSVC_CONTACT_INITIAL_DATA_MAX_LEN] = {0,};
char *normalized_display_name=NULL;
- normalized_display_name = calloc(1, strlen(contact->display_name)* 5);
-
- ctsvc_normalize_str(contact->display_name, normalized_display_name, strlen(contact->display_name)* 5);
+ ctsvc_normalize_str(contact->display_name, &normalized_display_name);
__ctsvc_contact_get_initial(contact->display_name, initial, sizeof(initial), false);
buf_size = SAFE_STRLEN(normalized_display_name) + strlen(initial) + 2;
name = calloc(1, buf_size);
return CONTACTS_ERROR_NONE;
}
+static inline int __ctsvc_contact_refresh_lookup_data(int contact_id)
+{
+ int ret, len = 0, temp_len =0;
+ char query[CTS_SQL_MAX_LEN] = {0};
+ ctsvc_contact_s *contact;
+
+ snprintf(query, sizeof(query), "DELETE FROM %s WHERE contact_id = %d",
+ CTS_TABLE_NAME_LOOKUP, contact_id);
+ ret = ctsvc_query_exec(query);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
+ return ret;
+ }
+
+ snprintf(query, sizeof(query), "DELETE FROM %s WHERE contact_id = %d",
+ CTS_TABLE_PHONE_LOOKUP, contact_id);
+ ret = ctsvc_query_exec(query);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
+ return ret;
+ }
+
+ ret = contacts_db_get_record(_contacts_contact._uri, contact_id, (contacts_record_h*)&contact);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("contacts_db_get_record() Failed(%d)", ret);
+ return ret;
+ }
+
+ if (contact->name) {
+ contacts_list_h name_list = (contacts_list_h)contact->name;
+ ctsvc_name_s *name_record;
+ char *temp_name = NULL;
+ contacts_list_first(name_list);
+ len = 0;
+ do {
+ contacts_list_get_current_record_p(name_list, (contacts_record_h*)&name_record);
+ if (NULL != name_record) {
+ char *normalized_name = NULL;
+ // make display name
+ temp_len = SAFE_STRLEN(name_record->first) + SAFE_STRLEN(name_record->addition)
+ + SAFE_STRLEN(name_record->last)+ SAFE_STRLEN(name_record->suffix) + 1;
+ temp_name = calloc(1, temp_len);
+ if(name_record->last)
+ len += snprintf(temp_name + len, temp_len - len, "%s", name_record->last);
+ if(name_record->first)
+ len += snprintf(temp_name + len, temp_len - len, "%s", name_record->first);
+ if(name_record->addition)
+ len += snprintf(temp_name + len, temp_len - len, "%s", name_record->addition);
+ if(name_record->suffix)
+ len += snprintf(temp_name + len, temp_len - len, "%s", name_record->suffix);
+
+ ctsvc_normalize_str(temp_name, &normalized_name);
+ snprintf(query, sizeof(query), "INSERT INTO %s(data_id, contact_id, name, type) "
+ "VALUES(%d, %d, '%s', %d)", CTS_TABLE_NAME_LOOKUP, name_record->id,
+ contact_id, normalized_name, 0);
+
+ ret = ctsvc_query_exec(query);
+ free(temp_name);
+ free(normalized_name);
+
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
+ contacts_record_destroy((contacts_record_h)contact, true);
+ return CONTACTS_ERROR_DB;
+ }
+ }
+ }while(CONTACTS_ERROR_NONE == contacts_list_next(name_list));
+ }
+
+ if (contact->numbers) {
+ contacts_list_h number_list = (contacts_list_h)contact->numbers;
+ ctsvc_number_s *number_record;
+ contacts_list_first(number_list);
+ len = 0;
+ do {
+ contacts_list_get_current_record_p(number_list, (contacts_record_h*)&number_record);
+ if (NULL != number_record) {
+ char normalized_number[CTSVC_NUMBER_MAX_LEN];
+
+ ctsvc_normalize_number(number_record->number, normalized_number, CTSVC_NUMBER_MAX_LEN, CTSVC_NUMBER_MAX_LEN -1);
+ snprintf(query, sizeof(query), "INSERT INTO %s(data_id, contact_id, number, min_match) "
+ "VALUES(%d, %d, '%s', '%s')", CTS_TABLE_PHONE_LOOKUP, number_record->id,
+ contact_id, normalized_number, number_record->lookup);
+
+ ret = ctsvc_query_exec(query);
+
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
+ contacts_record_destroy((contacts_record_h)contact, true);
+ return CONTACTS_ERROR_DB;
+ }
+ }
+ }while(CONTACTS_ERROR_NONE == contacts_list_next(number_list));
+ }
+
+ if (contact->nicknames) {
+ contacts_list_h nickname_list = (contacts_list_h)contact->nicknames;
+ ctsvc_nickname_s *nickname;
+ contacts_list_first(nickname_list);
+ do {
+ contacts_list_get_current_record_p(nickname_list, (contacts_record_h*)&nickname);
+ if (NULL != nickname && NULL != nickname->nickname) {
+ char *normalized_nickname = NULL;
+ ctsvc_normalize_str(nickname->nickname, &normalized_nickname);
+ snprintf(query, sizeof(query), "INSERT INTO %s(data_id, contact_id, name, type) "
+ "VALUES(%d, %d, '%s', %d)", CTS_TABLE_NAME_LOOKUP, nickname->id,
+ contact_id, normalized_nickname, 0);
+
+ ret = ctsvc_query_exec(query);
+ free(normalized_nickname);
+
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
+ contacts_record_destroy((contacts_record_h)contact, true);
+ return CONTACTS_ERROR_DB;
+ }
+ }
+ }while(CONTACTS_ERROR_NONE == contacts_list_next(nickname_list));
+ }
+
+ contacts_record_destroy((contacts_record_h)contact, true);
+
+ return CONTACTS_ERROR_NONE;
+}
+
static inline int __ctsvc_update_contact_search_data(int contact_id)
{
int ret;
}
cts_stmt_finalize(stmt);
+ ret = __ctsvc_contact_refresh_lookup_data(contact_id);
+
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("__ctsvc_contact_refresh_lookup_data() Failed(%d)", ret);
+ ctsvc_end_trans(false);
+ return ret;
+ }
+
ret = ctsvc_end_trans(true);
RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_end_trans() Failed(%d)", ret);
static int __ctsvc_db_contact_update_record( contacts_record_h record )
{
- int i, ret, len;
+ int ret, len = 0;
int rel_changed = 0;
int count;
+ int version;
+ char *set = NULL;
char query[CTS_SQL_MAX_LEN] = {0};
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
ctsvc_contact_s *contact = (ctsvc_contact_s*)record;
- cts_stmt stmt;
+
+ ret = ctsvc_begin_trans();
+ RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
snprintf(query, sizeof(query),
"SELECT count(contact_id) FROM "CTS_TABLE_CONTACTS" "
"WHERE contact_id = %d AND deleted = 0", contact->id);
ret = ctsvc_query_get_first_int_result(query, &count);
- RETVM_IF(1 != count, CONTACTS_ERROR_NO_DATA,
- "The index(%d) is Invalid. %d Record(s) is(are) found", contact->id, ret);
-
- ret = ctsvc_begin_trans();
- RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("The index(%d) is Invalid. %d Record(s) is(are) found", contact->id, ret);
+ ctsvc_end_trans(false);
+ return ret;
+ }
- __ctsvc_update_contact_display_name(contact);
+ ctsvc_make_contact_display_name(contact);
__ctsvc_contact_check_default_data(contact);
//update data
if (contact->images) {
int ret = CONTACTS_ERROR_NONE;
- contacts_record_h record = NULL;
+ contacts_record_h record_image = NULL;
unsigned int count = 0;
ctsvc_list_s *list = (ctsvc_list_s*)contact->images;
ctsvc_image_s *image;
for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
image = (ctsvc_image_s *)cursor->data;
contact->image_thumbnail_path = NULL;
+ contact->image_thumbnail_changed = true;
}
contacts_list_get_count((contacts_list_h)contact->images, &count);
if (count) {
contacts_list_first((contacts_list_h)contact->images);
- ret = contacts_list_get_current_record_p((contacts_list_h)contact->images, &record);
+ ret = contacts_list_get_current_record_p((contacts_list_h)contact->images, &record_image);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("contacts_list_get_current_record_p() Failed(%d)", ret);
ctsvc_end_trans(false);
return CONTACTS_ERROR_DB;
}
- image = (ctsvc_image_s*)record;
+
+ if (ctsvc_record_check_property_flag((ctsvc_record_s *)record_image, _contacts_image.path, CTSVC_PROPERTY_FLAG_DIRTY))
+ contact->image_thumbnail_changed = true;
+
+ image = (ctsvc_image_s*)record_image;
if ( image->path && *image->path && strstr(image->path, CTS_IMG_FULL_LOCATION) != NULL)
contact->image_thumbnail_path = SAFE_STRDUP( image->path + strlen(CTS_IMG_FULL_LOCATION) + 1);
else
contact->image_thumbnail_path = SAFE_STRDUP(image->path);
-
}
- contact->image_thumbnail_changed = true;
}
// this code will be removed.
//////////////////////////////////////////////////////////////////////
- len = snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_CONTACTS" SET changed_ver=%d, changed_time=%d, "
- "has_phonenumber=%d, has_email=%d ",
- ctsvc_get_next_ver(), (int)time(NULL),
- contact->has_phonenumber, contact->has_email);
-
if (contact->display_name_changed)
- len += snprintf(query+len, sizeof(query)-len, ", display_name=?, "
- "reverse_display_name=?, display_name_source=?, display_name_language=?, "
- "sortkey=?, reverse_sortkey=?");
+ ctsvc_record_set_property_flag((ctsvc_record_s *)contact, _contacts_contact.display_name, CTSVC_PROPERTY_FLAG_DIRTY);
- if (contact->uid_changed)
- len += snprintf(query+len, sizeof(query)-len, ", uid=?");
+ if (contact->image_thumbnail_changed)
+ ctsvc_record_set_property_flag((ctsvc_record_s *)contact, _contacts_contact.image_thumbnail_path, CTSVC_PROPERTY_FLAG_DIRTY);
- if (contact->ringtone_changed)
- len += snprintf(query+len, sizeof(query)-len, ", ringtone_path=?");
+ do {
+ char query[CTS_SQL_MAX_LEN] = {0};
+ char query_set[CTS_SQL_MIN_LEN] = {0, };
+ cts_stmt stmt = NULL;
- if (contact->vibration_changed)
- len += snprintf(query+len, sizeof(query)-len, ", vibration=?");
+ version = ctsvc_get_next_ver();
- if (contact->image_thumbnail_changed)
- len += snprintf(query+len, sizeof(query)-len, ", image_thumbnail_path=?");
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (set && *set)
+ len = snprintf(query_set, sizeof(query_set), "%s, ", set);
+ len += snprintf(query_set+len, sizeof(query_set)-len, " changed_ver=%d, changed_time=%d, has_phonenumber=%d, has_email=%d",
+ version, (int)time(NULL), contact->has_phonenumber, contact->has_email);
+ if (contact->display_name_changed) {
+ len += snprintf(query_set+len, sizeof(query_set)-len,
+ ", display_name=?, reverse_display_name=?, display_name_source=%d, display_name_language=%d, sortkey=?, reverse_sortkey=?",
+ contact->display_source_type, contact->display_name_language);
+ bind_text = g_slist_append(bind_text, strdup(SAFE_STR(contact->display_name)));
+ bind_text = g_slist_append(bind_text, strdup(SAFE_STR(contact->reverse_display_name)));
+ bind_text = g_slist_append(bind_text, strdup(SAFE_STR(contact->sortkey)));
+ bind_text = g_slist_append(bind_text, strdup(SAFE_STR(contact->reverse_sortkey)));
+ }
- snprintf(query+len, sizeof(query)-len, " WHERE contact_id=%d", contact->id);
+ if (contact->image_thumbnail_changed)
+ len += snprintf(query_set+len, sizeof(query_set)-len, ", image_changed_ver=%d", version);
- stmt = cts_query_prepare(query);
- if (NULL == stmt) {
- CTS_ERR("cts_query_prepare() Failed");
- ctsvc_end_trans(false);
- return CONTACTS_ERROR_DB;
- }
+ snprintf(query, sizeof(query), "UPDATE %s SET %s WHERE contact_id = %d", CTS_TABLE_CONTACTS, query_set, contact->id);
- i=1;
- if (contact->display_name_changed) {
- cts_stmt_bind_text(stmt, i++, contact->display_name);
- cts_stmt_bind_text(stmt, i++, contact->reverse_display_name);
- cts_stmt_bind_int(stmt, i++, contact->display_source_type);
- cts_stmt_bind_int(stmt, i++, contact->display_name_language);
- cts_stmt_bind_text(stmt, i++, contact->sortkey);
- cts_stmt_bind_text(stmt, i++, contact->reverse_sortkey);
- }
- if (contact->uid_changed) {
- if(contact->uid)
- cts_stmt_bind_text(stmt, i, contact->uid);
- i++;
- }
- if (contact->ringtone_changed) {
- if (contact->ringtone_path)
- cts_stmt_bind_text(stmt, i, contact->ringtone_path);
- i++;
- }
- if (contact->vibration_changed) {
- if (contact->vibration)
- cts_stmt_bind_text(stmt, i, contact->vibration);
- i++;
- }
+ stmt = cts_query_prepare(query);
+ if (NULL == stmt) {
+ CTS_ERR("DB error : cts_query_prepare() Failed");
+ ret = CONTACTS_ERROR_DB;
+ break;
+ }
- if (contact->image_thumbnail_changed ) {
- if (contact->image_thumbnail_path) {
- cts_stmt_bind_text(stmt, i, contact->image_thumbnail_path);
+ if (bind_text) {
+ int i = 0;
+ for (cursor=bind_text,i=1;cursor;cursor=cursor->next,i++) {
+ const char *text = cursor->data;
+ if (*text)
+ cts_stmt_bind_text(stmt, i, text);
+ }
}
- i++;
+ ret = cts_stmt_step(stmt);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("cts_stmt_step() Failed(%d)", ret);
+ cts_stmt_finalize(stmt);
+ break;
+ }
+ cts_stmt_finalize(stmt);
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
}
- ret = cts_stmt_step(stmt);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
ctsvc_end_trans(false);
return ret;
}
- cts_stmt_finalize(stmt);
ctsvc_set_contact_noti();
if (0 < rel_changed)
ctsvc_db_update_person((contacts_record_h)contact);
ret = ctsvc_end_trans(true);
- if (ret < CONTACTS_ERROR_NONE)
- {
- CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
- return ret;
- }
- else
- return CONTACTS_ERROR_NONE;
+ RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
+
+ return CONTACTS_ERROR_NONE;
}
static int __ctsvc_db_contact_get_all_records( int offset, int limit, contacts_list_h* out_list )
contact = (ctsvc_contact_s*)record;
if (0 == s_query->projection_count)
field_count = s_query->property_count;
- else
+ else {
field_count = s_query->projection_count;
+ ret = ctsvc_record_set_projection_flags(record, s_query->projection,
+ s_query->projection_count, s_query->property_count);
+
+ if (CONTACTS_ERROR_NONE != ret)
+ ASSERT_NOT_REACHED("To set projection is failed.\n");
+ }
for(i=0;i<field_count;i++) {
char *temp;
}
cts_stmt_finalize(stmt);
+ ret = __ctsvc_contact_refresh_lookup_data(contact_id);
+
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("__ctsvc_contact_refresh_lookup_data() Failed(%d)", ret);
+ ctsvc_end_trans(false);
+ return ret;
+ }
+
ret = ctsvc_end_trans(true);
RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_end_trans() Failed(%d)", ret);
contacts_list_first(group_list);
do {
contacts_list_get_current_record_p(group_list, (contacts_record_h*)&grouprel);
- if (NULL == grouprel || grouprel->base.deleted)
+ if (NULL == grouprel)
continue;
if (grouprel->group_id) {
ret = ctsvc_clean_number(normalized_number, clean_num, sizeof(clean_num));
if (0 < ret) {
- ret = ctsvc_normalize_number(clean_num, normal_num, CTSVC_NUMBER_MAX_LEN);
+ ret = ctsvc_normalize_number(clean_num, normal_num, CTSVC_NUMBER_MAX_LEN, CTSVC_MIN_MATCH_NORMALIZED_NUMBER_SIZE);
snprintf(query, sizeof(query),
"SELECT C.person_id FROM "CTS_TABLE_CONTACTS" C, "CTS_TABLE_DATA" D "
"ON C.contact_id=D.contact_id AND D.datatype=%d AND C.deleted = 0 "
return CONTACTS_ERROR_NO_DATA;
}
-
static int __ctsvc_db_contact_insert_record( contacts_record_h record, int *id)
{
int version;
cts_stmt stmt;
// These check should be done in client side
-// RETVM_IF(contact->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted contact record");
RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact is NULL");
RETVM_IF(contact->addressbook_id < 0, CONTACTS_ERROR_INVALID_PARAMETER,
snprintf(query, sizeof(query),
"INSERT INTO "CTS_TABLE_CONTACTS"(contact_id, person_id, addressbook_id, is_restricted, "
- "created_ver, changed_ver, changed_time, has_phonenumber, has_email, "
+ "created_ver, changed_ver, changed_time, image_changed_ver, has_phonenumber, has_email, "
"display_name, reverse_display_name, display_name_source, display_name_language, "
+ "sort_name, reverse_sort_name, "
"sortkey, reverse_sortkey, "
"uid, ringtone_path, vibration, image_thumbnail_path) "
- "VALUES(%d, %d, %d, %d, %d, %d, %d, %d, %d, ?, ?, %d, %d, ?, ?, ?, ?, ?, ?)",
+ "VALUES(%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, ?, ?, %d, %d, ?, ?, ?, ?, ?, ?, ?, ?)",
contact->id, contact->person_id, contact->addressbook_id, contact->is_restricted,
- version, version, (int)time(NULL), contact->has_phonenumber, contact->has_email,
+ version, version, (int)time(NULL), (NULL !=contact->image_thumbnail_path)?version:0, contact->has_phonenumber, contact->has_email,
contact->display_source_type, contact->display_name_language);
stmt = cts_query_prepare(query);
cts_stmt_bind_text(stmt, 1, contact->display_name);
if (contact->reverse_display_name)
cts_stmt_bind_text(stmt, 2, contact->reverse_display_name);
+ if (contact->sort_name)
+ cts_stmt_bind_text(stmt, 3, contact->sort_name);
+ if (contact->reverse_sort_name)
+ cts_stmt_bind_text(stmt, 4, contact->reverse_sort_name);
if (contact->sortkey)
- cts_stmt_bind_text(stmt, 3, contact->sortkey);
+ cts_stmt_bind_text(stmt, 5, contact->sortkey);
if (contact->reverse_sortkey)
- cts_stmt_bind_text(stmt, 4, contact->reverse_sortkey);
+ cts_stmt_bind_text(stmt, 6, contact->reverse_sortkey);
if (contact->uid)
- cts_stmt_bind_text(stmt, 5, contact->uid);
+ cts_stmt_bind_text(stmt, 7, contact->uid);
if (contact->ringtone_path)
- cts_stmt_bind_text(stmt, 6, contact->ringtone_path);
+ cts_stmt_bind_text(stmt, 8, contact->ringtone_path);
if (contact->vibration)
- cts_stmt_bind_text(stmt, 7, contact->vibration);
+ cts_stmt_bind_text(stmt, 9, contact->vibration);
if (contact->image_thumbnail_path)
- cts_stmt_bind_text(stmt, 8, contact->image_thumbnail_path);
+ cts_stmt_bind_text(stmt, 10, contact->image_thumbnail_path);
ret = cts_stmt_step(stmt);
if (CONTACTS_ERROR_NONE != ret) {
CTS_FN_CALL;
int ret, len;
int rel_changed = 0;
- int count;
+ int person_id;
char query[CTS_SQL_MAX_LEN] = {0};
ctsvc_contact_s *contact = (ctsvc_contact_s*)record;
cts_stmt stmt;
-
- snprintf(query, sizeof(query),
- "SELECT count(contact_id) FROM "CTS_TABLE_CONTACTS" "
- "WHERE contact_id = %d AND deleted = 0", contact_id);
- ret = ctsvc_query_get_first_int_result(query, &count);
- RETVM_IF(1 != count, CONTACTS_ERROR_NO_DATA,
- "The index(%d) is Invalid. %d Record(s) is(are) not found", contact->id, ret);
+ int version;
ret = ctsvc_begin_trans();
RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+ snprintf(query, sizeof(query),
+ "SELECT person_id FROM "CTS_TABLE_CONTACTS" "
+ "WHERE contact_id = %d AND deleted = 0", contact_id);
+ ret = ctsvc_query_get_first_int_result(query, &person_id);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("The index(%d) is Invalid. %d Record(s) is(are) not found", contact->id, ret);
+ ctsvc_end_trans(false);
+ return ret;
+ }
+
contact->id = contact_id;
- __ctsvc_update_contact_display_name(contact);
+ contact->person_id = person_id;
+ ctsvc_make_contact_display_name(contact);
__ctsvc_contact_check_default_data(contact);
//remove current child data
}
// this code will be removed.
//////////////////////////////////////////////////////////////////////
+ version = ctsvc_get_next_ver();
len = snprintf(query, sizeof(query),
"UPDATE "CTS_TABLE_CONTACTS" SET changed_ver=%d, changed_time=%d, "
"has_phonenumber=%d, has_email=%d , display_name=?, "
"reverse_display_name=?, display_name_source=%d, display_name_language=%d, "
+ "sort_name=?, reverse_sort_name=?, "
"sortkey=?, reverse_sortkey=?, uid=?, ringtone_path=?, vibration=?, "
- "image_thumbnail_path=? WHERE contact_id=%d",
- ctsvc_get_next_ver(), (int)time(NULL),
+ "image_thumbnail_path=?",
+ version, (int)time(NULL),
contact->has_phonenumber, contact->has_email,
- contact->display_source_type, contact->display_name_language,
- contact->id);
+ contact->display_source_type, contact->display_name_language);
+
+ if (contact->image_thumbnail_changed)
+ len += snprintf(query+len, sizeof(query)-len, ", image_changed_ver = %d", version);
+
+ len += snprintf(query+len, sizeof(query)-len, " WHERE contact_id=%d", contact->id);
stmt = cts_query_prepare(query);
if (NULL == stmt) {
cts_stmt_bind_text(stmt, 1, contact->display_name);
if (contact->reverse_display_name)
cts_stmt_bind_text(stmt, 2, contact->reverse_display_name);
+ if (contact->sort_name)
+ cts_stmt_bind_text(stmt, 3, contact->sort_name);
+ if (contact->reverse_sort_name)
+ cts_stmt_bind_text(stmt, 4, contact->reverse_sort_name);
if (contact->sortkey)
- cts_stmt_bind_text(stmt, 3, contact->sortkey);
+ cts_stmt_bind_text(stmt, 5, contact->sortkey);
if (contact->reverse_sortkey)
- cts_stmt_bind_text(stmt, 4, contact->reverse_sortkey);
+ cts_stmt_bind_text(stmt, 6, contact->reverse_sortkey);
if (contact->uid)
- cts_stmt_bind_text(stmt, 5, contact->uid);
+ cts_stmt_bind_text(stmt, 7, contact->uid);
if (contact->ringtone_path)
- cts_stmt_bind_text(stmt, 6, contact->ringtone_path);
+ cts_stmt_bind_text(stmt, 8, contact->ringtone_path);
if (contact->vibration)
- cts_stmt_bind_text(stmt, 7, contact->vibration);
+ cts_stmt_bind_text(stmt, 9, contact->vibration);
if (contact->image_thumbnail_path)
- cts_stmt_bind_text(stmt, 8, contact->image_thumbnail_path);
+ cts_stmt_bind_text(stmt, 10, contact->image_thumbnail_path);
ret = cts_stmt_step(stmt);
if (CONTACTS_ERROR_NONE != ret) {
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
+#include <vconf.h>
+#include <vconf-keys.h>
#include "contacts.h"
#include "ctsvc_internal.h"
#define CTSVC_MY_IMAGE_LOCATION "/opt/usr/data/contacts-svc/img/my"
-int ctsvc_contact_add_image_file(ctsvc_img_e image_type, int index, char *src_img,
- char *dest_name, int dest_size)
+int ctsvc_contact_add_image_file(ctsvc_img_e image_type, int parent_id, int img_id,
+ char *src_img, char *dest_name, int dest_size)
{
int ret;
char *ext;
if (NULL == ext || strchr(ext, '/'))
ext = "";
- snprintf(dest, sizeof(dest), "%s/%d-%d%s",
- CTS_IMG_FULL_LOCATION, index, image_type, ext);
+ snprintf(dest, sizeof(dest), "%s/%d_%d-%d%s", CTS_IMG_FULL_LOCATION, parent_id, img_id, image_type, ext);
ret = ctsvc_copy_image(src_img, dest);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "cts_copy_file() Failed(%d)", ret);
- snprintf(dest_name, dest_size, "%d-%d%s", index, image_type, ext);
+ snprintf(dest_name, dest_size, "%d_%d-%d%s", parent_id, img_id, image_type, ext);
return CONTACTS_ERROR_NONE;
}
}
}
-int ctsvc_contact_delete_image_file(ctsvc_img_e image_type, int index)
+static int __ctsvc_contact_delete_image_file(ctsvc_img_e image_type, int image_id)
{
int ret;
cts_stmt stmt;
char *tmp_path;
char query[CTS_SQL_MIN_LEN] = {0};
- snprintf(query, sizeof(query),
- "SELECT %s FROM %s WHERE contact_id = %d",
- __ctsvc_get_image_column_name(image_type), CTS_TABLE_CONTACTS, index);
+
+ snprintf(query, sizeof(query), "SELECT data3 FROM %s WHERE id = %d", CTS_TABLE_DATA, image_id);
stmt = cts_query_prepare(query);
if (NULL == stmt) {
return CONTACTS_ERROR_NONE;
}
-int ctsvc_contact_update_image_file(int image_type, int index, char *src_img,
- char *dest_name, int dest_size)
+int ctsvc_contact_update_image_file(int image_type, int parent_id, int img_id,
+ char *src_img, char *dest_name, int dest_size)
{
int ret;
if (src_img && strstr(src_img, CTS_IMG_FULL_LOCATION) != NULL) {
return CONTACTS_ERROR_NONE;
}
- ret = ctsvc_contact_delete_image_file(image_type, index);
+ ret = __ctsvc_contact_delete_image_file(image_type, img_id);
WARN_IF(CONTACTS_ERROR_NONE != ret && CONTACTS_ERROR_NO_DATA != ret,
- "ctsvc_contact_delete_image_file() Failed(%d)", ret);
+ "__ctsvc_contact_delete_image_file() Failed(%d)", ret);
if (src_img) {
- ret = ctsvc_contact_add_image_file(image_type, index, src_img, dest_name, dest_size);
+ ret = ctsvc_contact_add_image_file(image_type, parent_id, img_id, src_img, dest_name, dest_size);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_contact_add_image_file() Failed(%d)", ret);
}
return CONTACTS_ERROR_NONE;
}
-static int __ctsvc_contact_delete_image_file_with_path(const unsigned char* image_path)
+int ctsvc_contact_delete_image_file_with_path(const unsigned char* image_path)
{
int ret;
return CONTACTS_ERROR_NONE;
}
-void ctsvc_db_contact_delete_callback(sqlite3_context * context,
- int argc, sqlite3_value ** argv)
-{
- int ret;
- int contact_id;
- const unsigned char* image_thumbnail_path;
- const unsigned char* image_path;
-
- if (argc > 3) {
- sqlite3_result_null(context);
- return;
- }
-
- contact_id = sqlite3_value_int(argv[0]);
- CTS_DBG("contact_id (%d), %c", sqlite3_value_int(argv[0]), contact_id);
- image_thumbnail_path = sqlite3_value_text(argv[1]);
- image_path = sqlite3_value_text(argv[2]);
-
- ret = __ctsvc_contact_delete_image_file_with_path(image_thumbnail_path);
- WARN_IF (CONTACTS_ERROR_NONE != ret && CONTACTS_ERROR_NO_DATA != ret,
- "__ctsvc_contact_delete_image_file_with_path(NORMAL) Failed(%d)", ret);
-
- ret = __ctsvc_contact_delete_image_file_with_path(image_path);
- WARN_IF(CONTACTS_ERROR_NONE != ret && CONTACTS_ERROR_NO_DATA != ret,
- "__ctsvc_contact_delete_image_file_with_path(FULL) Failed(%d)", ret);
-
- ret = ctsvc_company_delete_logo_file(contact_id);
- if (CONTACTS_ERROR_NONE != ret && CONTACTS_ERROR_NO_DATA != ret) {
- CTS_ERR("ctsvc_company_delete_logo_file_with_contact_id() Failed(%d)", ret);
- return;
- }
-
- return;
-}
-
void ctsvc_make_contact_display_name(ctsvc_contact_s *contact)
{
char *display = NULL;
char *sortkey = NULL;
+ char *phonetic = NULL;
GList *cur;
- int ret, len, display_len;
+ int ret, len, display_len, temp_len = 0;
ctsvc_name_s *name = NULL;
- contact->display_name_language = CTSVC_LANG_OTHERS;
+ contact->display_name_language = CTSVC_SORT_OTHERS;
if ( contact->name->count > 0 && contact->name->records != NULL && contact->name->records->data != NULL )
{
if ( name && ( name->first || name->last) ) {
// make display name
- display_len = SAFE_STRLEN(name->first)
+ display_len = SAFE_STRLEN(name->prefix)
+ + SAFE_STRLEN(name->first)
+ SAFE_STRLEN(name->addition)
+ SAFE_STRLEN(name->last)
+ SAFE_STRLEN(name->suffix) + 5;
display = calloc(1, display_len);
len=0;
- if(name->first)
+ if(name->prefix)
+ len += snprintf(display + len, display_len - len, "%s", name->prefix);
+
+ if(name->first) {
+ if (*display)
+ len += snprintf(display + len, display_len - len, " ");
len += snprintf(display + len, display_len - len, "%s", name->first);
+ }
if(name->addition) {
if (*display)
// make reverse_display_name
display = calloc(1, display_len);
len = 0;
+
+ if(name->prefix)
+ len += snprintf(display + len, display_len - len, "%s", name->prefix);
+
if(name->last) {
+ if (*display)
+ len += snprintf(display + len, display_len - len, " ");
+
len += snprintf(display + len, display_len - len, "%s", name->last);
if(name->first || name->addition)
len += snprintf(display + len, display_len - len, "%s", name->suffix);
}
+ contact->display_name_changed = true;
contact->reverse_display_name = display;
-
- ret = ctsvc_check_language_type(contact->display_name);
- if (0 <= ret) {
- if (ctsvc_get_default_language() == ret)
- contact->display_name_language = CTSVC_LANG_DEFAULT;
- else if (ctsvc_get_secondary_language() == ret)
- contact->display_name_language = CTSVC_LANG_SECONDARY;
- else
- contact->display_name_language = ret;
- }
-
- if (ctsvc_has_chinese(contact->display_name)) {
- pinyin_name_s *pinyinname = NULL;
- int size;
-
- ret = ctsvc_convert_chinese_to_pinyin(contact->display_name, &pinyinname, &size);
-
- if (CONTACTS_ERROR_NONE == ret) {
- ret = ctsvc_collation_str(pinyinname[0].pinyin_name, &sortkey);
- if (CONTACTS_ERROR_NONE == ret) {
- contact->sortkey = sortkey;
- contact->reverse_sortkey = strdup(sortkey);
- }
- free(pinyinname);
- }
- else {
- ret = ctsvc_collation_str(contact->display_name, &sortkey);
- if (CONTACTS_ERROR_NONE == ret)
- contact->sortkey = sortkey;
- else
- free(sortkey);
- sortkey = NULL;
-
- ret = ctsvc_collation_str(contact->reverse_display_name, &sortkey);
- if (CONTACTS_ERROR_NONE == ret)
- contact->reverse_sortkey = sortkey;
- else
- free(sortkey);
- }
-
- }
- else {
- ret = ctsvc_collation_str(contact->display_name, &sortkey);
- if (CONTACTS_ERROR_NONE == ret)
- contact->sortkey = sortkey;
- else
- free(sortkey);
- sortkey = NULL;
-
- ret = ctsvc_collation_str(contact->reverse_display_name, &sortkey);
- if (CONTACTS_ERROR_NONE == ret)
- contact->reverse_sortkey = sortkey;
- else
- free(sortkey);
-
- }
+ contact->sort_name = SAFE_STRDUP(contact->display_name);
+ contact->reverse_sort_name = SAFE_STRDUP(contact->reverse_display_name);
contact->display_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NAME;
}
else {
for (cur=contact->company->records;cur;cur=cur->next) {
ctsvc_company_s *company = (ctsvc_company_s *)cur->data;
if (company && company->name) {
+ contact->display_name_changed = true;
contact->display_name = SAFE_STRDUP(company->name);
contact->display_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_COMPANY;
break;
}
}
- if (NULL == contact->display_name && contact->nicknames->records) {
+ if (!contact->display_name_changed && contact->nicknames && contact->nicknames->records) {
for (cur=contact->nicknames->records;cur;cur=cur->next) {
ctsvc_nickname_s *nickname = (ctsvc_nickname_s *)cur->data;
if (nickname && nickname->nickname) {
+ contact->display_name_changed = true;
contact->display_name = SAFE_STRDUP(nickname->nickname);
contact->display_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NICKNAME;
break;
}
}
- if (NULL == contact->display_name && contact->numbers->records) {
+ if (!contact->display_name_changed && contact->numbers && contact->numbers->records) {
for (cur=contact->numbers->records;cur;cur=cur->next) {
ctsvc_number_s *number = (ctsvc_number_s *)cur->data;
if (number && number->number) {
+ contact->display_name_changed = true;
contact->display_name = SAFE_STRDUP(number->number);
contact->display_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NUMBER;
break;
}
}
- if (NULL == contact->display_name && contact->emails->records) {
+ if (!contact->display_name_changed && contact->emails && contact->emails->records) {
for (cur=contact->emails->records;cur;cur=cur->next) {
ctsvc_email_s *email = (ctsvc_email_s *)cur->data;
if (email && email->email_addr) {
+ contact->display_name_changed = true;
contact->display_name = SAFE_STRDUP(email->email_addr);
contact->display_source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_EMAIL;
break;
}
}
- if (contact->display_name) {
+ if (contact->display_name_changed) {
contact->reverse_display_name = SAFE_STRDUP(contact->display_name);
- if (ctsvc_has_chinese(contact->display_name)) {
- pinyin_name_s *pinyinname;
- int size;
- ret = ctsvc_convert_chinese_to_pinyin(contact->display_name, &pinyinname, &size);
-
- if (CONTACTS_ERROR_NONE == ret) {
- ret = ctsvc_collation_str(pinyinname[0].pinyin_name, &sortkey);
- if (CONTACTS_ERROR_NONE == ret) {
- contact->sortkey = sortkey;
- contact->reverse_sortkey = strdup(sortkey);
+ contact->sort_name = SAFE_STRDUP(contact->display_name);
+ contact->reverse_sort_name = SAFE_STRDUP(contact->display_name);
+ }
+ }
+
+ if (contact->display_name_changed) {
+ ret = ctsvc_get_name_sort_type(contact->display_name);
+ WARN_IF( ret < 0, "ctsvc_check_language_type Failed(%d)", ret);
+
+ switch (ret)
+ {
+ case CTSVC_SORT_CJK:
+ if (contact->display_source_type == CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NAME) {
+ len = SAFE_STRLEN(name->phonetic_first) + SAFE_STRLEN(name->phonetic_last) + SAFE_STRLEN(name->phonetic_middle);
+ if (len > 0) {
+ len += 3; // for space and null string
+ phonetic = calloc(1, len);
+ if (name->phonetic_first)
+ temp_len += snprintf(phonetic, len, "%s", name->phonetic_first);
+ if (name->phonetic_middle) {
+ if (temp_len)
+ temp_len += snprintf(phonetic + temp_len, len - temp_len, " ");
+ temp_len += snprintf(phonetic + temp_len, len - temp_len, "%s", name->phonetic_middle);
+ }
+ if (name->phonetic_last) {
+ if (temp_len)
+ temp_len += snprintf(phonetic + temp_len, len - temp_len, " ");
+ temp_len += snprintf(phonetic + temp_len, len - temp_len, "%s", name->phonetic_last);
}
- else
- free(sortkey);
- free(pinyinname);
- }
- else {
- ret = ctsvc_collation_str(contact->display_name, &sortkey);
- if (CONTACTS_ERROR_NONE == ret)
- contact->sortkey = sortkey;
- else
- free(sortkey);
- sortkey = NULL;
-
- ret = ctsvc_collation_str(contact->reverse_display_name, &sortkey);
- if (CONTACTS_ERROR_NONE == ret)
- contact->reverse_sortkey = sortkey;
- else
- free(sortkey);
}
}
- else {
- ret = ctsvc_check_language_type(contact->display_name);
- if (0 <= ret) {
- if (ctsvc_get_default_language() == ret)
- contact->display_name_language = CTSVC_LANG_DEFAULT;
- else if (ctsvc_get_secondary_language() == ret)
- contact->display_name_language = CTSVC_LANG_SECONDARY;
- else
- contact->display_name_language = ret;
- }
- ret = ctsvc_collation_str(contact->display_name, &sortkey);
- if (CONTACTS_ERROR_NONE == ret) {
- contact->sortkey = sortkey;
- contact->reverse_sortkey = strdup(sortkey);
+ if (phonetic && ctsvc_get_name_sort_type(phonetic) == CTSVC_SORT_JAPANESE) {
+ ret = CTSVC_SORT_JAPANESE;
+ FREEandSTRDUP(contact->sort_name, phonetic);
+ FREEandSTRDUP(contact->reverse_sort_name, phonetic);
+ }
+ else {
+ {
+ pinyin_name_s *pinyinname = NULL;
+ int size;
+
+ if (ctsvc_convert_chinese_to_pinyin(contact->display_name, &pinyinname, &size) == CONTACTS_ERROR_NONE) {
+ FREEandSTRDUP(contact->sort_name, pinyinname[0].pinyin_name);
+ FREEandSTRDUP(contact->reverse_sort_name, pinyinname[0].pinyin_name);
+ free(pinyinname);
+ }
+ ret = CTSVC_SORT_WESTERN;
}
- else
- free(sortkey);
+ }
+ free(phonetic);
+ break;
+ case CTSVC_SORT_JAPANESE:
+ {
+ ctsvc_convert_japanese_to_hiragana(contact->display_name, &contact->sort_name);
+ ctsvc_convert_japanese_to_hiragana(contact->reverse_display_name, &contact->reverse_sort_name);
+ break;
}
}
+
+ if (ctsvc_get_default_language() == ret)
+ contact->display_name_language = CTSVC_SORT_PRIMARY;
+ else if (ctsvc_get_secondary_language() == ret)
+ contact->display_name_language = CTSVC_SORT_SECONDARY;
+ else
+ contact->display_name_language = ret;
+
+ ret = ctsvc_collation_str(contact->sort_name, &sortkey);
+ if (CONTACTS_ERROR_NONE == ret)
+ contact->sortkey = sortkey;
+ else
+ free(sortkey);
+ sortkey = NULL;
+
+ ret = ctsvc_collation_str(contact->reverse_sort_name, &sortkey);
+ if (CONTACTS_ERROR_NONE == ret)
+ contact->reverse_sortkey = sortkey;
+ else
+ free(sortkey);
}
return;
contacts_list_first(number_list);
do {
contacts_list_get_current_record_p(number_list, (contacts_record_h*)&number);
- if (NULL != number && number->number && *number->number && !number->base.deleted) {
+ if (NULL != number && number->number && *number->number) {
if (number->is_default && false == has_default)
has_default = true;
else if (has_default)
contacts_list_first(number_list);
do {
contacts_list_get_current_record_p(number_list, (contacts_record_h*)&number);
- if (NULL != number && number->number && *number->number && !number->base.deleted) {
+ if (NULL != number && number->number && *number->number) {
number->is_default = true;
has_default = true;
break;
contacts_list_first(email_list);
do {
contacts_list_get_current_record_p(email_list, (contacts_record_h*)&email);
- if (NULL != email && email->email_addr && *email->email_addr && !email->base.deleted) {
+ if (NULL != email && email->email_addr && *email->email_addr) {
if (email->is_default && false == has_default)
has_default = true;
else if (has_default)
contacts_list_first(email_list);
do {
contacts_list_get_current_record_p(email_list, (contacts_record_h*)&email);
- if (NULL != email && email->email_addr && *email->email_addr && !email->base.deleted) {
+ if (NULL != email && email->email_addr && *email->email_addr) {
email->is_default = true;
has_default = true;
break;
for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
name = (ctsvc_name_s *)cursor->data;
- ctsvc_db_name_delete(name->id);
+ ctsvc_db_name_delete(name->id, is_my_profile);
}
contacts_list_first(name_list);
if (0 < name->id) {
if (name->first || name->last || name->addition || name->prefix || name->suffix
|| name->phonetic_first || name->phonetic_middle || name->phonetic_last)
- ret = ctsvc_db_name_update(record, contact_id, is_my_profile);
+ ret = ctsvc_db_name_update(record, is_my_profile);
else
- ret = ctsvc_db_name_delete(name->id);
+ ret = ctsvc_db_name_delete(name->id, is_my_profile);
}
else
ret = ctsvc_db_name_insert(record, contact_id, is_my_profile, NULL);
for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
company = (ctsvc_company_s *)cursor->data;
- ctsvc_db_company_delete(company->id);
+ ctsvc_db_company_delete(company->id, is_my_profile);
}
ret = contacts_list_get_count(company_list, &count);
|| company->phonetic_name)
ret = ctsvc_db_company_update(record, contact_id, is_my_profile);
else
- ret = ctsvc_db_company_delete(company->id);
+ ret = ctsvc_db_company_delete(company->id, is_my_profile);
}
else
ret = ctsvc_db_company_insert(record, contact_id, is_my_profile, NULL);
for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
note = (ctsvc_note_s *)cursor->data;
- ctsvc_db_note_delete(note->id);
+ ctsvc_db_note_delete(note->id, is_my_profile);
}
ret = contacts_list_get_count(note_list, &count);
note = (ctsvc_note_s*)record;
if (0 < note->id) {
if (note->note)
- ret = ctsvc_db_note_update(record, contact_id, is_my_profile);
+ ret = ctsvc_db_note_update(record, is_my_profile);
else
- ret = ctsvc_db_note_delete(note->id);
+ ret = ctsvc_db_note_delete(note->id, is_my_profile);
}
else
ret = ctsvc_db_note_insert(record, contact_id, is_my_profile, NULL);
for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
event = (ctsvc_event_s *)cursor->data;
- ctsvc_db_event_delete(event->id);
+ ctsvc_db_event_delete(event->id, is_my_profile);
}
ret = contacts_list_get_count(event_list, &count);
event = (ctsvc_event_s*)record;
if (0 < event->id) {
if (event->date > 0)
- ret = ctsvc_db_event_update(record, contact_id, is_my_profile);
+ ret = ctsvc_db_event_update(record, is_my_profile);
else
- ret = ctsvc_db_event_delete(event->id);
+ ret = ctsvc_db_event_delete(event->id, is_my_profile);
}
else
ret = ctsvc_db_event_insert(record, contact_id, is_my_profile, NULL);
for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
messenger = (ctsvc_messenger_s *)cursor->data;
- ctsvc_db_messenger_delete(messenger->id);
+ ctsvc_db_messenger_delete(messenger->id, is_my_profile);
}
ret = contacts_list_get_count(messenger_list, &count);
messenger = (ctsvc_messenger_s*)record;
if (0 < messenger->id) {
if (messenger->im_id)
- ret = ctsvc_db_messenger_update(record, contact_id, is_my_profile);
+ ret = ctsvc_db_messenger_update(record, is_my_profile);
else
- ret = ctsvc_db_messenger_delete(messenger->id);
+ ret = ctsvc_db_messenger_delete(messenger->id, is_my_profile);
}
else
ret = ctsvc_db_messenger_insert(record, contact_id, is_my_profile, NULL);
for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
address = (ctsvc_address_s *)cursor->data;
- ctsvc_db_address_delete(address->id);
+ ctsvc_db_address_delete(address->id, is_my_profile);
}
ret = contacts_list_get_count(address_list, &count);
if (0 < address->id) {
if (address->pobox || address->postalcode || address->region || address->locality
|| address->street || address->extended || address->country)
- ret = ctsvc_db_address_update(record, contact_id, is_my_profile);
+ ret = ctsvc_db_address_update(record, is_my_profile);
else
- ret = ctsvc_db_address_delete(address->id);
+ ret = ctsvc_db_address_delete(address->id, is_my_profile);
}
else
ret = ctsvc_db_address_insert(record, contact_id, is_my_profile, NULL);
for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
url = (ctsvc_url_s *)cursor->data;
- ctsvc_db_url_delete(url->id);
+ ctsvc_db_url_delete(url->id, is_my_profile);
}
ret = contacts_list_get_count(url_list, &count);
url = (ctsvc_url_s*)record;
if (0 < url->id) {
if (url->url)
- ret = ctsvc_db_url_update(record, contact_id, is_my_profile);
+ ret = ctsvc_db_url_update(record, is_my_profile);
else
- ret = ctsvc_db_url_delete(url->id);
+ ret = ctsvc_db_url_delete(url->id, is_my_profile);
}
else
ret = ctsvc_db_url_insert(record, contact_id, is_my_profile, NULL);
for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
profile = (ctsvc_profile_s *)cursor->data;
- ctsvc_db_profile_delete(profile->id);
+ ctsvc_db_profile_delete(profile->id, is_my_profile);
}
ret = contacts_list_get_count(profile_list, &count);
if(0 == count)
profile = (ctsvc_profile_s*)record;
if (0 < profile->id) {
if (profile->appsvc_operation)
- ret = ctsvc_db_profile_update(record, contact_id, is_my_profile);
+ ret = ctsvc_db_profile_update(record, is_my_profile);
else
- ret = ctsvc_db_profile_delete(profile->id);
+ ret = ctsvc_db_profile_delete(profile->id, is_my_profile);
}
else
ret = ctsvc_db_profile_insert(record, contact_id, is_my_profile, NULL);
for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
relationship = (ctsvc_relationship_s *)cursor->data;
- ctsvc_db_relationship_delete(relationship->id);
+ ctsvc_db_relationship_delete(relationship->id, is_my_profile);
}
ret = contacts_list_get_count(relationship_list, &count);
relationship = (ctsvc_relationship_s*)record;
if (0 < relationship->id) {
if (relationship->name)
- ret = ctsvc_db_relationship_update(record, contact_id, is_my_profile);
+ ret = ctsvc_db_relationship_update(record, is_my_profile);
else
- ret = ctsvc_db_relationship_delete(relationship->id);
+ ret = ctsvc_db_relationship_delete(relationship->id, is_my_profile);
}
else
ret = ctsvc_db_relationship_insert(record, contact_id, is_my_profile, NULL);
for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
image = (ctsvc_image_s *)cursor->data;
- ctsvc_db_image_delete(image->id);
+ ctsvc_db_image_delete(image->id, is_my_profile);
}
ret = contacts_list_get_count(image_list, &count);
if (image->path)
ret = ctsvc_db_image_update(record, contact_id, is_my_profile);
else
- ret = ctsvc_db_image_delete(image->id);
+ ret = ctsvc_db_image_delete(image->id, is_my_profile);
}
else
ret = ctsvc_db_image_insert(record, contact_id, is_my_profile, NULL);
for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
nickname = (ctsvc_nickname_s *)cursor->data;
- ctsvc_db_nickname_delete(nickname->id);
+ ctsvc_db_nickname_delete(nickname->id, is_my_profile);
}
ret = contacts_list_get_count(nickname_list, &count);
nickname = (ctsvc_nickname_s*)record;
if (0 < nickname->id) {
if (nickname->nickname)
- ret = ctsvc_db_nickname_update(record, contact_id, is_my_profile);
+ ret = ctsvc_db_nickname_update(record, is_my_profile);
else
- ret = ctsvc_db_nickname_delete(nickname->id);
+ ret = ctsvc_db_nickname_delete(nickname->id, is_my_profile);
}
else
ret = ctsvc_db_nickname_insert(record, contact_id, is_my_profile, NULL);
for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
extension = (ctsvc_extension_s *)cursor->data;
- ctsvc_db_extension_delete(extension->id);
+ ctsvc_db_extension_delete(extension->id, is_my_profile);
}
ret = contacts_list_get_count(extension_list, &count);
if (extension->data2 || extension->data3 || extension->data4 || extension->data5
|| extension->data6 || extension->data7 || extension->data8 || extension->data9
|| extension->data10 || extension->data11 || extension->data12)
- ret = ctsvc_db_extension_update(record, contact_id, is_my_profile);
+ ret = ctsvc_db_extension_update(record);
else
- ret = ctsvc_db_extension_delete(extension->id);
+ ret = ctsvc_db_extension_delete(extension->id, is_my_profile);
}
else
ret = ctsvc_db_extension_insert(record, contact_id, is_my_profile, NULL);
for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
number = (ctsvc_number_s *)cursor->data;
- ctsvc_db_number_delete(number->id);
+ ctsvc_db_number_delete(number->id, is_my_profile);
}
ret = contacts_list_get_count(number_list, &count);
if (number->number) {
if (0 < number->id) {
if (number->number)
- ret = ctsvc_db_number_update(record, contact_id, is_my_profile);
+ ret = ctsvc_db_number_update(record, is_my_profile);
else
- ret = ctsvc_db_number_delete(number->id);
+ ret = ctsvc_db_number_delete(number->id, is_my_profile);
}
else
ret = ctsvc_db_number_insert(record, contact_id, is_my_profile, NULL);
for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
email = (ctsvc_email_s *)cursor->data;
- ctsvc_db_email_delete(email->id);
+ ctsvc_db_email_delete(email->id, is_my_profile);
}
ret = contacts_list_get_count(email_list, &count);
if (email->email_addr) {
if (0 < email->id) {
if (email->email_addr)
- ret = ctsvc_db_email_update(record, contact_id, is_my_profile);
+ ret = ctsvc_db_email_update(record, is_my_profile);
else
- ret = ctsvc_db_email_delete(email->id);
+ ret = ctsvc_db_email_delete(email->id, is_my_profile);
}
else
ret = ctsvc_db_email_insert(record, contact_id, is_my_profile, NULL);
int ctsvc_db_contact_update_changed_time(int contact_id);
-int ctsvc_contact_add_image_file(ctsvc_img_e image_type, int index, char *src_img,
- char *dest_name, int dest_size);
-int ctsvc_contact_update_image_file(int image_type, int index, char *src_img,
- char *dest_name, int dest_size);
-int ctsvc_contact_delete_image_file(ctsvc_img_e image_type, int index);
+int ctsvc_contact_add_image_file(ctsvc_img_e image_type, int parent_id, int img_id,
+ char *src_img, char *dest_name, int dest_size);
+int ctsvc_contact_update_image_file(int image_type, int parent_id, int img_id,
+ char *src_img, char *dest_name, int dest_size);
void ctsvc_make_contact_display_name(ctsvc_contact_s *contact);
-void ctsvc_db_contact_delete_callback(sqlite3_context * context,
- int argc, sqlite3_value ** argv);
+int ctsvc_contact_delete_image_file_with_path(const unsigned char* image_path);
int ctsvc_get_data_info_name(cts_stmt stmt, contacts_list_h name_list);
int ctsvc_get_data_info_event(cts_stmt stmt, contacts_list_h list);
return ret;
}
ctsvc_set_contact_noti();
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
"SELECT contact_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", email->contact_id);
ret = ctsvc_query_get_first_int_result(query, &contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
+ CTS_ERR("No data : contact_id (%d) is not exist", email->contact_id);
ctsvc_end_trans(false);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ return ret;
}
- ret = ctsvc_db_email_update(record, email->contact_id, false);
+ ret = ctsvc_db_email_update(record, false);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+ CTS_ERR("update record failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
// TODO ; contact display email update
ret = ctsvc_db_contact_update_changed_time(email->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
- ctsvc_set_contact_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
{
if( ret != CONTACTS_ERROR_NONE ) {
CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
ctsvc_end_trans(false);
- return contact_id;
+ return ret;
}
- ret = ctsvc_db_email_delete(id);
+ ret = ctsvc_db_email_delete(id, false);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
ctsvc_end_trans(false);
ret = ctsvc_db_contact_update_changed_time(contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
-
- ctsvc_set_contact_noti();
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
#include "ctsvc_schema.h"
#include "ctsvc_sqlite.h"
#include "ctsvc_db_init.h"
+#include "ctsvc_db_query.h"
#include "ctsvc_db_plugin_email_helper.h"
#include "ctsvc_record.h"
#include "ctsvc_notification.h"
char query[CTS_SQL_MAX_LEN] = {0};
ctsvc_email_s *email = (ctsvc_email_s *)record;
-// RETVM_IF(email->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted email record");
RETV_IF(NULL == email->email_addr, CONTACTS_ERROR_NONE);
RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact_id(%d) is mandatory field to insert email record ", email->contact_id);
return CONTACTS_ERROR_NONE;
}
-int ctsvc_db_email_update(contacts_record_h record, int contact_id, bool is_my_profile)
+int ctsvc_db_email_update(contacts_record_h record, bool is_my_profile)
{
- int ret;
- ctsvc_email_s *email = (ctsvc_email_s*)record;
+ int id;
+ int ret = CONTACTS_ERROR_NONE;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
+ ctsvc_email_s *email = (ctsvc_email_s*)record;
char query[CTS_SQL_MAX_LEN] = {0};
- cts_stmt stmt;
RETVM_IF(!email->id, CONTACTS_ERROR_INVALID_PARAMETER, "email of contact has no ID.");
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (email->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_DATA" SET contact_id=%d, is_my_profile=%d, data1=%d, data2=?, data3=? WHERE id=%d",
- contact_id, is_my_profile, email->type, email->id);
-
- stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
-
- if (email->label)
- cts_stmt_bind_text(stmt, 1, email->label);
- if (email->email_addr)
- cts_stmt_bind_text(stmt, 2, email->email_addr);
-
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", email->id);
+ ret = ctsvc_query_get_first_int_result(query, &id);
+ RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
+
+ do {
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, email->id))) break;
+ if (!is_my_profile)
+ ctsvc_set_email_noti();
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
}
- cts_stmt_finalize(stmt);
-
- if (!is_my_profile)
- ctsvc_set_email_noti();
-
- return CONTACTS_ERROR_NONE;
+ return ret;
}
-int ctsvc_db_email_delete(int id)
+int ctsvc_db_email_delete(int id, bool is_my_profile)
{
int ret;
char query[CTS_SQL_MIN_LEN] = {0};
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
- ctsvc_set_email_noti();
+ if (!is_my_profile)
+ ctsvc_set_email_noti();
return CONTACTS_ERROR_NONE;
}
#include "ctsvc_sqlite.h"
int ctsvc_db_email_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_email_update(contacts_record_h record, int contact_id, bool is_my_profile);
-int ctsvc_db_email_delete(int id);
+int ctsvc_db_email_update(contacts_record_h record, bool is_my_profile);
+int ctsvc_db_email_delete(int id, bool is_my_profile);
int ctsvc_db_email_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
#include "ctsvc_record.h"
#include "ctsvc_db_query.h"
#include "ctsvc_list.h"
+#include "ctsvc_notification.h"
static int __ctsvc_db_event_insert_record( contacts_record_h record, int *id );
static int __ctsvc_db_event_get_record( int id, contacts_record_h* out_record );
ret = ctsvc_db_contact_update_changed_time(event->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
"SELECT contact_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", event->contact_id);
ret = ctsvc_query_get_first_int_result(query, &contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
+ CTS_ERR("No data : contact_id (%d) is not exist", event->contact_id);
ctsvc_end_trans(false);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ return ret;
}
- ret = ctsvc_db_event_update(record, event->contact_id, false);
+ ret = ctsvc_db_event_update(record, false);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+ CTS_ERR("update record failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
// TODO ; contact display event update
ret = ctsvc_db_contact_update_changed_time(event->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
ctsvc_end_trans(false);
- return contact_id;
+ return ret;
}
- ret = ctsvc_db_event_delete(id);
+ ret = ctsvc_db_event_delete(id, false);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
ctsvc_end_trans(false);
ret = ctsvc_db_contact_update_changed_time(contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
#include "ctsvc_schema.h"
#include "ctsvc_sqlite.h"
#include "ctsvc_db_init.h"
+#include "ctsvc_db_query.h"
#include "ctsvc_db_plugin_event_helper.h"
#include "ctsvc_record.h"
#include "ctsvc_notification.h"
ctsvc_event_s *event = (ctsvc_event_s *)record;
// These check should be done in client side
-// RETVM_IF(event->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted event record");
RETV_IF(event->date <= 0, CONTACTS_ERROR_NONE);
RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact_id(%d) is mandatory field to insert event record", event->contact_id);
return CONTACTS_ERROR_NONE;
}
-int ctsvc_db_event_update(contacts_record_h record, int contact_id, bool is_my_profile)
+int ctsvc_db_event_update(contacts_record_h record, bool is_my_profile)
{
- int ret;
- ctsvc_event_s *event = (ctsvc_event_s*)record;
+ int id;
+ int ret = CONTACTS_ERROR_NONE;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
+ ctsvc_event_s *event = (ctsvc_event_s*)record;
char query[CTS_SQL_MAX_LEN] = {0};
- cts_stmt stmt;
RETVM_IF(!event->id, CONTACTS_ERROR_INVALID_PARAMETER, "event of contact has no ID.");
-
- snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_DATA" SET contact_id=%d, is_my_profile=%d, data1=%d, data2=?, data3=?, data4=%d, data5=? WHERE id=%d",
- contact_id, is_my_profile, event->type, event->is_lunar, event->id);
-
- stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
-
- if (event->label)
- cts_stmt_bind_text(stmt, 1, event->label);
- cts_stmt_bind_int(stmt, 2, event->date);
- cts_stmt_bind_int(stmt, 3, event->lunar_date);
-
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (event->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
+
+ snprintf(query, sizeof(query), "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", event->id);
+ ret = ctsvc_query_get_first_int_result(query, &id);
+ RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
+
+ do {
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, event->id))) break;
+ if (!is_my_profile)
+ ctsvc_set_event_noti();
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
}
- cts_stmt_finalize(stmt);
-
- if (!is_my_profile)
- ctsvc_set_event_noti();
- return CONTACTS_ERROR_NONE;
+ return ret;
}
-int ctsvc_db_event_delete(int id)
+int ctsvc_db_event_delete(int id, bool is_my_profile)
{
int ret;
char query[CTS_SQL_MIN_LEN] = {0};
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
- ctsvc_set_event_noti();
+ if (!is_my_profile)
+ ctsvc_set_event_noti();
return CONTACTS_ERROR_NONE;
}
#include "ctsvc_sqlite.h"
int ctsvc_db_event_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_event_update(contacts_record_h record, int contact_id, bool is_my_profile);
-int ctsvc_db_event_delete(int id);
+int ctsvc_db_event_update(contacts_record_h record, bool is_my_profile);
+int ctsvc_db_event_delete(int id, bool is_my_profile);
int ctsvc_db_event_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
#include "ctsvc_record.h"
#include "ctsvc_db_query.h"
#include "ctsvc_list.h"
+#include "ctsvc_notification.h"
static int __ctsvc_db_extension_insert_record( contacts_record_h record, int *id );
static int __ctsvc_db_extension_get_record( int id, contacts_record_h* out_record );
&& NULL == extension->data5 && NULL == extension->data6 && NULL == extension->data7
&& NULL == extension->data8 && NULL == extension->data9 && NULL == extension->data10
&& NULL == extension->data11 && NULL == extension->data12,
- CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
ret = ctsvc_begin_trans();
if (CONTACTS_ERROR_NONE != ret) {
ret = ctsvc_db_contact_update_changed_time(extension->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
"SELECT contact_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", extension->contact_id);
ret = ctsvc_query_get_first_int_result(query, &contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
+ CTS_ERR("No data : contact_id (%d) is not exist", extension->contact_id);
ctsvc_end_trans(false);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ return ret;
}
- ret = ctsvc_db_extension_update(record, extension->contact_id, false);
+ ret = ctsvc_db_extension_update(record);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+ CTS_ERR("update record failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
ret = ctsvc_db_contact_update_changed_time(extension->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
if( ret != CONTACTS_ERROR_NONE ) {
CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
ctsvc_end_trans(false);
- return contact_id;
+ return ret;
}
- ret = ctsvc_db_extension_delete(id);
+ ret = ctsvc_db_extension_delete(id, false);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
ctsvc_end_trans(false);
ret = ctsvc_db_contact_update_changed_time(contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
#include "ctsvc_schema.h"
#include "ctsvc_sqlite.h"
#include "ctsvc_db_init.h"
+#include "ctsvc_db_query.h"
#include "ctsvc_db_plugin_extension_helper.h"
#include "ctsvc_record.h"
#include "ctsvc_notification.h"
char query[CTS_SQL_MAX_LEN] = {0};
ctsvc_extension_s *extension = (ctsvc_extension_s *)record;
-// RETVM_IF(extension->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted extension record");
RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact_id(%d) is mandatory field to insert extension record ", extension->contact_id);
RETVM_IF(0 < extension->id, CONTACTS_ERROR_INVALID_PARAMETER,
return CONTACTS_ERROR_NONE;
}
-int ctsvc_db_extension_update(contacts_record_h record, int contact_id, bool is_my_profile)
+int ctsvc_db_extension_update(contacts_record_h record)
{
- int ret;
- ctsvc_extension_s *extension = (ctsvc_extension_s*)record;
+ int id;
+ int ret = CONTACTS_ERROR_NONE;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
+ ctsvc_extension_s *extension = (ctsvc_extension_s*)record;
char query[CTS_SQL_MAX_LEN] = {0};
- cts_stmt stmt;
RETVM_IF(!extension->id, CONTACTS_ERROR_INVALID_PARAMETER, "extension of contact has no ID.");
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (extension->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_DATA" SET contact_id=%d, is_my_profile=%d, data1=%d, data2=?, data3=?, data4=?, "
- "data5=?, data6=?, data7=?, data8=?, data9=?, data10=?, data11=?, data12=? WHERE id=%d",
- contact_id, is_my_profile, extension->data1, extension->id);
-
- stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
-
- __ctsvc_extension_bind_stmt(stmt, extension, 1);
-
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", extension->id);
+ ret = ctsvc_query_get_first_int_result(query, &id);
+ RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
+
+ do {
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, extension->id))) break;
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
}
-
- cts_stmt_finalize(stmt);
-
- if (!is_my_profile)
- ctsvc_set_data_noti();
-
- return CONTACTS_ERROR_NONE;
+ return ret;
}
-int ctsvc_db_extension_delete(int id)
+int ctsvc_db_extension_delete(int id, bool is_my_profile)
{
int ret;
char query[CTS_SQL_MIN_LEN] = {0};
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
- ctsvc_set_data_noti();
+
+ if (!is_my_profile)
+ ctsvc_set_data_noti();
return CONTACTS_ERROR_NONE;
}
#include "ctsvc_sqlite.h"
int ctsvc_db_extension_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_extension_update(contacts_record_h record, int contact_id, bool is_my_profile);
-int ctsvc_db_extension_delete(int id);
+int ctsvc_db_extension_update(contacts_record_h record);
+int ctsvc_db_extension_delete(int id, bool is_my_profile);
int ctsvc_db_extension_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
-#endif // __CTSVC_DB_PLUGIN_EXTENSION_HELPER_H__
\ No newline at end of file
+#endif // __CTSVC_DB_PLUGIN_EXTENSION_HELPER_H__
static int __ctsvc_db_group_delete_record( int id );
static int __ctsvc_db_group_get_all_records( int offset, int limit, contacts_list_h* out_list );
static int __ctsvc_db_group_get_records_with_query( contacts_query_h query, int offset, int limit, contacts_list_h* out_list );
+static double __ctsvc_db_group_get_next_group_prio(void);
//static int __ctsvc_db_group_insert_records(const contacts_list_h in_list, int **ids);
//static int __ctsvc_db_group_update_records(const contacts_list_h in_list);
//static int __ctsvc_db_group_delete_records( int ids[], int count);
int ret;
int ver;
cts_stmt stmt;
+ double group_prio = 0.0;
ctsvc_group_s *group = (ctsvc_group_s *)record;
char query[CTS_SQL_MAX_LEN] = {0};
char image[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
return ret;
}
+ group_prio = __ctsvc_db_group_get_next_group_prio();
group->id = cts_db_get_next_id(CTS_TABLE_GROUPS);
if (id)
*id = group->id;
snprintf(query, sizeof(query),
"INSERT INTO "CTS_TABLE_GROUPS"(group_id, addressbook_id, group_name, created_ver, changed_ver, ringtone_path, "
- "vibration, image_thumbnail_path, system_id, is_read_only) "
- "VALUES(%d, %d, ?, ?, ?, ?, ?, ?, ?, %d)",
- group->id, group->addressbook_id, group->is_read_only);
+ "vibration, image_thumbnail_path, system_id, is_read_only, group_prio) "
+ "VALUES(%d, %d, ?, ?, ?, ?, ?, ?, ?, %d, %lf)",
+ group->id, group->addressbook_id, group->is_read_only, group_prio);
stmt = cts_query_prepare(query);
if (NULL == stmt) {
static int __ctsvc_db_group_update_record( contacts_record_h record )
{
- int ret;
- ctsvc_group_s *group = (ctsvc_group_s *)record;
- char image[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
- char query[CTS_SQL_MIN_LEN] = {0};
- cts_stmt stmt;
- int len;
+ int addressbook_id = 0;
+ int ret = CONTACTS_ERROR_NONE;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
+ ctsvc_group_s *group = (ctsvc_group_s*)record;
+ char query[CTS_SQL_MAX_LEN] = {0};
RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
RETVM_IF(CTSVC_RECORD_GROUP != group->base.r_type, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : group is invalid type(%d)", group->base.r_type);
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (group->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
RETVM_IF(NULL == group->name, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : The name of group is empty.");
- len = snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_GROUPS" SET group_name=?, changed_ver=?, ringtone_path=?, vibration=? ");
-
- if (group->image_thumbnail_changed)
- len += snprintf(query+len, sizeof(query)-len, ", image_thumbnail_path = ? ");
-
- snprintf(query+len, sizeof(query)-len, "WHERE group_id=%d", group->id);
-
- stmt = cts_query_prepare(query);
- if (NULL == stmt) {
- CTS_ERR("DB error : cts_query_prepare() Failed");
- return CONTACTS_ERROR_DB;
- }
-
- ret = ctsvc_begin_trans();
- if( ret < CONTACTS_ERROR_NONE ) {
- CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
+ snprintf(query, sizeof(query),
+ "SELECT addressbook_id FROM %s WHERE group_id = %d",
+ CTS_TABLE_GROUPS, group->id);
+ ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+ if ( ret < CONTACTS_ERROR_NONE) {
+ CTS_ERR("DB error : The group record(%d) is Invalid(%d)", group->id, ret);
return ret;
}
- cts_stmt_bind_text(stmt, 1, group->name);
- cts_stmt_bind_int(stmt, 2, ctsvc_get_next_ver());
-
- if (group->ringtone_path)
- cts_stmt_bind_text(stmt, 3, group->ringtone_path);
-
- if (group->vibration)
- cts_stmt_bind_text(stmt, 4, group->vibration);
-
if (group->image_thumbnail_changed) {
- ret = ctsvc_change_image(CTS_GROUP_IMAGE_LOCATION, group->id, group->image_thumbnail_path,
- image, sizeof(image));
- if(CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_change_image() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- ctsvc_end_trans(false);
- return ret;
- }
+ char image[CTS_SQL_MAX_LEN] = {0};
+ ret = ctsvc_change_image(CTS_GROUP_IMAGE_LOCATION, group->id, group->image_thumbnail_path, image, sizeof(image));
if (*image) {
free(group->image_thumbnail_path);
group->image_thumbnail_path = strdup(image);
- cts_stmt_bind_text(stmt, 5, image);
}
+ group->image_thumbnail_changed = false;
}
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : cts_stmt_step() Failed(%d)", ret);
+ ret = ctsvc_begin_trans();
+ RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+
+ do {
+ char query[CTS_SQL_MAX_LEN] = {0};
+ char query_set[CTS_SQL_MAX_LEN] = {0};
+ cts_stmt stmt = NULL;
+
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (NULL == set || '\0' == *set)
+ break;
+ snprintf(query_set, sizeof(query_set), "%s, changed_ver=%d ", set, ctsvc_get_next_ver());
+
+ snprintf(query, sizeof(query), "UPDATE %s SET %s WHERE group_id = %d", CTS_TABLE_GROUPS, query_set, group->id);
+ stmt = cts_query_prepare(query);
+ if (NULL == stmt) {
+ CTS_ERR("DB error : cts_query_prepare() Failed");
+ ret = CONTACTS_ERROR_DB;
+ break;
+ }
+ if (bind_text) {
+ int i = 0;
+ for (cursor=bind_text,i=1;cursor;cursor=cursor->next,i++) {
+ const char *text = cursor->data;
+ if (text && *text)
+ cts_stmt_bind_text(stmt, i, text);
+ }
+ }
+ ret = cts_stmt_step(stmt);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("cts_stmt_step() Failed(%d)", ret);
+ cts_stmt_finalize(stmt);
+ break;
+ }
cts_stmt_finalize(stmt);
+
+ ctsvc_set_group_noti();
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
+ }
+
+ if (CONTACTS_ERROR_NONE != ret) {
ctsvc_end_trans(false);
return ret;
}
- cts_stmt_finalize(stmt);
-
- ctsvc_set_group_noti();
ret = ctsvc_end_trans(true);
- if(ret < CONTACTS_ERROR_NONE ) {
- CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
- return ret;
- }
+ RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
return CONTACTS_ERROR_NONE;
}
return CONTACTS_ERROR_NO_DATA;
}
- snprintf(query, sizeof(query), "INSERT INTO %s VALUES(%d, %d, %d)",
- CTS_TABLE_GROUP_DELETEDS, index, addressbook_id, ctsvc_get_next_ver());
- ret = ctsvc_query_exec(query);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
- ctsvc_end_trans(false);
- return ret;
- }
+ ctsvc_get_next_ver();
ret = ctsvc_change_image(CTS_GROUP_IMAGE_LOCATION, index, NULL, NULL, 0);
if (ret < 0) {
len = snprintf(query, sizeof(query),
"SELECT group_id, addressbook_id, group_name, system_id, is_read_only, "
"ringtone_path, vibration, image_thumbnail_path "
- "FROM "CTS_TABLE_GROUPS" ORDER BY addressbook_id, group_name COLLATE NOCASE");
+ "FROM "CTS_TABLE_GROUPS" ORDER BY addressbook_id, group_prio");
if (0 < limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
return CONTACTS_ERROR_NONE;
}
+
+double __ctsvc_db_group_get_next_group_prio(void)
+{
+ int ret;
+ double prio = 0.0;
+ cts_stmt stmt;
+ char query[CTS_SQL_MAX_LEN] = {0};
+
+ snprintf(query, sizeof(query), "SELECT MAX(group_prio) FROM "CTS_TABLE_GROUPS" ");
+
+ stmt = cts_query_prepare(query);
+ RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "cts_query_prepare() Failed");
+
+ ret = cts_stmt_step(stmt);
+ if (1 /*CTS_TRUE*/ == ret)
+ prio = ctsvc_stmt_get_dbl(stmt, 0);
+ cts_stmt_finalize(stmt);
+
+ return prio + 1.0;
+}
//static int __ctsvc_db_group_insert_records(const contacts_list_h in_list, int **ids) { return CONTACTS_ERROR_NONE; }
//static int __ctsvc_db_group_update_records(const contacts_list_h in_list) { return CONTACTS_ERROR_NONE; }
//static int __ctsvc_db_group_delete_records( int ids[], int count) { return CONTACTS_ERROR_NONE; }
#include "ctsvc_record.h"
#include "ctsvc_db_query.h"
#include "ctsvc_list.h"
+#include "ctsvc_notification.h"
static int __ctsvc_db_image_insert_record( contacts_record_h record, int *id );
static int __ctsvc_db_image_get_record( int id, contacts_record_h* out_record );
static int __ctsvc_db_image_insert_record( contacts_record_h record, int *id )
{
int ret;
+ int version;
int contact_id;
char query[CTS_SQL_MAX_LEN] = {0};
ctsvc_image_s *image = (ctsvc_image_s *)record;
return ret;
}
- ret = ctsvc_db_contact_update_changed_time(image->contact_id);
+ version = ctsvc_get_next_ver();
+ snprintf(query, sizeof(query),
+ "UPDATE "CTS_TABLE_CONTACTS" SET changed_ver = %d, changed_time = %d, image_changed_ver = %d "
+ "WHERE contact_id = %d",
+ version, (int)time(NULL), version, image->contact_id);
+
+ ret = ctsvc_query_exec(query);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("cts_query_exec() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_contact_noti();
+ ctsvc_set_person_noti();
+
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
{
static int __ctsvc_db_image_update_record( contacts_record_h record )
{
int ret;
+ int version;
int contact_id;
char query[CTS_SQL_MAX_LEN] = {0};
ctsvc_image_s *image = (ctsvc_image_s *)record;
"SELECT contact_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", image->contact_id);
ret = ctsvc_query_get_first_int_result(query, &contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
+ CTS_ERR("No data : contact_id (%d) is not exist", image->contact_id);
ctsvc_end_trans(false);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ return ret;
}
ret = ctsvc_db_image_update(record, image->contact_id, false);
return ret;
}
- ret = ctsvc_db_contact_update_changed_time(image->contact_id);
+ version = ctsvc_get_next_ver();
+ snprintf(query, sizeof(query),
+ "UPDATE "CTS_TABLE_CONTACTS" SET changed_ver = %d, changed_time = %d, image_changed_ver = %d "
+ "WHERE contact_id = %d",
+ version, (int)time(NULL), version, image->contact_id);
+
+ ret = ctsvc_query_exec(query);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("cts_query_exec() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_contact_noti();
+ ctsvc_set_person_noti();
+
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
{
static int __ctsvc_db_image_delete_record( int id )
{
int ret;
+ int version;
int contact_id;
char query[CTS_SQL_MAX_LEN] = {0};
if( ret != CONTACTS_ERROR_NONE ) {
CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
ctsvc_end_trans(false);
- return contact_id;
+ return ret;
}
- ret = ctsvc_db_image_delete(id);
+ ret = ctsvc_db_image_delete(id, false);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
- ret = ctsvc_db_contact_update_changed_time(contact_id);
+ version = ctsvc_get_next_ver();
+ snprintf(query, sizeof(query),
+ "UPDATE "CTS_TABLE_CONTACTS" SET changed_ver = %d, changed_time = %d, image_changed_ver = %d "
+ "WHERE contact_id = %d",
+ version, (int)time(NULL), version, contact_id);
+
+ ret = ctsvc_query_exec(query);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("cts_query_exec() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+
+ ctsvc_set_contact_noti();
+ ctsvc_set_person_noti();
+
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
{
#include "ctsvc_schema.h"
#include "ctsvc_sqlite.h"
#include "ctsvc_db_init.h"
+#include "ctsvc_db_query.h"
#include "ctsvc_db_plugin_image_helper.h"
#include "ctsvc_db_plugin_contact_helper.h"
#include "ctsvc_record.h"
int ctsvc_db_image_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id)
{
int ret;
+ int image_id;
cts_stmt stmt = NULL;
char query[CTS_SQL_MAX_LEN] = {0};
char image_path[CTS_SQL_MAX_LEN] = {0};
ctsvc_image_s *image = (ctsvc_image_s *)record;
// These check should be done in client side
-// RETVM_IF(image->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted image record");
RETV_IF(NULL == image->path, CONTACTS_ERROR_NONE);
RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact_id(%d) is mandatory field to insert image record", image->contact_id);
RETVM_IF(0 < image->id, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : id(%d), This record is already inserted", image->id);
- ret = ctsvc_contact_add_image_file(CTSVC_IMG_NORMAL, contact_id, image->path,
- image_path, sizeof(image_path));
+ image_id = cts_db_get_next_id(CTS_TABLE_DATA);
+ ret = ctsvc_contact_add_image_file(CTSVC_IMG_NORMAL, contact_id, image_id, image->path, image_path, sizeof(image_path));
+
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("ctsvc_contact_add_image_file(NORMAL) Failed(%d)", ret);
return ret;
image->path = strdup(image_path);
snprintf(query, sizeof(query),
- "INSERT INTO "CTS_TABLE_DATA"(contact_id, is_my_profile, datatype, is_default, data1, data2, data3) "
- "VALUES(%d, %d, %d, %d, %d, ?, ?)",
- contact_id, is_my_profile, CTSVC_DATA_IMAGE, image->is_default, image->type);
+ "INSERT INTO "CTS_TABLE_DATA"(id, contact_id, is_my_profile, datatype, is_default, data1, data2, data3) "
+ "VALUES(%d, %d, %d, %d, %d, %d, ?, ?)",
+ image_id, contact_id, is_my_profile, CTSVC_DATA_IMAGE, image->is_default, image->type);
stmt = cts_query_prepare(query);
RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
int ctsvc_db_image_update(contacts_record_h record, int contact_id, bool is_my_profile)
{
- int ret;
+ int id;
+ int ret = CONTACTS_ERROR_NONE;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
ctsvc_image_s *image = (ctsvc_image_s*)record;
char query[CTS_SQL_MAX_LEN] = {0};
- char image_path[CTS_SQL_MAX_LEN] = {0};
- cts_stmt stmt;
RETVM_IF(!image->id, CONTACTS_ERROR_INVALID_PARAMETER, "image of contact has no ID.");
-
- ret = ctsvc_contact_update_image_file(CTSVC_IMG_NORMAL, contact_id,
- image->path, image_path, sizeof(image_path));
-
- RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_contact_update_image_file() Failed(%d)", ret);
-
- if (*image_path) {
- free(image->path);
- image->path = strdup(image_path);
- }
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (image->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_DATA" SET contact_id=%d, is_my_profile=%d, is_default=%d, data1=%d, data2=?, data3=? WHERE id=%d",
- contact_id, is_my_profile, image->is_default, image->type, image->id);
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", image->id);
+ ret = ctsvc_query_get_first_int_result(query, &id);
+ RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
- stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
+ if (image->is_changed) {
+ char image_path[CTS_SQL_MAX_LEN] = {0};
- __ctsvc_image_bind_stmt(stmt, image, 1);
+ ret = ctsvc_contact_update_image_file(CTSVC_IMG_NORMAL, contact_id, image->id, image->path, image_path, sizeof(image_path));
+ RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_contact_update_image_file() Failed(%d)", ret);
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
+ if (*image_path) {
+ free(image->path);
+ image->path = strdup(image_path);
+ }
+ image->is_changed = false;
}
- cts_stmt_finalize(stmt);
-
- if (!is_my_profile)
- ctsvc_set_image_noti();
- image->is_changed = false;
-
- return CONTACTS_ERROR_NONE;
+ do {
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, image->id))) break;
+ if (!is_my_profile)
+ ctsvc_set_image_noti();
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
+ }
+ return ret;
}
-int ctsvc_db_image_delete(int id)
+int ctsvc_db_image_delete(int id, bool is_my_profile)
{
int ret;
char query[CTS_SQL_MIN_LEN] = {0};
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
- ctsvc_set_image_noti();
+
+ if (!is_my_profile)
+ ctsvc_set_image_noti();
return CONTACTS_ERROR_NONE;
}
+void ctsvc_db_data_image_delete_callback(sqlite3_context *context, int argc, sqlite3_value ** argv)
+{
+ int ret;
+ const unsigned char* image_path;
+
+ if (argc > 1) {
+ sqlite3_result_null(context);
+ return;
+ }
+ image_path = sqlite3_value_text(argv[0]);
+
+ ret = ctsvc_contact_delete_image_file_with_path(image_path);
+ WARN_IF (CONTACTS_ERROR_NONE != ret && CONTACTS_ERROR_NO_DATA != ret,
+ "ctsvc_contact_delete_image_file_with_path(NORMAL) Failed(%d)", ret);
+
+ return;
+}
+
+
int ctsvc_db_image_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
int ctsvc_db_image_update(contacts_record_h record, int contact_id, bool is_my_profile);
-int ctsvc_db_image_delete(int id);
-
+int ctsvc_db_image_delete(int id, bool is_my_profile);
int ctsvc_db_image_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
+void ctsvc_db_data_image_delete_callback(sqlite3_context *context, int argc, sqlite3_value ** argv);
#endif // __CTSVC_DB_PLUGIN_RELATIONSHIP_HELPER_H__
ret = ctsvc_db_contact_update_changed_time(messenger->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
"SELECT contact_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", messenger->contact_id);
ret = ctsvc_query_get_first_int_result(query, &contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
+ CTS_ERR("No data : contact_id (%d) is not exist", messenger->contact_id);
ctsvc_end_trans(false);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ return ret;
}
- ret = ctsvc_db_messenger_update(record, messenger->contact_id, false);
+ ret = ctsvc_db_messenger_update(record, false);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+ CTS_ERR("Update record Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
ret = ctsvc_db_contact_update_changed_time(messenger->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
if( ret != CONTACTS_ERROR_NONE ) {
CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
ctsvc_end_trans(false);
- return contact_id;
+ return ret;
}
- ret = ctsvc_db_messenger_delete(id);
+ ret = ctsvc_db_messenger_delete(id, false);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
ctsvc_end_trans(false);
ret = ctsvc_db_contact_update_changed_time(contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
#include "ctsvc_schema.h"
#include "ctsvc_sqlite.h"
#include "ctsvc_db_init.h"
+#include "ctsvc_db_query.h"
#include "ctsvc_db_plugin_messenger_helper.h"
#include "ctsvc_record.h"
#include "ctsvc_notification.h"
ctsvc_messenger_s *messenger =(ctsvc_messenger_s*)record;
char query[CTS_SQL_MAX_LEN] = {0};
-// RETVM_IF(messenger->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted messenger record");
RETV_IF(NULL == messenger->im_id, CONTACTS_ERROR_NONE);
RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact_id(%d) is mandatory field to insert messenger record ", messenger->contact_id);
return CONTACTS_ERROR_NONE;
}
-int ctsvc_db_messenger_update(contacts_record_h record, int contact_id, bool is_my_profile)
+int ctsvc_db_messenger_update(contacts_record_h record, bool is_my_profile)
{
- int ret;
+ int id;
+ int ret = CONTACTS_ERROR_NONE;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
ctsvc_messenger_s *messenger = (ctsvc_messenger_s*)record;
- char query[CTS_SQL_MAX_LEN] = {0};
- cts_stmt stmt;
+ char query[CTS_SQL_MIN_LEN] = {0};
RETVM_IF(!messenger->id, CONTACTS_ERROR_INVALID_PARAMETER, "messenger of contact has no ID.");
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (messenger->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_DATA" SET contact_id=%d, is_my_profile=%d, data1=%d, data2=?, data3=? WHERE id=%d",
- contact_id, is_my_profile, messenger->type, messenger->id);
-
- stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
-
- if (messenger->label)
- cts_stmt_bind_text(stmt, 1, messenger->label);
- if (messenger->im_id)
- cts_stmt_bind_text(stmt, 2, messenger->im_id);
-
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", messenger->id);
+ ret = ctsvc_query_get_first_int_result(query, &id);
+ RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
+
+ do {
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, messenger->id))) break;
+ if (!is_my_profile)
+ ctsvc_set_messenger_noti();
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
}
- cts_stmt_finalize(stmt);
-
- if (!is_my_profile)
- ctsvc_set_messenger_noti();
- return CONTACTS_ERROR_NONE;
+ return ret;
}
-int ctsvc_db_messenger_delete(int id)
+int ctsvc_db_messenger_delete(int id, bool is_my_profile)
{
int ret;
char query[CTS_SQL_MIN_LEN] = {0};
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
- ctsvc_set_messenger_noti();
+
+ if (!is_my_profile)
+ ctsvc_set_messenger_noti();
return CONTACTS_ERROR_NONE;
}
#include "ctsvc_sqlite.h"
int ctsvc_db_messenger_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_messenger_update(contacts_record_h record, int contact_id, bool is_my_profile);
-int ctsvc_db_messenger_delete(int id);
-
+int ctsvc_db_messenger_update(contacts_record_h record, bool is_my_profile);
+int ctsvc_db_messenger_delete(int id, bool is_my_profile);
int ctsvc_db_messenger_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
#endif // __CTSVC_DB_PLUGIN_MESSENGER_HELPER_H__
return CONTACTS_ERROR_NONE;
}
-
-
static int __ctsvc_db_my_profile_get_data(int id, ctsvc_my_profile_s *my_profile)
{
int ret, len;
{
CTS_FN_CALL;
int ret;
+ int addressbook_id;
char query[CTS_SQL_MAX_LEN] = {0};
ret = ctsvc_begin_trans();
RETVM_IF(ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
- snprintf(query, sizeof(query), "DELETE FROM %s WHERE my_profile_id = %d", CTS_TABLE_MY_PROFILES, id);
+ snprintf(query, sizeof(query),
+ "SELECT addressbook_id FROM "CTSVC_DB_VIEW_MY_PROFILE" WHERE my_profile_id = %d", id);
+ ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("ctsvc_query_get_first_int_result Failed(%d)", ret);
+ ctsvc_end_trans(false);
+ return ret;
+ }
+
+ snprintf(query, sizeof(query), "UPDATE "CTS_TABLE_MY_PROFILES" "
+ "SET deleted = 1, changed_ver = %d WHERE my_profile_id = %d", ctsvc_get_next_ver(), id);
ret = ctsvc_query_exec(query);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
ctsvc_my_profile_s *my_profile = (ctsvc_my_profile_s*)record;
cts_stmt stmt;
- snprintf(query, sizeof(query),
- "SELECT count(my_profile_id) FROM "CTS_TABLE_MY_PROFILES" WHERE my_profile_id = %d", my_profile->id);
- ret = ctsvc_query_get_first_int_result(query, &count);
- RETVM_IF(1 != count, CONTACTS_ERROR_NO_DATA,
- "The index(%d) is Invalid. %d Record(s) is(are) found", my_profile->id, ret);
-
ret = ctsvc_begin_trans();
RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+ snprintf(query, sizeof(query),
+ "SELECT count(my_profile_id) FROM "CTSVC_DB_VIEW_MY_PROFILE" WHERE my_profile_id = %d", my_profile->id);
+ ret = ctsvc_query_get_first_int_result(query, &count);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("The index(%d) is Invalid. %d Record(s) is(are) found", my_profile->id, ret);
+ ctsvc_end_trans(false);
+ return ret;
+ }
+
__ctsvc_update_my_profile_display_name(my_profile);
__ctsvc_my_profile_check_default_data(my_profile);
ctsvc_image_s *image;
GList *cursor;
- for(cursor = list->deleted_records;cursor;cursor=cursor->next) {
+ for(cursor=list->deleted_records;cursor;cursor=cursor->next) {
image = (ctsvc_image_s *)cursor->data;
my_profile->image_thumbnail_path = NULL;
}
contacts_list_h list;
len = snprintf(query, sizeof(query),
- "SELECT my_profile_id FROM "CTS_TABLE_MY_PROFILES);
+ "SELECT my_profile_id FROM "CTSVC_DB_VIEW_MY_PROFILE);
if (0 < limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
my_profile = (ctsvc_my_profile_s*)record;
if (0 == s_query->projection_count)
field_count = s_query->property_count;
- else
+ else {
field_count = s_query->projection_count;
+ ret = ctsvc_record_set_projection_flags(record, s_query->projection,
+ s_query->projection_count, s_query->property_count);
+
+ if (CONTACTS_ERROR_NONE != ret)
+ ASSERT_NOT_REACHED("To set projection is failed.\n");
+ }
for(i=0;i<field_count;i++) {
char *temp;
cts_stmt stmt;
// These check should be done in client side
-// RETVM_IF(my_profile->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted my_profile record");
RETVM_IF(NULL == my_profile, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : my_profile is NULL");
RETVM_IF(my_profile->addressbook_id < 0, CONTACTS_ERROR_INVALID_PARAMETER,
ret = ctsvc_begin_trans();
RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+ snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_MY_PROFILES" WHERE addressbook_id = %d AND deleted = 1", my_profile->addressbook_id);
+ ret = ctsvc_query_exec(query);
+ WARN_IF(CONTACTS_ERROR_NONE != ret, "Delete deleted my_profile of addressbook(%d) failed", my_profile->addressbook_id);
+
ret = cts_db_get_next_id(CTS_TABLE_MY_PROFILES);
if (ret < CONTACTS_ERROR_NONE) {
CTS_ERR("cts_db_get_next_id() Failed(%d)", ret);
#include "ctsvc_db_plugin_name_helper.h"
#include "ctsvc_record.h"
#include "ctsvc_list.h"
+#include "ctsvc_notification.h"
static int __ctsvc_db_name_insert_record( contacts_record_h record, int *id );
static int __ctsvc_db_name_get_record( int id, contacts_record_h* out_record );
// TODO ; contact name update
ret = ctsvc_db_contact_update_changed_time(name->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
"SELECT contact_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", name->contact_id);
ret = ctsvc_query_get_first_int_result(query, &contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
+ CTS_ERR("No data : contact_id (%d) is not exist", name->contact_id);
ctsvc_end_trans(false);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ return ret;
}
- ret = ctsvc_db_name_update(record, name->contact_id, false);
+ ret = ctsvc_db_name_update(record, false);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
ctsvc_end_trans(false);
// TODO ; contact display name update
ret = ctsvc_db_contact_update_changed_time(name->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
if( ret != CONTACTS_ERROR_NONE ) {
CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
ctsvc_end_trans(false);
- return contact_id;
+ return ret;
}
- ret = ctsvc_db_name_delete(id);
+ ret = ctsvc_db_name_delete(id, false);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
ctsvc_end_trans(false);
// TODO ; contact name update
ret = ctsvc_db_contact_update_changed_time(contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
#include "ctsvc_sqlite.h"
#include "ctsvc_normalize.h"
#include "ctsvc_db_init.h"
+#include "ctsvc_db_query.h"
#include "ctsvc_db_plugin_name_helper.h"
#include "ctsvc_record.h"
#include "ctsvc_setting.h"
int language_type = 0;
if (src->first) {
- dest[CTSVC_NN_FIRST] = calloc(1, strlen(src->first)* 5);
- ret = ctsvc_normalize_str(src->first, dest[CTSVC_NN_FIRST], strlen(src->first)*5);
+ ret = ctsvc_normalize_str(src->first, &dest[CTSVC_NN_FIRST]);
RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "_cts_normalize_str() Failed(%d)", ret);
language_type = ret;
}
if (src->last) {
- dest[CTSVC_NN_LAST] = calloc(1, strlen(src->last)* 5);
- ret = ctsvc_normalize_str(src->last, dest[CTSVC_NN_LAST], strlen(src->last)*5);
+ ret = ctsvc_normalize_str(src->last, &dest[CTSVC_NN_LAST]);
RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "_cts_normalize_str() Failed(%d)", ret);
if (language_type < ret)
language_type = ret;
RETV_IF(NULL == name, CONTACTS_ERROR_INVALID_PARAMETER);
-// RETVM_IF(name->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted name record");
RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact_id(%d) is mandatory field to insert name record ", name->contact_id);
RETVM_IF(0 < name->id, CONTACTS_ERROR_INVALID_PARAMETER,
__ctsvc_make_name_lookup(CONTACTS_NAME_DISPLAY_ORDER_LASTFIRST,
temp_normal_first, temp_normal_last, &name->reverse_lookup);
-// CTS_DBG("lookup=%s(%d), reverse_lookup=%s(%d)",
-// lookup, strlen(lookup), reverse_lookup, strlen(reverse_lookup));
-
free(normal_name[CTSVC_NN_FIRST]);
free(normal_name[CTSVC_NN_LAST]);
return CONTACTS_ERROR_NONE;
}
-int ctsvc_db_name_update(contacts_record_h record, int contact_id, bool is_my_profile)
+int ctsvc_db_name_update(contacts_record_h record, bool is_my_profile)
{
int ret, len=0;
+ int id;
+ char* set = NULL;
+ GSList *cursor = NULL;
+ GSList *bind_text = NULL;
ctsvc_name_s *name = (ctsvc_name_s*)record;
char *tmp_first, *tmp_last;
- char query[CTS_SQL_MAX_LEN] = {0};
char *normal_name[CTSVC_NN_MAX] = {NULL};
char *temp_normal_first = NULL;
char *temp_normal_last = NULL;
- cts_stmt stmt;
+ char query[CTS_SQL_MIN_LEN] = {0};
RETV_IF(false == name->is_changed, CONTACTS_ERROR_NONE);
RETVM_IF(!name->id, CONTACTS_ERROR_INVALID_PARAMETER, "name of contact has no ID.");
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (name->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_DATA" SET contact_id=%d, is_my_profile=%d, is_default=?, data1=?, data2=?, data3=?, data4=?,"
- "data5=?, data6=?, data7=?, data8=?, data9=?, data10=?, data11=?, data12=? WHERE id=%d", contact_id, is_my_profile, name->id);
-
- stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", name->id);
+ ret = ctsvc_query_get_first_int_result(query, &id);
+ RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
tmp_first = name->first;
tmp_last = name->last;
ret = __ctsvc_normalize_name(name, normal_name);
if (ret < CONTACTS_ERROR_NONE) {
CTS_ERR("cts_normalize_name() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
return ret;
}
__ctsvc_make_name_lookup(CONTACTS_NAME_DISPLAY_ORDER_LASTFIRST,
temp_normal_first, temp_normal_last, &name->reverse_lookup);
-// CTS_DBG("lookup=%s(%d), reverse_lookup=%s(%d)",
-// lookup, strlen(lookup), reverse_lookup, strlen(reverse_lookup));
-
free(normal_name[CTSVC_NN_FIRST]);
free(normal_name[CTSVC_NN_LAST]);
- __ctsvc_name_bind_stmt(stmt, name, 1);
- name->contact_id = contact_id;
+ do {
+ char query_set[CTS_SQL_MAX_LEN] = {0};
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ snprintf(query_set, sizeof(query_set), "%s, is_default=%d, data1=%d, data11=?, data12=?",
+ set, name->is_default, name->language_type);
+ bind_text = g_slist_append(bind_text, strdup(SAFE_STR(name->lookup)));
+ bind_text = g_slist_append(bind_text, strdup(SAFE_STR(name->reverse_lookup)));
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(query_set, bind_text, CTS_TABLE_DATA, name->id))) break;
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
+ if (!is_my_profile)
+ ctsvc_set_name_noti();
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
}
- cts_stmt_finalize(stmt);
- if (!is_my_profile)
- ctsvc_set_name_noti();
name->is_changed = false;
-
return CONTACTS_ERROR_NONE;
}
-int ctsvc_db_name_delete(int id)
+int ctsvc_db_name_delete(int id, bool is_my_profile)
{
int ret;
char query[CTS_SQL_MIN_LEN] = {0};
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
- ctsvc_set_name_noti();
+
+ if (!is_my_profile)
+ ctsvc_set_name_noti();
return CONTACTS_ERROR_NONE;
}
#include "ctsvc_sqlite.h"
int ctsvc_db_name_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_name_update(contacts_record_h record, int contact_id, bool is_my_profile);
-int ctsvc_db_name_delete(int id);
+int ctsvc_db_name_update(contacts_record_h record, bool is_my_profile);
+int ctsvc_db_name_delete(int id, bool is_my_profile);
int ctsvc_db_name_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
#include "ctsvc_record.h"
#include "ctsvc_db_query.h"
#include "ctsvc_list.h"
+#include "ctsvc_notification.h"
static int __ctsvc_db_nickname_insert_record( contacts_record_h record, int *id );
static int __ctsvc_db_nickname_get_record( int id, contacts_record_h* out_record );
ret = ctsvc_db_contact_update_changed_time(nickname->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
"SELECT contact_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", nickname->contact_id);
ret = ctsvc_query_get_first_int_result(query, &contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
+ CTS_ERR("No data : contact_id (%d) is not exist", nickname->contact_id);
ctsvc_end_trans(false);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ return ret;
}
- ret = ctsvc_db_nickname_update(record, nickname->contact_id, false);
+ ret = ctsvc_db_nickname_update(record, false);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+ CTS_ERR("Update record Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
ret = ctsvc_db_contact_update_changed_time(nickname->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if( ret != CONTACTS_ERROR_NONE ) {
CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
ctsvc_end_trans(false);
- return contact_id;
+ return ret;
}
- ret = ctsvc_db_nickname_delete(id);
+ ret = ctsvc_db_nickname_delete(id, false);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
ctsvc_end_trans(false);
ret = ctsvc_db_contact_update_changed_time(contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
#include "ctsvc_schema.h"
#include "ctsvc_sqlite.h"
#include "ctsvc_db_init.h"
+#include "ctsvc_db_query.h"
#include "ctsvc_db_plugin_nickname_helper.h"
#include "ctsvc_record.h"
#include "ctsvc_notification.h"
char query[CTS_SQL_MAX_LEN] = {0};
ctsvc_nickname_s *nickname = (ctsvc_nickname_s *)record;
-// RETVM_IF(nickname->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted nickname record");
RETV_IF(NULL == nickname->nickname, CONTACTS_ERROR_NONE);
RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact_id(%d) is mandatory field to insert nickname record ", nickname->contact_id);
return CONTACTS_ERROR_NONE;
}
-int ctsvc_db_nickname_update(contacts_record_h record, int contact_id, bool is_my_profile)
+int ctsvc_db_nickname_update(contacts_record_h record, bool is_my_profile)
{
- int ret;
+ int id;
+ int ret = CONTACTS_ERROR_NONE;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
ctsvc_nickname_s *nickname = (ctsvc_nickname_s*)record;
char query[CTS_SQL_MAX_LEN] = {0};
- cts_stmt stmt;
RETVM_IF(!nickname->id, CONTACTS_ERROR_INVALID_PARAMETER, "nickname of contact has no ID.");
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (nickname->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_DATA" SET contact_id=%d, is_my_profile=%d, data1=%d, data2=?, data3=? WHERE id=%d",
- contact_id, is_my_profile, nickname->type, nickname->id);
-
- stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
-
- if (nickname->label)
- cts_stmt_bind_text(stmt, 1, nickname->label);
- if (nickname->nickname)
- cts_stmt_bind_text(stmt, 2, nickname->nickname);
-
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", nickname->id);
+ ret = ctsvc_query_get_first_int_result(query, &id);
+ RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
+
+ do {
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, nickname->id))) break;
+ if (!is_my_profile)
+ ctsvc_set_nickname_noti();
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
}
-
- cts_stmt_finalize(stmt);
-
- if (!is_my_profile)
- ctsvc_set_nickname_noti();
- return CONTACTS_ERROR_NONE;
+ return ret;
}
-int ctsvc_db_nickname_delete(int id)
+int ctsvc_db_nickname_delete(int id, bool is_my_profile)
{
int ret;
char query[CTS_SQL_MIN_LEN] = {0};
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
- ctsvc_set_nickname_noti();
+
+ if (!is_my_profile)
+ ctsvc_set_nickname_noti();
return CONTACTS_ERROR_NONE;
}
#include "ctsvc_sqlite.h"
int ctsvc_db_nickname_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_nickname_update(contacts_record_h record, int contact_id, bool is_my_profile);
-int ctsvc_db_nickname_delete(int id);
-
+int ctsvc_db_nickname_update(contacts_record_h record, bool is_my_profile);
+int ctsvc_db_nickname_delete(int id, bool is_my_profile);
int ctsvc_db_nickname_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
#endif // __CTSVC_DB_PLUGIN_NICKNAME_HELPER_H__
#include "ctsvc_sqlite.h"
#include "ctsvc_utils.h"
#include "ctsvc_db_init.h"
+#include "ctsvc_db_query.h"
#include "ctsvc_db_plugin_contact_helper.h"
#include "ctsvc_db_plugin_note_helper.h"
#include "ctsvc_db_query.h"
#include "ctsvc_list.h"
#include "ctsvc_record.h"
+#include "ctsvc_notification.h"
static int __ctsvc_db_note_insert_record( contacts_record_h record, int *id );
static int __ctsvc_db_note_get_record( int id, contacts_record_h* out_record );
ret = ctsvc_db_contact_update_changed_time(note->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
"SELECT contact_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", note->contact_id);
ret = ctsvc_query_get_first_int_result(query, &contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
+ CTS_ERR("No data : contact_id (%d) is not exist", note->contact_id);
ctsvc_end_trans(false);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ return ret;
}
- ret = ctsvc_db_note_update(record, note->contact_id, false);
+ ret = ctsvc_db_note_update(record, false);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+ CTS_ERR("Update record Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
// TODO ; contact display note update
ret = ctsvc_db_contact_update_changed_time(note->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
if( ret != CONTACTS_ERROR_NONE ) {
CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
ctsvc_end_trans(false);
- return contact_id;
+ return ret;
}
- ret = ctsvc_db_note_delete(id);
+ ret = ctsvc_db_note_delete(id, false);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
ctsvc_end_trans(false);
// TODO ; contact name update
ret = ctsvc_db_contact_update_changed_time(contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
#include "ctsvc_sqlite.h"
#include "ctsvc_utils.h"
#include "ctsvc_db_init.h"
+#include "ctsvc_db_query.h"
#include "ctsvc_db_plugin_note_helper.h"
#include "ctsvc_notification.h"
+#include "ctsvc_record.h"
int ctsvc_db_note_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count)
{
ctsvc_note_s *note = (ctsvc_note_s*)record;
char query[CTS_SQL_MAX_LEN] = {0};
-// RETVM_IF(note->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted note record");
RETV_IF(NULL == note->note, CONTACTS_ERROR_NONE);
RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact_id(%d) is mandatory field to insert note record ", note->contact_id);
return CONTACTS_ERROR_NONE;
}
-int ctsvc_db_note_update(contacts_record_h record, int contact_id, bool is_my_profile)
+int ctsvc_db_note_update(contacts_record_h record, bool is_my_profile)
{
- int ret;
+ int id;
+ int ret = CONTACTS_ERROR_NONE;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
ctsvc_note_s *note = (ctsvc_note_s*)record;
char query[CTS_SQL_MAX_LEN] = {0};
- cts_stmt stmt;
RETVM_IF(!note->id, CONTACTS_ERROR_INVALID_PARAMETER, "note of contact has no ID.");
- snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_DATA" SET contact_id=%d, is_my_profile=%d, data3=? WHERE id=%d",
- contact_id, is_my_profile, note->id);
-
- stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (note->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
- if (note->note)
- sqlite3_bind_text(stmt, 1, note->note,
- strlen(note->note), SQLITE_STATIC);
-
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
+ snprintf(query, sizeof(query),
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", note->id);
+ ret = ctsvc_query_get_first_int_result(query, &id);
+ RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
+
+ do {
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, note->id))) break;
+
+ if (!is_my_profile)
+ ctsvc_set_messenger_noti();
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
}
- cts_stmt_finalize(stmt);
-
- if (!is_my_profile)
- ctsvc_set_note_noti();
- return CONTACTS_ERROR_NONE;
+ return ret;
}
-int ctsvc_db_note_delete(int id)
+int ctsvc_db_note_delete(int id, bool is_my_profile)
{
int ret;
char query[CTS_SQL_MIN_LEN] = {0};
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
- ctsvc_set_note_noti();
+
+ if (!is_my_profile)
+ ctsvc_set_note_noti();
return CONTACTS_ERROR_NONE;
}
#include "ctsvc_sqlite.h"
int ctsvc_db_note_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_note_update(contacts_record_h record, int contact_id, bool is_my_profile);
-int ctsvc_db_note_delete(int id);
-
+int ctsvc_db_note_update(contacts_record_h record, bool is_my_profile);
+int ctsvc_db_note_delete(int id, bool is_my_profile);
int ctsvc_db_note_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
#endif // __CTSVC_DB_PLUGIN_NOTE_HELPER_H__
.replace_records = NULL,
};
+static int __ctsvc_db_number_get_person_id_by_contact_id(int contact_id)
+{
+ int ret;
+ int person_id;
+ char query[CTS_SQL_MAX_LEN] = {0};
+
+ snprintf(query, sizeof(query), "SELECT person_id FROM "CTS_TABLE_CONTACTS" WHERE contact_id=%d", contact_id);
+ ret = ctsvc_query_get_first_int_result(query, &person_id);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
+ return 0;
+ }
+ return person_id;
+}
+
+static int __ctsvc_db_number_get_person_default_number(int person_id)
+{
+ int ret;
+ int default_number_id;
+ char query[CTS_SQL_MAX_LEN] = {0};
+
+ snprintf(query, sizeof(query),
+ "SELECT id FROM "CTS_TABLE_CONTACTS" c, "CTS_TABLE_DATA" d "
+ "WHERE c.person_id = %d AND d.datatype = %d AND c.contact_id = d.contact_id AND d.is_default = %d",
+ person_id, CTSVC_DATA_NUMBER, 1);
+ ret = ctsvc_query_get_first_int_result(query, &default_number_id);
+ if (CONTACTS_ERROR_NONE != ret)
+ return 0;
+ return default_number_id;
+}
+
+
+static int __ctsvc_db_number_update_person_hasphonenumber(int person_id, bool has_phonenumber)
+{
+ int ret;
+ char query[CTS_SQL_MAX_LEN] = {0};
+
+ snprintf(query, sizeof(query),
+ "UPDATE "CTS_TABLE_PERSONS" SET has_phonenumber = %d WHERE person_id = %d",
+ has_phonenumber, person_id);
+
+ ret = ctsvc_query_exec(query);
+ WARN_IF(CONTACTS_ERROR_NONE != ret, "cts_query_exec() Failed(%d)", ret);
+ return ret;
+}
+
+static int __ctsvc_db_number_reset_default(int number_id, int contact_id)
+{
+ int ret;
+ char query[CTS_SQL_MAX_LEN] = {0};
+
+ snprintf(query, sizeof(query),
+ "UPDATE "CTS_TABLE_DATA" SET is_default = %d WHERE id != %d AND contact_id = %d AND is_default = %d AND datatype = %d",
+ 0, number_id, contact_id, 1, CTSVC_DATA_NUMBER);
+ ret = ctsvc_query_exec(query);
+
+ WARN_IF(CONTACTS_ERROR_NONE != ret, "cts_query_exec() Failed(%d)", ret);
+ return ret;
+}
+
+static int __ctsvc_db_number_update_default(int number_id, int contact_id)
+{
+ int ret;
+ char query[CTS_SQL_MAX_LEN] = {0};
+
+ snprintf(query, sizeof(query),
+ "UPDATE "CTS_TABLE_DATA" SET is_default = %d WHERE id = %d",
+ 1, number_id);
+ ret = ctsvc_query_exec(query);
+
+ WARN_IF(CONTACTS_ERROR_NONE != ret, "cts_query_exec() Failed(%d)", ret);
+ return ret;
+}
+
+static int __ctsvc_db_number_get_primary_default(int contact_id)
+{
+ int ret;
+ int number_id = 0;
+ char query[CTS_SQL_MAX_LEN] = {0};
+ snprintf(query, sizeof(query),
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE datatype=%d AND contact_id=%d AND is_primary_default=%d",
+ CTSVC_DATA_NUMBER, contact_id, 1);
+ ret = ctsvc_query_get_first_int_result(query, &number_id);
+ if (CONTACTS_ERROR_NONE != ret)
+ return 0;
+ return number_id;
+}
+
+static int __ctsvc_db_number_set_primary_default(int number_id, bool is_primary_default)
+{
+ int ret;
+ char query[CTS_SQL_MAX_LEN] = {0};
+
+ snprintf(query, sizeof(query),
+ "UPDATE "CTS_TABLE_DATA" SET is_primary_default = %d WHERE id = %d",
+ is_primary_default, number_id);
+ ret = ctsvc_query_exec(query);
+ WARN_IF(CONTACTS_ERROR_NONE != ret, "cts_query_exec() Failed(%d)", ret);
+ return ret;
+}
static int __ctsvc_db_number_insert_record( contacts_record_h record, int *id )
{
int ret;
int contact_id;
+ int person_id;
char query[CTS_SQL_MAX_LEN] = {0};
ctsvc_number_s *number = (ctsvc_number_s *)record;
RETVM_IF(NULL == number->number, CONTACTS_ERROR_INVALID_PARAMETER,
return ret;
}
- // should update person default number
+ person_id = __ctsvc_db_number_get_person_id_by_contact_id(contact_id);
+ __ctsvc_db_number_update_person_hasphonenumber(person_id, true);
+
+ if (number->is_default) {
+ int old_primary_default_number_id;
+ __ctsvc_db_number_reset_default(number->id, contact_id);
+ old_primary_default_number_id = __ctsvc_db_number_get_primary_default(contact_id);
+ if (old_primary_default_number_id) {
+ __ctsvc_db_number_set_primary_default(old_primary_default_number_id, false);
+ __ctsvc_db_number_set_primary_default(number->id, true);
+ }
+ }
+
ctsvc_set_contact_noti();
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
cts_stmt stmt = NULL;
snprintf(query, sizeof(query),
- "SELECT id, contact_id, is_default, type, label, number, lookup "
+ "SELECT id, contact_id, is_default, data1, data2, data3, data4 "
"FROM "CTSVC_DB_VIEW_NUMBER" WHERE id = %d", id);
stmt = cts_query_prepare(query);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
ctsvc_end_trans(false);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ return ret;
}
- ret = ctsvc_db_number_update(record, number->contact_id, false);
+ ret = ctsvc_db_number_update(record, false);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
- // should update person default number
+ if (number->is_default) {
+ int old_primary_default_number_id;
+ __ctsvc_db_number_reset_default(number->id, contact_id);
+ old_primary_default_number_id = __ctsvc_db_number_get_primary_default(contact_id);
+ if (old_primary_default_number_id) {
+ __ctsvc_db_number_set_primary_default(old_primary_default_number_id, false);
+ __ctsvc_db_number_set_primary_default(number->id, true);
+ }
+ }
+
ctsvc_set_contact_noti();
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
static int __ctsvc_db_number_delete_record( int id )
{
int ret;
+ int number_id;
int contact_id;
+ int person_id;
+ int is_default;
+ int is_primary_default;
char query[CTS_SQL_MAX_LEN] = {0};
bool has_phonenumber = false;
+ cts_stmt stmt = NULL;
ret = ctsvc_begin_trans();
if (CONTACTS_ERROR_NONE != ret) {
return ret;
}
- ret = ctsvc_db_number_delete(id);
+ snprintf(query, sizeof(query),
+ "SELECT is_default, is_primary_default FROM "CTS_TABLE_DATA" WHERE id = %d", id);
+
+ stmt = cts_query_prepare(query);
+ RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB , "DB error : cts_query_prepare() Failed");
+
+ ret = cts_stmt_step(stmt);
+ if (1 != ret) {
+ CTS_ERR("DB error : cts_stmt_step() Failed(%d)", ret);
+ cts_stmt_finalize(stmt);
+ ctsvc_end_trans(false);
+ return CONTACTS_ERROR_NO_DATA;
+ }
+ is_default = ctsvc_stmt_get_int(stmt, 0);
+ is_primary_default = ctsvc_stmt_get_int(stmt, 1);
+ cts_stmt_finalize(stmt);
+
+ ret = ctsvc_db_number_delete(id, false);
+
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
ctsvc_end_trans(false);
}
snprintf(query, sizeof(query),
- "SELECT COUNT(id) FROM "CTS_TABLE_DATA" WHERE contact_id = %d AND is_my_profile = 0", contact_id);
- ret = ctsvc_query_get_first_int_result(query, &contact_id);
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE datatype = %d AND contact_id = %d AND is_my_profile = 0 limit 1",
+ CTSVC_DATA_NUMBER, contact_id);
+ ret = ctsvc_query_get_first_int_result(query, &number_id);
if ( 0 < ret )
has_phonenumber = true;
return ret;
}
- // should update person default number
+ person_id = __ctsvc_db_number_get_person_id_by_contact_id(contact_id);
+
+ if (number_id) {
+ if (is_default)
+ __ctsvc_db_number_update_default(number_id, contact_id);
+ if (is_primary_default)
+ __ctsvc_db_number_set_primary_default(number_id, true);
+ }
+ else {
+ int default_number_id;
+ default_number_id = __ctsvc_db_number_get_person_default_number(person_id);
+ if (default_number_id)
+ __ctsvc_db_number_set_primary_default(default_number_id, true);
+ else
+ __ctsvc_db_number_update_person_hasphonenumber(person_id, false);
+ }
+
ctsvc_set_contact_noti();
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
char query[CTS_SQL_MAX_LEN] = {0};
len = snprintf(query, sizeof(query),
- "SELECT id, contact_id, is_default, type, label, number, lookup FROM "CTSVC_DB_VIEW_NUMBER);
+ "SELECT id, contact_id, is_default, data1, data2, data3, data4 FROM "CTSVC_DB_VIEW_NUMBER);
if (0 < limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
if (0 < offset)
#include "ctsvc_schema.h"
#include "ctsvc_sqlite.h"
#include "ctsvc_db_init.h"
+#include "ctsvc_db_query.h"
#include "ctsvc_normalize.h"
#include "ctsvc_db_plugin_number_helper.h"
#include "ctsvc_record.h"
char normal_num[CTSVC_NUMBER_MAX_LEN] = {0};
char clean_num[CTSVC_NUMBER_MAX_LEN] = {0};
-// RETVM_IF(number->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted number record");
RETV_IF(NULL == number->number, CONTACTS_ERROR_NONE);
RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact_id(%d) is mandatory field to insert number record ", number->contact_id);
cts_stmt_bind_text(stmt, 2, number->number);
ret = ctsvc_clean_number(number->number, clean_num, sizeof(clean_num));
if (0 < ret) {
- ret = ctsvc_normalize_number(clean_num, normal_num, CTSVC_NUMBER_MAX_LEN);
+ ret = ctsvc_normalize_number(clean_num, normal_num, CTSVC_NUMBER_MAX_LEN, CTSVC_MIN_MATCH_NORMALIZED_NUMBER_SIZE);
if (CONTACTS_ERROR_NONE == ret)
cts_stmt_bind_text(stmt, 3, normal_num);
}
return CONTACTS_ERROR_NONE;
}
-int ctsvc_db_number_update(contacts_record_h record, int contact_id, bool is_my_profile)
+int ctsvc_db_number_update(contacts_record_h record, bool is_my_profile)
{
- int ret;
- ctsvc_number_s *number = (ctsvc_number_s*)record;
- char query[CTS_SQL_MAX_LEN] = {0};
- char normal_num[CTSVC_NUMBER_MAX_LEN] = {0};
+ int id;
+ int ret = CONTACTS_ERROR_NONE;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
+ ctsvc_number_s *number = (ctsvc_number_s *)record;
char clean_num[CTSVC_NUMBER_MAX_LEN] = {0};
- cts_stmt stmt;
+ char normal_num[CTSVC_NUMBER_MAX_LEN] = {0};
+ char query[CTS_SQL_MAX_LEN] = {0};
RETVM_IF(!number->id, CONTACTS_ERROR_INVALID_PARAMETER, "number of contact has no ID.");
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (number->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_DATA" SET contact_id=%d, is_my_profile=%d, data1=%d, data2=?, data3=?, data4=? WHERE id=%d",
- contact_id, is_my_profile, number->type, number->id);
-
- stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
-
- if (number->label)
- cts_stmt_bind_text(stmt, 1, number->label);
-
- if (number->number)
- cts_stmt_bind_text(stmt, 2, number->number);
- ret = ctsvc_clean_number(number->number, clean_num, sizeof(clean_num));
- if (0 < ret) {
- ret = ctsvc_normalize_number(clean_num, normal_num, CTSVC_NUMBER_MAX_LEN);
- if (CONTACTS_ERROR_NONE == ret)
- cts_stmt_bind_text(stmt, 3, normal_num);
- }
-
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", number->id);
+ ret = ctsvc_query_get_first_int_result(query, &id);
+ RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
+
+ do {
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (ctsvc_record_check_property_flag((ctsvc_record_s *)record, CTSVC_PROPERTY_NUMBER_NUMBER, CTSVC_PROPERTY_FLAG_DIRTY)) {
+ ret = ctsvc_clean_number(number->number, clean_num, sizeof(clean_num));
+ if (0 < ret) {
+ ret = ctsvc_normalize_number(clean_num, normal_num, CTSVC_NUMBER_MAX_LEN, CTSVC_MIN_MATCH_NORMALIZED_NUMBER_SIZE);
+ if (CONTACTS_ERROR_NONE == ret) {
+ char query_set[CTS_SQL_MAX_LEN] = {0};
+ snprintf(query_set, sizeof(query_set), "%s, data4=?", set);
+ free(set);
+ set = strdup(query_set);
+ bind_text = g_slist_append(bind_text, strdup(normal_num));
+ }
+ }
+ }
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, number->id))) break;
+
+ if (!is_my_profile)
+ ctsvc_set_number_noti();
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
}
- cts_stmt_finalize(stmt);
-
- if (!is_my_profile)
- ctsvc_set_number_noti();
-
- return CONTACTS_ERROR_NONE;
+ return ret;
}
-int ctsvc_db_number_delete(int id)
+int ctsvc_db_number_delete(int id, bool is_my_profile)
{
int ret;
char query[CTS_SQL_MIN_LEN] = {0};
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
- ctsvc_set_number_noti();
+
+ if (!is_my_profile)
+ ctsvc_set_number_noti();
return CONTACTS_ERROR_NONE;
}
#include "ctsvc_sqlite.h"
int ctsvc_db_number_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_number_update(contacts_record_h record, int contact_id, bool is_my_profile);
-int ctsvc_db_number_delete(int id);
+int ctsvc_db_number_update(contacts_record_h record, bool is_my_profile);
+int ctsvc_db_number_delete(int id, bool is_my_profile);
int ctsvc_db_number_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
"LEFT JOIN "CTS_TABLE_CONTACTS" "
"ON (name_contact_id = contacts.contact_id AND contacts.deleted = 0) "
"WHERE persons.person_id = %d",
- ctsvc_get_display_column(), ctsvc_get_display_column(), id);
+ ctsvc_get_display_column(), ctsvc_get_sort_name_column(), id);
stmt = cts_query_prepare(query);
RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
}
ret = cts_db_change();
- if (0 < ret)
- ctsvc_set_favor_noti();
snprintf(query, sizeof(query),
"UPDATE "CTS_TABLE_CONTACTS" SET is_favorite = %d "
static int __ctsvc_db_person_update_record( contacts_record_h record )
{
- int ret, i, len, len2;
+ int ret, i, len;
+ int person_id;
cts_stmt stmt = NULL;
- char query[CTS_SQL_MIN_LEN] = {0};
+ char *set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
char contact_query[CTS_SQL_MIN_LEN] = {0};
+ char query[CTS_SQL_MIN_LEN] = {0};
ctsvc_person_s *person = (ctsvc_person_s *)record;
const char *display_name = NULL;
ret = ctsvc_begin_trans();
RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
- len = snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_PERSONS" SET changed_ver=%d ", ctsvc_get_next_ver());
-
- len2 = snprintf(contact_query, sizeof(contact_query),
- "UPDATE "CTS_TABLE_CONTACTS" SET changed_ver=%d ", ctsvc_get_next_ver());
+ snprintf(query, sizeof(query),
+ "SELECT person_id FROM "CTS_TABLE_PERSONS" WHERE person_id = %d", person->person_id);
+ ret = ctsvc_query_get_first_int_result(query, &person_id);
+ if (ret != CONTACTS_ERROR_NONE) {
+ CTS_ERR("ctsvc_query_get_first_int_result Fail(%d)", ret);
+ ctsvc_end_trans(false);
+ return ret;
+ }
if (person->name_contact_id_changed) {
// check name_contact_id validation
ret = cts_stmt_step(stmt);
if ( 1 != ret) {
if ( CONTACTS_ERROR_NONE == ret) {
- CTS_ERR("Invalid paramter : the name_contact_id(%d) is not linked with person_id(%d)",
+ CTS_ERR("Invalid parameter : the name_contact_id(%d) is not linked with person_id(%d)",
person->name_contact_id, person->person_id);
cts_stmt_finalize(stmt);
ctsvc_end_trans(false);
temp = ctsvc_stmt_get_text(stmt, 0);
display_name = SAFE_STRDUP(temp);
- len += snprintf(query + len, sizeof(query) - len, ", name_contact_id = %d ", person->name_contact_id);
-
cts_stmt_finalize(stmt);
}
- if (person->image_thumbnail_changed)
- len += snprintf(query + len, sizeof(query) - len, ", image_thumbnail_path=? ");
- if (person->ringtone_changed) {
- len += snprintf(query + len, sizeof(query) - len, ", ringtone_path=? ");
- len2 += snprintf(contact_query + len2, sizeof(contact_query) - len2, ", ringtone_path=? ");
- }
- if (person->vibration_changed) {
- len += snprintf(query + len, sizeof(query) - len, ", vibration=? ");
- len2 += snprintf(contact_query + len2, sizeof(contact_query) - len2, ", vibration=? ");
+
+ // update favorite
+ int index_favorite = CTSVC_PROPERTY_PERSON_IS_FAVORITE & 0x000000FF;
+ if (person->base.properties_flags &&
+ CTSVC_PROPERTY_FLAG_DIRTY == person->base.properties_flags[index_favorite]) {
+ ret = __ctsvc_db_person_set_favorite(person->person_id, person->is_favorite);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("cts_stmt_step() Failed(%d)", ret);
+ ctsvc_end_trans(false);
+ return ret;
+ }
+ person->base.properties_flags[index_favorite] = 0;
}
- snprintf(query+len, sizeof(query)-len, " WHERE person_id=%d", person->person_id);
- snprintf(contact_query+len2, sizeof(contact_query)-len2,
- " WHERE person_id=%d AND deleted = 0", person->person_id);
+ do {
+ int ret = CONTACTS_ERROR_NONE;
+ char query[CTS_SQL_MAX_LEN] = {0};
+ char query_set[CTS_SQL_MIN_LEN] = {0, };
+ GSList *cursor = NULL;
- stmt = cts_query_prepare(query);
- if (NULL == stmt) {
- CTS_ERR("cts_query_prepare() Failed");
- ctsvc_end_trans(false);
- return CONTACTS_ERROR_DB;
- }
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (NULL == set || '\0' == *set)
+ break;
+ len = snprintf(query_set, sizeof(query_set), "%s, changed_ver=%d", set, ctsvc_get_next_ver());
- i = 1;
- if (person->image_thumbnail_changed) {
- if (person->image_thumbnail_path)
- cts_stmt_bind_text(stmt, i, person->image_thumbnail_path);
- i++;
- }
+ snprintf(query, sizeof(query), "UPDATE %s SET %s WHERE person_id = %d", CTS_TABLE_PERSONS, query_set, person->person_id);
- if (person->ringtone_changed) {
- if (person->ringtone_path)
- cts_stmt_bind_text(stmt, i, person->ringtone_path);
- i++;
- }
- if (person->vibration_changed) {
- if (person->vibration)
- cts_stmt_bind_text(stmt, i, person->vibration);
- i++;
+ stmt = cts_query_prepare(query);
+ if (NULL == stmt) {
+ CTS_ERR("DB error : cts_query_prepare() Failed");
+ ret = CONTACTS_ERROR_DB;
+ break;
+ }
+
+ if (bind_text) {
+ int i = 0;
+ for (cursor=bind_text,i=1;cursor;cursor=cursor->next,i++) {
+ const char *text = cursor->data;
+ if (text && *text)
+ cts_stmt_bind_text(stmt, i, text);
+ }
+ }
+ ret = cts_stmt_step(stmt);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("cts_stmt_step() Failed(%d)", ret);
+ cts_stmt_finalize(stmt);
+ break;
+ }
+ cts_stmt_finalize(stmt);
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
}
- ret = cts_stmt_step(stmt);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
ctsvc_end_trans(false);
return ret;
}
- cts_stmt_finalize(stmt);
+
+ len = snprintf(contact_query, sizeof(contact_query), "UPDATE "CTS_TABLE_CONTACTS" SET changed_ver=%d ", ctsvc_get_next_ver());
+
+ if (person->ringtone_changed)
+ len += snprintf(contact_query + len, sizeof(contact_query) - len, ", ringtone_path=? ");
+ if (person->vibration_changed)
+ len += snprintf(contact_query + len, sizeof(contact_query) - len, ", vibration=? ");
+
+ snprintf(contact_query+len, sizeof(contact_query)-len, " WHERE person_id=%d AND deleted = 0", person->person_id);
stmt = cts_query_prepare(contact_query);
if (NULL == stmt) {
cts_stmt_bind_text(stmt, i, person->ringtone_path);
i++;
}
+
if (person->vibration_changed) {
if (person->vibration)
cts_stmt_bind_text(stmt, i, person->vibration);
}
cts_stmt_finalize(stmt);
- // update favorite
- if (person->is_favorite_changed) {
- ret = __ctsvc_db_person_set_favorite(person->person_id, person->is_favorite);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- ctsvc_end_trans(false);
- return ret;
- }
- }
-
// update person display_name
if (display_name) {
- char temp[CTS_SQL_MAX_LEN] = {0};
+ char *temp = NULL;
person->display_name = SAFE_STRDUP(display_name);
- ret = ctsvc_normalize_index(person->display_name, temp, sizeof(temp));
+ ret = ctsvc_normalize_index(person->display_name, &temp);
if (0 <= ret)
person->display_name_index = strdup(temp);
+
+ free(temp);
// TODO : update name primary_default??
}
ctsvc_set_person_noti();
}
else {
person->name_contact_id_changed = false;
- person->image_thumbnail_changed = false;
person->ringtone_changed = false;
person->vibration_changed = false;
person->is_favorite_changed = false;
static int __ctsvc_db_person_delete_record( int id )
{
int ret, rel_changed;
+ int person_id;
char query[CTS_SQL_MAX_LEN] = {0};
ret = ctsvc_begin_trans();
RETVM_IF(ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
snprintf(query, sizeof(query),
+ "SELECT person_id FROM "CTS_TABLE_PERSONS" WHERE person_id = %d", id);
+ ret = ctsvc_query_get_first_int_result(query, &person_id);
+ if (ret != CONTACTS_ERROR_NONE) {
+ CTS_ERR("ctsvc_query_get_first_int_result Fail(%d)", ret);
+ ctsvc_end_trans(false);
+ return ret;
+ }
+
+ snprintf(query, sizeof(query),
"UPDATE "CTS_TABLE_GROUPS" SET member_changed_ver=%d "
"WHERE group_id IN (SELECT distinct group_id "
"FROM "CTS_TABLE_CONTACTS" C, "CTS_TABLE_GROUP_RELATIONS" R "
"has_email, "
"is_favorite "
"FROM "CTSVC_DB_VIEW_PERSON" ORDER BY %s",
- ctsvc_get_display_column(), ctsvc_get_display_column(), ctsvc_get_sort_column());
+ ctsvc_get_display_column(), ctsvc_get_sort_name_column(), ctsvc_get_sort_column());
if (0 < limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
int ret, data_id;
cts_stmt stmt = NULL;
char query[CTS_SQL_MIN_LEN] = {0};
+ char *temp = NULL;
snprintf(query, sizeof(query),
"SELECT D.id FROM "CTS_TABLE_CONTACTS" C, "CTS_TABLE_DATA" D "
ret = ctsvc_query_get_first_int_result(query, &data_id);
if (CONTACTS_ERROR_NO_DATA == ret ) {
snprintf(query, sizeof(query),
- "SELECT D.id FROM "CTS_TABLE_CONTACTS" C, "CTS_TABLE_DATA" D "
+ "SELECT D.id, D.data3 FROM "CTS_TABLE_CONTACTS" C, "CTS_TABLE_DATA" D "
"ON C.contact_id = D.contact_id AND C.deleted = 0 "
"WHERE C.person_id=%d AND D.datatype=%d AND D.is_default=1 AND D.is_my_profile = 0 ORDER BY D.id",
person_id, datatype);
return CONTACTS_ERROR_DB;
}
- if ((ret = cts_stmt_step(stmt)))
- {
+ if ((ret = cts_stmt_step(stmt))) {
data_id = ctsvc_stmt_get_int(stmt, 0);
snprintf(query, sizeof(query),
cts_stmt_finalize(stmt);
return ret;
}
+ temp = ctsvc_stmt_get_text(stmt, 1);
}
cts_stmt_finalize(stmt);
+
+ if (CTSVC_DATA_IMAGE == datatype) {
+ if (temp) {
+ snprintf(query, sizeof(query),
+ "UPDATE "CTS_TABLE_PERSONS" SET image_thumbnail_path=? WHERE person_id=%d", person_id);
+ stmt = cts_query_prepare(query);
+ cts_stmt_bind_text(stmt, 1, temp);
+ ret = cts_stmt_step(stmt);
+ cts_stmt_finalize(stmt);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("cts_query_exec(%s) Failed(%d)", query, ret);
+ return ret;
+ }
+ }
+ }
}
return CONTACTS_ERROR_NONE;
}
-int ctsvc_db_update_person(contacts_record_h record)
+static bool __ctsvc_get_has_column(int person_id, const char *culumn)
{
- int ret, i=1, contact_count=0, len=0;
- cts_stmt stmt = NULL;
+ int ret;
+ int contact_count = 0;
char query[CTS_SQL_MIN_LEN] = {0};
- ctsvc_contact_s *contact = (ctsvc_contact_s*)record;
- bool has_phonenumber=false, has_email=false;
-
- ret = ctsvc_begin_trans();
- RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
snprintf(query, sizeof(query),
"SELECT count(contact_id) FROM "CTS_TABLE_CONTACTS" "
- "WHERE person_id=%d AND has_phonenumber=1 AND deleted = 0",
- contact->person_id);
+ "WHERE person_id=%d AND %s=1 AND deleted = 0",
+ person_id, culumn);
ret = ctsvc_query_get_first_int_result(query, &contact_count);
- if (CONTACTS_ERROR_NONE != ret ) {
- CTS_ERR("No Contacts : person_id (%d)", contact->person_id);
- ctsvc_end_trans(false);
- return CONTACTS_ERROR_NO_DATA;
- }
+ RETV_IF(CONTACTS_ERROR_NONE != ret, false);
- if(contact_count)
- has_phonenumber = true;
+ if (contact_count)
+ return true;
+ return false;
+}
+
+static int __ctsvc_get_thumbnail_contact_id(int person_id)
+{
+ int ret;
+ int contact_id = 0;
+ char query[CTS_SQL_MIN_LEN] = {0};
snprintf(query, sizeof(query),
- "SELECT count(contact_id) FROM "CTS_TABLE_CONTACTS" "
- "WHERE person_id=%d AND has_email=1 AND deleted = 0",
- contact->person_id);
+ "SELECT D.contact_id FROM "CTS_TABLE_CONTACTS" C, "CTS_TABLE_DATA" D "
+ "ON C.contact_id = D.contact_id AND C.deleted = 0 "
+ "WHERE C.person_id=%d AND D.datatype=%d AND is_primary_default=1 AND D.is_my_profile = 0",
+ person_id, CTSVC_DATA_IMAGE);
+ ret = ctsvc_query_get_first_int_result(query, &contact_id);
+ RETV_IF(CONTACTS_ERROR_NONE != ret, -1);
+ return contact_id;
+}
- ret = ctsvc_query_get_first_int_result(query, &contact_count);
- if (CONTACTS_ERROR_NONE != ret ) {
- CTS_ERR("No Contacts : person_id (%d)", contact->person_id);
- ctsvc_end_trans(false);
- return CONTACTS_ERROR_NO_DATA;
- }
- if(contact_count)
- has_email = true;
+int ctsvc_db_update_person(contacts_record_h record)
+{
+ int ret, i=1, len=0;
+ cts_stmt stmt = NULL;
+ char query[CTS_SQL_MIN_LEN] = {0};
+ ctsvc_contact_s *contact = (ctsvc_contact_s*)record;
+ bool has_phonenumber=false, has_email=false;
+ int thumbnail_contact_id = 0;
+
+ ret = ctsvc_begin_trans();
+ RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+
+ __ctsvc_db_update_person_default(contact->person_id, CTSVC_DATA_NUMBER);
+ __ctsvc_db_update_person_default(contact->person_id, CTSVC_DATA_EMAIL);
+ __ctsvc_db_update_person_default(contact->person_id, CTSVC_DATA_IMAGE);
+
+ has_phonenumber = __ctsvc_get_has_column(contact->person_id, "has_phonenumber");
+ has_email = __ctsvc_get_has_column(contact->person_id, "has_email");
+ thumbnail_contact_id = __ctsvc_get_thumbnail_contact_id(contact->person_id);
len = snprintf(query, sizeof(query),
"UPDATE "CTS_TABLE_PERSONS" SET changed_ver=%d, has_phonenumber=%d, has_email=%d ",
ctsvc_get_next_ver(), has_phonenumber, has_email);
-
if (contact->ringtone_changed)
len += snprintf(query+len, sizeof(query)-len, ", ringtone_path=?");
if (contact->vibration_changed)
len += snprintf(query+len, sizeof(query)-len, ", vibration=?");
- if (contact->image_thumbnail_changed)
+ if (contact->image_thumbnail_changed && (contact->id == thumbnail_contact_id || thumbnail_contact_id == -1))
len += snprintf(query+len, sizeof(query)-len, ", image_thumbnail_path=?");
snprintf(query+len, sizeof(query)-len,
return CONTACTS_ERROR_DB;
}
- if (contact->ringtone_changed)
- cts_stmt_bind_text(stmt, i++, SAFE_STR(contact->ringtone_path));
- if (contact->vibration_changed)
- cts_stmt_bind_text(stmt, i++, SAFE_STR(contact->vibration));
- if (contact->image_thumbnail_changed)
- cts_stmt_bind_text(stmt, i++, SAFE_STR(contact->image_thumbnail_path));
+ if (contact->ringtone_changed) {
+ if (contact->ringtone_path)
+ cts_stmt_bind_text(stmt, i, contact->ringtone_path);
+ i++;
+ }
+ if (contact->vibration_changed) {
+ if (contact->vibration)
+ cts_stmt_bind_text(stmt, i, contact->vibration);
+ i++;
+ }
+ if (contact->image_thumbnail_changed && (contact->id == thumbnail_contact_id || thumbnail_contact_id == -1)) {
+ if (contact->image_thumbnail_path)
+ cts_stmt_bind_text(stmt, i, contact->image_thumbnail_path);
+ i++;
+ }
ret = cts_stmt_step(stmt);
if (CONTACTS_ERROR_NONE != ret) {
}
cts_stmt_finalize(stmt);
-
- __ctsvc_db_update_person_default(contact->person_id, CTSVC_DATA_NUMBER);
- __ctsvc_db_update_person_default(contact->person_id, CTSVC_DATA_EMAIL);
- __ctsvc_db_update_person_default(contact->person_id, CTSVC_DATA_IMAGE);
-
ctsvc_set_person_noti();
+
#ifdef _CONTACTS_IPC_SERVER
ctsvc_change_subject_add_changed_person_id(CONTACTS_CHANGE_UPDATED, contact->person_id);
#endif
void ctsvc_db_normalize_str_callback(sqlite3_context * context,
int argc, sqlite3_value ** argv)
{
- int ret;
const char *display_name;
- char dest[CTS_SQL_MAX_LEN] = {0};
if (argc < 1) {
sqlite3_result_null(context);
display_name = (const char *)sqlite3_value_text(argv[0]);
if (display_name) {
- ret = ctsvc_normalize_index(display_name, dest, sizeof(dest));
+ int ret;
+ char *dest = NULL;
+ ret = ctsvc_normalize_index(display_name, &dest);
if (ret < CONTACTS_ERROR_NONE) {
CTS_ERR("ctsvc_normalize_index() Failed(%d)", ret);
sqlite3_result_null(context);
return;
}
CTS_VERBOSE("normalize index : %s, %s", display_name, dest);
+ sqlite3_result_text(context, dest, strlen(dest), SQLITE_TRANSIENT);
+ free(dest);
+ return;
}
-
- sqlite3_result_text(context, dest, strlen(dest), SQLITE_STATIC);
+ sqlite3_result_null(context);
return;
}
len = snprintf(query, sizeof(query),
"SELECT id, number, person_id, log_type, log_time, data1, data2 "
- "FROM "CTS_TABLE_PHONELOGS" WHERE id = %d", id);
+ "FROM "CTS_TABLE_PHONELOGS" WHERE id = %d", id);
stmt = cts_query_prepare(query);
RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
static int __ctsvc_db_phonelog_update_record( contacts_record_h record )
{
- int ret;
-// cts_stmt stmt;
+ int phonelog_id;
char query[CTS_SQL_MIN_LEN] = {0};
ctsvc_phonelog_s *phonelog = (ctsvc_phonelog_s *)record;
+ int ret = CONTACTS_ERROR_NONE;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
RETVM_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER, "Invaild parameter : record is null");
RETVM_IF(phonelog->id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : The phone_log has ID(%d)", phonelog->id);
RETVM_IF(phonelog->log_type != CONTACTS_PLOG_TYPE_VOICE_INCOMMING_SEEN &&
phonelog->log_type != CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_SEEN, CONTACTS_ERROR_INVALID_PARAMETER,
- "Invaild parameter : the type is can not updated(%d)", phonelog->log_type);
+ "Invaild parameter : the type is can not updated(%d)", phonelog->log_type);
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (phonelog->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
+
+
+ snprintf(query, sizeof(query),
+ "SELECT id FROM "CTS_TABLE_PHONELOGS" WHERE id = %d", phonelog->id);
+ ret = ctsvc_query_get_first_int_result(query, &phonelog_id);
+ if (ret != CONTACTS_ERROR_NONE) {
+ CTS_ERR("ctsvc_query_get_first_int_result Fail(%d)", ret);
+ return ret;
+ }
ret = ctsvc_begin_trans();
RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
- snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_PHONELOGS" SET log_type = %d WHERE id = %d",
- phonelog->log_type, phonelog->id);
+ do {
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_PHONELOGS, phonelog->id))) break;
- ret = ctsvc_query_exec(query);
- if (CONTACTS_ERROR_NONE != ret ) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed");
- ctsvc_end_trans(false);
- return CONTACTS_ERROR_DB;
- }
+ if (cts_db_change()) {
+ ctsvc_set_phonelog_noti();
- if (cts_db_change()) {
- ctsvc_set_phonelog_noti();
- ctsvc_set_missed_call_noti();
#ifdef _CONTACTS_IPC_SERVER
- // add id for subscribe
- ctsvc_change_subject_add_changed_phone_log_id(CONTACTS_CHANGE_UPDATED, phonelog->id);
+ ctsvc_change_subject_add_changed_phone_log_id(CONTACTS_CHANGE_UPDATED, phonelog->id);
#endif
+ }
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
}
ret = ctsvc_end_trans(true);
- if (ret < CONTACTS_ERROR_NONE)
- {
- CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
- return ret;
- }
- else
- return CONTACTS_ERROR_NONE;
+ RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
+
+ return CONTACTS_ERROR_NONE;
}
static int __ctsvc_db_phonelog_delete_record( int id )
{
int ret;
+ int phonelog_id;
char query[CTS_SQL_MAX_LEN] = {0};
ret = ctsvc_begin_trans();
RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+ snprintf(query, sizeof(query),
+ "SELECT id FROM "CTS_TABLE_PHONELOGS" WHERE id = %d", id);
+ ret = ctsvc_query_get_first_int_result(query, &phonelog_id);
+ if (ret != CONTACTS_ERROR_NONE) {
+ CTS_ERR("ctsvc_query_get_first_int_result Fail(%d)", ret);
+ ctsvc_end_trans(false);
+ return ret;
+ }
+
snprintf(query, sizeof(query), "DELETE FROM %s WHERE id = %d",
CTS_TABLE_PHONELOGS, id);
contacts_list_h list;
len = snprintf(query, sizeof(query),
- "SELECT id, number, person_id, log_type, log_time, data1, data2 FROM "CTS_TABLE_PHONELOGS);
+ "SELECT id, number, person_id, log_type, log_time, data1, data2 FROM "CTS_TABLE_PHONELOGS);
if (0 < limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
}
static int __ctsvc_db_phonelog_get_records_with_query( contacts_query_h query, int offset,
- int limit, contacts_list_h* out_list )
+ int limit, contacts_list_h* out_list )
{
int ret;
int i;
char query[CTS_SQL_MIN_LEN] = {0};
snprintf(query, sizeof(query),
- "SELECT person_id FROM %s WHERE person_id = %d and usage_type = %d ",
- CTS_TABLE_CONTACT_STAT, person_id, CONTACTS_USAGE_STAT_TYPE_OUTGOING_CALL);
+ "SELECT person_id FROM %s WHERE person_id = %d and usage_type = %d ",
+ CTS_TABLE_CONTACT_STAT, person_id, CONTACTS_USAGE_STAT_TYPE_OUTGOING_CALL);
ret = ctsvc_query_get_first_int_result(query, &id);
if (CONTACTS_ERROR_NO_DATA == ret) {
snprintf(query, sizeof(query),
- "INSERT INTO %s(person_id, usage_type, times_used) VALUES(%d, %d, 1)",
- CTS_TABLE_CONTACT_STAT, person_id, CONTACTS_USAGE_STAT_TYPE_OUTGOING_CALL);
+ "INSERT INTO %s(person_id, usage_type, times_used) VALUES(%d, %d, 1)",
+ CTS_TABLE_CONTACT_STAT, person_id, CONTACTS_USAGE_STAT_TYPE_OUTGOING_CALL);
}
else {
snprintf(query, sizeof(query),
- "UPDATE %s SET times_used = times_used + 1 WHERE person_id = %d and usage_type = %d",
- CTS_TABLE_CONTACT_STAT, person_id, CONTACTS_USAGE_STAT_TYPE_OUTGOING_CALL);
+ "UPDATE %s SET times_used = times_used + 1 WHERE person_id = %d and usage_type = %d",
+ CTS_TABLE_CONTACT_STAT, person_id, CONTACTS_USAGE_STAT_TYPE_OUTGOING_CALL);
}
ret = ctsvc_query_exec(query);
if (phonelog->log_type < CONTACTS_PLOG_TYPE_EMAIL_RECEIVED) {
ret = ctsvc_clean_number(phonelog->address, clean_num, sizeof(clean_num));
if (0 < ret) {
- ret = ctsvc_normalize_number(clean_num, normal_num, CTSVC_NUMBER_MAX_LEN);
+ ret = ctsvc_normalize_number(clean_num, normal_num, CTSVC_NUMBER_MAX_LEN, CTSVC_MIN_MATCH_NORMALIZED_NUMBER_SIZE);
cts_stmt_bind_text(stmt, 2, normal_num);
}
}
*id = cts_db_get_last_insert_id();
cts_stmt_finalize(stmt);
- if (CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN == phonelog->log_type ||
- CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_UNSEEN == phonelog->log_type)
- ctsvc_set_missed_call_noti();
-
ctsvc_set_phonelog_noti();
return CONTACTS_ERROR_NONE;
}
if(phonelog-> log_type == CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN || phonelog-> log_type == CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_UNSEEN) {
#define PHONE_PACKAGE_NAME "org.tizen.phone"
- int call_cnt = 0;
+ unsigned int call_cnt = 0;
bool bBadgeExist = FALSE;
badge_is_existing(PHONE_PACKAGE_NAME, &bBadgeExist);
#include "ctsvc_record.h"
#include "ctsvc_db_query.h"
#include "ctsvc_list.h"
+#include "ctsvc_notification.h"
static int __ctsvc_db_profile_insert_record( contacts_record_h record, int *id );
static int __ctsvc_db_profile_get_record( int id, contacts_record_h* out_record );
ret = ctsvc_db_contact_update_changed_time(profile->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
"SELECT contact_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", profile->contact_id);
ret = ctsvc_query_get_first_int_result(query, &contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
+ CTS_ERR("No data : contact_id (%d) is not exist", profile->contact_id);
ctsvc_end_trans(false);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ return ret;
}
- ret = ctsvc_db_profile_update(record, profile->contact_id, false);
+ ret = ctsvc_db_profile_update(record, false);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+ CTS_ERR("Update record Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
ret = ctsvc_db_contact_update_changed_time(profile->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
if( ret != CONTACTS_ERROR_NONE ) {
CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
ctsvc_end_trans(false);
- return contact_id;
+ return ret;
}
- ret = ctsvc_db_profile_delete(id);
+ ret = ctsvc_db_profile_delete(id, false);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
ctsvc_end_trans(false);
ret = ctsvc_db_contact_update_changed_time(contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
#include "ctsvc_schema.h"
#include "ctsvc_sqlite.h"
#include "ctsvc_db_init.h"
+#include "ctsvc_db_query.h"
#include "ctsvc_db_plugin_profile_helper.h"
#include "ctsvc_record.h"
#include "ctsvc_notification.h"
char query[CTS_SQL_MAX_LEN] = {0};
ctsvc_profile_s *profile = (ctsvc_profile_s *)record;
-// RETVM_IF(profile->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted profile record");
RETV_IF(NULL == profile->appsvc_operation, CONTACTS_ERROR_NONE);
RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact_id(%d) is mandatory field to insert profile record ", profile->contact_id);
}
-int ctsvc_db_profile_update(contacts_record_h record, int contact_id, bool is_my_profile)
+int ctsvc_db_profile_update(contacts_record_h record, bool is_my_profile)
{
- int ret;
+ int id;
+ int ret = CONTACTS_ERROR_NONE;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
ctsvc_profile_s *profile = (ctsvc_profile_s*)record;
char query[CTS_SQL_MAX_LEN] = {0};
- cts_stmt stmt;
RETVM_IF(!profile->id, CONTACTS_ERROR_INVALID_PARAMETER, "profile of contact has no ID.");
snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_DATA" SET contact_id=%d, is_my_profile=%d, data1=%d, data2=?, data3=?, data4=?, data5=?, "
- "data6=?, data7=?, data8=?, data9=?, data10=?, data11=?, data12=? WHERE id=%d",
- contact_id, is_my_profile, profile->type, profile->id);
-
- stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
-
- __ctsvc_profile_bind_stmt(stmt, profile, 1);
-
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", profile->id);
+ ret = ctsvc_query_get_first_int_result(query, &id);
+ RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
+
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (profile->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
+
+ do {
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, profile->id))) break;
+ if (!is_my_profile)
+ ctsvc_set_profile_noti();
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
}
- cts_stmt_finalize(stmt);
-
- if (!is_my_profile)
- ctsvc_set_profile_noti();
- return CONTACTS_ERROR_NONE;
+ return ret;
}
-int ctsvc_db_profile_delete(int id)
+
+int ctsvc_db_profile_delete(int id, bool is_my_profile)
{
int ret;
char query[CTS_SQL_MIN_LEN] = {0};
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
- ctsvc_set_profile_noti();
+
+ if (!is_my_profile)
+ ctsvc_set_profile_noti();
return CONTACTS_ERROR_NONE;
}
#include "ctsvc_sqlite.h"
int ctsvc_db_profile_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_profile_update(contacts_record_h record, int contact_id, bool is_my_profile);
-int ctsvc_db_profile_delete(int id);
-
+int ctsvc_db_profile_update(contacts_record_h record, bool is_my_profile);
+int ctsvc_db_profile_delete(int id, bool is_my_profile);
int ctsvc_db_profile_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
#endif // __CTSVC_DB_PLUGIN_PROFILE_HELPER_H__
#include "ctsvc_record.h"
#include "ctsvc_db_query.h"
#include "ctsvc_list.h"
+#include "ctsvc_notification.h"
+
static int __ctsvc_db_relationship_insert_record( contacts_record_h record, int *id );
static int __ctsvc_db_relationship_get_record( int id, contacts_record_h* out_record );
ret = ctsvc_db_contact_update_changed_time(relationship->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
"SELECT contact_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", relationship->contact_id);
ret = ctsvc_query_get_first_int_result(query, &contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
+ CTS_ERR("No data : contact_id (%d) is not exist", relationship->contact_id);
ctsvc_end_trans(false);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ return ret;
}
- ret = ctsvc_db_relationship_update(record, relationship->contact_id, false);
+ ret = ctsvc_db_relationship_update(record, false);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+ CTS_ERR("Update record Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
ret = ctsvc_db_contact_update_changed_time(relationship->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
if( ret != CONTACTS_ERROR_NONE ) {
CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
ctsvc_end_trans(false);
- return contact_id;
+ return ret;
}
- ret = ctsvc_db_relationship_delete(id);
+ ret = ctsvc_db_relationship_delete(id, false);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
ctsvc_end_trans(false);
ret = ctsvc_db_contact_update_changed_time(contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
#include "ctsvc_schema.h"
#include "ctsvc_sqlite.h"
#include "ctsvc_db_init.h"
+#include "ctsvc_db_query.h"
#include "ctsvc_db_plugin_relationship_helper.h"
#include "ctsvc_record.h"
#include "ctsvc_notification.h"
ctsvc_relationship_s *relationship = (ctsvc_relationship_s *)record;
// These check should be done in client side
-// RETVM_IF(relationship->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted relationship record");
RETV_IF(NULL == relationship->name, CONTACTS_ERROR_NONE);
RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact_id(%d) is mandatory field to insert relationship record", relationship->contact_id);
return CONTACTS_ERROR_NONE;
}
-int ctsvc_db_relationship_update(contacts_record_h record, int contact_id, bool is_my_profile)
+int ctsvc_db_relationship_update(contacts_record_h record, bool is_my_profile)
{
- int ret;
+ int id;
+ int ret = CONTACTS_ERROR_NONE;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
ctsvc_relationship_s *relationship = (ctsvc_relationship_s*)record;
- char query[CTS_SQL_MAX_LEN] = {0};
- cts_stmt stmt;
+ char query[CTS_SQL_MIN_LEN] = {0};
RETVM_IF(!relationship->id, CONTACTS_ERROR_INVALID_PARAMETER, "relationship of contact has no ID.");
-
snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_DATA" SET contact_id=%d, is_my_profile=%d, data1=%d, data2=?, data3=? WHERE id=%d",
- contact_id, is_my_profile, relationship->type, relationship->id);
-
- stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
-
- __ctsvc_relationship_bind_stmt(stmt, relationship, 1);
-
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", relationship->id);
+ ret = ctsvc_query_get_first_int_result(query, &id);
+ RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
+
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (relationship->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
+
+ do {
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, relationship->id))) break;
+ if (!is_my_profile)
+ ctsvc_set_relationship_noti();
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
}
- cts_stmt_finalize(stmt);
+ return ret;
- if (!is_my_profile)
- ctsvc_set_relationship_noti();
- return CONTACTS_ERROR_NONE;
}
-int ctsvc_db_relationship_delete(int id)
+
+int ctsvc_db_relationship_delete(int id, bool is_my_profile)
{
int ret;
char query[CTS_SQL_MIN_LEN] = {0};
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
- ctsvc_set_relationship_noti();
+
+ if (!is_my_profile)
+ ctsvc_set_relationship_noti();
return CONTACTS_ERROR_NONE;
}
#include "ctsvc_sqlite.h"
int ctsvc_db_relationship_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_relationship_update(contacts_record_h record, int contact_id, bool is_my_profile);
-int ctsvc_db_relationship_delete(int id);
-
+int ctsvc_db_relationship_update(contacts_record_h record, bool is_my_profile);
+int ctsvc_db_relationship_delete(int id, bool is_my_profile);
int ctsvc_db_relationship_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
#endif // __CTSVC_DB_PLUGIN_RELATIONSHIP_HELPER_H__
static int __ctsvc_db_sdn_update_record( contacts_record_h record )
{
- int ret;
- ctsvc_sdn_s *sdn = (ctsvc_sdn_s *)record;
+ int sdn_id;
+ int ret = CONTACTS_ERROR_NONE;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
+ ctsvc_sdn_s *sdn = (ctsvc_sdn_s*)record;
+ char query[CTS_SQL_MIN_LEN] = {0};
RETV_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER);
- RETV_IF(NULL == sdn->name, CONTACTS_ERROR_INVALID_PARAMETER);
RETVM_IF(CTSVC_RECORD_SDN != sdn->base.r_type, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : record is invalid type(%d)", sdn->base.r_type);
- cts_stmt stmt = NULL;
- char query[CTS_SQL_MIN_LEN] = {0};
-
- snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_SDN" SET name=?, number=? WHERE id = %d", sdn->id);
-
- stmt = cts_query_prepare(query);
- if (NULL == stmt) {
- CTS_ERR("DB error : cts_query_prepare() Failed");
- return CONTACTS_ERROR_DB;
- }
-
- cts_stmt_bind_text(stmt, 1, sdn->name);
- cts_stmt_bind_text(stmt, 2, sdn->number);
-
ret = ctsvc_begin_trans();
- if( ret < CONTACTS_ERROR_NONE ) {
- CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
- }
+ RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
+ snprintf(query, sizeof(query),
+ "SELECT id FROM "CTS_TABLE_SDN" WHERE id = %d", sdn->id);
+ ret = ctsvc_query_get_first_int_result(query, &sdn_id);
+ if (ret != CONTACTS_ERROR_NONE) {
+ CTS_ERR("ctsvc_query_get_first_int_result Fail(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
- cts_stmt_finalize(stmt);
-
- ctsvc_set_sdn_noti();
+ RETVM_IF(!sdn->id, CONTACTS_ERROR_INVALID_PARAMETER, "sdn of contact has no ID.");
+ RETV_IF(NULL == sdn->name, CONTACTS_ERROR_INVALID_PARAMETER);
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (sdn->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
+
+ do {
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_SDN, sdn->id))) break;
+ ctsvc_set_sdn_noti();
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
+ }
ret = ctsvc_end_trans(true);
- if(ret < CONTACTS_ERROR_NONE ) {
- CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
- return ret;
- }
+ RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_end_trans() Failed(%d)", ret);
return CONTACTS_ERROR_NONE;
}
static int __ctsvc_db_sdn_delete_record( int sdn_id )
{
int ret;
-
+ int id;
char query[CTS_SQL_MAX_LEN] = {0};
- snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_SDN" WHERE id = %d", sdn_id);
ret = ctsvc_begin_trans();
RETVM_IF(CONTACTS_ERROR_NONE > ret, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
+ snprintf(query, sizeof(query),
+ "SELECT id FROM "CTS_TABLE_SDN" WHERE id = %d", sdn_id);
+ ret = ctsvc_query_get_first_int_result(query, &id);
+ if (ret != CONTACTS_ERROR_NONE) {
+ CTS_ERR("ctsvc_query_get_first_int_result Fail(%d)", ret);
+ ctsvc_end_trans(false);
+ return ret;
+ }
+
+ snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_SDN" WHERE id = %d", sdn_id);
ret = ctsvc_query_exec(query);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
return CONTACTS_ERROR_NONE;
}
+static int __ctsvc_db_simple_contact_get_default_image_id(int contact_id)
+{
+ int ret = 0;
+ int image_id = 0;
+ char query[CTS_SQL_MAX_LEN] = {0};
+
+ snprintf(query, sizeof(query),
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE datatype=%d AND contact_id=%d AND is_default=1",
+ CTSVC_DATA_IMAGE, contact_id);
+
+ ret = ctsvc_query_get_first_int_result(query, &image_id);
+ if (CONTACTS_ERROR_NONE != ret)
+ return 0;
+ return image_id;
+}
+
static int __ctsvc_db_simple_contact_update_record( contacts_record_h record )
{
int ret;
cts_stmt stmt;
// These check should be done in client side
-// RETVM_IF(contact->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted contact record");
RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact is NULL");
RETVM_IF(contact->addressbook_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
ret = ctsvc_query_get_first_int_result(query, &id);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("Invalid Parameter : contact_id (%d) is not exist", contact->contact_id);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ ctsvc_end_trans(false);
+ return ret;
}
len = snprintf(query, sizeof(query),
return CONTACTS_ERROR_DB;
}
- i = 0;
+ i = 1;
if (contact->uid_changed) {
- if(contact->uid)
- cts_stmt_bind_text(stmt, i++, contact->uid);
+ if (contact->uid)
+ cts_stmt_bind_text(stmt, i, contact->uid);
i++;
}
+
if (contact->ringtone_changed) {
if (contact->ringtone_path)
cts_stmt_bind_text(stmt, i, contact->ringtone_path);
i++;
}
+
if (contact->vibration_changed) {
if (contact->vibration)
cts_stmt_bind_text(stmt, i, contact->vibration);
i++;
}
+ //////////////////////////////////////////////////////////////////////
+ // This code will be removed
if (contact->image_thumbnail_changed) {
+ int img_id;
image[0] = '\0';
- ret = ctsvc_contact_update_image_file(CTSVC_IMG_NORMAL, contact->contact_id,
- contact->image_thumbnail_path, image, sizeof(image));
+ img_id = __ctsvc_db_simple_contact_get_default_image_id(contact->contact_id);
+ if (0 == img_id) {
+ img_id = cts_db_get_next_id(CTS_TABLE_DATA);
+ ret = ctsvc_contact_add_image_file(CTSVC_IMG_NORMAL, contact->contact_id, img_id, contact->image_thumbnail_path,
+ image, sizeof(image));
+ }
+ else {
+ ret = ctsvc_contact_update_image_file(CTSVC_IMG_NORMAL, contact->contact_id, img_id,
+ contact->image_thumbnail_path, image, sizeof(image));
+ }
if (*image) {
free(contact->image_thumbnail_path);
contact->image_thumbnail_path = strdup(image);
}
i++;
}
+ //////////////////////////////////////////////////////////////////////
ret = cts_stmt_step(stmt);
if (CONTACTS_ERROR_NONE != ret) {
static int __ctsvc_db_simple_contact_delete_record( int id )
{
int ret;
+ int addressbook_id;
char query[CTS_SQL_MAX_LEN] = {0};
ret = ctsvc_begin_trans();
RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+ snprintf(query, sizeof(query),
+ "SELECT addressbook_id FROM "CTS_TABLE_CONTACTS" WHERE contact_id = %d AND deleted = 0", id);
+ ret = ctsvc_query_get_first_int_result(query, &addressbook_id);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("DB error : cts_stmt_step() Failed(%d)", ret);
+ ctsvc_end_trans(false);
+ return ret;
+ }
+
snprintf(query, sizeof(query), "DELETE FROM %s WHERE contact_id = %d AND deleted = 0",
CTS_TABLE_CONTACTS, id);
cts_stmt stmt;
// These check should be done in client side
-// RETVM_IF(contact->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted contact record");
RETVM_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact is NULL");
RETVM_IF(contact->addressbook_id < 0, CONTACTS_ERROR_INVALID_PARAMETER,
*id = ret;
if (contact->image_thumbnail_path) {
+ int image_id;
image[0] = '\0';
- ret = ctsvc_contact_add_image_file(CTSVC_IMG_NORMAL, contact->contact_id, contact->image_thumbnail_path,
+ image_id = __ctsvc_db_simple_contact_get_default_image_id(contact->contact_id);
+ ret = ctsvc_contact_add_image_file(CTSVC_IMG_NORMAL, contact->contact_id, image_id, contact->image_thumbnail_path,
image, sizeof(image));
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("ctsvc_contact_add_image_file(NORMAL) Failed(%d)", ret);
static int __ctsvc_db_speeddial_update_record( contacts_record_h record )
{
int ret;
+ int speeddial_id;
cts_stmt stmt;
char query[CTS_SQL_MIN_LEN] = {0};
ctsvc_speeddial_s *speeddial = (ctsvc_speeddial_s *)record;
"Invaild parameter : dial number (%d)", speeddial->dial_number);
RETVM_IF (speeddial->number_id < 0, CONTACTS_ERROR_INVALID_PARAMETER,
"Invaild parameter : number id (%d)", speeddial->number_id);
+ ret = ctsvc_begin_trans();
+ RETVM_IF(CONTACTS_ERROR_NONE != ret, CONTACTS_ERROR_DB, "DB error : ctsvc_begin_trans() Fail(%d)", ret);
+
+ snprintf(query, sizeof(query),
+ "SELECT speed_number FROM "CTS_TABLE_SPEEDDIALS" WHERE speed_number = %d", speeddial->dial_number);
+ ret = ctsvc_query_get_first_int_result(query, &speeddial_id);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("DB error : cts_stmt_step() Failed(%d)", ret);
+ ctsvc_end_trans(false);
+ return ret;
+ }
snprintf(query, sizeof(query), "UPDATE "CTS_TABLE_SPEEDDIALS" "
"SET number_id = %d WHERE speed_number = %d",
speeddial->number_id, speeddial->dial_number);
-
stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
-
- ret = ctsvc_begin_trans();
- if (ret) {
- cts_stmt_finalize(stmt);
- CTS_ERR("contacts_svc_begin_trans() Failed(%d)", ret);
- return ret;
+ if (NULL == stmt) {
+ CTS_ERR("DB error : cts_query_prepare() Failed");
+ ctsvc_end_trans(false);
+ return CONTACTS_ERROR_DB;
}
ret = cts_stmt_step(stmt);
static int __ctsvc_db_speeddial_delete_record( int id )
{
int ret;
+ int speeddial_id;
cts_stmt stmt;
char query[CTS_SQL_MIN_LEN] = {0};
+ ret = ctsvc_begin_trans();
+ RETVM_IF(CONTACTS_ERROR_NONE != ret, CONTACTS_ERROR_DB, "DB error : ctsvc_begin_trans() Fail(%d)", ret);
+
+ snprintf(query, sizeof(query),
+ "SELECT speed_number FROM "CTS_TABLE_SPEEDDIALS" WHERE speed_number = %d", id);
+ ret = ctsvc_query_get_first_int_result(query, &speeddial_id);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("DB error : ctsvc_query_get_first_int_result() Fail(%d)", ret);
+ ctsvc_end_trans(false);
+ return ret;
+ }
+
snprintf(query, sizeof(query), "DELETE FROM %s WHERE speed_number = %d",
CTS_TABLE_SPEEDDIALS, id);
-
stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
-
- ret = ctsvc_begin_trans();
- if (ret) {
- cts_stmt_finalize(stmt);
- CTS_ERR("ctsvc_begin_trans() Failed(%d)", ret);
- return ret;
+ if (NULL == stmt) {
+ CTS_ERR("DB error : cts_query_prepare() Failed");
+ ctsvc_end_trans(false);
+ return CONTACTS_ERROR_DB;
}
ret = cts_stmt_step(stmt);
#include "ctsvc_record.h"
#include "ctsvc_db_query.h"
#include "ctsvc_list.h"
+#include "ctsvc_notification.h"
static int __ctsvc_db_url_insert_record( contacts_record_h record, int *id );
static int __ctsvc_db_url_get_record( int id, contacts_record_h* out_record );
ret = ctsvc_db_contact_update_changed_time(url->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
"SELECT contact_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", url->contact_id);
ret = ctsvc_query_get_first_int_result(query, &contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("No data : contact_id (%d) is not exist", contact_id);
+ CTS_ERR("No data : contact_id (%d) is not exist", url->contact_id);
ctsvc_end_trans(false);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ return ret;
}
- ret = ctsvc_db_url_update(record, url->contact_id, false);
+ ret = ctsvc_db_url_update(record, false);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
+ CTS_ERR("Update record Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
ret = ctsvc_db_contact_update_changed_time(url->contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("The id(%d) is Invalid(%d)", id, ret);
ctsvc_end_trans(false);
- return contact_id;
+ return ret;
}
- ret = ctsvc_db_url_delete(id);
+ ret = ctsvc_db_url_delete(id, false);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("DB error : ctsvc_begin_trans() Failed(%d)", ret);
ctsvc_end_trans(false);
ret = ctsvc_db_contact_update_changed_time(contact_id);
if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);
+ CTS_ERR("DB error : ctsvc_db_contact_update_changed_time() Failed(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
#include "ctsvc_schema.h"
#include "ctsvc_sqlite.h"
#include "ctsvc_db_init.h"
+#include "ctsvc_db_query.h"
#include "ctsvc_db_plugin_contact_helper.h"
#include "ctsvc_db_plugin_url_helper.h"
#include "ctsvc_record.h"
char query[CTS_SQL_MAX_LEN] = {0};
ctsvc_url_s *url = (ctsvc_url_s *)record;
-// RETVM_IF(url->deleted, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : deleted url record");
RETV_IF(NULL == url->url, CONTACTS_ERROR_NONE);
RETVM_IF(contact_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : contact_id(%d) is mandatory field to insert url record ", url->contact_id);
return CONTACTS_ERROR_NONE;
}
-int ctsvc_db_url_update(contacts_record_h record, int contact_id, bool is_my_profile)
+int ctsvc_db_url_update(contacts_record_h record, bool is_my_profile)
{
- int ret;
+ int id;
+ int ret = CONTACTS_ERROR_NONE;
ctsvc_url_s *url = (ctsvc_url_s*)record;
+ char* set = NULL;
+ GSList *bind_text = NULL;
+ GSList *cursor = NULL;
char query[CTS_SQL_MAX_LEN] = {0};
- cts_stmt stmt;
RETVM_IF(!url->id, CONTACTS_ERROR_INVALID_PARAMETER, "url of contact has no ID.");
+ RETVM_IF(CTSVC_PROPERTY_FLAG_DIRTY != (url->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY), CONTACTS_ERROR_NONE, "No update");
snprintf(query, sizeof(query),
- "UPDATE "CTS_TABLE_DATA" SET contact_id=%d, is_my_profile=%d, data1=%d, data2=?, data3=? WHERE id=%d",
- contact_id, is_my_profile, url->type, url->id);
-
- stmt = cts_query_prepare(query);
- RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "DB error : cts_query_prepare() Failed");
-
- if (url->label)
- cts_stmt_bind_text(stmt, 1, url->label);
- if (url->url)
- cts_stmt_bind_text(stmt, 2, url->url);
-
- ret = cts_stmt_step(stmt);
- if (CONTACTS_ERROR_NONE != ret) {
- CTS_ERR("cts_stmt_step() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- return ret;
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE id = %d", url->id);
+ ret = ctsvc_query_get_first_int_result(query, &id);
+ RETV_IF(ret != CONTACTS_ERROR_NONE, ret);
+
+ do {
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_create_set_query(record, &set, &bind_text))) break;
+ if (CONTACTS_ERROR_NONE != (ret = ctsvc_db_update_record_with_set_query(set, bind_text, CTS_TABLE_DATA, url->id))) break;
+ if (!is_my_profile)
+ ctsvc_set_url_noti();
+ } while (0);
+
+ CTSVC_RECORD_RESET_PROPERTY_FLAGS((ctsvc_record_s *)record);
+ CONTACTS_FREE(set);
+ if (bind_text) {
+ for (cursor=bind_text;cursor;cursor=cursor->next)
+ CONTACTS_FREE(cursor->data);
+ g_slist_free(bind_text);
}
-
- cts_stmt_finalize(stmt);
-
- if (!is_my_profile)
- ctsvc_set_url_noti();
- return CONTACTS_ERROR_NONE;
+ return ret;
}
-int ctsvc_db_url_delete(int id)
+int ctsvc_db_url_delete(int id, bool is_my_profile)
{
int ret;
char query[CTS_SQL_MIN_LEN] = {0};
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Failed(%d)", ret);
- ctsvc_set_url_noti();
+
+ if (!is_my_profile)
+ ctsvc_set_url_noti();
return CONTACTS_ERROR_NONE;
}
#include "ctsvc_sqlite.h"
int ctsvc_db_url_insert(contacts_record_h record, int contact_id, bool is_my_profile, int *id);
-int ctsvc_db_url_update(contacts_record_h record, int contact_id, bool is_my_profile);
-int ctsvc_db_url_delete(int id);
-
+int ctsvc_db_url_update(contacts_record_h record, bool is_my_profile);
+int ctsvc_db_url_delete(int id, bool is_my_profile);
int ctsvc_db_url_get_value_from_stmt(cts_stmt stmt, contacts_record_h *record, int start_count);
#endif // __CTSVC_DB_PLUGIN_URL_HELPER_H__
#include "ctsvc_db_init.h"
#include "ctsvc_view.h"
#include "ctsvc_inotify.h"
+#include "ctsvc_localize.h"
#include "ctsvc_db_plugin_person_helper.h"
for (i=0;i<count;i++) {
property_info_s *p = (property_info_s*)&(properties[i]);
if (property_id == p->property_id) {
- return p->type;
+ return (property_id & CTSVC_VIEW_DATA_TYPE_MASK);
}
}
return -1;
if (filter->value.s) {
if (filter->property_id == CTSVC_PROPERTY_NUMBER_NUMBER_FILTER) {
char dest[strlen(filter->value.s)+1];
- ret = ctsvc_normalize_number(filter->value.s, dest, sizeof(dest));
+ ret = ctsvc_normalize_number(filter->value.s, dest, sizeof(dest), CTSVC_MIN_MATCH_NORMALIZED_NUMBER_SIZE);
if (CONTACTS_ERROR_NONE == ret)
*bind_text = g_slist_append(*bind_text, strdup(dest));
else
return CONTACTS_ERROR_NONE;
}
+int ctsvc_db_update_record_with_set_query(const char *set, GSList *bind_text, const char *table, int id)
+{
+ int ret = CONTACTS_ERROR_NONE;
+ char query[CTS_SQL_MAX_LEN] = {0};
+ sqlite3_stmt *stmt = NULL;
+ GSList *cursor = NULL;
+
+ snprintf(query, sizeof(query), "UPDATE %s SET %s WHERE id = %d", table, set, id);
+
+ stmt = cts_query_prepare(query);
+ if (NULL == stmt) {
+ CTS_ERR("DB error : cts_query_prepare() Failed");
+ return CONTACTS_ERROR_DB;
+ }
+
+ if (bind_text) {
+ int i = 0;
+ for (cursor=bind_text,i=1;cursor;cursor=cursor->next,i++) {
+ const char *text = cursor->data;
+ if (text && *text)
+ cts_stmt_bind_text(stmt, i, text);
+ }
+ }
+ ret = cts_stmt_step(stmt);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("cts_stmt_step() Failed(%d)", ret);
+ cts_stmt_finalize(stmt);
+ return ret;
+ }
+ cts_stmt_finalize(stmt);
+ return ret;
+}
+
+int ctsvc_db_create_set_query(contacts_record_h record, char **set, GSList **bind_text)
+{
+ ctsvc_record_s *s_record;
+ int i = 0;
+ const property_info_s* property_info = NULL;
+ unsigned int property_info_count = 0;
+ char out_set[CTS_SQL_MAX_LEN] = {0};
+ int len = 0;
+ const char *field_name;
+ int ret = CONTACTS_ERROR_NONE;
+
+ RETV_IF(record == NULL, CONTACTS_ERROR_INVALID_PARAMETER);
+
+ s_record = (ctsvc_record_s *)record;
+ if (0 == s_record->property_max_count || NULL == s_record->properties_flags) {
+ ERR("record don't have properties");
+ return CONTACTS_ERROR_INVALID_PARAMETER;
+ }
+
+ property_info = ctsvc_view_get_all_property_infos(s_record->view_uri, &property_info_count);
+
+ for(i=0;i<property_info_count;i++) {
+ if (ctsvc_record_check_property_flag(s_record, property_info[i].property_id, CTSVC_PROPERTY_FLAG_DIRTY)) {
+ field_name = property_info[i].fields;
+ if (NULL == field_name)
+ continue;
+
+ if (CTSVC_VIEW_CHECK_DATA_TYPE(property_info[i].property_id, CTSVC_VIEW_DATA_TYPE_BOOL)) {
+ bool tmp = false;
+ ret = contacts_record_get_bool(record,property_info[i].property_id, &tmp);
+ if (ret != CONTACTS_ERROR_NONE)
+ continue;
+ if (len != 0)
+ len += snprintf(out_set+len, sizeof(out_set)-len, ", ");
+ len += snprintf(out_set+len, sizeof(out_set)-len, "%s=%d", field_name, tmp);
+ }
+ else if (CTSVC_VIEW_CHECK_DATA_TYPE(property_info[i].property_id, CTSVC_VIEW_DATA_TYPE_INT)) {
+ int tmp = 0;
+ ret = contacts_record_get_int(record,property_info[i].property_id, &tmp);
+ if (ret != CONTACTS_ERROR_NONE)
+ continue;
+ if (len != 0)
+ len += snprintf(out_set+len, sizeof(out_set)-len, ", ");
+ len += snprintf(out_set+len, sizeof(out_set)-len, "%s=%d", field_name, tmp);
+ }
+ else if (CTSVC_VIEW_CHECK_DATA_TYPE(property_info[i].property_id, CTSVC_VIEW_DATA_TYPE_LLI)) {
+ long long int tmp = 0;
+ ret = contacts_record_get_lli(record, property_info[i].property_id, &tmp);
+ if (ret != CONTACTS_ERROR_NONE)
+ continue;
+ if (len != 0)
+ len += snprintf(out_set+len, sizeof(out_set)-len, ", ");
+ len += snprintf(out_set+len, sizeof(out_set)-len, "%s=%lld", field_name,tmp);
+ }
+ else if (CTSVC_VIEW_CHECK_DATA_TYPE(property_info[i].property_id, CTSVC_VIEW_DATA_TYPE_STR)) {
+ char *tmp = NULL;
+ ret = contacts_record_get_str_p(record,property_info[i].property_id, &tmp);
+ if (ret != CONTACTS_ERROR_NONE)
+ continue;
+ if (len != 0)
+ len += snprintf(out_set+len, sizeof(out_set)-len, ", ");
+ len += snprintf(out_set+len, sizeof(out_set)-len, "%s=?", field_name);
+ *bind_text = g_slist_append(*bind_text, strdup(SAFE_STR(tmp)));
+ }
+ else if (CTSVC_VIEW_CHECK_DATA_TYPE(property_info[i].property_id, CTSVC_VIEW_DATA_TYPE_DOUBLE)) {
+ double tmp = 0;
+ ret = contacts_record_get_double(record, property_info[i].property_id, &tmp);
+ if (ret != CONTACTS_ERROR_NONE)
+ continue;
+ if (len != 0)
+ len += snprintf(out_set+len, sizeof(out_set)-len, ", ");
+ len += snprintf(out_set+len, sizeof(out_set)-len, "%s=%lf", field_name, tmp);
+ }
+ }
+ }
+ *set = strdup(out_set);
+
+ return CONTACTS_ERROR_NONE;
+}
+
static int __ctsvc_db_create_projection(const property_info_s *properties, int ids_count,
unsigned int *projections, int pro_count, char **projection)
{
if (0 < pro_count) {
for (i=0;i<pro_count;i++) {
if (projections[i] == CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX) {
- snprintf(temp, sizeof(temp), "_NORMALIZE_INDEX_(%s)", ctsvc_get_display_column());
+ snprintf(temp, sizeof(temp), "_NORMALIZE_INDEX_(%s)", ctsvc_get_sort_name_column());
field_name = temp;
}
else
}
else {
for (i=0;i<ids_count;i++) {
- if (CTSVC_VIEW_DATA_TYPE_REC == properties[i].type)
+ if (CTSVC_VIEW_DATA_TYPE_REC == (properties[i].property_id & CTSVC_VIEW_DATA_TYPE_MASK))
continue;
if (properties[i].fields)
field_name = properties[i].fields;
else if (properties[i].property_id == CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX) {
- snprintf(temp, sizeof(temp), "_NORMALIZE_INDEX_(%s)", ctsvc_get_display_column());
+ snprintf(temp, sizeof(temp), "_NORMALIZE_INDEX_(%s)", ctsvc_get_sort_name_column());
field_name = temp;
CTS_DBG("field_name : %s", field_name);
}
}
else if (sortkey)
len += snprintf(query+len, sizeof(query)-len, " ORDER BY %s", sortkey);
+ else if (0 == strcmp(s_query->view_uri, CTSVC_VIEW_URI_GROUP))
+ len += snprintf(query+len, sizeof(query)-len, " ORDER BY group_prio");
if (0 < limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
if (__ctsvc_db_view_has_display_name(view_uri, properties, ids_count)) {
sortkey = ctsvc_get_sort_column();
len += snprintf(query+len, sizeof(query)-len, " ORDER BY %s", sortkey);
- }
+ } else if (0 == strcmp(view_uri, CTSVC_VIEW_URI_GROUP))
+ len += snprintf(query+len, sizeof(query)-len, " ORDER BY group_prio");
if (0 < limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
contacts_record_create(view_uri, &record);
for(i=0;i<ids_count;i++) {
- type = properties[i].type;
+ type = (properties[i].property_id & CTSVC_VIEW_DATA_TYPE_MASK);
if (type == CTSVC_VIEW_DATA_TYPE_INT)
ctsvc_record_set_int(record, properties[i].property_id, ctsvc_stmt_get_int(stmt, i));
else if (type == CTSVC_VIEW_DATA_TYPE_STR)
return false;
}
+static int __ctsvc_db_append_search_query(const char *keyword, char *query, int size)
+{
+ bool emailaddress = false;
+ bool phonenumber = false;
+ int ret;
+ int len = 0, i;
+ if (strstr(keyword, "@") != NULL) {
+ emailaddress = true;
+ }
+ else {
+ len = strlen(keyword);
+
+ phonenumber = true;
+ for(i=0; i<len; i++) {
+ if (keyword[i] < '0' || keyword[i] > '9') {
+ phonenumber = false;
+ break;
+ }
+ }
+ }
+
+ if (emailaddress) {
+ ret = snprintf(query, size,
+ "(SELECT contact_id FROM %s WHERE %s MATCH 'data:%s*') ",
+ CTS_TABLE_SEARCH_INDEX, CTS_TABLE_SEARCH_INDEX,
+ keyword );
+ }
+ else if (phonenumber) {
+ char normalized_number[CTSVC_NUMBER_MAX_LEN];
+
+ ctsvc_normalize_number(keyword, normalized_number, CTSVC_NUMBER_MAX_LEN, CTSVC_NUMBER_MAX_LEN -1);
+
+ ret =snprintf(query, size,
+ "(SELECT contact_id FROM %s WHERE %s MATCH 'name:%s* OR number:%s* OR data:%s*' "
+ "UNION "
+ "SELECT contact_id FROM %s WHERE number LIKE '%%%s%%') ",
+ CTS_TABLE_SEARCH_INDEX, CTS_TABLE_SEARCH_INDEX,
+ keyword, keyword, keyword, CTS_TABLE_PHONE_LOOKUP, normalized_number );
+ }
+ else {
+ char *normalized_name = NULL;
+ ret = ctsvc_normalize_str(keyword, &normalized_name);
+
+ if (CTSVC_LANG_KOREAN == ret) {
+ char *chosung = calloc(1, strlen(keyword) * 5);
+ char *korean_pattern = calloc(1, strlen(keyword) * 5);
+
+ ctsvc_get_chosung(keyword, chosung, strlen(keyword) * 5 );
+ ctsvc_get_korean_search_pattern(keyword, korean_pattern, strlen(keyword) * 5 );
+ ret = snprintf(query, size,
+ "(SELECT contact_id FROM %s WHERE %s MATCH 'name:%s* OR number:%s* OR data:%s*' "
+ "INTERSECT "
+ "SELECT contact_id FROM %s WHERE name GLOB '*%s*') ",
+ CTS_TABLE_SEARCH_INDEX, CTS_TABLE_SEARCH_INDEX,
+ chosung, keyword, keyword, CTS_TABLE_NAME_LOOKUP, korean_pattern );
+ free(chosung);
+ free(korean_pattern);
+ }
+ else if (CTSVC_LANG_JAPANESE == ret){
+ char *hiragana = NULL;
+
+ ctsvc_convert_japanese_to_hiragana(keyword, &hiragana);
+
+ ret = snprintf(query, size,
+ "(SELECT contact_id FROM %s WHERE %s MATCH 'name:%s* OR number:%s* OR data:%s*') ",
+ CTS_TABLE_SEARCH_INDEX, CTS_TABLE_SEARCH_INDEX,
+ hiragana, hiragana, hiragana);
+ free(hiragana);
+ }
+ else {
+ ret = snprintf(query, size,
+ "(SELECT contact_id FROM %s WHERE %s MATCH 'name:%s* OR number:%s* OR data:%s*') ",
+ CTS_TABLE_SEARCH_INDEX, CTS_TABLE_SEARCH_INDEX,
+ normalized_name, keyword, keyword);
+ }
+ free(normalized_name);
+ }
+
+ return ret;
+}
+
static int __ctsvc_db_search_records_exec(const char *view_uri, const property_info_s* properties,
int ids_count, const char *projection, const char *keyword, int offset, int limit, contacts_list_h* out_list )
{
cts_stmt stmt = NULL;
contacts_list_h list = NULL;
ctsvc_record_type_e r_type;
- char remake_val[CTS_SQL_MIN_LEN] = {0};
const char *sortkey;
ret = ctsvc_db_get_table_name(view_uri, &table);
RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "Invalid parameter : view uri (%s)", view_uri);
- ret = ctsvc_normalize_str(keyword, remake_val, sizeof(remake_val));
-
if (CONTACTS_ERROR_NONE <= ret) {
if (0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT)
|| 0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP)) {
- len = snprintf(query, sizeof(query), "SELECT %s FROM %s, %s "
- "ON %s.contact_id = %s.contact_id "
- "WHERE (%s MATCH 'name:%s* OR number:%s* OR data:%s*') ",
- projection, table, CTS_TABLE_SEARCH_INDEX,
- table, CTS_TABLE_SEARCH_INDEX,
- CTS_TABLE_SEARCH_INDEX, remake_val, keyword, keyword);
+ len = snprintf(query, sizeof(query), "SELECT %s FROM %s "
+ "WHERE contact_id IN ",
+ projection, table);
+ len += __ctsvc_db_append_search_query(keyword, query + len, sizeof(query) - len);
}
else { // CTSVC_VIEW_URI_PERSON
len = snprintf(query, sizeof(query), "SELECT %s FROM %s, "
- "(SELECT person_id person_id_in_contact "
- "FROM "CTS_TABLE_CONTACTS", "CTS_TABLE_SEARCH_INDEX" "
- "ON contacts.contact_id = search_index.contact_id AND deleted = 0 "
- "WHERE ("CTS_TABLE_SEARCH_INDEX" MATCH 'name:%s* OR number:%s* OR data:%s*') "
- "GROUP BY person_id_in_contact) temp_contacts "
- "ON %s.person_id = temp_contacts.person_id_in_contact",
- projection, table, remake_val, keyword, keyword, table);
-
+ "(SELECT person_id person_id_in_contact "
+ "FROM "CTS_TABLE_CONTACTS " "
+ "WHERE deleted = 0 AND contact_id IN ",
+ projection, table);
+ len += __ctsvc_db_append_search_query(keyword, query + len, sizeof(query) - len);
+ len += snprintf(query + len, sizeof(query) - len, " GROUP BY person_id_in_contact) temp_contacts "
+ "ON %s.person_id = temp_contacts.person_id_in_contact", table);
}
/*
len += snprintf(query+len, sizeof(query)-len, "FROM %s, %s "
else {
if (0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT)
|| 0 == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP)) {
- len = snprintf(query, sizeof(query), "SELECT %s FROM %s, %s "
- "ON %s.contact_id = %s.contact_id "
- "WHERE (%s MATCH 'name:%s* OR number:%s* OR data:%s*') ",
- projection, table, CTS_TABLE_SEARCH_INDEX,
- table, CTS_TABLE_SEARCH_INDEX,
- CTS_TABLE_SEARCH_INDEX, keyword, keyword, keyword);
+ len = snprintf(query, sizeof(query), "SELECT %s FROM %s "
+ "WHERE contact_id IN ",
+ projection, table);
+ len += __ctsvc_db_append_search_query(keyword, query + len, sizeof(query) - len);
}
else { // CTSVC_VIEW_URI_PERSON
len = snprintf(query, sizeof(query),
- "SELECT %s FROM %s, "CTS_TABLE_SEARCH_INDEX", "
+ "SELECT %s FROM %s, "
"(SELECT contact_id, person_id person_id_in_contact FROM "CTS_TABLE_CONTACTS") temp_contacts "
"ON %s.person_id = temp_contacts.person_id_in_contact "
- "AND temp_contacts.contact_id = "CTS_TABLE_SEARCH_INDEX".contact_id "
"AND temp_contacts.deleted = 0 "
- "WHERE ("CTS_TABLE_SEARCH_INDEX" MATCH 'name:%s* OR number:%s* OR data:%s*') ",
- projection, table, table, keyword, keyword, keyword);
+ "WHERE temp_contacts.contact_id IN ",
+ projection, table, table);
+ len += __ctsvc_db_append_search_query(keyword, query + len, sizeof(query) - len);
}
}
if (__ctsvc_db_view_has_display_name(view_uri, properties, ids_count)) {
sortkey = ctsvc_get_sort_column();
len += snprintf(query+len, sizeof(query)-len, " ORDER BY %s", sortkey);
- }
+ } else if (0 == strcmp(view_uri, CTSVC_VIEW_URI_GROUP))
+ len += snprintf(query+len, sizeof(query)-len, " ORDER BY group_prio");
if (0 < limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
stmt = cts_query_prepare(query);
RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB , "DB error : cts_query_prepare() Failed");
-/*
- sqlite3_bind_text(stmt, 1, keyword, strlen(keyword), SQLITE_STATIC);
- if (CONTACTS_ERROR_NONE <= ret)
- sqlite3_bind_text(stmt, 2, remake_val, strlen(remake_val), SQLITE_STATIC);
-*/
-
r_type = ctsvc_view_get_record_type(view_uri);
contacts_list_create(&list);
contacts_record_create(view_uri, &record);
for(i=0;i<ids_count;i++) {
- type = properties[i].type;
+ type = (properties[i].property_id & CTSVC_VIEW_DATA_TYPE_MASK);
if (type == CTSVC_VIEW_DATA_TYPE_INT)
ctsvc_record_set_int(record, properties[i].property_id, ctsvc_stmt_get_int(stmt, i));
else if (type == CTSVC_VIEW_DATA_TYPE_STR)
ctsvc_list_prepend(list, record);
}
+
cts_stmt_finalize(stmt);
ctsvc_list_reverse(list);
*out_list = (contacts_list_h)list;
contacts_list_h list = NULL;
const char *table;
const char *sortkey = NULL;
- char remake_val[CTS_SQL_MIN_LEN] = {0};
RETV_IF(NULL == projection || '\0' == *projection, CONTACTS_ERROR_INVALID_PARAMETER);
if (0 == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT)
|| 0 == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP)) {
- len += snprintf(query+len, sizeof(query)-len, "FROM %s, %s "
- "ON %s.contact_id = %s.contact_id ",
- table, CTS_TABLE_SEARCH_INDEX,
- table, CTS_TABLE_SEARCH_INDEX);
+ len += snprintf(query+len, sizeof(query)-len, "FROM %s temp_contacts ", table);
}
else { // CTSVC_VIEW_URI_PERSON
- len += snprintf(query+len, sizeof(query)-len, "FROM %s, %s, "
+ len += snprintf(query+len, sizeof(query)-len, "FROM %s, "
"(SELECT contact_id, person_id person_id_in_contact FROM %s WHERE deleted = 0) temp_contacts "
"ON %s.person_id = temp_contacts.person_id_in_contact "
- "AND temp_contacts.contact_id = %s.contact_id",
- table, CTS_TABLE_SEARCH_INDEX, CTS_TABLE_CONTACTS, table, CTS_TABLE_SEARCH_INDEX);
+ , table, CTS_TABLE_CONTACTS, table);
}
/* len += snprintf(query+len, sizeof(query)-len, "FROM %s, "CTS_TABLE_SEARCH_INDEX" "
"ON %s.contact_id = "CTS_TABLE_SEARCH_INDEX".contact_id", table, table);*/
- ret = ctsvc_normalize_str(keyword, remake_val, sizeof(remake_val));
-
- if (CONTACTS_ERROR_NONE <= ret) {
- len += snprintf(query+len, sizeof(query)-len,
- " WHERE ("CTS_TABLE_SEARCH_INDEX" MATCH 'name:%s* OR number:%s* OR data:%s*') ", remake_val, keyword, keyword);
- }
- else
- len += snprintf(query+len, sizeof(query)-len,
- " WHERE ("CTS_TABLE_SEARCH_INDEX" MATCH 'name:%s* OR number:%s* OR data:%s*') ", keyword, keyword, keyword);
+ len += snprintf(query+len, sizeof(query)-len,
+ " WHERE temp_contacts.contact_id IN ");
+ len += __ctsvc_db_append_search_query(keyword, query + len, sizeof(query) - len);
if (condition && *condition)
len += snprintf(query+len, sizeof(query)-len, " AND (%s)", condition);
}
else if (sortkey)
len += snprintf(query+len, sizeof(query)-len, " ORDER BY %s", sortkey);
+ else if (0 == strcmp(s_query->view_uri, CTSVC_VIEW_URI_GROUP))
+ len += snprintf(query+len, sizeof(query)-len, " ORDER BY group_prio");
if (0 < limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB , "DB error : cts_query_prepare() Failed");
i = 1;
-// sqlite3_bind_text(stmt, i++, keyword, strlen(keyword), SQLITE_STATIC);
-// if (*remake_val)
-// sqlite3_bind_text(stmt, i++, remake_val, strlen(remake_val), SQLITE_STATIC);
len = g_slist_length(bind);
for (cursor=bind; cursor;cursor=cursor->next, i++)
index = 0;
do {
ret = contacts_db_delete_record(view_uri, ids[index++]);
- if( ret != CONTACTS_ERROR_NONE ) {
+ if (CONTACTS_ERROR_NO_DATA == ret) {
+ CTS_DBG("the record is not exist : %d", ret);
+ continue;
+ }
+ else if( ret != CONTACTS_ERROR_NONE ) {
CTS_ERR("contacts_db_delete_record is faild(%d)", ret);
ctsvc_end_trans(false);
return ret;
}
- }while(index < count);
+ } while(index < count);
+
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
{
return ret;
}
-
return CONTACTS_ERROR_NONE;
}
return __ctsvc_db_get_records_with_query_exec(s_query, offset, limit, out_list);
}
+static int __ctsvc_db_get_contact_changes(const char* view_uri, int addressbook_id,
+ int version, contacts_list_h* out_list, int* out_current_version)
+{
+ int ret;
+ char query[CTS_SQL_MAX_LEN] = {0};
+ contacts_list_h list;
+ cts_stmt stmt;
+
+ if (0 <= addressbook_id) {
+ snprintf(query, sizeof(query),
+ "SELECT %d, contact_id, changed_ver, created_ver, addressbook_id, image_changed_ver FROM %s "
+ "WHERE changed_ver > %d AND addressbook_id = %d AND deleted = 0 "
+ "UNION "
+ "SELECT %d, contact_id, deleted_ver, -1, addressbook_id, 0 FROM %s "
+ "WHERE deleted_ver > %d AND created_ver <= %d AND addressbook_id = %d "
+ "UNION "
+ "SELECT %d, contact_id, changed_ver, -1, addressbook_id, 0 FROM %s "
+ "WHERE changed_ver > %d AND addressbook_id = %d AND deleted = 1",
+ CONTACTS_CHANGE_UPDATED, CTS_TABLE_CONTACTS, version, addressbook_id,
+ CONTACTS_CHANGE_DELETED, CTS_TABLE_DELETEDS, version, version, addressbook_id,
+ CONTACTS_CHANGE_DELETED, CTS_TABLE_CONTACTS, version, addressbook_id);
+ }
+ else {
+ snprintf(query, sizeof(query),
+ "SELECT %d, contact_id, changed_ver, created_ver, addressbook_id, image_changed_ver FROM %s "
+ "WHERE changed_ver > %d AND deleted = 0 "
+ "UNION "
+ "SELECT %d, contact_id, deleted_ver, -1, addressbook_id, 0 FROM %s "
+ "WHERE deleted_ver > %d AND created_ver <= %d "
+ "UNION "
+ "SELECT %d, contact_id, changed_ver, -1, addressbook_id, 0 FROM %s "
+ "WHERE changed_ver > %d AND deleted = 1",
+ CONTACTS_CHANGE_UPDATED, CTS_TABLE_CONTACTS, version,
+ CONTACTS_CHANGE_DELETED, CTS_TABLE_DELETEDS, version, version,
+ CONTACTS_CHANGE_DELETED, CTS_TABLE_CONTACTS, version);
+ }
+
+ stmt = cts_query_prepare(query);
+ RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB , "DB error : cts_query_prepare() Failed");
+
+ contacts_list_create(&list);
+ while ((ret = cts_stmt_step(stmt))) {
+ contacts_record_h record;
+ ctsvc_updated_info_s *update_info;
+
+ if (1 != ret) {
+ CTS_ERR("DB error : cts_stmt_step() Failed(%d)", ret);
+ cts_stmt_finalize(stmt);
+ contacts_list_destroy(list, true);
+ return ret;
+ }
+
+ ret = contacts_record_create(_contacts_contact_updated_info._uri, &record);
+ update_info = (ctsvc_updated_info_s *)record;
+ update_info->changed_type = ctsvc_stmt_get_int(stmt, 0);
+ update_info->id = ctsvc_stmt_get_int(stmt, 1);
+ update_info->changed_ver = ctsvc_stmt_get_int(stmt, 2);
+
+ if (ctsvc_stmt_get_int(stmt, 3) == update_info->changed_ver || version < ctsvc_stmt_get_int(stmt, 3))
+ update_info->changed_type = CONTACTS_CHANGE_INSERTED;
+
+ update_info->addressbook_id = ctsvc_stmt_get_int(stmt, 4);
+
+ if (version < ctsvc_stmt_get_int(stmt, 5))
+ update_info->image_changed = true;
+
+ ctsvc_list_prepend(list, record);
+ }
+ cts_stmt_finalize(stmt);
+ ctsvc_list_reverse(list);
+
+ *out_list = list;
+ snprintf(query, sizeof(query), "SELECT ver FROM "CTS_TABLE_VERSION);
+ ret = ctsvc_query_get_first_int_result(query, out_current_version);
+
+ return CONTACTS_ERROR_NONE;
+}
-static int __ctsvc_db_update_info_create_record_from_stmt(const char *view_uri,
- cts_stmt stmt, int version, contacts_record_h* record)
+static int __ctsvc_db_get_group_changes(const char* view_uri, int addressbook_id,
+ int version, contacts_list_h* out_list, int* out_current_version)
{
- int ret = contacts_record_create(view_uri, record);
- RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "contacts_record_create is failed(%d)", ret);
+ int ret;
+ char query[CTS_SQL_MAX_LEN] = {0};
+ contacts_list_h list;
+ cts_stmt stmt;
- ctsvc_updated_info_s *update_info = (ctsvc_updated_info_s *)*record;
+ if (0 <= addressbook_id) {
+ snprintf(query, sizeof(query),
+ "SELECT %d, group_id, changed_ver, created_ver, addressbook_id FROM %s "
+ "WHERE changed_ver > %d AND addressbook_id = %d "
+ "UNION "
+ "SELECT %d, group_id, deleted_ver, -1, addressbook_id FROM %s "
+ "WHERE deleted_ver > %d AND created_ver <= %d AND addressbook_id = %d",
+ CONTACTS_CHANGE_UPDATED, CTS_TABLE_GROUPS, version, addressbook_id,
+ CONTACTS_CHANGE_DELETED, CTS_TABLE_GROUP_DELETEDS, version, version, addressbook_id);
+ }
+ else {
+ snprintf(query, sizeof(query),
+ "SELECT %d, group_id, changed_ver, created_ver, addressbook_id FROM %s "
+ "WHERE changed_ver > %d "
+ "UNION "
+ "SELECT %d, group_id, deleted_ver, -1, addressbook_id FROM %s "
+ "WHERE deleted_ver > %d AND created_ver <= %d",
+ CONTACTS_CHANGE_UPDATED, CTS_TABLE_GROUPS, version,
+ CONTACTS_CHANGE_DELETED, CTS_TABLE_GROUP_DELETEDS, version, version);
+ }
- update_info->changed_type = ctsvc_stmt_get_int(stmt, 0);
- update_info->id = ctsvc_stmt_get_int(stmt, 1);
- update_info->changed_ver = ctsvc_stmt_get_int(stmt, 2);
+ stmt = cts_query_prepare(query);
+ RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB , "DB error : cts_query_prepare() Failed");
- if (ctsvc_stmt_get_int(stmt, 3) == update_info->changed_ver || version < ctsvc_stmt_get_int(stmt, 3))
- update_info->changed_type = CONTACTS_CHANGE_INSERTED;
+ contacts_list_create(&list);
+ while ((ret = cts_stmt_step(stmt))) {
+ contacts_record_h record;
+ ctsvc_updated_info_s *update_info;
+
+ if (1 != ret) {
+ CTS_ERR("DB error : cts_stmt_step() Failed(%d)", ret);
+ cts_stmt_finalize(stmt);
+ contacts_list_destroy(list, true);
+ return ret;
+ }
+
+ ret = contacts_record_create(_contacts_group_updated_info._uri, &record);
+ update_info = (ctsvc_updated_info_s *)record;
+ update_info->changed_type = ctsvc_stmt_get_int(stmt, 0);
+ update_info->id = ctsvc_stmt_get_int(stmt, 1);
+ update_info->changed_ver = ctsvc_stmt_get_int(stmt, 2);
+
+ if (ctsvc_stmt_get_int(stmt, 3) == update_info->changed_ver || version < ctsvc_stmt_get_int(stmt, 3))
+ update_info->changed_type = CONTACTS_CHANGE_INSERTED;
+
+ update_info->addressbook_id = ctsvc_stmt_get_int(stmt, 4);
+
+ ctsvc_list_prepend(list, record);
+ }
+ cts_stmt_finalize(stmt);
+ ctsvc_list_reverse(list);
- update_info->addressbook_id = ctsvc_stmt_get_int(stmt, 4);
+ *out_list = list;
+ snprintf(query, sizeof(query), "SELECT ver FROM "CTS_TABLE_VERSION);
+ ret = ctsvc_query_get_first_int_result(query, out_current_version);
return CONTACTS_ERROR_NONE;
}
cts_stmt stmt;
len = snprintf(query, sizeof(query),
- "SELECT group_id, version, addressbook_id "
- "FROM "CTSVC_DB_VIEW_GROUPS_MEMBER_UPDATED_INFO" WHERE version > %d", version);
+ "SELECT group_id, member_changed_ver, addressbook_id "
+ "FROM "CTS_TABLE_GROUPS" WHERE member_changed_ver > %d", version);
if (0 <= addressbook_id)
len += snprintf(query+len, sizeof(query)-len, " AND addressbook_id = %d ", addressbook_id);
return CONTACTS_ERROR_NONE;
}
-API int contacts_db_get_changes_by_version( const char* view_uri, int addressbook_id,
- int version, contacts_list_h* out_list, int* out_current_version )
+static int __ctsvc_db_get_my_profile_changes(const char* view_uri, int addressbook_id,
+ int version, contacts_list_h* out_list, int* out_current_version)
{
int ret;
- RETV_IF(version < 0, CONTACTS_ERROR_INVALID_PARAMETER);
- RETV_IF(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER);
- *out_list = NULL;
- RETV_IF(NULL == out_current_version, CONTACTS_ERROR_INVALID_PARAMETER);
- *out_current_version = 0;
-
char query[CTS_SQL_MAX_LEN] = {0};
- if (0 == strcmp(view_uri, _contacts_contact_updated_info._uri))
- {
- if (0 <= addressbook_id)
- {
- snprintf(query, sizeof(query),
- "SELECT %d, contact_id, changed_ver, created_ver, addressbook_id FROM %s "
- "WHERE changed_ver > %d AND addressbook_id = %d AND deleted = 0 "
- "UNION "
- "SELECT %d, contact_id, deleted_ver, -1, addressbook_id FROM %s "
- "WHERE deleted_ver > %d AND addressbook_id = %d "
- "UNION "
- "SELECT %d, contact_id, changed_ver, -1, addressbook_id FROM %s "
- "WHERE changed_ver > %d AND addressbook_id = %d AND deleted = 1",
- CONTACTS_CHANGE_UPDATED, CTS_TABLE_CONTACTS, version, addressbook_id,
- CONTACTS_CHANGE_DELETED, CTS_TABLE_DELETEDS, version, addressbook_id,
- CONTACTS_CHANGE_DELETED, CTS_TABLE_CONTACTS, version, addressbook_id);
- }
- else {
- snprintf(query, sizeof(query),
- "SELECT %d, contact_id, changed_ver, created_ver, addressbook_id FROM %s "
- "WHERE changed_ver > %d AND deleted = 0 "
- "UNION "
- "SELECT %d, contact_id, deleted_ver, -1, addressbook_id FROM %s "
- "WHERE deleted_ver > %d "
- "UNION "
- "SELECT %d, contact_id, changed_ver, -1, addressbook_id FROM %s "
- "WHERE changed_ver > %d AND deleted = 1",
- CONTACTS_CHANGE_UPDATED, CTS_TABLE_CONTACTS, version,
- CONTACTS_CHANGE_DELETED, CTS_TABLE_DELETEDS, version,
- CONTACTS_CHANGE_DELETED, CTS_TABLE_CONTACTS, version);
- }
- }
- else if(0 == strcmp(view_uri, _contacts_group_updated_info._uri))
- {
- if (0 <= addressbook_id)
- {
- snprintf(query, sizeof(query),
- "SELECT %d, group_id, changed_ver, created_ver, addressbook_id FROM %s "
- "WHERE changed_ver > %d AND addressbook_id = %d "
- "UNION "
- "SELECT %d, group_id, deleted_ver, -1, addressbook_id FROM %s "
- "WHERE deleted_ver > %d AND addressbook_id = %d",
- CONTACTS_CHANGE_UPDATED, CTS_TABLE_GROUPS, version, addressbook_id,
- CONTACTS_CHANGE_DELETED, CTS_TABLE_GROUP_DELETEDS, version, addressbook_id);
- }
- else {
- snprintf(query, sizeof(query),
- "SELECT %d, group_id, changed_ver, created_ver, addressbook_id FROM %s "
- "WHERE changed_ver > %d "
- "UNION "
- "SELECT %d, group_id, deleted_ver, -1, addressbook_id FROM %s "
- "WHERE deleted_ver > %d ",
- CONTACTS_CHANGE_UPDATED, CTS_TABLE_GROUPS, version,
- CONTACTS_CHANGE_DELETED, CTS_TABLE_GROUP_DELETEDS, version);
- }
- }
- else if(0 == strcmp(view_uri, _contacts_group_member_updated_info._uri)) {
- ret = __ctsvc_db_get_group_member_changes(view_uri, addressbook_id,
- version, out_list, out_current_version);
- return ret;
- }
- else if(0 == strcmp(view_uri, _contacts_grouprel_updated_info._uri)) {
- ret = __ctsvc_db_get_group_relations_changes(view_uri, addressbook_id,
- version, out_list, out_current_version);
- return ret;
- }
-/*
- else if(0 == strcmp(view_uri, CTSVC_VIEW_URI_PERSON_UPDATED_INFO))
- {
+ contacts_list_h list;
+ cts_stmt stmt;
+ if (0 <= addressbook_id) {
+ snprintf(query, sizeof(query),
+ "SELECT changed_ver, addressbook_id, %d FROM %s "
+ "WHERE changed_ver > %d AND changed_ver == created_ver AND deleted = 0 AND addressbook_id = %d "
+ "UNION "
+ "SELECT changed_ver, addressbook_id, %d FROM %s "
+ "WHERE changed_ver > %d AND changed_ver != created_ver AND deleted = 0 AND addressbook_id = %d "
+ "UNION "
+ "SELECT changed_ver, addressbook_id, %d FROM %s "
+ "WHERE changed_ver > %d AND deleted = 1 AND addressbook_id = %d",
+ CONTACTS_CHANGE_INSERTED, CTS_TABLE_MY_PROFILES, version, addressbook_id,
+ CONTACTS_CHANGE_UPDATED, CTS_TABLE_MY_PROFILES, version, addressbook_id,
+ CONTACTS_CHANGE_DELETED, CTS_TABLE_MY_PROFILES, version, addressbook_id);
}
-*/
- else
- {
- CTS_ERR("Invalid parameter : this API does not support uri(%s)", view_uri);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ else {
+ snprintf(query, sizeof(query),
+ "SELECT changed_ver, addressbook_id, %d FROM %s "
+ "WHERE changed_ver > %d AND changed_ver == created_ver AND deleted = 0 "
+ "UNION "
+ "SELECT changed_ver, addressbook_id, %d FROM %s "
+ "WHERE changed_ver > %d AND changed_ver != created_ver AND deleted = 0 "
+ "UNION "
+ "SELECT changed_ver, addressbook_id, %d FROM %s "
+ "WHERE changed_ver > %d AND deleted = 1",
+ CONTACTS_CHANGE_INSERTED, CTS_TABLE_MY_PROFILES, version,
+ CONTACTS_CHANGE_UPDATED, CTS_TABLE_MY_PROFILES, version,
+ CONTACTS_CHANGE_DELETED, CTS_TABLE_MY_PROFILES, version);
}
- cts_stmt stmt = cts_query_prepare(query);
+ stmt = cts_query_prepare(query);
RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB , "DB error : cts_query_prepare() Failed");
- contacts_list_h list;
contacts_list_create(&list);
-
while ((ret = cts_stmt_step(stmt))) {
contacts_record_h record;
if (1 != ret) {
return ret;
}
- ret = __ctsvc_db_update_info_create_record_from_stmt(view_uri, stmt, version, &record);
- if( ret != CONTACTS_ERROR_NONE )
- {
- CTS_ERR("DB error : __ctsvc_db_update_info_create_record_from_stmt() Failed(%d)", ret);
- cts_stmt_finalize(stmt);
- contacts_list_destroy(list, true);
- return CONTACTS_ERROR_DB;
- }
-
+ ret = contacts_record_create(view_uri, &record);
+ ctsvc_record_set_int(record, _contacts_my_profile_updated_info.version, ctsvc_stmt_get_int(stmt, 0));
+ ctsvc_record_set_int(record, _contacts_my_profile_updated_info.address_book_id, ctsvc_stmt_get_int(stmt, 1));
+ ctsvc_record_set_int(record, _contacts_my_profile_updated_info.last_changed_type, ctsvc_stmt_get_int(stmt, 2));
ctsvc_list_prepend(list, record);
}
cts_stmt_finalize(stmt);
ctsvc_list_reverse(list);
- *out_list = (contacts_list_h)list;
-
- // why should be return with current_version ??
- const char *version_query = "SELECT ver FROM "CTS_TABLE_VERSION;
- ret = ctsvc_query_get_first_int_result(version_query, out_current_version);
+ *out_list = list;
+ snprintf(query, sizeof(query), "SELECT ver FROM "CTS_TABLE_VERSION);
+ ret = ctsvc_query_get_first_int_result(query, out_current_version);
return CONTACTS_ERROR_NONE;
}
+API int contacts_db_get_changes_by_version( const char* view_uri, int addressbook_id,
+ int version, contacts_list_h* out_list, int* out_current_version )
+{
+ int ret;
+ RETV_IF(version < 0, CONTACTS_ERROR_INVALID_PARAMETER);
+ RETV_IF(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER);
+ *out_list = NULL;
+ RETV_IF(NULL == out_current_version, CONTACTS_ERROR_INVALID_PARAMETER);
+ *out_current_version = 0;
+
+ if (0 == strcmp(view_uri, _contacts_contact_updated_info._uri)) {
+ ret = __ctsvc_db_get_contact_changes(view_uri, addressbook_id,
+ version, out_list, out_current_version);
+ return ret;
+ }
+ else if (0 == strcmp(view_uri, _contacts_group_updated_info._uri)) {
+ ret = __ctsvc_db_get_group_changes(view_uri, addressbook_id,
+ version, out_list, out_current_version);
+ return ret;
+ }
+ else if (0 == strcmp(view_uri, _contacts_group_member_updated_info._uri)) {
+ ret = __ctsvc_db_get_group_member_changes(view_uri, addressbook_id,
+ version, out_list, out_current_version);
+ return ret;
+ }
+ else if (0 == strcmp(view_uri, _contacts_grouprel_updated_info._uri)) {
+ ret = __ctsvc_db_get_group_relations_changes(view_uri, addressbook_id,
+ version, out_list, out_current_version);
+ return ret;
+ }
+ else if (0 == strcmp(view_uri, _contacts_my_profile_updated_info._uri)) {
+ ret = __ctsvc_db_get_my_profile_changes(view_uri, addressbook_id,
+ version, out_list, out_current_version);
+ return ret;
+ }
+
+ CTS_ERR("Invalid parameter : this API does not support uri(%s)", view_uri);
+ return CONTACTS_ERROR_INVALID_PARAMETER;
+}
+
API int contacts_db_get_current_version( int* out_current_version )
{
- RETVM_IF(NULL == out_current_version, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == out_current_version, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
return ctsvc_get_current_version(out_current_version);
}
{
RETV_IF(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER);
*out_list = NULL;
- RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
return __ctsvc_db_search_records(view_uri, keyword, offset, limit, out_list);
}
{
RETV_IF(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER);
*out_list = NULL;
- RETVM_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
return __ctsvc_db_search_records_with_query(query, keyword, offset, limit, out_list);
}
RETV_IF(NULL == out_count, CONTACTS_ERROR_INVALID_PARAMETER);
*out_count = 0;
- RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
if (( plugin_info = ctsvc_db_get_plugin_info(ctsvc_view_get_record_type(view_uri)))){
if( plugin_info->get_count ) {
RETV_IF(NULL == out_count, CONTACTS_ERROR_INVALID_PARAMETER);
*out_count = 0;
- RETVM_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
s_query = (ctsvc_query_s*)query;
type = ctsvc_view_get_record_type(s_query->view_uri);
if (id)
*id = 0;
- RETVM_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
plugin_info = ctsvc_db_get_plugin_info(((ctsvc_record_s*)record)->r_type);
RETVM_IF(NULL == plugin_info, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
{
ctsvc_db_plugin_info_s* plugin_info = NULL;
- RETVM_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
plugin_info = ctsvc_db_get_plugin_info(((ctsvc_record_s*)record)->r_type);
RETVM_IF(NULL == plugin_info, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
ctsvc_record_type_e type = CTSVC_RECORD_INVALID;
ctsvc_db_plugin_info_s* plugin_info = NULL;
- RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
type = ctsvc_view_get_record_type(view_uri);
plugin_info = ctsvc_db_get_plugin_info(type);
RETV_IF(NULL == out_record, CONTACTS_ERROR_INVALID_PARAMETER);
*out_record = NULL;
- RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
type = ctsvc_view_get_record_type(view_uri);
plugin_info = ctsvc_db_get_plugin_info(type);
{
ctsvc_db_plugin_info_s* plugin_info = NULL;
- RETVM_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter : record is NULL");
+ RETVM_IF(NULL == record, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : record is NULL");
plugin_info = ctsvc_db_get_plugin_info(((ctsvc_record_s*)record)->r_type);
RETVM_IF(NULL == plugin_info, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
RETV_IF(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER);
*out_list = NULL;
- RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
type = ctsvc_view_get_record_type(view_uri);
plugin_info = ctsvc_db_get_plugin_info(type);
int ret = CONTACTS_ERROR_NONE;
ctsvc_db_plugin_info_s* plugin_info = NULL;
- RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
if (count)
contacts_list_get_count(list, count);
API int contacts_db_insert_records_async( contacts_list_h list,
contacts_db_insert_result_cb callback, void *user_data)
{
- RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
#ifdef _CONTACTS_NATIVE
if (callback) {
int ret = CONTACTS_ERROR_NONE;
ctsvc_db_plugin_info_s* plugin_info = NULL;
- RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
if (( plugin_info = ctsvc_db_get_plugin_info(((ctsvc_list_s*)list)->l_type))){
if( plugin_info->update_records ) {
API int contacts_db_update_records_async( contacts_list_h list,
contacts_db_result_cb callback, void *user_data)
{
- RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
#ifdef _CONTACTS_NATIVE
if (callback) {
API int contacts_db_delete_records_async( const char* view_uri, int* ids, int count,
contacts_db_result_cb callback, void *user_data)
{
- RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
- RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
+ RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
#ifdef _CONTACTS_NATIVE
if (callback) {
int ret = CONTACTS_ERROR_NONE;
ctsvc_db_plugin_info_s* plugin_info = NULL;
- RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
- RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
+ RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
if (( plugin_info = ctsvc_db_get_plugin_info(((ctsvc_list_s*)list)->l_type))){
if( plugin_info->replace_records ) {
API int contacts_db_replace_records_async( contacts_list_h list, int ids[], unsigned int count,
contacts_db_result_cb callback, void *user_data )
{
- RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
- RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter");
+ RETVM_IF(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
+ RETVM_IF(NULL == ids, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
#ifdef _CONTACTS_NATIVE
if (callback) {
return ctsvc_db_replace_records(list, record_id_array, count);
}
+API int contacts_db_get_last_change_version(int* last_version)
+{
+ int ret = CONTACTS_ERROR_NONE;
+
+ RETVM_IF(NULL == last_version, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter");
+ *last_version = ctsvc_get_transaction_ver();
+ return ret;
+}
int ctsvc_db_replace_records(contacts_list_h list, int ids[], unsigned int count);
int ctsvc_db_make_get_records_query_stmt(ctsvc_query_s *s_query, int offset, int limit, cts_stmt *stmt);
+int ctsvc_db_create_set_query(contacts_record_h record, char **set, GSList **bind_text);
+int ctsvc_db_update_record_with_set_query(const char *set, GSList *bind_text, const char *table, int id);
#endif /* __TIZEN_SOCIAL_CTSVC_DB_QUERY_H__ */
ret = CONTACTS_ERROR_DB;
break;
}
-
- ctsvc_set_contact_noti();
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if(ret < CONTACTS_ERROR_NONE )
ret = CONTACTS_ERROR_DB;
break;
}
-
- ctsvc_set_contact_noti();
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if(ret < CONTACTS_ERROR_NONE )
return ret;
}
+
+API int contacts_group_set_group_order(int group_id, int previous_group_id, int next_group_id)
+{
+ int ret;
+ double previous_prio = 0.0;
+ double next_prio = 0.0;
+ int previous_addressbook_id = -1, next_addressbook_id = -1, addressbook_id = -1;
+ double prio;
+ cts_stmt stmt;
+ char query[CTS_SQL_MAX_LEN] = {0};
+
+ snprintf(query, sizeof(query), "SELECT group_prio, addressbook_id FROM "CTS_TABLE_GROUPS" WHERE group_id = ?");
+
+ stmt = cts_query_prepare(query);
+ RETVM_IF(NULL == stmt, CONTACTS_ERROR_DB, "cts_query_prepare() Failed");
+
+ cts_stmt_bind_int(stmt, 1, previous_group_id);
+ ret = cts_stmt_step(stmt);
+ if (1 /*CTS_TRUE*/ == ret) {
+ previous_prio = ctsvc_stmt_get_dbl(stmt, 0);
+ previous_addressbook_id = ctsvc_stmt_get_int(stmt, 1);
+ }
+ cts_stmt_reset(stmt);
+ cts_stmt_bind_int(stmt, 1, next_group_id);
+ ret = cts_stmt_step(stmt);
+ if (1 /*CTS_TRUE*/ == ret) {
+ next_prio = ctsvc_stmt_get_dbl(stmt, 0);
+ next_addressbook_id = ctsvc_stmt_get_int(stmt, 1);
+ }
+ cts_stmt_reset(stmt);
+ cts_stmt_bind_int(stmt, 1, group_id);
+ ret = cts_stmt_step(stmt);
+ if (1 /*CTS_TRUE*/ == ret) {
+ addressbook_id = ctsvc_stmt_get_int(stmt, 1);
+ }
+ cts_stmt_finalize(stmt);
+
+ RETVM_IF(0.0 == previous_prio && 0.0 == next_prio, CONTACTS_ERROR_INVALID_PARAMETER,
+ "The indexes for previous and next are invalid.");
+ RETVM_IF(previous_group_id && previous_addressbook_id != addressbook_id , CONTACTS_ERROR_INVALID_PARAMETER,
+ "previous group(%d) and group(%d) are not the same addressbook(%d, %d) groups",
+ previous_group_id, group_id, previous_addressbook_id, addressbook_id);
+ RETVM_IF(next_group_id && next_addressbook_id != addressbook_id , CONTACTS_ERROR_INVALID_PARAMETER,
+ "next group(%d) and group(%d) are not the same addressbook(%d, %d) groups",
+ next_group_id, group_id, next_addressbook_id, addressbook_id);
+
+ if (0.0 == next_prio)
+ prio = previous_prio + 1;
+ else
+ prio = (previous_prio + next_prio) / 2;
+
+ ret = ctsvc_begin_trans();
+ RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
+
+ snprintf(query, sizeof(query),
+ "UPDATE %s SET group_prio = %f WHERE group_id = %d",
+ CTS_TABLE_GROUPS, prio, group_id);
+
+ ret = ctsvc_query_exec(query);
+ if (CONTACTS_ERROR_NONE != ret) {
+ CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
+ ctsvc_end_trans(false);
+ return ret;
+ }
+
+ ctsvc_set_group_noti();
+
+ ret = ctsvc_end_trans(true);
+ if (ret < CONTACTS_ERROR_NONE)
+ {
+ CTS_ERR("DB error : ctsvc_end_trans() Failed(%d)", ret);
+ return ret;
+ }
+ else
+ return CONTACTS_ERROR_NONE;
+}
+
/*
API int contacts_group_add_person(int group_id, int person_id)
{
static TLS bool contact_change = false;\r
static TLS bool my_profile_change = false;\r
static TLS bool phonelog_change = false;\r
-static TLS bool missed_change = false;\r
-static TLS bool favor_change = false;\r
static TLS bool speed_change = false;\r
static TLS bool addressbook_change = false;\r
static TLS bool group_change = false;\r
}\r
}\r
\r
-static inline void __ctsvc_noti_publish_missed_call_change(void)\r
-{\r
- int fd = open(CTSVC_NOTI_MISSED_CALL_CHANGED, O_TRUNC | O_RDWR);\r
- if (0 <= fd) {\r
- close(fd);\r
- missed_change = false;\r
- }\r
-}\r
-\r
-static inline void __ctsvc_noti_publish_favor_change(void)\r
-{\r
- int fd = open(CTSVC_NOTI_FAVORITE_CHANGED, O_TRUNC | O_RDWR);\r
- if (0 <= fd) {\r
- close(fd);\r
- favor_change = false;\r
- }\r
-}\r
-\r
static inline void __ctsvc_noti_publish_speed_change(void)\r
{\r
int fd = open(CTSVC_NOTI_SPEEDDIAL_CHANGED, O_TRUNC | O_RDWR);\r
contact_change = false;\r
my_profile_change = false;\r
phonelog_change = false;\r
- missed_change = false;\r
- favor_change = false;\r
speed_change = false;\r
addressbook_change = false;\r
group_change = false;\r
phonelog_change = true;\r
}\r
\r
-void ctsvc_set_missed_call_noti(void)\r
-{\r
- missed_change = true;\r
-}\r
-\r
-void ctsvc_set_favor_noti(void)\r
-{\r
- favor_change = true;\r
-}\r
-\r
void ctsvc_set_speed_noti(void)\r
{\r
speed_change = true;\r
if (contact_change) __ctsvc_noti_publish_contact_change();\r
if (my_profile_change) __ctsvc_noti_publish_my_profile_change();\r
if (phonelog_change) __ctsvc_noti_publish_phonelog_change();\r
- if (missed_change) __ctsvc_noti_publish_missed_call_change();\r
- if (favor_change) __ctsvc_noti_publish_favor_change();\r
if (speed_change) __ctsvc_noti_publish_speed_change();\r
if (addressbook_change) __ctsvc_noti_publish_addressbook_change();\r
if (group_change) __ctsvc_noti_publish_group_change();\r
void ctsvc_set_contact_noti(void);\r
void ctsvc_set_my_profile_noti(void);\r
void ctsvc_set_phonelog_noti(void);\r
-void ctsvc_set_missed_call_noti(void);\r
-void ctsvc_set_favor_noti(void);\r
void ctsvc_set_speed_noti(void);\r
void ctsvc_set_addressbook_noti(void);\r
void ctsvc_set_group_noti(void);\r
RETVM_IF(person_id <= 0 || contact_id <= 0 , CONTACTS_ERROR_INVALID_PARAMETER,
"Invalid parameter : person_id(%d), person_id(%d)", person_id, person_id);
- RETVM_IF(out_person_id == NULL , CONTACTS_ERROR_INVALID_PARAMETER,
- "Invalid parameter : out_person_id is NULL");
- *out_person_id = 0;
+ if (out_person_id)
+ *out_person_id = 0;
ret = ctsvc_begin_trans();
RETVM_IF(ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);
return ret;
}
- *out_person_id = ctsvc_db_insert_person(record);
- if (CONTACTS_ERROR_NONE > *out_person_id) {
- CTS_ERR("ctsvc_db_insert_person() Failed(%d)", *out_person_id);
+ id = ctsvc_db_insert_person(record);
+ if (CONTACTS_ERROR_NONE > id) {
+ CTS_ERR("ctsvc_db_insert_person() Failed(%d)", id);
ctsvc_end_trans(false);
- return *out_person_id;
+ return id;
}
snprintf(query, sizeof(query),
"INSERT INTO %s (person_id, usage_type, times_used) "
"SELECT %d, usage_type, times_used FROM %s WHERE person_id = %d",
- CTS_TABLE_CONTACT_STAT, *out_person_id, CTS_TABLE_CONTACT_STAT, person_id );
+ CTS_TABLE_CONTACT_STAT, id, CTS_TABLE_CONTACT_STAT, person_id );
ret = ctsvc_query_exec(query);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
snprintf(query, sizeof(query),
"UPDATE %s SET person_id = %d WHERE contact_id = %d",
- CTS_TABLE_CONTACTS, *out_person_id, contact_id);
+ CTS_TABLE_CONTACTS, id, contact_id);
ret = ctsvc_query_exec(query);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
if (is_favorite && ((ctsvc_contact_s*)record)->is_favorite) {
snprintf(query, sizeof(query),
- "INSERT INTO "CTS_TABLE_FAVORITES" values(%d, %f)", *out_person_id, priority);
+ "INSERT INTO "CTS_TABLE_FAVORITES" values(%d, %f)", id, priority);
ret = ctsvc_query_exec(query);
if (CONTACTS_ERROR_NONE != ret) {
CTS_ERR("ctsvc_query_exec() Failed(%d)", ret);
__ctsvc_update_primary_default_data(person_id);
+ if (out_person_id)
+ *out_person_id = id;
ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
return ret;
}
- ctsvc_set_favor_noti();
+ ctsvc_set_person_noti();
ret = ctsvc_end_trans(true);
if (ret < CONTACTS_ERROR_NONE)
#define CTS_TABLE_VERSION "cts_version"
#define CTS_TABLE_MY_PROFILES "my_profiles"
#define CTS_TABLE_CONTACT_STAT "contact_stat"
+#define CTS_TABLE_NAME_LOOKUP "name_lookup"
+#define CTS_TABLE_PHONE_LOOKUP "phone_lookup"
#define CTS_TABLE_SEARCH_INDEX "search_index"
#define CTS_TABLE_ACTIVITIES "activities"
#define CTS_TABLE_ACTIVITY_PHOTOS "activity_photos"
// DB views /////////////////////////////////////////////////////////////////////
#define CTSVC_DB_VIEW_PERSON "view_person"
#define CTSVC_DB_VIEW_CONTACT "view_contact"
+#define CTSVC_DB_VIEW_MY_PROFILE "view_my_profile"
#define CTSVC_DB_VIEW_NAME "view_name"
#define CTSVC_DB_VIEW_NUMBER "view_number"
#define CTSVC_DB_VIEW_SPEEDIDAL "view_speeddial"
//#define CTSVC_DB_VIEW_GROUPS_UPDATED_INFO "view_group_changes"
-#define CTSVC_DB_VIEW_GROUPS_MEMBER_UPDATED_INFO "view_group_member_changes"
+//#define CTSVC_DB_VIEW_GROUPS_MEMBER_UPDATED_INFO "view_group_member_changes"
//#define CTSVC_DB_VIEW_CONTACTS_UPDATED_INFO "view_contacts_changes"
#define CTSVC_DB_VIEW_PERSON_CONTACT "view_person_contact"
if (flags & CONTACTS_CONNECT_FLAG_RETRY) {
int i;
int waiting_time = 500;
- for (i=0;i<6;i++) {
+ for (i=0;i<7;i++) {
usleep(waiting_time * 1000);
DBG("retry cnt=%d, ret=%x, %d",(i+1), ret, waiting_time);
ret = contacts_connect2();
#include <unistd.h>
#include <sys/types.h>
+#include <sys/time.h>
#include <string.h>
#include <db-util.h>
#include "ctsvc_notification.h"
#include "ctsvc_db_init.h"
-#include "ctsvc_db_plugin_contact_helper.h"
#include "ctsvc_db_plugin_person_helper.h"
+#include "ctsvc_db_plugin_image_helper.h"
+#include "ctsvc_db_plugin_company_helper.h"
+
#include "ctsvc_phonelog.h"
#include "ctsvc_person.h"
ret = db_util_open(CTSVC_DB_PATH, &ctsvc_db, 0);
RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB /*CTS_ERR_DB_NOT_OPENED*/,
"DB error : db_util_open() Failed(%d)", ret);
- ret = sqlite3_create_function(ctsvc_db, "_CONTACT_DELETE_", 3, SQLITE_UTF8, NULL,
- ctsvc_db_contact_delete_callback, NULL, NULL);
- RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
- "sqlite3_create_function() Failed(%d)", ret);
ret = sqlite3_create_function(ctsvc_db, "_DATA_DELETE_", 2, SQLITE_UTF8, NULL,
ctsvc_db_data_delete_callback, NULL, NULL);
RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
"sqlite3_create_function() Failed(%d)", ret);
+ ret = sqlite3_create_function(ctsvc_db, "_DATA_IMAGE_DELETE_", 1, SQLITE_UTF8, NULL,
+ ctsvc_db_data_image_delete_callback, NULL, NULL);
+ RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
+ "sqlite3_create_function() Failed(%d)", ret);
+ ret = sqlite3_create_function(ctsvc_db, "_DATA_COMPANY_DELETE_", 1, SQLITE_UTF8, NULL,
+ ctsvc_db_data_company_delete_callback, NULL, NULL);
+ RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
+ "sqlite3_create_function() Failed(%d)", ret);
ret = sqlite3_create_function(ctsvc_db, "_NORMALIZE_INDEX_", 1, SQLITE_UTF8, NULL,
ctsvc_db_normalize_str_callback, NULL, NULL);
RETVM_IF(SQLITE_OK != ret, CONTACTS_ERROR_DB,
cts_stmt cts_query_prepare(char *query) {
int ret = -1;
cts_stmt stmt = NULL;
+ struct timeval from, now, diff;
+ bool retry = false;
- RETVM_IF(NULL == ctsvc_db, NULL, "DB error : Database is not opended");
+ RETVM_IF(NULL == ctsvc_db, NULL, "DB error : Database is not opened");
CTS_DBG("prepare query : %s", query);
- ret = sqlite3_prepare_v2(ctsvc_db, query, strlen(query), &stmt, NULL);
- RETVM_IF(SQLITE_OK != ret, NULL, "DB error : sqlite3_prepare_v2(%s) Failed(%s)",
- query, sqlite3_errmsg(ctsvc_db));
+ gettimeofday(&from, NULL);
+ do {
+ ret = sqlite3_prepare_v2(ctsvc_db, query, strlen(query), &stmt, NULL);
+
+ if (ret != SQLITE_OK)
+ CTS_ERR("DB error : sqlite3_prepare_v2() Failed(%d, %s)", ret, sqlite3_errmsg(ctsvc_db));
+
+ if (ret == SQLITE_BUSY || ret == SQLITE_LOCKED) {
+ usleep(50*1000); // 50 ms
+ gettimeofday(&now, NULL);
+ timersub(&now, &from, &diff);
+ retry = (diff.tv_sec < 1)? true:false; // retry it during 1 second
+ }
+ }while(retry);
return stmt;
}
int ctsvc_stmt_get_first_int_result(cts_stmt stmt, int *result) {
int ret;
- RETVM_IF(NULL == ctsvc_db, CONTACTS_ERROR_DB /*CTS_ERR_DB_NOT_OPENED*/, "DB error : Database is not opended");
+ RETVM_IF(NULL == ctsvc_db, CONTACTS_ERROR_DB /*CTS_ERR_DB_NOT_OPENED*/, "DB error : Database is not opened");
ret = sqlite3_step(stmt);
if (SQLITE_ROW != ret) {
int cts_stmt_step(cts_stmt stmt) {
int ret;
- ret = sqlite3_step(stmt);
+ struct timeval from, now, diff;
+ bool retry = false;
+
+ gettimeofday(&from, NULL);
+ do {
+ ret = sqlite3_step(stmt);
+
+ if (ret != SQLITE_ROW && ret != SQLITE_DONE)
+ CTS_ERR("DB error : sqlite3_step() Failed(%d, %s)", ret, sqlite3_errmsg(ctsvc_db));
+
+ if (ret == SQLITE_BUSY || ret == SQLITE_LOCKED) {
+ usleep(50*1000); // 50 ms
+ gettimeofday(&now, NULL);
+ timersub(&now, &from, &diff);
+ retry = (diff.tv_sec < 1)? true:false; // retry it during 1 second
+ }
+ }while(retry);
+
switch (ret) {
case SQLITE_BUSY:
case SQLITE_LOCKED:
static __thread int transaction_ver = 0;
static __thread bool version_up = false;
+#define CTS_SECURITY_IMAGE_PERMISSION 0440
+
#define CTS_COMMIT_TRY_MAX 500000 // For 3second
int ctsvc_begin_trans(void)
{
return "reverse_display_name";
}
+const char* ctsvc_get_sort_name_column(void)
+{
+ contacts_name_display_order_e order;
+
+ contacts_setting_get_name_display_order(&order);
+ if (CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST == order)
+ return "sort_name";
+ else
+ return "reverse_sort_name";
+}
+
+
const char* ctsvc_get_sort_column(void)
{
contacts_name_display_order_e order;
}
static int image_size = 480;
-static int __ctsvc_resize_and_copy_image(const char *src, const char *dest)
+
+typedef struct {
+ const char *src;
+ const char *dest;
+ int ret;
+}image_info;
+
+static bool __ctsvc_image_util_supported_jpeg_colorspace_cb(image_util_colorspace_e colorspace, void *user_data)
{
+ image_info *info = (image_info*)user_data;
image_util_error_e ret;
int width = 0, height = 0;
unsigned int size_decode = 0;
int resized_width, resized_height;
unsigned char * img_target = 0;
unsigned char * img_source = 0;
- const image_util_colorspace_e colorspace = IMAGE_UTIL_COLORSPACE_I420;
+ int dest_fd;
+ if (colorspace == IMAGE_UTIL_COLORSPACE_YV12 ) {
+ info->ret = CONTACTS_ERROR_NONE;
+ return true;
+ }
// load jpeg sample file
- CTS_DBG("src : %s, dest : %s", src, dest);
- ret = image_util_decode_jpeg( src, colorspace, &img_source, &width, &height, &size_decode );
- RETVM_IF(ret!=IMAGE_UTIL_ERROR_NONE, CONTACTS_ERROR_INTERNAL, "image_util_decode_jpeg failed(%d)", ret);
+ CTS_DBG("colorspace %d src : %s, dest : %s", colorspace, info->src, info->dest);
+ ret = image_util_decode_jpeg( info->src, colorspace, &img_source, &width, &height, &size_decode );
+ if (ret!=IMAGE_UTIL_ERROR_NONE) {
+ info->ret = CONTACTS_ERROR_INTERNAL;
+ return true;
+ }
#if 0
if (0>image_size) {
if (image_size<=0 || width <=0 || height <= 0) {
free(img_source);
CTS_ERR("image size error(%d)", image_size);
- return CONTACTS_ERROR_INTERNAL;
+ info->ret = CONTACTS_ERROR_INTERNAL;
+ return false;
}
if (width>height) {
resized_height = image_size;
resized_width = width*image_size/height;
}
+
+ if (!resized_height%8)
+ resized_height += 8 - (resized_height%8);
+ if (!resized_width%8)
+ resized_width += 8 - (resized_width%8);
+
CTS_DBG("size(%d, %d) -> resize(%d,%d)", width, height, resized_width, resized_height);
image_util_calculate_buffer_size(resized_width, resized_height, colorspace , &size_decode);
img_target = malloc( size_decode );
+
// do resize
ret = image_util_resize( img_target, &resized_width, &resized_height,
img_source, width, height, colorspace );
CTS_ERR("image_util_resize failed(%d)", ret);
free( img_target );
free( img_source );
- return CONTACTS_ERROR_INTERNAL;
+ info->ret = CONTACTS_ERROR_INTERNAL;
+ return false;
}
- ret = image_util_encode_jpeg(img_target, resized_width, resized_height, colorspace, 100, dest );
+
+ //ret = image_util_encode_jpeg(img_source, width, height, colorspace, 100, info->dest );
+ ret = image_util_encode_jpeg(img_target, resized_width, resized_height, colorspace, 50, info->dest );
free( img_target );
free( img_source );
- RETVM_IF(ret!=IMAGE_UTIL_ERROR_NONE, CONTACTS_ERROR_INTERNAL, "image_util_encode_jpeg failed(%d)", ret);
+ if(ret!=IMAGE_UTIL_ERROR_NONE) {
+ CTS_ERR("image_util_encode_jpeg failed(%d)", ret);
+ info->ret = CONTACTS_ERROR_INTERNAL;
+ return false;
+ }
}
else {
resized_width = width;
resized_height = height;
- ret = image_util_encode_jpeg(img_source, resized_width, resized_height, colorspace, 100, dest );
+ ret = image_util_encode_jpeg(img_source, resized_width, resized_height, colorspace, 50, info->dest );
free( img_source );
- RETVM_IF(ret!=IMAGE_UTIL_ERROR_NONE, CONTACTS_ERROR_INTERNAL, "image_util_encode_jpeg failed(%d)", ret);
+ if(ret!=IMAGE_UTIL_ERROR_NONE) {
+ CTS_ERR("image_util_encode_jpeg failed(%d)", ret);
+ info->ret = CONTACTS_ERROR_INTERNAL;
+ return false;
+ }
}
- return CONTACTS_ERROR_NONE;
+ dest_fd = open(info->dest, O_RDONLY);
+ if (dest_fd < 0) {
+ CTS_ERR("System : Open(dest:%s) Failed(%d)", info->dest, errno);
+ info->ret = CONTACTS_ERROR_SYSTEM;
+ return false;
+ }
+
+ ret = fchown(dest_fd, getuid(), CTS_SECURITY_FILE_GROUP);
+ if (0 != ret) {
+ CTS_ERR("fchown(%s) Failed(%d)", info->dest, errno);
+ info->ret = CONTACTS_ERROR_SYSTEM;
+ close(dest_fd);
+ return false;
+ }
+
+ ret = fchmod(dest_fd, CTS_SECURITY_IMAGE_PERMISSION);
+ if (0 != ret) {
+ CTS_ERR("fchmod(%s) Failed(%d)", info->dest, errno);
+ info->ret = CONTACTS_ERROR_SYSTEM;
+ close(dest_fd);
+ return false;
+ }
+ close(dest_fd);
+
+ info->ret = CONTACTS_ERROR_NONE;
+ return false;
+}
+
+static int __ctsvc_resize_and_copy_image(const char *src, const char *dest)
+{
+ int ret;
+ image_info info = {.src = src, .dest = dest, ret = CONTACTS_ERROR_NONE};
+
+ ret = image_util_foreach_supported_jpeg_colorspace(__ctsvc_image_util_supported_jpeg_colorspace_cb, &info);
+
+ if (ret != IMAGE_UTIL_ERROR_NONE)
+ return CONTACTS_ERROR_INVALID_PARAMETER;
+
+ return info.ret;
}
#define CTSVC_COPY_SIZE_MAX 4096
return CONTACTS_ERROR_FILE_NO_SPACE;
ret = __ctsvc_resize_and_copy_image(src, dest);
- if (CONTACTS_ERROR_NONE == ret)
+ if (CONTACTS_ERROR_NONE == ret) {
return ret;
+ }
+ else
+ CTS_ERR("__ctsvc_resize_and_copy_image Failed(%d)", ret);
src_fd = open(src, O_RDONLY);
RETVM_IF(src_fd < 0, CONTACTS_ERROR_SYSTEM, "System : Open(src:%s) Failed(%d)", src, errno);
ret = fchown(dest_fd, getuid(), CTS_SECURITY_FILE_GROUP);
if (0 != ret)
CTS_ERR("fchown(%s) Failed(%d)", dest, ret);
- ret = fchmod(dest_fd, CTS_SECURITY_DEFAULT_PERMISSION);
+ ret = fchmod(dest_fd, CTS_SECURITY_IMAGE_PERMISSION);
if (0 != ret)
CTS_ERR("fchmod(%s) Failed(%d)", dest, ret);
close(src_fd);
return CONTACTS_ERROR_NONE;
}
-
+int ctsvc_get_transaction_ver(void)
+{
+ return transaction_ver;
+}
\r
const char* ctsvc_get_display_column(void);\r
const char* ctsvc_get_sort_column(void);\r
+const char* ctsvc_get_sort_name_column(void);\r
\r
int ctsvc_begin_trans(void);\r
int ctsvc_end_trans(bool is_success);\r
int ctsvc_get_next_ver(void);\r
int ctsvc_get_current_version( int* out_current_version );\r
+int ctsvc_get_transaction_ver(void);\r
\r
char* ctsvc_get_image(const char *dir, int index, char *dest, int dest_size);\r
int ctsvc_change_image(const char *dir, int index, const char *path, char *image, int image_len);\r
Name: contacts-service
Summary: Contacts Service
-Version: 0.9.24.8
+Version: 0.9.45.3
Release: 1
Group: TO_BE/FILLED_IN
License: Apache-2.0
Requires(post): /usr/bin/vconftool
Requires(post): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
+Requires: sys-assert
%description
Contacts Service Library
%build
cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix}
-
-
make %{?_smp_mflags}
+
%install
rm -rf %{buildroot}
%make_install
%post -n contacts-service2
/sbin/ldconfig
-# from contacts-service-bin.postinst
-contacts-service-ipcd schema
chown :6005 /opt/usr/data/contacts-svc
chown :6005 /opt/usr/dbspace/.contacts-svc.db
chown :6005 /opt/usr/dbspace/.contacts-svc.db-journal
-if [ -f /usr/lib/rpm-plugins/msm.so ]
-then
- chsmack -a 'contacts-service::db' /opt/usr/dbspace/.contacts-svc.db*
-fi
chown :6005 -R /opt/usr/data/contacts-svc/img
chown :6005 /opt/usr/data/contacts-svc/.CONTACTS_SVC_*_CHANGED
chmod 775 /opt/usr/data/contacts-svc
chmod 770 -R /opt/usr/data/contacts-svc/img/
chmod 660 /opt/usr/data/contacts-svc/.CONTACTS_SVC_*
-vconftool set -t int file/private/contacts-service/default_lang 1 -g 6005
-vconftool set -t int file/private/contacts-service/secondary_lang 2 -g 6005
-vconftool set -t string db/contacts-svc/secondary_lang en_US -g 6005
+vconftool set -t int file/private/contacts-service/default_lang 100
-# from libcontacts-service.postinst
chown :6016 /opt/usr/data/contacts-svc/.CONTACTS_SVC_RESTRICTION_CHECK
vconftool set -t int db/contacts-svc/name_sorting_order 0 -g 6005
vconftool set -t int db/contacts-svc/name_display_order 0 -g 6005
+
%postun -p /sbin/ldconfig
%attr(0755,root,root) /etc/rc.d/init.d/contacts-service-ipcd.sh
%{_libdir}/systemd/user/contacts-service.service
%{_libdir}/systemd/user/tizen-middleware.target.wants/contacts-service.service
+%config(noreplace) /opt/usr/dbspace/.contacts-svc.db*
%files -n contacts-service2-devel
reverse_display_name TEXT,
display_name_source INTEGER,
display_name_language INTEGER,
+ sort_name TEXT,
+ reverse_sort_name TEXT,
sortkey TEXT COLLATE NOCASE,
reverse_sortkey TEXT COLLATE NOCASE,
created_ver INTEGER NOT NULL,
changed_ver INTEGER NOT NULL,
changed_time INTEGER NOT NULL,
+ image_changed_ver INTEGER NOT NULL,
uid TEXT,
ringtone_path TEXT,
vibration TEXT,
CREATE TRIGGER trg_contacts_del AFTER DELETE ON contacts
BEGIN
- SELECT _CONTACT_DELETE_(old.contact_id, old.image_thumbnail_path, old.image_path);
DELETE FROM data WHERE contact_id = old.contact_id AND is_my_profile = 0;
DELETE FROM group_relations WHERE old.addressbook_id != -1 AND contact_id = old.contact_id;
DELETE FROM activities WHERE contact_id = old.contact_id;
DELETE FROM persons WHERE person_id = old.person_id AND link_count = 1;
DELETE FROM search_index WHERE contact_id = old.contact_id;
+ DELETE FROM name_lookup WHERE contact_id = old.contact_id;
+ DELETE FROM phone_lookup WHERE contact_id = old.contact_id;
UPDATE persons SET dirty=1 WHERE person_id = old.person_id AND link_count > 1;
END;
CREATE TRIGGER trg_contacts_del2 AFTER DELETE ON contacts
WHEN old.addressbook_id IN (SELECT addressbook_id from addressbooks WHERE addressbook_id = old.addressbook_id)
BEGIN
- INSERT INTO contact_deleteds VALUES(old.contact_id, old.addressbook_id, (SELECT ver FROM cts_version) + 1);
+ INSERT INTO contact_deleteds VALUES(old.contact_id, old.addressbook_id, old.created_ver, (SELECT ver FROM cts_version) + 1);
END;
CREATE TRIGGER trg_contacts_update AFTER UPDATE ON contacts
CREATE TABLE contact_deleteds
(
contact_id INTEGER PRIMARY KEY,
- addressbook_id INTEGER,
- deleted_ver INTEGER
+ addressbook_id INTEGER NOT NULL,
+ created_ver INTEGER NOT NULL,
+ deleted_ver INTEGER NOT NULL
);
CREATE INDEX contact_deleteds_idx1 ON contact_deleteds(deleted_ver);
SELECT _DATA_DELETE_(old.id, old.datatype);
END;
+CREATE TRIGGER trg_data_image_del AFTER DELETE ON data
+ WHEN old.datatype = 13
+ BEGIN
+ SELECT _DATA_IMAGE_DELETE_(old.data3);
+ END;
+
+CREATE TRIGGER trg_data_company_del AFTER DELETE ON data
+ WHEN old.datatype = 6
+ BEGIN
+ SELECT _DATA_COMPANY_DELETE_(old.data8);
+ END;
+
CREATE TRIGGER trg_data_number_del AFTER DELETE ON data
WHEN old.datatype = 8
BEGIN
ringtone_path TEXT,
vibration TEXT,
image_thumbnail_path TEXT,
- member_changed_ver INTEGER
+ member_changed_ver INTEGER,
+ group_prio REAL
);
-INSERT INTO groups(addressbook_id, group_name, system_id, is_read_only, created_ver, changed_ver)
- VALUES(0, 'family', 'family', 1, 0, 0);
-INSERT INTO groups(addressbook_id, group_name, system_id, is_read_only, created_ver, changed_ver)
- VALUES(0, 'friends', 'friends',1, 0, 0);
-INSERT INTO groups(addressbook_id, group_name, system_id, is_read_only, created_ver, changed_ver)
- VALUES(0, 'coworkers', 'coworkers', 1, 0, 0);
+INSERT INTO groups(addressbook_id, group_name, system_id, is_read_only, created_ver, changed_ver, group_prio)
+ VALUES(0, 'coworkers', 'coworkers', 0, 0, 0, 1);
+INSERT INTO groups(addressbook_id, group_name, system_id, is_read_only, created_ver, changed_ver, group_prio)
+ VALUES(0, 'family', 'family', 0, 0, 0, 2);
+INSERT INTO groups(addressbook_id, group_name, system_id, is_read_only, created_ver, changed_ver, group_prio)
+ VALUES(0, 'friends', 'friends',0, 0, 0, 3);
CREATE TRIGGER trg_groups_del AFTER DELETE ON groups
BEGIN
DELETE FROM group_relations WHERE group_id = old.group_id;
END;
+CREATE TRIGGER trg_groups_del2 AFTER DELETE ON groups
+ WHEN old.addressbook_id IN (SELECT addressbook_id from addressbooks WHERE addressbook_id = old.addressbook_id)
+ BEGIN
+ INSERT INTO group_deleteds VALUES(old.group_id, old.addressbook_id, old.created_ver, (SELECT ver FROM cts_version) + 1);
+ END;
+
CREATE TABLE group_deleteds
(
- group_id INTEGER PRIMARY KEY,
- addressbook_id INTEGER,
- deleted_ver INTEGER
+ group_id INTEGER PRIMARY KEY,
+ addressbook_id INTEGER NOT NULL,
+ created_ver INTEGER NOT NULL,
+ deleted_ver INTEGER NOT NULL
);
CREATE INDEX group_deleteds_idx1 ON group_deleteds(deleted_ver);
CREATE VIRTUAL TABLE search_index USING FTS4
(
- contact_id integer NOT NULL,
+ contact_id INTEGER NOT NULL,
data TEXT,
name TEXT,
number TEXT,
UNIQUE(contact_id)
);
+CREATE TABLE name_lookup
+(
+ data_id INTEGER NOT NULL,
+ contact_id INTEGER NOT NULL,
+ name TEXT,
+ type INTEGER
+);
+
+CREATE TABLE phone_lookup
+(
+ data_id INTEGER NOT NULL,
+ contact_id INTEGER NOT NULL,
+ number TEXT,
+ min_match TEXT
+);
+
+
CREATE TABLE my_profiles
(
my_profile_id INTEGER PRIMARY KEY AUTOINCREMENT,
changed_time INTEGER NOT NULL,
uid TEXT,
image_thumbnail_path TEXT,
+ deleted INTEGER DEFAULT 0,
UNIQUE(addressbook_id)
);
CREATE TRIGGER trg_my_profiles_del AFTER DELETE ON my_profiles
BEGIN
--- It should be implemented SELECT _MY_PROFILE_DELETE_(old.my_profile_id);
+ DELETE FROM data WHERE contact_id = old.my_profile_id AND is_my_profile = 1;
+ END;
+
+CREATE TRIGGER trg_my_profile_update AFTER UPDATE ON my_profiles
+ WHEN new.deleted = 1
+ BEGIN
DELETE FROM data WHERE contact_id = old.my_profile_id AND is_my_profile = 1;
END;
#include "ctsvc_ipc_marshal.h"
#include "ctsvc_internal.h"
#include "ctsvc_ipc_server.h"
+#include "ctsvc_utils.h"
void ctsvc_ipc_server_connect(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
{
ERR("pims_ipc_data_put fail");
goto DATA_FREE;
}
- if (ret == CONTACTS_ERROR_NONE)
- {
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+ goto ERROR_RETURN;
+ }
if (ctsvc_ipc_marshal_int(id,*outdata) != CONTACTS_ERROR_NONE)
{
pims_ipc_data_destroy(*outdata);
ERR("ctsvc_ipc_marshal fail");
- ret = CONTACTS_ERROR_INVALID_PARAMETER;
+ ret = CONTACTS_ERROR_OUT_OF_MEMORY;
goto ERROR_RETURN;
}
}
ret = contacts_db_update_record(record);
- // goto 주의..
+ if (outdata)
+ {
+ *outdata = pims_ipc_data_create(0);
+ if (!*outdata)
+ {
+ ERR("pims_ipc_data_create fail");
+ goto DATA_FREE;
+ }
+ if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
+ {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("pims_ipc_data_put fail");
+ goto DATA_FREE;
+ }
+
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+ goto ERROR_RETURN;
+ }
+ }
+ }
+
+ goto DATA_FREE;
+
ERROR_RETURN:
if (outdata)
{
ret = contacts_db_delete_record(view_uri,id);
- // goto 주의..
+ if (outdata)
+ {
+ *outdata = pims_ipc_data_create(0);
+ if (!*outdata)
+ {
+ ERR("pims_ipc_data_create fail");
+ goto DATA_FREE;
+ }
+ if (pims_ipc_data_put(*outdata,(void*)&ret,sizeof(int)) != 0)
+ {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("pims_ipc_data_put fail");
+ goto DATA_FREE;
+ }
+
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+ goto ERROR_RETURN;
+ }
+ }
+ }
+
+ goto DATA_FREE;
+
ERROR_RETURN:
if (outdata)
{
{
ERR("outdata is NULL");
}
+
DATA_FREE:
CONTACTS_FREE(view_uri);
ret = contacts_db_replace_record(record, id);
+ if (outdata) {
+ *outdata = pims_ipc_data_create(0);
+ if (!*outdata) {
+ ERR("pims_ipc_data_create fail");
+ goto DATA_FREE;
+ }
+ if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("pims_ipc_data_put fail");
+ goto DATA_FREE;
+ }
+
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+ goto ERROR_RETURN;
+ }
+ }
+ }
+ else {
+ ERR("outdata is NULL");
+ }
+ goto DATA_FREE;
+
ERROR_RETURN:
if (outdata) {
*outdata = pims_ipc_data_create(0);
goto DATA_FREE;
}
- if(ret == CONTACTS_ERROR_NONE)
- {
+ if(ret == CONTACTS_ERROR_NONE) {
contacts_record_h record = NULL;
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+ goto ERROR_RETURN;
+ }
// marshal : id_count+property_id+[ids]*id_count
// id_count
if (pims_ipc_data_put(*outdata,(void*)&id_count,sizeof(int)) != 0)
pims_ipc_data_destroy(*outdata);
*outdata = NULL;
ERR("pims_ipc_data_put fail");
- ret = CONTACTS_ERROR_INVALID_PARAMETER;
+ ret = CONTACTS_ERROR_OUT_OF_MEMORY;
goto ERROR_RETURN;
}
+
for(i=0;i<id_count;i++)
{
record = NULL;
pims_ipc_data_destroy(*outdata);
*outdata = NULL;
ERR("pims_ipc_data_put fail");
- ret = CONTACTS_ERROR_INVALID_PARAMETER;
+ ret = CONTACTS_ERROR_OUT_OF_MEMORY;
goto ERROR_RETURN;
}
}
}
goto DATA_FREE;
- // goto 주의..
ERROR_RETURN:
if (outdata)
{
ERR("pims_ipc_data_put fail");
goto DATA_FREE;
}
+
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+ goto ERROR_RETURN;
+ }
+ }
}
else
{
pims_ipc_data_destroy(*outdata);
*outdata = NULL;
ERR("pims_ipc_data_put fail");
+ goto DATA_FREE;
+ }
+
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+ goto ERROR_RETURN;
+ }
}
}
else
goto DATA_FREE;
- // goto 주의..
ERROR_RETURN:
if (outdata)
{
ERR("pims_ipc_data_put fail");
goto DATA_FREE;
}
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+ goto ERROR_RETURN;
+ }
+ }
}
else {
ERR("outdata is NULL");
#include "ctsvc_ipc_marshal.h"
#include "ctsvc_internal.h"
#include "ctsvc_ipc_server.h"
+#include "ctsvc_utils.h"
void ctsvc_ipc_activity_delete_by_contact_id(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
pims_ipc_data_destroy(*outdata);
*outdata = NULL;
ERR("pims_ipc_data_put fail");
+ return;
+ }
+
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ return;
+ }
}
}
else
pims_ipc_data_destroy(*outdata);
*outdata = NULL;
ERR("pims_ipc_data_put fail");
+ return;
+ }
+
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ return;
+ }
}
}
else
pims_ipc_data_destroy(*outdata);
*outdata = NULL;
ERR("pims_ipc_data_put fail");
+ return;
+ }
+
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ return;
+ }
}
}
else
pims_ipc_data_destroy(*outdata);
*outdata = NULL;
ERR("pims_ipc_data_put fail");
+ return;
+ }
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ return;
+ }
+ }
+
+ }
+ else
+ {
+ ERR("outdata is NULL");
+ }
+
+ return;
+}
+
+void ctsvc_ipc_group_set_group_order(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
+{
+ int ret = CONTACTS_ERROR_NONE;
+ int group_id = 0;
+ int previous_group_id;
+ int next_group_id;
+
+ if (indata)
+ {
+ ret = ctsvc_ipc_unmarshal_int(indata, &group_id);
+ if (ret != CONTACTS_ERROR_NONE)
+ {
+ ERR("ctsvc_ipc_unmarshal_int fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_int(indata, &previous_group_id);
+ if (ret != CONTACTS_ERROR_NONE)
+ {
+ ERR("ctsvc_ipc_unmarshal_int fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_int(indata, &next_group_id);
+ if (ret != CONTACTS_ERROR_NONE)
+ {
+ ERR("ctsvc_ipc_unmarshal_int fail");
+ goto ERROR_RETURN;
+ }
+ }
+ else
+ {
+ ERR("ctsvc_ipc_group_link_group fail");
+ goto ERROR_RETURN;
+ }
+
+ ret = contacts_group_set_group_order(group_id, previous_group_id, next_group_id );
+
+ERROR_RETURN:
+
+ if (outdata)
+ {
+ *outdata = pims_ipc_data_create(0);
+ if (!*outdata)
+ {
+ ERR("pims_ipc_data_create fail");
+ return;
+ }
+ if (pims_ipc_data_put(*outdata, (void*)&ret, sizeof(int)) != 0)
+ {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("pims_ipc_data_put fail");
+ return;
+ }
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ return;
+ }
}
}
else
pims_ipc_data_destroy(*outdata);
*outdata = NULL;
ERR("pims_ipc_data_put fail");
+ return;
+ }
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ return;
+ }
}
}
else
ERR("pims_ipc_data_put fail");
return;
}
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ return;
+ }
+ }
if (pims_ipc_data_put(*outdata, (void*)&unlinked_person_id, sizeof(int)) != 0)
{
pims_ipc_data_destroy(*outdata);
pims_ipc_data_destroy(*outdata);
*outdata = NULL;
ERR("pims_ipc_data_put fail");
+ return;
+ }
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ return;
+ }
}
}
else
pims_ipc_data_destroy(*outdata);
*outdata = NULL;
ERR("pims_ipc_data_put fail");
+ return;
+ }
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ return;
+ }
}
}
else
pims_ipc_data_destroy(*outdata);
*outdata = NULL;
ERR("pims_ipc_data_put fail");
+ return;
+ }
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ return;
+ }
}
}
else
pims_ipc_data_destroy(*outdata);
*outdata = NULL;
ERR("pims_ipc_data_put fail");
+ return;
+ }
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ return;
+ }
}
}
else
pims_ipc_data_destroy(*outdata);
*outdata = NULL;
ERR("pims_ipc_data_put fail");
+ return;
+ }
+ if (ret == CONTACTS_ERROR_NONE) {
+ int transaction_ver = ctsvc_get_transaction_ver();
+ if (ctsvc_ipc_marshal_int(transaction_ver, *outdata) != CONTACTS_ERROR_NONE) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int fail");
+ return;
+ }
}
}
}
void ctsvc_ipc_group_add_contact(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
void ctsvc_ipc_group_remove_contact(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
+void ctsvc_ipc_group_set_group_order(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
void ctsvc_ipc_person_link_person(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
void ctsvc_ipc_person_unlink_contact(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
#include "internal.h"
#include "ctsvc_server_sqlite.h"
#include "schema.h"
+#include "ctsvc_sqlite.h"
#include "ctsvc_schema_recovery.h"
#include "ctsvc_schema.h"
return CONTACTS_ERROR_NONE;
}
+static int __ctsvc_server_check_table()
+{
+ int ret;
+ sqlite3 *db;
+ char query[CTS_SQL_MAX_LEN] = {0};
+ cts_stmt stmt = NULL;
+
+ ret = ctsvc_server_db_open(&db);
+ h_retvm_if(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_server_db_open() Failed(%d)", ret);
+
+ snprintf(query, sizeof(query),
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='%s'",
+ CTS_TABLE_CONTACTS);
+ ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
+ if (SQLITE_OK != ret) {
+ ERR("DB error : sqlite3_prepare_v2(%s) Failed(%s)", query, sqlite3_errmsg(db));
+ ctsvc_server_db_close();
+ return CONTACTS_ERROR_DB;
+ }
+
+ ret = sqlite3_step(stmt);
+ if (SQLITE_ROW != ret) {
+ ERR("contacts table does not exist in contacts DB file : %s", sqlite3_errmsg(db));
+ sqlite3_finalize(stmt);
+ ctsvc_server_db_close();
+ return CTSVC_ERR_NO_TABLE;
+ }
+
+ sqlite3_finalize(stmt);
+ ctsvc_server_db_close();
+ return CONTACTS_ERROR_NONE;
+}
+
int ctsvc_server_check_schema(void)
{
if (CTSVC_ERR_NO_DB_FILE == __ctsvc_server_check_db_file())
__ctsvc_server_remake_db_file();
+ else if (CTSVC_ERR_NO_TABLE == __ctsvc_server_check_table())
+ __ctsvc_server_remake_db_file();
return CONTACTS_ERROR_NONE;
}
if (pims_ipc_svc_register(CTSVC_IPC_GROUP_MODULE, CTSVC_IPC_SERVER_GROUP_ADD_CONTACT, ctsvc_ipc_group_add_contact, NULL) != 0) break;
if (pims_ipc_svc_register(CTSVC_IPC_GROUP_MODULE, CTSVC_IPC_SERVER_GROUP_REMOVE_CONTACT, ctsvc_ipc_group_remove_contact, NULL) != 0) break;
+ if (pims_ipc_svc_register(CTSVC_IPC_GROUP_MODULE, CTSVC_IPC_SERVER_GROUP_SET_GROUP_ORDER, ctsvc_ipc_group_set_group_order, NULL) != 0) break;
if (pims_ipc_svc_register(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_LINK_PERSON, ctsvc_ipc_person_link_person, NULL) != 0) break;
if (pims_ipc_svc_register(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_UNLINK_CONTACT, ctsvc_ipc_person_unlink_contact, NULL) != 0) break;
#define PHONE_ADDRESSBOOK_ID 0
#define CTSVC_TAPI_SIM_PB_MAX 0xFFFF
-//#define CTSVC_SIM_DATA_MAX_LENGTH 1024
+#define CTSVC_SIM_DATA_MAX_LENGTH (255+1)
#define TAPI_PB_MAX_FILE_CNT TAPI_PB_3G_PBC+1
#define TAPI_PB_NAME_INDEX TAPI_PB_3G_NAME
static sim_contact_s * __ctsvc_server_sim_create_contact_record(TelSimPbRecord_t *sim_record)
{
+ char temp[CTSVC_SIM_DATA_MAX_LENGTH] = {0,};
+
sim_contact_s *record = calloc(1,sizeof(sim_contact_s));
record->sim_index = sim_record->index;
record->next_index = sim_record->next_index;
record->name = SAFE_STRDUP((char*)sim_record->name);
record->nickname = SAFE_STRDUP((char*)sim_record->sne);
- record->number = SAFE_STRDUP((char*)sim_record->number);
- record->anr1 = SAFE_STRDUP((char*)sim_record->anr1);
- record->anr2 = SAFE_STRDUP((char*)sim_record->anr2);
- record->anr3 = SAFE_STRDUP((char*)sim_record->anr3);
+ if(sim_record->ton == TAPI_SIM_TON_INTERNATIONAL){
+ snprintf(temp,sizeof(temp),"+%s",sim_record->number);
+ record->number = strdup(temp);
+ }
+ else
+ record->number = SAFE_STRDUP((char*)sim_record->number);
+
+ memset(temp,0,sizeof(temp));
+ if(sim_record->anr1_ton == TAPI_SIM_TON_INTERNATIONAL){
+ snprintf(temp,sizeof(temp),"+%s",sim_record->anr1);
+ record->anr1 = strdup(temp);
+ }
+ else
+ record->anr1 = SAFE_STRDUP((char*)sim_record->anr1);
+
+ memset(temp,0,sizeof(temp));
+ if(sim_record->anr2_ton == TAPI_SIM_TON_INTERNATIONAL){
+ snprintf(temp,sizeof(temp),"+%s",sim_record->anr2);
+ record->anr2 = strdup(temp);
+ }
+ else
+ record->anr2 = SAFE_STRDUP((char*)sim_record->anr2);
+
+ memset(temp,0,sizeof(temp));
+ if(sim_record->anr3_ton == TAPI_SIM_TON_INTERNATIONAL){
+ snprintf(temp,sizeof(temp),"+%s",sim_record->anr3);
+ record->anr3 = strdup(temp);
+ }
+ else
+ record->anr3 = SAFE_STRDUP((char*)sim_record->anr3);
+
record->email1 = SAFE_STRDUP((char*)sim_record->email1);
record->email2 = SAFE_STRDUP((char*)sim_record->email2);
record->email3 = SAFE_STRDUP((char*)sim_record->email3);
contacts_record_h name = NULL;
contacts_record_h number = NULL;
contacts_record_h email = NULL;
- contacts_record_h nick = NULL;
+// contacts_record_h nick = NULL;
- h_retvm_if(record == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter : record is NULL");
- h_retvm_if(contact_id == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid paramter : contact_id is NULL");
+ h_retvm_if(record == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : record is NULL");
+ h_retvm_if(contact_id == NULL, CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : contact_id is NULL");
h_retvm_if(record->sim_index <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "The index(%d) is invalid", record->sim_index);
SERVER_DBG("insert record -> sim_index %d",record->sim_index);
}
SERVER_DBG("insert record -> name %s", record->name);
- if (record->nickname) {
+/* if (record->nickname) {
contacts_record_create(_contacts_nickname._uri, &nick);
if (nick) {
contacts_record_set_str(nick, _contacts_nickname.name, (char *)record->nickname);
}
}
SERVER_DBG("insert record -> nick name %s", record->nickname);
-
+*/
if (record->number) {
contacts_record_create(_contacts_number._uri, &number);
if (number) {
}
SERVER_DBG("insert record ->number %s", record->number);
- ret = __ctsvc_server_insert_db_num(&number, (char *)record->anr1);
+/* ret = __ctsvc_server_insert_db_num(&number, (char *)record->anr1);
if (CONTACTS_ERROR_NONE == ret)
contacts_record_add_child_record(contact, _contacts_contact.number, number);
SERVER_DBG("insert record ->anr1 %s", record->anr1);
if (CONTACTS_ERROR_NONE == ret)
contacts_record_add_child_record(contact, _contacts_contact.number, number);
SERVER_DBG("insert record ->anr3 %s", record->anr3);
-
+*/
ret = __ctsvc_server_insert_db_email(&email, (char *)record->email1);
if (CONTACTS_ERROR_NONE == ret)
contacts_record_add_child_record(contact, _contacts_contact.email, email);
SERVER_DBG("insert record ->email1 %s", record->email1);
-
+/*
ret = __ctsvc_server_insert_db_email(&email, (char *)record->email2);
if (CONTACTS_ERROR_NONE == ret)
contacts_record_add_child_record(contact, _contacts_contact.email, email);
if (CONTACTS_ERROR_NONE == ret)
contacts_record_add_child_record(contact, _contacts_contact.email, email);
SERVER_DBG("insert record ->email4 %s", record->email4);
-
+*/
contacts_record_set_int(contact, _contacts_contact.address_book_id, addressbook_id);
ret = contacts_db_insert_record(contact, contact_id);
h_warn_if(ret < CONTACTS_ERROR_NONE, "contacts_db_insert_record() Failed(%d)", ret);
}
}
else {
- // read SDN done ( success )
- // sim_data = NULL;
ctsvc_server_trim_memory();
}
return;
ERROR_RETURN:
- // sim_data = NULL;
ctsvc_server_trim_memory();
return;
}
+static void __ctsvc_server_sim_sdn_meta_info_cb(TapiHandle *handle, int result, void *data, void *user_data)
+{
+ SERVER_FN_CALL;
+ TelSimPbAccessResult_t sec_rt = result;
+ int ret=0;
+
+ if (TAPI_SIM_PB_SUCCESS != sec_rt) {
+ ERR("__ctsvc_server_sim_sdn_meta_info_cb() Failed(%d)", sec_rt);
+ goto ERROR_RETURN;
+ }
+ ret = tel_read_sim_pb_record(__ctsvc_server_get_tapi_handle(), TAPI_SIM_PB_SDN,1, __ctsvc_server_sim_sdn_read_cb, NULL);
+ if(TAPI_API_SUCCESS != ret) {
+ ERR("tel_read_sim_pb_record() Failed(%d)", ret);
+ goto ERROR_RETURN;
+ }
+ERROR_RETURN:
+ ctsvc_server_trim_memory();
+ return;
+}
int ctsvc_server_sim_read_sdn(void* data)
{
SERVER_FN_CALL;
goto ERROR_RETURN;
}
- ret = tel_read_sim_pb_record(__ctsvc_server_get_tapi_handle(), TAPI_SIM_PB_SDN,
- 1, __ctsvc_server_sim_sdn_read_cb, NULL);
+ ret = tel_get_sim_pb_meta_info(__ctsvc_server_get_tapi_handle(), TAPI_SIM_PB_SDN, __ctsvc_server_sim_sdn_meta_info_cb, NULL);
+ h_retvm_if(ret != TAPI_API_SUCCESS, CONTACTS_ERROR_SYSTEM, "tel_get_sim_(usim)_meta_info =%d",ret);
if(TAPI_API_SUCCESS != ret) {
- ERR("tel_read_sim_pb_record() Failed(%d)", ret);
- ret = CONTACTS_ERROR_SYSTEM;
+ ERR("tel_get_sim_pb_meta_info() Failed(%d)", ret);
goto ERROR_RETURN;
}
+
+ else
+ ERR("sim_status Failed(%d)", sim_status);
}
return CONTACTS_ERROR_NONE;
int ctsvc_server_sim_initialize(void)
{
SERVER_FN_CALL;
- contacts_error_e err = CONTACTS_ERROR_NONE;
__ctsvc_server_get_tapi_handle();
__ctsvc_server_set_sim_type();
-
- err = contacts_connect2();
- if(err != CONTACTS_ERROR_NONE ){
- if (ghandle){
- tel_deinit(ghandle);
- ghandle = NULL;
- }
- ERR("contacts_connect2 fail");
- return err;
- }
+ contacts_connect2();
int ret = TAPI_API_SUCCESS;
TelSimPbType_t sim_type;
#include "ctsvc_sqlite.h"
#include "ctsvc_notify.h"
#include "ctsvc_normalize.h"
+#include "ctsvc_localize.h"
#include "ctsvc_server_utils.h"
#include "ctsvc_notification.h"
-#include "ctsvc_db_plugin_contact_helper.h"
+#include "ctsvc_db_plugin_image_helper.h"
+#include "ctsvc_db_plugin_company_helper.h"
+
#include "ctsvc_person.h"
#include "ctsvc_phonelog.h"
h_retvm_if(ret != SQLITE_OK, CONTACTS_ERROR_DB,
"db_util_open() Failed(%d)", ret);
- ret = sqlite3_create_function(server_db, "_CONTACT_DELETE_", 3, SQLITE_UTF8, NULL,
- ctsvc_db_contact_delete_callback, NULL, NULL);
- h_retvm_if(SQLITE_OK != ret, CONTACTS_ERROR_DB,
- "sqlite3_create_function() Failed(%d)", ret);
ret = sqlite3_create_function(server_db, "_DATA_DELETE_", 2, SQLITE_UTF8, NULL,
ctsvc_db_data_delete_callback, NULL, NULL);
h_retvm_if(SQLITE_OK != ret, CONTACTS_ERROR_DB,
"sqlite3_create_function() Failed(%d)", ret);
+ ret = sqlite3_create_function(server_db, "_DATA_IMAGE_DELETE_", 1, SQLITE_UTF8, NULL,
+ ctsvc_db_data_image_delete_callback, NULL, NULL);
+ h_retvm_if(SQLITE_OK != ret, CONTACTS_ERROR_DB,
+ "sqlite3_create_function() Failed(%d)", ret);
+ ret = sqlite3_create_function(server_db, "_DATA_COMPANY_DELETE_", 1, SQLITE_UTF8, NULL,
+ ctsvc_db_data_company_delete_callback, NULL, NULL);
+ h_retvm_if(SQLITE_OK != ret, CONTACTS_ERROR_DB,
+ "sqlite3_create_function() Failed(%d)", ret);
ret = sqlite3_create_function(server_db, "_PHONE_LOG_DELETE_", 1, SQLITE_UTF8, NULL,
ctsvc_db_phone_log_delete_callback, NULL, NULL);
h_retvm_if(SQLITE_OK != ret, CONTACTS_ERROR_DB,
return CONTACTS_ERROR_NONE;
}
-int ctsvc_server_update_default_language(int prev_lang, int new_lang, int second_lang)
+int ctsvc_server_update_default_language(int prev_sort_primary, int prev_sort_secondary, int new_sort_primary, int new_sort_secondary)
{
SERVER_FN_CALL;
int ret;
ret = ctsvc_server_begin_trans();
h_retvm_if(ret, ret, "ctsvc_server_begin_trans() Failed(%d)", ret);
- if (prev_lang == second_lang) {
- snprintf(query, sizeof(query), "UPDATE %s SET display_name_language=%d WHERE display_name_language =%d" ,
- CTS_TABLE_CONTACTS, CTSVC_LANG_SECONDARY, CTSVC_LANG_DEFAULT);
- }
- else {
- snprintf(query, sizeof(query), "UPDATE %s SET display_name_language=%d WHERE display_name_language = %d" ,
- CTS_TABLE_CONTACTS, prev_lang, CTSVC_LANG_DEFAULT);
- }
+ snprintf(query, sizeof(query), "UPDATE %s SET display_name_language=%d WHERE display_name_language =%d" ,
+ CTS_TABLE_CONTACTS, prev_sort_primary, CTSVC_SORT_PRIMARY);
ret = sqlite3_exec(db, query, NULL, NULL, &errmsg);
if (SQLITE_OK != ret) {
ERR("sqlite3_exec(%s) Failed(%d, %s)", query, ret, errmsg);
return CONTACTS_ERROR_DB;
}
- if (new_lang == second_lang) {
- snprintf(query, sizeof(query), "UPDATE %s SET display_name_language=%d WHERE display_name_language=%d",
- CTS_TABLE_CONTACTS, CTSVC_LANG_DEFAULT, CTSVC_LANG_SECONDARY);
+ snprintf(query, sizeof(query), "UPDATE %s SET display_name_language=%d WHERE display_name_language = %d" ,
+ CTS_TABLE_CONTACTS, prev_sort_secondary, CTSVC_SORT_SECONDARY);
+ ret = sqlite3_exec(db, query, NULL, NULL, &errmsg);
+ if (SQLITE_OK != ret) {
+ ERR("sqlite3_exec(%s) Failed(%d, %s)", query, ret, errmsg);
+ sqlite3_free(errmsg);
+ ctsvc_server_end_trans(false);
+ ctsvc_server_db_close();
+ return CONTACTS_ERROR_DB;
}
- else {
- snprintf(query, sizeof(query), "UPDATE %s SET display_name_language=%d WHERE display_name_language=%d",
- CTS_TABLE_CONTACTS, CTSVC_LANG_DEFAULT, new_lang);
+
+ snprintf(query, sizeof(query), "UPDATE %s SET display_name_language=%d WHERE display_name_language=%d",
+ CTS_TABLE_CONTACTS, CTSVC_SORT_PRIMARY, new_sort_primary);
+ ret = sqlite3_exec(db, query, NULL, NULL, &errmsg);
+ if (SQLITE_OK != ret) {
+ ERR("sqlite3_exec(%s) Failed(%d, %s)", query, ret, errmsg);
+ sqlite3_free(errmsg);
+ ctsvc_server_end_trans(false);
+ ctsvc_server_db_close();
+ return CONTACTS_ERROR_DB;
}
+
+ snprintf(query, sizeof(query), "UPDATE %s SET display_name_language=%d WHERE display_name_language =%d" ,
+ CTS_TABLE_CONTACTS, CTSVC_SORT_SECONDARY, new_sort_secondary);
ret = sqlite3_exec(db, query, NULL, NULL, &errmsg);
if (SQLITE_OK != ret) {
ERR("sqlite3_exec(%s) Failed(%d, %s)", query, ret, errmsg);
return CONTACTS_ERROR_DB;
}
- ret = ctsvc_server_set_default_language(new_lang);
+ ret = ctsvc_server_set_default_language(new_sort_primary);
if (CONTACTS_ERROR_NONE != ret) {
ctsvc_server_end_trans(false);
ctsvc_server_db_close();
return ret;
}
ret = ctsvc_server_end_trans(true);
+
+ if (CONTACTS_ERROR_NONE == ret) {
+ int fd = open(CTSVC_NOTI_PERSON_CHANGED, O_TRUNC | O_RDWR);
+ if (0 <= fd)
+ close(fd);
+ }
ctsvc_server_db_close();
return ret;
return CONTACTS_ERROR_DB;
}
- ret = ctsvc_server_set_secondary_language(new_lang);
- if (CONTACTS_ERROR_NONE != ret) {
- ctsvc_server_end_trans(false);
- ctsvc_server_db_close();
- return ret;
- }
ret = ctsvc_server_end_trans(true);
ctsvc_server_db_close();
}
snprintf(query, sizeof(query),
- "SELECT contact_id, display_name, reverse_display_name "
+ "SELECT contact_id, sort_name, reverse_sort_name "
"FROM "CTS_TABLE_CONTACTS" WHERE deleted = 0");
ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
if(SQLITE_OK != ret) {
while (SQLITE_ROW == (ret = sqlite3_step(stmt))) {
int contact_id = sqlite3_column_int(stmt, 0);
- char *display_name = (char*)sqlite3_column_text(stmt, 1);
- char *reverse_display_name = (char*)sqlite3_column_text(stmt, 2);
+ char *sort_name = (char*)sqlite3_column_text(stmt, 1);
+ char *reverse_sort_name = (char*)sqlite3_column_text(stmt, 2);
char *sortkey = NULL;
char *reverse_sortkey = NULL;
+ if (sort_name) {
+ ret = ctsvc_collation_str(sort_name, &sortkey);
+ if (CONTACTS_ERROR_NONE == ret && sortkey)
+ sqlite3_bind_text(update_stmt, 1, sortkey, strlen(sortkey), SQLITE_STATIC);
+ }
- ret = ctsvc_collation_str(display_name, &sortkey);
- if (CONTACTS_ERROR_NONE == ret && sortkey)
- sqlite3_bind_text(update_stmt, 1, sortkey, strlen(sortkey), SQLITE_STATIC);
+ if (reverse_sort_name) {
+ ret = ctsvc_collation_str(reverse_sort_name, &reverse_sortkey);
+ if (CONTACTS_ERROR_NONE == ret && reverse_sortkey)
+ sqlite3_bind_text(update_stmt, 2, reverse_sortkey, strlen(reverse_sortkey), SQLITE_STATIC);
+ }
- ret = ctsvc_collation_str(reverse_display_name, &reverse_sortkey);
- if (CONTACTS_ERROR_NONE == ret && reverse_sortkey)
- sqlite3_bind_text(update_stmt, 2, reverse_sortkey, strlen(reverse_sortkey), SQLITE_STATIC);
sqlite3_bind_int(update_stmt, 3, contact_id);
ret = sqlite3_step(update_stmt);
int ctsvc_server_db_open(sqlite3 **db);
int ctsvc_server_db_close(void);
-int ctsvc_server_update_default_language(int system_lang, int default_lang, int second_lang);
+int ctsvc_server_update_default_language(int prev_sort_primary, int prev_sort_secondary, int new_sort_primary, int new_sort_secondary);
int ctsvc_server_update_secondary_language(int prev_lang, int new_lang);
int ctsvc_server_insert_sdn_contact(const char *name, const char *number);
int ctsvc_server_delete_sdn_contact(void);
static const char *CTSVC_SERVER_VCONF_SYSTEM_LANGUAGE = VCONFKEY_LANGSET;
-static int default_language = -1;
+static int primary_sort = -1;
static int system_language = -1;
-static int secondary_language = -1;
+static int secondary_sort = -1;
inline int ctsvc_server_set_default_language(int lang)
{
int ret = vconf_set_int(ctsvc_get_default_language_vconfkey(), lang);
h_retvm_if(ret<0, CONTACTS_ERROR_INTERNAL, "vconf_set_int() Failed(%d)", ret);
- default_language = lang;
- return CONTACTS_ERROR_NONE;
-}
+ primary_sort = lang;
-inline int ctsvc_server_set_secondary_language(int lang)
-{
- int ret = vconf_set_int(ctsvc_get_secondary_language_vconfkey(), lang);
- h_retvm_if(ret<0, CONTACTS_ERROR_SYSTEM, "vconf_set_int() Failed(%d)", ret);
-
- secondary_language = lang;
+ {
+ if (primary_sort==CTSVC_SORT_KOREAN)
+ secondary_sort = CTSVC_SORT_WESTERN;
+ else if (primary_sort==CTSVC_SORT_WESTERN)
+ secondary_sort = CTSVC_SORT_KOREAN;
+ else
+ secondary_sort = CTSVC_SORT_WESTERN;
+ }
+ DBG("primary %d second %d", primary_sort, secondary_sort);
return CONTACTS_ERROR_NONE;
}
static void ctsvc_server_change_language_cb(keynode_t *key, void *data)
{
int ret = -1;
+ int new_primary_sort, new_secondary_sort;
const char *langset;
langset = vconf_keynode_get_str(key);
- if (!default_language) {
- ret = vconf_get_int(ctsvc_get_default_language_vconfkey(), &default_language);
- h_retm_if(ret<0, "vconf_get_int() Failed(%d)", ret);
- }
-
-
system_language = ctsvc_get_language_type(langset);
- DBG("system language(%d, %s)", system_language, langset);
- if (system_language != default_language)
- ret = ctsvc_server_update_default_language(default_language, system_language, secondary_language);
-}
-
-static void ctsvc_server_change_secondary_language_cb(keynode_t *key, void *data)
-{
- int ret = -1;
- const char *langset;
- int lang_type;
+ switch(system_language)
+ {
+ case CTSVC_LANG_KOREAN:
+ new_primary_sort = CTSVC_SORT_KOREAN;
+ break;
+ case CTSVC_LANG_JAPANESE:
+ new_primary_sort = CTSVC_SORT_JAPANESE;
+ break;
+ default:
+ new_primary_sort = CTSVC_SORT_WESTERN;
+ break;
+ }
- langset = vconf_keynode_get_str(key);
- if (!secondary_language) {
- ret = vconf_get_int(ctsvc_get_secondary_language_vconfkey(), &secondary_language);
+ if (primary_sort ==-1) {
+ ret = vconf_get_int(ctsvc_get_default_language_vconfkey(), &primary_sort);
h_retm_if(ret<0, "vconf_get_int() Failed(%d)", ret);
}
- lang_type = ctsvc_get_language_type(langset);
- if (lang_type != secondary_language)
- ret = ctsvc_server_update_secondary_language(secondary_language, lang_type);
+ {
+ if (new_primary_sort==CTSVC_SORT_KOREAN)
+ new_secondary_sort = CTSVC_SORT_WESTERN;
+ else if (new_primary_sort==CTSVC_SORT_WESTERN)
+ new_secondary_sort = CTSVC_SORT_KOREAN;
+ else
+ new_secondary_sort = CTSVC_SORT_WESTERN;
+ }
+
+ if (new_primary_sort != primary_sort)
+ ret = ctsvc_server_update_default_language(primary_sort, secondary_sort, new_primary_sort, new_secondary_sort);
}
static void ctsvc_server_update_collation_cb(keynode_t *key, void *data)
int ret, init_stat;
init_stat = vconf_keynode_get_int(key);
if (VCONFKEY_TELEPHONY_SIM_PB_INIT_COMPLETED == init_stat) {
- ret = ctsvc_server_sim_read_sdn(NULL);
- h_warn_if(CONTACTS_ERROR_NONE != ret, "ctsvc_server_sim_read_sdn() Failed(%d)", ret);
-
ret = ctsvc_server_sim_initialize();
h_warn_if(CONTACTS_ERROR_NONE != ret, "ctsvc_server_sim_initialize() Failed(%d)", ret);
{
int ret, sim_stat=-1;
const char *langset;
- int lang_type;
+ int sort_type;
- ret = vconf_get_int(ctsvc_get_default_language_vconfkey(), &default_language);
- if (ret < 0) {
+ langset = vconf_get_str(CTSVC_SERVER_VCONF_SYSTEM_LANGUAGE);
+ h_warn_if(NULL == langset, "vconf_get_str(%s) return NULL", CTSVC_SERVER_VCONF_SYSTEM_LANGUAGE);
+ system_language = ctsvc_get_language_type(langset);
+
+ ret = vconf_get_int(ctsvc_get_default_language_vconfkey(), &sort_type);
+ if (ret < 0 || sort_type == CTSVC_SORT_OTHERS) {
ERR("vconf_get_int(%s) Failed(%d)", ctsvc_get_default_language_vconfkey() ,ret);
- default_language = 0;
- }
- ret = vconf_get_int(ctsvc_get_secondary_language_vconfkey(), &secondary_language);
- if (ret < 0) {
- ERR("vconf_get_int(%s) Failed(%d)", ctsvc_get_secondary_language_vconfkey(),ret);
- secondary_language = 0;
+ switch(system_language)
+ {
+ case CTSVC_LANG_KOREAN:
+ sort_type = CTSVC_SORT_KOREAN;
+ break;
+ case CTSVC_LANG_JAPANESE:
+ sort_type = CTSVC_SORT_JAPANESE;
+ break;
+ default:
+ sort_type = CTSVC_SORT_WESTERN;
+ }
}
+ ctsvc_server_set_default_language(sort_type);
+
ret = vconf_notify_key_changed(CTSVC_SERVER_VCONF_SYSTEM_LANGUAGE,
ctsvc_server_change_language_cb, NULL);
h_retvm_if(ret<0, CONTACTS_ERROR_SYSTEM, "vconf_notify_key_changed(%s) Failed(%d)",
CTSVC_SERVER_VCONF_SYSTEM_LANGUAGE, ret);
- ret = vconf_notify_key_changed(VCONFKEY_CONTACTS_SVC_SECONDARY_LANGUAGE,
- ctsvc_server_change_secondary_language_cb, NULL);
- h_retvm_if(ret<0, CONTACTS_ERROR_SYSTEM, "vconf_notify_key_changed(%s) Failed(%d)",
- VCONFKEY_CONTACTS_SVC_SECONDARY_LANGUAGE, ret);
-
ret = vconf_notify_key_changed(VCONFKEY_REGIONFORMAT,
ctsvc_server_update_collation_cb, NULL);
h_retvm_if(ret<0, CONTACTS_ERROR_SYSTEM, "vconf_notify_key_changed(%s) Failed(%d)",
VCONFKEY_REGIONFORMAT, ret);
- langset = vconf_get_str(CTSVC_SERVER_VCONF_SYSTEM_LANGUAGE);
- h_warn_if(NULL == langset, "vconf_get_str(%s) return NULL", CTSVC_SERVER_VCONF_SYSTEM_LANGUAGE);
- system_language = ctsvc_get_language_type(langset);
-
- langset = vconf_get_str(VCONFKEY_CONTACTS_SVC_SECONDARY_LANGUAGE);
- h_warn_if(NULL == langset, "vconf_get_str(%s) return NULL", CTSVC_SERVER_VCONF_SYSTEM_LANGUAGE);
- lang_type = ctsvc_get_language_type(langset);
- if (secondary_language != lang_type) {
- ERR("system lang(%s, %d), default lang(%d)", langset, lang_type, secondary_language);
- ctsvc_server_update_secondary_language(secondary_language, lang_type);
- }
-
- if (system_language != default_language) {
- ERR("system lang(%s, %d), default lang(%d)", langset, system_language, default_language);
- ctsvc_server_update_default_language(default_language, system_language, secondary_language);
- }
-
ret = vconf_get_int(CTSVC_SERVER_VCONF_TAPI_SIM_PB_INIT, &sim_stat);
if (VCONFKEY_TELEPHONY_SIM_PB_INIT_COMPLETED == sim_stat) {
- ret = ctsvc_server_sim_read_sdn(NULL);
- h_warn_if(CONTACTS_ERROR_NONE != ret, "ctsvc_server_sim_read_sdn() Failed(%d)", ret);
-
ret = ctsvc_server_sim_initialize();
h_warn_if(CONTACTS_ERROR_NONE != ret, "ctsvc_server_sim_initialize() Failed(%d)", ret);
}
int ctsvc_server_get_default_language(void);
int ctsvc_server_set_default_language(int lang);
-int ctsvc_server_set_secondary_language(int lang);
void ctsvc_server_trim_memory(void);
// Additional Error
enum {
CTSVC_ERR_NO_DB_FILE = -10000,
+ CTSVC_ERR_NO_TABLE,
};
#define SERVER_DLOG_OUT