From 442cd8b9db8dc29aab1c5e9952bab389dd8d478c Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 21 Jul 2016 16:24:23 +0200 Subject: [PATCH] Added getter/setter for familly/given names in vCards --- coreapi/linphonecore_jni.cc | 50 +++++++++++++++++++ coreapi/vcard.cc | 48 ++++++++++++++++-- coreapi/vcard.h | 28 +++++++++++ coreapi/vcard_stubs.c | 16 ++++++ .../org/linphone/core/LinphoneFriend.java | 22 +++++++- .../org/linphone/core/LinphoneFriendImpl.java | 22 ++++++++ 6 files changed, 182 insertions(+), 4 deletions(-) diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index 7566b2cb5..9392eb9aa 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -3484,6 +3484,32 @@ extern "C" void Java_org_linphone_core_LinphoneFriendImpl_setName(JNIEnv* env ReleaseStringUTFChars(env, jname, name); } +extern "C" void Java_org_linphone_core_LinphoneFriendImpl_setFamillyName(JNIEnv* env + ,jobject thiz + ,jlong ptr + ,jstring jname) { + LinphoneFriend *lf = (LinphoneFriend*)ptr; + LinphoneVcard *lvc = linphone_friend_get_vcard(lf); + if (lvc) { + const char* name = GetStringUTFChars(env, jname); + linphone_vcard_set_familly_name(lvc, name); + ReleaseStringUTFChars(env, jname, name); + } +} + +extern "C" void Java_org_linphone_core_LinphoneFriendImpl_setGivenName(JNIEnv* env + ,jobject thiz + ,jlong ptr + ,jstring jname) { + LinphoneFriend *lf = (LinphoneFriend*)ptr; + LinphoneVcard *lvc = linphone_friend_get_vcard(lf); + if (lvc) { + const char* name = GetStringUTFChars(env, jname); + linphone_vcard_set_given_name(lvc, name); + ReleaseStringUTFChars(env, jname, name); + } +} + extern "C" void Java_org_linphone_core_LinphoneFriendListImpl_setRLSUri(JNIEnv* env ,jobject thiz ,jlong ptr @@ -3634,6 +3660,30 @@ extern "C" jstring Java_org_linphone_core_LinphoneFriendImpl_getName(JNIEnv* en return name ? env->NewStringUTF(name) : NULL; } +extern "C" jstring Java_org_linphone_core_LinphoneFriendImpl_getFamillyName(JNIEnv* env + ,jobject thiz + ,jlong ptr) { + LinphoneFriend *lf = (LinphoneFriend*)ptr; + LinphoneVcard *lvc = linphone_friend_get_vcard(lf); + if (lvc) { + const char *name = linphone_vcard_get_familly_name(lvc); + return name ? env->NewStringUTF(name) : NULL; + } + return NULL; +} + +extern "C" jstring Java_org_linphone_core_LinphoneFriendImpl_getGivenName(JNIEnv* env + ,jobject thiz + ,jlong ptr) { + LinphoneFriend *lf = (LinphoneFriend*)ptr; + LinphoneVcard *lvc = linphone_friend_get_vcard(lf); + if (lvc) { + const char *name = linphone_vcard_get_given_name(lvc); + return name ? env->NewStringUTF(name) : NULL; + } + return NULL; +} + extern "C" jstring Java_org_linphone_core_LinphoneFriendImpl_getOrganization(JNIEnv* env, jobject thiz, jlong ptr) { diff --git a/coreapi/vcard.cc b/coreapi/vcard.cc index f944ad07c..52bb7ba9c 100644 --- a/coreapi/vcard.cc +++ b/coreapi/vcard.cc @@ -143,9 +143,13 @@ const char * linphone_vcard_as_vcard4_string(LinphoneVcard *vCard) { void linphone_vcard_set_full_name(LinphoneVcard *vCard, const char *name) { if (!vCard || !name) return; - shared_ptr fn = belcard::BelCardGeneric::create(); - fn->setValue(name); - vCard->belCard->setFullName(fn); + if (vCard->belCard->getFullName()) { + vCard->belCard->getFullName()->setValue(name); + } else { + shared_ptr fn = belcard::BelCardGeneric::create(); + fn->setValue(name); + vCard->belCard->setFullName(fn); + } } const char* linphone_vcard_get_full_name(const LinphoneVcard *vCard) { @@ -155,6 +159,44 @@ const char* linphone_vcard_get_full_name(const LinphoneVcard *vCard) { return result; } +void linphone_vcard_set_familly_name(LinphoneVcard *vCard, const char *name) { + if (!vCard || !name) return; + + if (vCard->belCard->getName()) { + vCard->belCard->getName()->setFamilyName(name); + } else { + shared_ptr n = belcard::BelCardGeneric::create(); + n->setFamilyName(name); + vCard->belCard->setName(n); + } +} + +const char* linphone_vcard_get_familly_name(const LinphoneVcard *vCard) { + if (!vCard) return NULL; + + const char *result = vCard->belCard->getName() ? vCard->belCard->getName()->getFamilyName().c_str() : NULL; + return result; +} + +void linphone_vcard_set_given_name(LinphoneVcard *vCard, const char *name) { + if (!vCard || !name) return; + + if (vCard->belCard->getName()) { + vCard->belCard->getName()->setGivenName(name); + } else { + shared_ptr n = belcard::BelCardGeneric::create(); + n->setGivenName(name); + vCard->belCard->setName(n); + } +} + +const char* linphone_vcard_get_given_name(const LinphoneVcard *vCard) { + if (!vCard) return NULL; + + const char *result = vCard->belCard->getName() ? vCard->belCard->getName()->getGivenName().c_str() : NULL; + return result; +} + void linphone_vcard_add_sip_address(LinphoneVcard *vCard, const char *sip_address) { if (!vCard || !sip_address) return; diff --git a/coreapi/vcard.h b/coreapi/vcard.h index 550fa8d81..3bf9509b4 100644 --- a/coreapi/vcard.h +++ b/coreapi/vcard.h @@ -129,6 +129,34 @@ LINPHONE_PUBLIC void linphone_vcard_set_full_name(LinphoneVcard *vCard, const ch */ LINPHONE_PUBLIC const char* linphone_vcard_get_full_name(const LinphoneVcard *vCard); +/** + * Sets the familly name in the N attribute of the vCard. + * @param[in] vCard the LinphoneVcard + * @param[in] name the familly name to set for the vCard + */ +LINPHONE_PUBLIC void linphone_vcard_set_familly_name(LinphoneVcard *vCard, const char *name); + +/** + * Returns the familly name in the N attribute of the vCard, or NULL if it isn't set yet. + * @param[in] vCard the LinphoneVcard + * @return the familly name of the vCard, or NULL + */ +LINPHONE_PUBLIC const char* linphone_vcard_get_familly_name(const LinphoneVcard *vCard); + +/** + * Sets the given name in the N attribute of the vCard. + * @param[in] vCard the LinphoneVcard + * @param[in] name the given name to set for the vCard + */ +LINPHONE_PUBLIC void linphone_vcard_set_given_name(LinphoneVcard *vCard, const char *name); + +/** + * Returns the given name in the N attribute of the vCard, or NULL if it isn't set yet. + * @param[in] vCard the LinphoneVcard + * @return the given name of the vCard, or NULL + */ +LINPHONE_PUBLIC const char* linphone_vcard_get_given_name(const LinphoneVcard *vCard); + /** * Adds a SIP address in the vCard, using the IMPP property * @param[in] vCard the LinphoneVcard diff --git a/coreapi/vcard_stubs.c b/coreapi/vcard_stubs.c index 99afe1d7d..b0848ac2c 100644 --- a/coreapi/vcard_stubs.c +++ b/coreapi/vcard_stubs.c @@ -79,6 +79,22 @@ const char* linphone_vcard_get_full_name(const LinphoneVcard *vCard) { return NULL; } +void linphone_vcard_set_familly_name(LinphoneVcard *vCard, const char *name) { + +} + +const char* linphone_vcard_get_familly_name(const LinphoneVcard *vCard) { + return NULL; +} + +void linphone_vcard_set_given_name(LinphoneVcard *vCard, const char *name) { + +} + +const char* linphone_vcard_get_given_name(const LinphoneVcard *vCard) { + return NULL; +} + void linphone_vcard_add_sip_address(LinphoneVcard *vCard, const char *sip_address) { } diff --git a/java/common/org/linphone/core/LinphoneFriend.java b/java/common/org/linphone/core/LinphoneFriend.java index d210833eb..8cd90473d 100644 --- a/java/common/org/linphone/core/LinphoneFriend.java +++ b/java/common/org/linphone/core/LinphoneFriend.java @@ -162,10 +162,30 @@ public interface LinphoneFriend { */ void setName(String name); /** - * get name of this friend + * get a name of this friend * @return */ String getName(); + /** + * Set a familly name for this friend + * @param name + */ + void setFamillyName(String name); + /** + * get a familly name of this friend + * @return + */ + String getFamillyName(); + /** + * Set a given name for this friend + * @param name + */ + void setGivenName(String name); + /** + * get a given name of this friend + * @return + */ + String getGivenName(); /** * Set an organization for this friend * @param organization diff --git a/java/impl/org/linphone/core/LinphoneFriendImpl.java b/java/impl/org/linphone/core/LinphoneFriendImpl.java index a50288240..068e8c0bb 100644 --- a/java/impl/org/linphone/core/LinphoneFriendImpl.java +++ b/java/impl/org/linphone/core/LinphoneFriendImpl.java @@ -142,6 +142,28 @@ class LinphoneFriendImpl implements LinphoneFriend, Serializable { return getName(nativePtr); } + private native void setFamillyName(long nativePtr, String name); + @Override + public void setFamillyName(String name) { + setFamillyName(nativePtr, name); + } + + private native String getFamillyName(long nativePtr); + public String getFamillyName() { + return getFamillyName(nativePtr); + } + + private native void setGivenName(long nativePtr, String name); + @Override + public void setGivenName(String name) { + setGivenName(nativePtr, name); + } + + private native String getGivenName(long nativePtr); + public String getGivenName() { + return getGivenName(nativePtr); + } + private native void setOrganization(long nativePtr, String organization); @Override public void setOrganization(String organization) {