#include <stdlib.h>
#include <stdio.h>
#include <glib.h>
-#include <dbus/dbus-glib.h>
#include <vconf.h>
#include <dlog.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <contacts.h>
#include <image_util.h>
-//#include <image_util_product.h>
#include <libexif/exif-data.h>
#include <unistd.h>
#include "bluetooth_pb_vcard.h"
#include "bluetooth_pb_agent.h"
-#define VCARD_FORMAT_2_1 0x0
-#define VCARD_FORMAT_3_0 0x1
-
-#define VCARD_VERSION (0x1)
-#define VCARD_FN (0x1 << 1)
-#define VCARD_N (0x1 << 2)
-#define VCARD_PHOTO (0x1 << 3)
-#define VCARD_BDAY (0x1 << 4)
-#define VCARD_ADR (0x1 << 5)
-#define VCARD_LABEL (0x1 << 6) /* not supported */
-#define VCARD_TEL (0x1 << 7)
-#define VCARD_EMAIL (0x1 << 8)
-#define VCARD_MAILER (0x1 << 9) /* not supported */
-#define VCARD_TZ (0x1 << 10) /* not supported */
-#define VCARD_GEO (0x1 << 11) /* not supported */
-#define VCARD_TITLE (0x1 << 12)
-#define VCARD_ROLE (0x1 << 13)
-#define VCARD_LOGO (0x1 << 14) /* not supported */
-#define VCARD_AGENT (0x1 << 15) /* not supported */
-#define VCARD_ORG (0x1 << 16)
-#define VCARD_NOTE (0x1 << 17)
-#define VCARD_REV (0x1 << 18)
-#define VCARD_SOUND (0x1 << 19) /* not supported */
-#define VCARD_URL (0x1 << 20)
-#define VCARD_UID (0x1 << 21)
-#define VCARD_KEY (0x1 << 22) /* not supported */
-#define VCARD_NICKNAME (0x1 << 23)
-#define VCARD_CATEGORIES (0x1 << 24) /* not supported */
-#define VCARD_PROID (0x1 << 25) /* not supported */
-#define VCARD_CLASS (0x1 << 26) /* not supported */
-#define VCARD_SORT_STRING (0x1 << 27) /* not supported */
-#define VCARD_X_IRMC_CALL_DATETIME (0x1 << 28)
-
#define QP_ENC_LEN 3
#define LINEBREAK_LEN 75
static gint __bluetooth_pb_person_id_from_phonelog_id(gint phonelog_id);
-
+/* LCOV_EXCL_START */
static gchar *__bluetooth_pb_vcard_escape(const gchar *str)
{
FN_START;
FN_END;
return g_string_free(string, FALSE);
}
+/* LCOV_EXCL_STOP */
static gboolean __bluetooth_pb_vcard_qp_encode_check(const gchar *str)
{
return FALSE;
}
+/* LCOV_EXCL_START */
/* get string length, which convert to quoted-printable encoding */
static gint __bluetooth_pb_vcard_qp_encode_strlen(const gchar *str,
gint len)
FN_END;
return g_string_free(enc, FALSE);
}
+/* LCOV_EXCL_STOP */
static void __bluetooth_pb_vcard_append_param_v21(GString *string,
const gchar *param)
__bluetooth_pb_vcard_append_param_v21(property, param);
if (__bluetooth_pb_vcard_qp_encode_check(value)) {
+ /* LCOV_EXCL_START */
gchar *enc = NULL;
__bluetooth_pb_vcard_append_param_v21(property,
g_string_append(property, enc);
g_free(enc);
}
+ /* LCOV_EXCL_STOP */
} else {
g_string_append(property, ":");
if (value)
FN_END;
}
-
+/* LCOV_EXCL_START */
static void __bluetooth_pb_vcard_append_base64_encode_v21(GString *string,
const gchar *name,
const gchar *param,
g_free(fn);
}
+/* LCOV_EXCL_STOP */
+/* image util APIs will be deprecated in Tizen 5.0. So we should replace it to new API
+ https://developer.tizen.org/development/guides/native-application/media-and-camera/image-editing#decode
+ https://developer.tizen.org/development/guides/native-application/media-and-camera/image-editing#encode
+*/
+#if 0
static image_util_rotation_e __bt_pbap_get_rotation_info(const char *path)
{
FN_START;
int rotated_width, rotated_height;
unsigned char *img_rotate = 0;
img_rotate = g_malloc0(size_decode);
- image_util_rotate(img_rotate, &rotated_width, &rotated_height,
+ ret = image_util_rotate(img_rotate, &rotated_width, &rotated_height,
rotation, img_target, resized_width,
resized_height, colorspace);
+ if (ret != 0)
+ ERR("image_util_rotate failed");
resized_width = rotated_width;
resized_height = rotated_height;
g_free(img_target);
FN_END;
return false;
}
+#endif
+/* LCOV_EXCL_START */
static void __bluetooth_pb_vcard_append_photo_v21(GString *string,
contacts_record_h person)
{
FN_START;
gint status;
gchar *filename = NULL;
- int res = 0;
- bt_image_info_t img_info;
struct stat stat_info;
gchar *type = NULL;
gchar *param = NULL;
stat_info.st_size = 0;
- if (0 > stat(filename, &stat_info)) {
+ if (0 > stat(filename, &stat_info))
ERR("fstat failed, file does not exist %s", filename);
- }
if (PBAP_THUMB_FILE_SIZE > stat_info.st_size) {
DBG_SECURE("File size small, so use thubnail %s\n", filename);
DBG("Thumbnail path is = %s", dest_thumb_path);
}
DBG_SECURE("filename = %s Thumbnail path is = %s", filename, dest_thumb_path);
+
+/* image_util_foreach_supported_jpeg_colorspace API will be deprecated in Tizen 5.0. So we should replace it to new API
+ https://developer.tizen.org/development/guides/native-application/media-and-camera/image-editing#decode
+ https://developer.tizen.org/development/guides/native-application/media-and-camera/image-editing#encode
+*/
+#if 0
+ bt_image_info_t img_info;
+ int res = 0;
+
img_info.src = filename;
img_info.dest = dest_thumb_path;
img_info.ret = CONTACTS_ERROR_INTERNAL;
res = image_util_foreach_supported_jpeg_colorspace(
__bt_pbap_image_util_supported_jpeg_colorspace_cb, &img_info);
- if (res != IMAGE_UTIL_ERROR_NONE) {
+
+ if (res != IMAGE_UTIL_ERROR_NONE)
ERR("Image resizing is failed");
- }
+#endif
+
FN_END;
}
g_free(escaped);
FN_END;
}
+/* LCOV_EXCL_STOP */
static void __bluetooth_pb_vcard_append_v30(GString *string,
const gchar *name,
FN_END;
}
+/* LCOV_EXCL_START */
static void __bluetooth_pb_vcard_remove_v30(GString *string,
const gchar *property_name)
{
string = g_string_new(vcard);
- if ((filter & VCARD_PHOTO) == 0)
- __bluetooth_pb_vcard_remove_v30(string, "PHOTO");
-
if ((filter & VCARD_BDAY) == 0)
__bluetooth_pb_vcard_remove_v30(string, "BDAY");
if (f == 0)
f = ~f;
- DBG("filter[%x]\n", filter);
+ DBG("filter[%llu]\n", (unsigned long long int)filter);
str = g_string_new("BEGIN:VCARD\r\nVERSION:2.1\r\n");
FN_END;
return g_string_free(str, FALSE);
}
-
+/* LCOV_EXCL_STOP */
static gchar *__bluetooth_pb_vcard_real_contact_valist_v30(gint person_id,
gint phonelog_id,
if (status != CONTACTS_ERROR_NONE)
return NULL;
+ /* LCOV_EXCL_START */
status = contacts_vcard_make_from_person(person, &vcard);
if (status != CONTACTS_ERROR_NONE)
return NULL;
- status = contacts_record_destroy(person, TRUE);
-
- if (status != CONTACTS_ERROR_NONE)
- return NULL;
-
/* removing the END:VCARD\r\n" to append extra data */
str = g_string_new_len(vcard, (strlen(vcard)-11));
g_free(vcard);
g_free(number);
}
+ /* Remove Full contact image and add thumbnail image */
+ __bluetooth_pb_vcard_remove_v30(str, "PHOTO");
+ if (filter & VCARD_PHOTO)
+ __bluetooth_pb_vcard_append_photo_v21(str, person); /* Photo is same as vCard 2.1 */
+
+ /* Destroy contact record */
+ status = contacts_record_destroy(person, TRUE);
+ if (status != CONTACTS_ERROR_NONE)
+ ERR("Failed to destroy person");
+
g_string_append(str, "END:VCARD\r\n");
vcard = g_string_free(str, FALSE);
FN_END;
return vcard;
+ /* LCOV_EXCL_STOP */
}
__bluetooth_pb_vcard_append_qp_encode_v21(str, "TEL", "X-0", number);
g_free(number);
+ /* LCOV_EXCL_START */
if (((filter == 0) || (filter & VCARD_X_IRMC_CALL_DATETIME))
&& attr) {
gchar *datetime = NULL;
attr, datetime);
g_free(datetime);
}
+ /* LCOV_EXCL_STOP */
g_string_append(str, "END:VCARD\r\n");
return g_string_free(str, FALSE);
}
+/* LCOV_EXCL_START */
static gchar *__bluetooth_pb_vcard_real_call_v30(gint phonelog_id,
guint filter,
const gchar *attr)
FN_END;
return g_string_free(str, FALSE);
}
+/* LCOV_EXCL_STOP */
static gchar *__bluetooth_pb_vcard_real_call(gint phonelog_id,
guint filter,
return vcard;
}
+/* LCOV_EXCL_START */
static gchar **__bluetooth_pb_contact_add_field_str(contacts_record_h record,
int *field,
gint field_size)
if (status != CONTACTS_ERROR_NONE)
return NULL;
- strv = g_new0(char *, TEL_PARAM_LEN + 1);/* tel param max size is 13 */
-
- if (is_default) {
- strv[i] = g_strdup("PREF");
- i++;
- }
-
status = contacts_record_get_int(number,
_contacts_number.type,
(gint *)&type);
if (status != CONTACTS_ERROR_NONE)
return NULL;
+ strv = g_new0(char *, TEL_PARAM_LEN + 1);/* tel param max size is 13 */
+
+ if (is_default) {
+ strv[i] = g_strdup("PREF");
+ i++;
+ }
+
if (type & CONTACTS_NUMBER_TYPE_HOME) {
strv[i] = g_strdup("HOME");
i++;
FN_START;
contacts_record_h name = NULL;
- GString *str = g_string_new(NULL);
-
+ GString *str;
gint status;
gint i;
if (status != CONTACTS_ERROR_NONE)
return NULL;
+ str = g_string_new(NULL);
+
for (i = 0; i < name_size; i++) {
gchar *tmp = NULL;
gchar *escape = NULL;
FN_START;
contacts_record_h name = NULL;
- GString *str = g_string_new(NULL);
+ GString *str;
gint status;
if (phonetic_first == NULL)
return NULL;
+ str = g_string_new(NULL);
+
status = contacts_record_get_str_p(name, _contacts_name.phonetic_last, &phonetic_last);
if ((status == CONTACTS_ERROR_NONE) && (phonetic_last != NULL)) {
FN_END;
return str;
}
+/* LCOV_EXCL_STOP */
static gint __bluetooth_pb_person_id_from_phonelog_id(gint phonelog_id)
{
if (status != CONTACTS_ERROR_NONE)
return 0;
+ /* LCOV_EXCL_START */
status = contacts_record_get_int(phone_log,
_contacts_phone_log.person_id,
&person_id);
FN_END;
return person_id;
+ /* LCOV_EXCL_STOP */
}
int _bluetooth_get_contact_addressbook(gint person_id)
if (status != CONTACTS_ERROR_NONE)
return PBAP_ADDRESSBOOK_PHONE; /* Default*/
+ /* LCOV_EXCL_START */
status = contacts_record_get_int(person,
_contacts_person.display_contact_id,
&contact_id);
return PBAP_ADDRESSBOOK_PHONE;
return PBAP_ADDRESSBOOK_SIM;
+ /* LCOV_EXCL_STOP */
}
/* API for vcard */
gchar *_bluetooth_pb_vcard_contact(gint person_id,
DBG("person_id %d\n", person_id);
if (person_id) {
+ /* LCOV_EXCL_START */
if (filter == 0 || (filter & VCARD_X_IRMC_CALL_DATETIME)) {
gchar *datetime = NULL;
filter, format,
NULL);
}
+ /* LCOV_EXCL_STOP */
} else
str = __bluetooth_pb_vcard_real_call(phonelog_id, filter,
format, attr);
if (status != CONTACTS_ERROR_NONE)
return NULL;
+ /* LCOV_EXCL_START */
status = contacts_record_get_str(person,
_contacts_person.display_name,
&str);
FN_END;
return str;
+ /* LCOV_EXCL_STOP */
}
gchar *_bluetooth_pb_name_from_person_id(gint person_id)
if (status != CONTACTS_ERROR_NONE)
return NULL;
+ /* LCOV_EXCL_START */
status = contacts_record_get_int(person,
_contacts_person.display_contact_id,
&contact_id);
contacts_record_destroy(contact, TRUE);
contacts_record_destroy(person, TRUE);
+ /* LCOV_EXCL_STOP */
FN_END;
return str;
if (status != CONTACTS_ERROR_NONE)
return NULL;
-
+ /* LCOV_EXCL_START */
status = contacts_record_get_int(person,
_contacts_person.display_contact_id,
&contact_id);
contacts_record_destroy(contact, TRUE);
contacts_record_destroy(person, TRUE);
+ /* LCOV_EXCL_STOP */
FN_END;
return str;
if (status != CONTACTS_ERROR_NONE)
return NULL;
+ /* LCOV_EXCL_START */
status = contacts_record_get_str_p(phone_log,
_contacts_phone_log.address,
&tmp);
str = g_strdup(tmp);
contacts_record_destroy(phone_log, TRUE);
+ /* LCOV_EXCL_STOP */
FN_END;
return str;
name = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
if (name == NULL)
- name = g_strdup("My Name");
+ name = g_strdup("My Name"); /* LCOV_EXCL_LINE */
FN_END;
return name;