static int __ctsvc_person_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
static int __ctsvc_person_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
static int __ctsvc_person_get_bool(contacts_record_h record, unsigned int property_id, bool *value);
+static int __ctsvc_person_get_double(contacts_record_h record, unsigned int property_id, double *out);
static int __ctsvc_person_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
static int __ctsvc_person_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
static int __ctsvc_person_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
.get_int = __ctsvc_person_get_int,
.get_bool = __ctsvc_person_get_bool,
.get_lli = NULL,
- .get_double = NULL,
+ .get_double = __ctsvc_person_get_double,
.set_str = __ctsvc_person_set_str,
.set_int = __ctsvc_person_set_int,
.set_bool = __ctsvc_person_set_bool,
return CONTACTS_ERROR_NONE;
}
+static int __ctsvc_person_get_double(contacts_record_h record, unsigned int property_id,
+ double *out)
+{
+ ctsvc_person_s *person = (ctsvc_person_s*)record;
+ switch (property_id) {
+ case CTSVC_PROPERTY_PERSON_FAVORITE_PRIORITY:
+ *out = person->favorite_prio;
+ break;
+
+ default:
+ ERR("This field(%d) is not supported in value(person)", property_id);
+ return CONTACTS_ERROR_INVALID_PARAMETER;
+ }
+ return CONTACTS_ERROR_NONE;
+}
+
static int __ctsvc_person_get_str_real(contacts_record_h record, unsigned int property_id,
char **out_str, bool copy)
{
char *addressbook_ids;
int snippet_type;
char *snippet_string;
+ double favorite_prio;
} ctsvc_person_s;
typedef struct {
{CTSVC_PROPERTY_PERSON_MESSAGE_ALERT, CTSVC_SEARCH_PROPERTY_ALL, "message_alert"},
{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_FAVORITE_PRIORITY, CTSVC_SEARCH_PROPERTY_ALL, "favorite_prio"},
{CTSVC_PROPERTY_PERSON_LINK_COUNT, CTSVC_SEARCH_PROPERTY_ALL, "link_count"},
{CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS, CTSVC_SEARCH_PROPERTY_PROJECTION, "addressbook_ids"},
{CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
return CONTACTS_ERROR_NONE;
}
+int ctsvc_ipc_unmarshal_double(const pims_ipc_data_h data, double *pout)
+{
+ unsigned int size = 0;
+
+ RETV_IF(NULL == data, CONTACTS_ERROR_INVALID_PARAMETER);
+ RETV_IF(NULL == pout, CONTACTS_ERROR_INVALID_PARAMETER);
+
+ void *tmp = pims_ipc_data_get(data, &size);
+ if (tmp == NULL) {
+ ERR("pims_ipc_data_get() Fail");
+ return CONTACTS_ERROR_NO_DATA;
+ } else {
+ *pout = *(double*)tmp;
+ }
+ return CONTACTS_ERROR_NONE;
+}
+
int ctsvc_ipc_unmarshal_bool(const pims_ipc_data_h data, bool *pout)
{
unsigned int size = 0;
return CONTACTS_ERROR_NONE;
}
+int ctsvc_ipc_marshal_double(const double in, pims_ipc_data_h ipc_data)
+{
+ RETV_IF(NULL == ipc_data, CONTACTS_ERROR_INVALID_PARAMETER);
+
+ if (pims_ipc_data_put(ipc_data, (void*)&in, sizeof(double)) != 0)
+ return CONTACTS_ERROR_OUT_OF_MEMORY;
+
+ return CONTACTS_ERROR_NONE;
+}
+
int ctsvc_ipc_marshal_bool(const bool in, pims_ipc_data_h ipc_data)
{
RETV_IF(NULL == ipc_data, CONTACTS_ERROR_INVALID_PARAMETER);
int ctsvc_ipc_unmarshal_int(const pims_ipc_data_h data, int *pout);
int ctsvc_ipc_unmarshal_unsigned_int(const pims_ipc_data_h data, unsigned int *pout);
int ctsvc_ipc_unmarshal_record_common(const pims_ipc_data_h ipc_data, ctsvc_record_s *common);
+int ctsvc_ipc_unmarshal_double(const pims_ipc_data_h data, double *pout);
/*
* NULL 이슈로 ctsvc_ipc_unmarshal_string / ctsvc_ipc_marshal_string 는 pair 를 이루어야함.
int ctsvc_ipc_marshal_int(const int in, pims_ipc_data_h ipc_data);
int ctsvc_ipc_marshal_unsigned_int(const unsigned int in, pims_ipc_data_h ipc_data);
int ctsvc_ipc_marshal_record_common(const ctsvc_record_s *common, pims_ipc_data_h ipc_data);
+int ctsvc_ipc_marshal_double(const double in, pims_ipc_data_h ipc_data);
/*
* filter, query
break;
if (ctsvc_ipc_unmarshal_string(ipc_data, &person_p->snippet_string) != CONTACTS_ERROR_NONE)
break;
+ if (ctsvc_ipc_unmarshal_double(ipc_data, &person_p->favorite_prio) != CONTACTS_ERROR_NONE)
+ break;
return CONTACTS_ERROR_NONE;
} while (0);
break;
if (ctsvc_ipc_marshal_string((person_p->snippet_string), ipc_data) != CONTACTS_ERROR_NONE)
break;
+ if (ctsvc_ipc_marshal_double((person_p->favorite_prio), ipc_data) != CONTACTS_ERROR_NONE)
+ break;
return CONTACTS_ERROR_NONE;
} while (0);
* <tr><td>string</td><td> message_alert </td><td>read, write</td><td> Message alert path of the person </td></tr>
* <tr><td>string</td><td> status </td><td>read only</td><td> Status of social account </td></tr>
* <tr><td>boolean</td><td> is_favorite </td><td>read, write</td><td> The person is favorite or not </td></tr>
- * <tr><td>double</td><td> favorite_priority </td><td> sort only </td><td> The priority of favorite contacts. You cannot get/set the value but you can use it as sorting key, see the @ref contacts_query_set_sort </td></tr>
+ * <tr><td>double</td><td> favorite_priority </td><td> read only </td><td> The priority of favorite contacts. it can be used as sorting key, see the @ref contacts_query_set_sort </td></tr>
* <tr><td>integer</td><td> link_count </td><td>read only</td><td> Link count of contact records (projection) </td></tr>
* <tr><td>string</td><td> addressbook_ids </td><td>read only</td><td> Addressbook IDs that the person belongs to (projection) </td></tr>
* <tr><td>boolean</td><td> has_phonenumber </td><td>read only</td><td> The person has phone number or not </td></tr>
_CONTACTS_PROPERTY_STR(vibration) /* read, write */
_CONTACTS_PROPERTY_STR(status) /* read only */
_CONTACTS_PROPERTY_BOOL(is_favorite) /* read, write */
- _CONTACTS_PROPERTY_DOUBLE(favorite_priority) /* sort only */
+ _CONTACTS_PROPERTY_DOUBLE(favorite_priority) /* read only */
_CONTACTS_PROPERTY_INT(link_count) /* read only */
_CONTACTS_PROPERTY_STR(addressbook_ids) /* read only */
_CONTACTS_PROPERTY_BOOL(has_phonenumber) /* read only */
"addressbook_ids, "
"persons.has_phonenumber, "
"persons.has_email, "
- "EXISTS(SELECT person_id FROM "CTS_TABLE_FAVORITES" WHERE person_id=persons.person_id) is_favorite "
+ "EXISTS(SELECT person_id FROM "CTS_TABLE_FAVORITES" WHERE person_id=persons.person_id) is_favorite, "
+ "(SELECT favorite_prio FROM "CTS_TABLE_FAVORITES" WHERE person_id=persons.person_id) favorite_prio "
"FROM "CTS_TABLE_PERSONS" "
"LEFT JOIN "CTS_TABLE_CONTACTS" "
"ON (name_contact_id = contacts.contact_id AND contacts.deleted = 0) "
"addressbook_ids, "
"has_phonenumber, "
"has_email, "
- "is_favorite "
+ "is_favorite, "
+ "favorite_prio "
"FROM "CTSVC_DB_VIEW_PERSON,
ctsvc_get_display_column(), ctsvc_get_sort_name_column());
free(person->message_alert);
person->message_alert = SAFE_STRDUP(temp);
break;
+ case CTSVC_PROPERTY_PERSON_FAVORITE_PRIORITY:
+ person->favorite_prio = ctsvc_stmt_get_dbl(stmt, i);
+ break;
default:
break;
}
person->addressbook_ids = SAFE_STRDUP(temp);
break;
case CTSVC_PROPERTY_PERSON_FAVORITE_PRIORITY:
- {
- /* TODO: Fixme (BS) */
- int value = ctsvc_stmt_get_int(stmt, i);
- value++; /* fix warning */
- }
+ person->favorite_prio = ctsvc_stmt_get_dbl(stmt, i);
break;
case CTSVC_PROPERTY_PERSON_SNIPPET_TYPE:
person->snippet_type = ctsvc_stmt_get_int(stmt, i);
person->has_phonenumber = ctsvc_stmt_get_int(stmt, i++);
person->has_email = ctsvc_stmt_get_int(stmt, i++);
person->is_favorite = ctsvc_stmt_get_int(stmt, i++);
-
+ person->favorite_prio = ctsvc_stmt_get_dbl(stmt, i++);
return CONTACTS_ERROR_NONE;
}