SET(LIBDIR "\${prefix}/lib")
SET(INCLUDEDIR "\${prefix}/${DEST_INCLUDE_DIR}")
SET(VERSION_MAJOR 0)
-SET(VERSION "${VERSION_MAJOR}.9.52.1")
+SET(VERSION "${VERSION_MAJOR}.9.55")
EXECUTE_PROCESS(COMMAND build-util/generator.sh)
case ',':
case '.':
case ';':
+ case '+':
return false;
- case '+': //only first position
default:
return true;
}
if (NULL == src)
CTS_ERR("The parameter(src) is NULL");
else {
- if ('+' == src[s_pos])
- dest[d_pos++] = src[s_pos++];
-
while (src[s_pos] != 0)
{
if (d_pos >= dest_size-2) break;
free(group->ringtone_path);\r
free(group->vibration);\r
free(group->image_thumbnail_path);\r
- free(group->system_id);\r
+ free(group->extra_data);\r
free(group);\r
\r
return CONTACTS_ERROR_NONE;\r
out_data->is_read_only = src_data->is_read_only;\r
out_data->image_thumbnail_changed = src_data->image_thumbnail_changed;\r
out_data->name = SAFE_STRDUP(src_data->name);\r
- out_data->system_id = SAFE_STRDUP(src_data->system_id);\r
+ out_data->extra_data = SAFE_STRDUP(src_data->extra_data);\r
out_data->vibration = SAFE_STRDUP(src_data->vibration);\r
out_data->ringtone_path = SAFE_STRDUP(src_data->ringtone_path);\r
out_data->image_thumbnail_path = SAFE_STRDUP(src_data->image_thumbnail_path);\r
case CTSVC_PROPERTY_GROUP_VIBRATION:\r
*out_str = GET_STR(copy, group->vibration);\r
break;\r
- case CTSVC_PROPERTY_GROUP_SYSTEM_ID:\r
- *out_str = GET_STR(copy, group->system_id);\r
+ case CTSVC_PROPERTY_GROUP_EXTRA_DATA:\r
+ *out_str = GET_STR(copy, group->extra_data);\r
break;\r
default :\r
ASSERT_NOT_REACHED("Invalid parameter : property_id(%d) is not supported in value(group)", property_id);\r
case CTSVC_PROPERTY_GROUP_VIBRATION:\r
FREEandSTRDUP(group->vibration, str);\r
break;\r
- case CTSVC_PROPERTY_GROUP_SYSTEM_ID:\r
- FREEandSTRDUP(group->system_id, str);\r
+ case CTSVC_PROPERTY_GROUP_EXTRA_DATA:\r
+ FREEandSTRDUP(group->extra_data, str);\r
break;\r
default :\r
ASSERT_NOT_REACHED("Invalid parameter : property_id(%d) is not supported in value(group)", property_id);\r
int addressbook_id;
bool is_read_only;
char *name;
- char *system_id;
+ char *extra_data;
char *ringtone_path;
char *vibration;
char *image_thumbnail_path;
.ringtone_path = CTSVC_PROPERTY_GROUP_RINGTONE,
.image_path = CTSVC_PROPERTY_GROUP_IMAGE,
.vibration = CTSVC_PROPERTY_GROUP_VIBRATION,
- .system_id = CTSVC_PROPERTY_GROUP_SYSTEM_ID,
+ .system_id = CTSVC_PROPERTY_GROUP_EXTRA_DATA,
+ .extra_data = CTSVC_PROPERTY_GROUP_EXTRA_DATA,
.is_read_only = CTSVC_PROPERTY_GROUP_IS_READ_ONLY
};
{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_EXTRA_DATA, CTSVC_SEARCH_PROPERTY_ALL, "extra_data"},
{CTSVC_PROPERTY_GROUP_IS_READ_ONLY, CTSVC_SEARCH_PROPERTY_ALL, "is_read_only"},
};
CTSVC_PROPERTY_GROUP_RINGTONE = (CTSVC_PROPERTY_GROUP | CTSVC_VIEW_DATA_TYPE_STR) +3,
CTSVC_PROPERTY_GROUP_IMAGE = (CTSVC_PROPERTY_GROUP | CTSVC_VIEW_DATA_TYPE_STR) +4,
CTSVC_PROPERTY_GROUP_VIBRATION = (CTSVC_PROPERTY_GROUP | CTSVC_VIEW_DATA_TYPE_STR) +5,
- CTSVC_PROPERTY_GROUP_SYSTEM_ID = (CTSVC_PROPERTY_GROUP | CTSVC_VIEW_DATA_TYPE_STR) +6,
+ CTSVC_PROPERTY_GROUP_EXTRA_DATA = (CTSVC_PROPERTY_GROUP | CTSVC_VIEW_DATA_TYPE_STR) +6,
CTSVC_PROPERTY_GROUP_IS_READ_ONLY = (CTSVC_PROPERTY_GROUP | CTSVC_VIEW_DATA_TYPE_BOOL | CTSVC_READ_ONLY_PROPERTY) +7,
// person
CTSVC_PROPERTY_MY_PROFILE_DISPLAY_NAME = (CTSVC_PROPERTY_MY_PROFILE | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +1,
CTSVC_PROPERTY_MY_PROFILE_ADDRESSBOOK_ID = (CTSVC_PROPERTY_MY_PROFILE | CTSVC_VIEW_DATA_TYPE_INT) +2,
CTSVC_PROPERTY_MY_PROFILE_IMAGE = (CTSVC_PROPERTY_MY_PROFILE | CTSVC_VIEW_DATA_TYPE_REC) +3,
- CTSVC_PROPERTY_MY_PROFILE_IMAGE_THUMBNAIL = (CTSVC_PROPERTY_MY_PROFILE | CTSVC_VIEW_DATA_TYPE_STR) +4,
+ CTSVC_PROPERTY_MY_PROFILE_IMAGE_THUMBNAIL = (CTSVC_PROPERTY_MY_PROFILE | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +4,
CTSVC_PROPERTY_MY_PROFILE_UID = (CTSVC_PROPERTY_MY_PROFILE | CTSVC_VIEW_DATA_TYPE_STR) +5,
CTSVC_PROPERTY_MY_PROFILE_CHANGED_TIME = (CTSVC_PROPERTY_MY_PROFILE | CTSVC_VIEW_DATA_TYPE_INT) +6,
CTSVC_PROPERTY_MY_PROFILE_NAME = (CTSVC_PROPERTY_MY_PROFILE | CTSVC_VIEW_DATA_TYPE_REC) +7,
if (ctsvc_ipc_unmarshal_int(ipc_data, &group_p->addressbook_id) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_bool(ipc_data, &group_p->is_read_only) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_string(ipc_data, &group_p->name) != CONTACTS_ERROR_NONE) break;
- if (ctsvc_ipc_unmarshal_string(ipc_data, &group_p->system_id) != CONTACTS_ERROR_NONE) break;
+ if (ctsvc_ipc_unmarshal_string(ipc_data, &group_p->extra_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_string(ipc_data, &group_p->ringtone_path) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_string(ipc_data, &group_p->vibration) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_unmarshal_string(ipc_data, &group_p->image_thumbnail_path) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_int((group_p->addressbook_id),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_bool((group_p->is_read_only),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_string((group_p->name),ipc_data) != CONTACTS_ERROR_NONE) break;
- if (ctsvc_ipc_marshal_string((group_p->system_id),ipc_data) != CONTACTS_ERROR_NONE) break;
+ if (ctsvc_ipc_marshal_string((group_p->extra_data),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_string((group_p->ringtone_path),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_string((group_p->vibration),ipc_data) != CONTACTS_ERROR_NONE) break;
if (ctsvc_ipc_marshal_string((group_p->image_thumbnail_path),ipc_data) != CONTACTS_ERROR_NONE) break;
</provide>
<request>
<smack request="sys-assert::core" type="rwxat"/>
+ <smack request="libaccounts-svc::db" type="rw"/>
</request>
</define>
<assign>
- <filesystem path="/usr/lib/libcontacts-service2.so.0.9.52.1" label="_"/>
+ <filesystem path="/usr/lib/libcontacts-service2.so.0.9.55" label="_"/>
<filesystem path="/usr/lib/libcontacts-service2.so.0" label="_"/>
- <filesystem path="/usr/lib/libcontacts-service3.so.0.9.52.1" label="_"/>
+ <filesystem path="/usr/lib/libcontacts-service3.so.0.9.55" 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"/>
* <tr><td>string</td><td> ringtone_path </td><td>read, write</td><td> </td></tr>
* <tr><td>string</td><td> image_path </td><td>read, write</td><td> </td></tr>
* <tr><td>string</td><td> vibration </td><td>read, write</td><td> </td></tr>
- * <tr><td>string</td><td> system_id </td><td>read, write</td><td> </td></tr>
+ * <tr><td>string</td><td> extra_data </td><td>read, write</td><td> </td></tr>
* <tr><td>boolean</td><td> is_read_only </td><td>read only</td><td> </td></tr>
* </table>
*
* <tr><td>boolean</td><td> has_email </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> group_id </td><td>*</td><td> </td></tr>
- * <tr><td>string</td><td> group_name </td><td></td><td> </td></tr>
* </table>
*
* @section CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person_phone_log _contacts_person_phone_log view
_CONTACTS_PROPERTY_STR( ringtone_path ) // read, write
_CONTACTS_PROPERTY_STR( image_path ) // read, write
_CONTACTS_PROPERTY_STR( vibration ) // read, write
- _CONTACTS_PROPERTY_STR( system_id ) // read, write, string
+ _CONTACTS_PROPERTY_STR( system_id ) // read, write, string, It should be removed
+ _CONTACTS_PROPERTY_STR( extra_data ) // read, write, string
_CONTACTS_PROPERTY_BOOL( is_read_only ) // read only
_CONTACTS_END_VIEW( _contacts_group )
_CONTACTS_PROPERTY_INT( address_book_id ) // read, write-once
_CONTACTS_PROPERTY_STR( ringtone_path ) // read, write
_CONTACTS_PROPERTY_STR( image_thumbnail_path ) // read, write
- _CONTACTS_PROPERTY_BOOL( is_favorite ) // read only
+ _CONTACTS_PROPERTY_BOOL( is_favorite ) // read, write
_CONTACTS_PROPERTY_BOOL( has_phonenumber ) // read only
_CONTACTS_PROPERTY_BOOL( has_email ) // read only
_CONTACTS_PROPERTY_INT( person_id ) // read only
_CONTACTS_PROPERTY_INT( address_book_id ) // read, write once
_CONTACTS_PROPERTY_STR( ringtone_path ) // read, write
_CONTACTS_PROPERTY_STR( image_thumbnail_path ) // read, write
- _CONTACTS_PROPERTY_BOOL( is_favorite ) // read only
+ _CONTACTS_PROPERTY_BOOL( is_favorite ) // read, write
_CONTACTS_PROPERTY_BOOL( has_phonenumber ) // read only
_CONTACTS_PROPERTY_BOOL( has_email ) // read only
_CONTACTS_PROPERTY_INT( person_id ) // read only
FILE(GLOB SRCS *.c ../common/*.c)
INCLUDE(FindPkgConfig)
-pkg_check_modules(service_pkgs REQUIRED sqlite3 db-util capi-media-image-util badge)
+pkg_check_modules(service_pkgs REQUIRED sqlite3 db-util capi-media-image-util accounts-svc badge)
FOREACH(flag ${service_pkgs_CFLAGS})
SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
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;
}
snprintf(query, sizeof(query),
"CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_GROUP" AS "
"SELECT * FROM "CTSVC_DB_VIEW_PERSON_CONTACT" "
- "LEFT JOIN (SELECT group_relations.group_id, "
- "group_name, "
+ "LEFT JOIN (SELECT group_id, "
"contact_id contact_id_in_group "
- "FROM "CTS_TABLE_GROUP_RELATIONS", "CTS_TABLE_GROUPS" "
- "ON group_relations.group_id = groups.group_id AND deleted = 0) temp_group "
+ "FROM "CTS_TABLE_GROUP_RELATIONS" "
+ "WHERE deleted = 0) temp_group "
"ON temp_group.contact_id_in_group = "CTSVC_DB_VIEW_PERSON_CONTACT".contact_id");
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Failed(%d)", ret);
CTS_ERR("ctsvc_db_close() Failed(%d)", ret);
return ret;
}
+
return CONTACTS_ERROR_NONE;
}
* limitations under the License.
*
*/
+#include <account.h>
#include "contacts.h"
#include "ctsvc_internal.h"
return CONTACTS_ERROR_NONE;
}
-
static int __ctsvc_db_addressbook_get_record( int id, contacts_record_h* out_record )
{
int ret;
len = snprintf(query, sizeof(query),
"SELECT addressbook_id, addressbook_name, account_id, mode, last_sync_ver "
- "FROM "CTS_TABLE_ADDRESSBOOKS" WHERE addressbook_id = %d",
- id);
+ "FROM "CTS_TABLE_ADDRESSBOOKS" WHERE addressbook_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_addressbook_insert_record( contacts_record_h record, int *id )
{
+ int ret;
+ cts_stmt stmt = NULL;
+ char query[CTS_SQL_MAX_LEN] = {0};
ctsvc_addressbook_s *addressbook = (ctsvc_addressbook_s*)record;
RETV_IF(NULL == record, 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_MAX_LEN] = {0};
+ ret = ctsvc_begin_trans();
+ RETVM_IF(ret < CONTACTS_ERROR_NONE, ret, "DB error : ctsvc_begin_trans() Failed(%d)", ret);
+
+ // Can not insert addressbook which has same account_id
+ int addresbook_id;
+ account_h account;
+ snprintf(query, sizeof(query),
+ "SELECT addressbook_id FROM "CTS_TABLE_ADDRESSBOOKS" WHERE account_id = %d",
+ addressbook->account_id);
+ ret = ctsvc_query_get_first_int_result(query, &addresbook_id);
+ if (CONTACTS_ERROR_NO_DATA != ret) {
+ ctsvc_end_trans(false);
+ if (CONTACTS_ERROR_NONE == ret) {
+ CTS_ERR("One addressbook which has account_id(%d) already exists", addressbook->account_id);
+ return CONTACTS_ERROR_INVALID_PARAMETER;
+ }
+ else {
+ CTS_ERR("DB error : ctsvc_query_get_first_int_result() Failed (%d)", ret);
+ return ret;
+ }
+ }
+
+ if (0 < addressbook->account_id) {
+ // check account_id validation
+ ret = account_create(&account);
+ if (ACCOUNT_ERROR_NONE != ret) {
+ CTS_ERR("account_create() Failed(%d)", ret);
+ ctsvc_end_trans(false);
+ return CONTACTS_ERROR_SYSTEM;
+ }
+ ret = account_query_account_by_account_id(addressbook->account_id, &account);
+ if (ACCOUNT_ERROR_NONE != ret) {
+ CTS_ERR("account_query_account_by_account_id Faild(%d) : account_id(%d)", ret, addressbook->account_id);
+ account_destroy(account);
+ ctsvc_end_trans(false);
+ return CONTACTS_ERROR_INVALID_PARAMETER;
+ }
+ account_destroy(account);
+ }
snprintf(query, sizeof(query),
"INSERT INTO %s(addressbook_name, account_id, mode) "
stmt = cts_query_prepare(query);
if (NULL == stmt) {
CTS_ERR("DB error : cts_query_prepare() Failed");
+ ctsvc_end_trans(false);
return CONTACTS_ERROR_DB;
}
cts_stmt_bind_text(stmt, 1, addressbook->name);
- /* 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;
- }
-
/* DOING JOB */
do {
ret = cts_stmt_step(stmt);
--- /dev/null
+/*\r
+ * Contacts Service\r
+ *\r
+ * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ *\r
+ */\r
+\r
+#include "contacts.h"\r
+#include "ctsvc_internal.h"\r
+#include "ctsvc_sqlite.h"\r
+#include "ctsvc_schema.h"\r
+#include "ctsvc_utils.h"\r
+#include "ctsvc_person.h"\r
+#include "ctsvc_notification.h"\r
+#include "ctsvc_db_plugin_addressbook_helper.h"\r
+\r
+int ctsvc_addressbook_delete(int account_id)\r
+{\r
+ CTS_FN_CALL;\r
+ int ret;\r
+ char query[CTS_SQL_MAX_LEN] = {0};\r
+ RETVM_IF(account_id <= 0, CONTACTS_ERROR_INVALID_PARAMETER, "Account_id(%d) is invalid", account_id);\r
+\r
+ // delete addressbook whish has account_id\r
+ ret = ctsvc_begin_trans();\r
+ RETVM_IF (CONTACTS_ERROR_NONE != ret, ret, "ctsvc_begin_trans() Failed(%d)", ret);\r
+\r
+ snprintf(query, sizeof(query), "DELETE FROM %s WHERE account_id = %d",\r
+ CTS_TABLE_ADDRESSBOOKS, account_id);\r
+ ret = ctsvc_query_exec(query);\r
+ if (CONTACTS_ERROR_NONE != ret) {\r
+ CTS_ERR("DB error : ctsvc_query_exec() Failed(%d)", ret);\r
+ ctsvc_end_trans(false);\r
+ return ret;\r
+ }\r
+\r
+ ret = cts_db_change();\r
+ if (0 < ret) {\r
+ ctsvc_set_my_profile_noti();\r
+ ctsvc_set_contact_noti();\r
+ // person noti will set in ctsvc_person_do_garbage_collection : ctsvc_set_person_noti();\r
+ ctsvc_set_group_noti();\r
+ ctsvc_set_addressbook_noti();\r
+ }\r
+ else {\r
+ CTS_ERR("There is no addressbook which has account_id (%d)", account_id);\r
+ ctsvc_end_trans(false);\r
+ return CONTACTS_ERROR_NO_DATA;\r
+ }\r
+\r
+ ret = ctsvc_person_do_garbage_collection();\r
+ if (CONTACTS_ERROR_NONE != ret) {\r
+ CTS_ERR("DB error : cts_person_garbagecollection() Failed(%d)", ret);\r
+ ctsvc_end_trans(false);\r
+ return ret;\r
+ }\r
+\r
+ ctsvc_end_trans(true);\r
+ return CONTACTS_ERROR_NONE;\r
+}\r
+\r
--- /dev/null
+/*\r
+ * Contacts Service\r
+ *\r
+ * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ *\r
+ */\r
+\r
+#ifndef __CTSVC_DB_PLUGIN_ADDRESS_BOOK_HELPER_H__\r
+#define __CTSVC_DB_PLUGIN_ADDRESS_BOOK_HELPER_H__\r
+\r
+int ctsvc_addressbook_delete(int account_id);\r
+\r
+#endif // __CTSVC_DB_PLUGIN_ADDRESS_BOOK_HELPER_H__\r
*
*/
#include <sys/types.h>
+#include <sys/syscall.h>
#include <fcntl.h>
#include <unistd.h>
version = ctsvc_get_next_ver();
+ if (CTSVC_PROPERTY_FLAG_DIRTY != (contact->base.property_flag & CTSVC_PROPERTY_FLAG_DIRTY)) {
+ CTS_ERR("No update");
+ ret = CONTACTS_ERROR_NONE;
+ break;
+ }
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);
*
*/
#include <sys/types.h>
+#include <sys/syscall.h>
#include <fcntl.h>
#include <unistd.h>
#include <vconf.h>
name = (ctsvc_name_s *)contact->name->records->data;
}
- if ( name && ( name->first || name->last) ) {
-
+ if ( name && ( name->first || name->last || name->prefix || name->addition || name->suffix) ) {
// make display name
display_len = SAFE_STRLEN(name->prefix)
+ SAFE_STRLEN(name->first)
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, group_prio) "
+ "vibration, image_thumbnail_path, extra_data, is_read_only, group_prio) "
"VALUES(%d, %d, ?, ?, ?, ?, ?, ?, ?, %d, %lf)",
group->id, group->addressbook_id, group->is_read_only, group_prio);
cts_stmt_bind_text(stmt, 6, group->image_thumbnail_path);
}
- if (group->system_id)
- cts_stmt_bind_text(stmt, 7, group->system_id);
+ if (group->extra_data)
+ cts_stmt_bind_text(stmt, 7, group->extra_data);
ret = cts_stmt_step(stmt);
if (CONTACTS_ERROR_NONE != ret) {
temp = ctsvc_stmt_get_text(stmt, i++);
group->name = SAFE_STRDUP(temp);
temp = ctsvc_stmt_get_text(stmt, i++);
- group->system_id = SAFE_STRDUP(temp);
+ group->extra_data = SAFE_STRDUP(temp);
group->is_read_only = ctsvc_stmt_get_int(stmt, i++);
temp = ctsvc_stmt_get_text(stmt, i++);
group->ringtone_path = SAFE_STRDUP(temp);
*out_record = NULL;
len = snprintf(query, sizeof(query),
- "SELECT group_id, addressbook_id, group_name, system_id, is_read_only, "
+ "SELECT group_id, addressbook_id, group_name, extra_data, is_read_only, "
"ringtone_path, vibration, image_thumbnail_path "
"FROM "CTS_TABLE_GROUPS" WHERE group_id = %d", id);
contacts_list_h list;
len = snprintf(query, sizeof(query),
- "SELECT group_id, addressbook_id, group_name, system_id, is_read_only, "
+ "SELECT group_id, addressbook_id, group_name, extra_data, is_read_only, "
"ringtone_path, vibration, image_thumbnail_path "
"FROM "CTS_TABLE_GROUPS" ORDER BY addressbook_id, group_prio");
temp = ctsvc_stmt_get_text(stmt, i);
group->vibration = SAFE_STRDUP(temp);
break;
- case CTSVC_PROPERTY_GROUP_SYSTEM_ID:
+ case CTSVC_PROPERTY_GROUP_EXTRA_DATA:
temp = ctsvc_stmt_get_text(stmt, i);
- group->system_id = SAFE_STRDUP(temp);
+ group->extra_data = SAFE_STRDUP(temp);
break;
case CTSVC_PROPERTY_GROUP_IS_READ_ONLY:
group->is_read_only = ctsvc_stmt_get_int(stmt, i);
#include <sys/un.h>
#include <unistd.h>
+#include <account.h>
+
#include "contacts.h"
#include "ctsvc_internal.h"
#include "ctsvc_socket.h"
#include "ctsvc_db_init.h"
#include "ctsvc_setting.h"
-#ifndef _CONTACTS_IPC_CLIENT
static int ctsvc_connection = 0;
static __thread int thread_connection = 0;
-#endif
API int contacts_connect2()
{
CTS_FN_CALL;
int ret;
-#ifndef _CONTACTS_IPC_CLIENT
ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
if (0 == ctsvc_connection) {
ret = ctsvc_socket_init();
ctsvc_db_plugin_init();
ctsvc_view_uri_init();
ctsvc_register_vconf();
+ ret = account_connect();
+ if (ACCOUNT_ERROR_NONE != ret)
+ CTS_ERR("account_connect Failed(%d)", ret);
}
else
CTS_DBG("System : Contacts service has been already connected");
ctsvc_connection++;
ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-#endif
if (0 == thread_connection) {
ret = ctsvc_db_init();
}
thread_connection--;
-#ifndef _CONTACTS_IPC_CLIENT
ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
if (1 == ctsvc_connection) {
ctsvc_socket_final();
ctsvc_deregister_vconf();
ctsvc_view_uri_deinit();
ctsvc_db_plugin_deinit();
+ account_disconnect();
}
else if (1 < ctsvc_connection)
CTS_DBG("System : connection count is %d", ctsvc_connection);
}
ctsvc_connection--;
ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
-#endif
-
return CONTACTS_ERROR_NONE;
}
resized_width = width*image_size/height;
}
- if (!resized_height%8)
+ if (resized_height%8)
resized_height += 8 - (resized_height%8);
- if (!resized_width%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);
Name: contacts-service
Summary: Contacts Service
-Version: 0.9.52.1
+Version: 0.9.55
Release: 1
Group: TO_BE/FILLED_IN
License: Apache-2.0
BuildRequires: pkgconfig(capi-base-common)
BuildRequires: pkgconfig(capi-media-image-util)
BuildRequires: pkgconfig(pims-ipc)
+BuildRequires: pkgconfig(accounts-svc)
BuildRequires: pkgconfig(badge)
Requires(post): /usr/bin/sqlite3, /bin/chmod, /bin/chown
Requires(post): /usr/bin/vconftool
group_id INTEGER PRIMARY KEY AUTOINCREMENT,
addressbook_id INTEGER,
group_name TEXT,
- system_id TEXT,
+ extra_data TEXT,
is_read_only INTEGER DEFAULT 0,
created_ver INTEGER NOT NULL,
changed_ver INTEGER NOT NULL,
group_prio REAL
);
-INSERT INTO groups(addressbook_id, group_name, system_id, is_read_only, created_ver, changed_ver, group_prio)
+INSERT INTO groups(addressbook_id, group_name, extra_data, 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)
+INSERT INTO groups(addressbook_id, group_name, extra_data, 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)
+INSERT INTO groups(addressbook_id, group_name, extra_data, 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
${CMAKE_SOURCE_DIR}/common/ctsvc_view.c
${CMAKE_SOURCE_DIR}/native/ctsvc_activity.c
+
${CMAKE_SOURCE_DIR}/native/ctsvc_db_init.c
${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_activity.c
+
${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_address_helper.c
${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_address.c
+
${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_addressbook.c
+ ${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_addressbook_helper.c
+
${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_company_helper.c
${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_company.c
+
${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_contact_helper.c
${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_contact.c
${CMAKE_SOURCE_DIR}/native/ctsvc_db_plugin_my_profile.c
)
INCLUDE(FindPkgConfig)
-pkg_check_modules(ctsvc_server_pkgs REQUIRED glib-2.0 pims-ipc gobject-2.0 tapi dlog capi-media-image-util badge)
+pkg_check_modules(ctsvc_server_pkgs REQUIRED glib-2.0 pims-ipc gobject-2.0 tapi dlog capi-media-image-util accounts-svc badge)
FOREACH(flag ${ctsvc_server_pkgs_CFLAGS})
SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
#include <stdlib.h>\r
#include <unistd.h> //sleep\r
\r
+#include <account.h>
+
#include "contacts.h"\r
#include "internal.h"\r
#include "ctsvc_schema.h"\r
#include "ctsvc_sqlite.h"\r
#include "ctsvc_server_bg.h"\r
#include "ctsvc_utils.h"\r
+#include "ctsvc_db_plugin_addressbook_helper.h"
\r
#define CTSVC_SERVER_BG_DELETE_COUNT 50\r
#define CTSVC_SERVER_BG_DELETE_STEP_TIME 1\r
GCond __ctsvc_server_bg_delete_cond;\r
GMutex __ctsvc_server_bg_delete_mutex;\r
\r
+account_subscribe_h account = NULL;
+
static int __ctsvc_server_bg_contact_delete_step1(__ctsvc_delete_data_s* data)\r
{\r
char query[CTS_SQL_MIN_LEN] = {0,};\r
ctsvc_server_bg_delete_start();
}\r
\r
+static bool __ctsvc_server_account_delete_cb(const char* event_type, int account_id, void* user_data)
+{
+ SERVER_FN_CALL;
+ if (strcmp(event_type, ACCOUNT_NOTI_NAME_DELETE) == 0)
+ ctsvc_addressbook_delete(account_id);
+ return true;
+}
+
void ctsvc_server_bg_add_cb()
{\r
int ret;
SERVER_DBG("call contacts_db_add_changed_cb (_contacts_address_book) : return (%d)", ret);
ret = contacts_db_add_changed_cb(_contacts_contact._uri, __ctsvc_server_contact_deleted_cb, NULL);
SERVER_DBG("call contacts_db_add_changed_cb (_contacts_contact): return (%d)", ret);
+
+ ret = account_subscribe_create(&account);
+ if (ACCOUNT_ERROR_NONE == ret) {
+ ret = account_subscribe_notification(account, __ctsvc_server_account_delete_cb, NULL);
+ if (ACCOUNT_ERROR_NONE != ret) {
+ SERVER_DBG("account_subscribe_notification Failed (%d)", ret);
+ }
+ }
+ else
+ SERVER_DBG("account_subscribe_create Failed (%d)", ret);
}
void ctsvc_server_bg_remove_cb()
SERVER_DBG("call contacts_db_remove_changed_cb (_contacts_address_book): return (%d)", ret);
ret = contacts_db_remove_changed_cb(_contacts_contact._uri, __ctsvc_server_contact_deleted_cb, NULL);
SERVER_DBG("call contacts_db_remove_changed_cb (_contacts_contact) : return (%d)", ret);
+
+ if (account) {
+ account_unsubscribe_notification(account); // unsubscirbe & destroy
+ account = NULL;
+ }
}\r
\r