Commit e88d1d09 authored by Ronan Abhamon's avatar Ronan Abhamon

fix(src/components/contact/VcardModel): interpret sip address on add/remove

parent 853f9fa8
...@@ -52,17 +52,14 @@ inline shared_ptr<T> findBelCardValue (const list<shared_ptr<T> > &list, const Q ...@@ -52,17 +52,14 @@ inline shared_ptr<T> findBelCardValue (const list<shared_ptr<T> > &list, const Q
} }
); );
if (it != list.cend()) return it != list.cend() ? *it : nullptr;
return *it;
return nullptr;
} }
inline bool isLinphoneDesktopPhoto (const shared_ptr<belcard::BelCardPhoto> &photo) { inline bool isLinphoneDesktopPhoto (const shared_ptr<belcard::BelCardPhoto> &photo) {
return !photo->getValue().compare(0, sizeof(VCARD_SCHEME) - 1, VCARD_SCHEME); return !photo->getValue().compare(0, sizeof(VCARD_SCHEME) - 1, VCARD_SCHEME);
} }
inline shared_ptr<belcard::BelCardPhoto> findBelcardPhoto (const shared_ptr<belcard::BelCard> &belcard) { static shared_ptr<belcard::BelCardPhoto> findBelcardPhoto (const shared_ptr<belcard::BelCard> &belcard) {
const list<shared_ptr<belcard::BelCardPhoto> > &photos = belcard->getPhotos(); const list<shared_ptr<belcard::BelCardPhoto> > &photos = belcard->getPhotos();
auto it = find_if(photos.cbegin(), photos.cend(), isLinphoneDesktopPhoto); auto it = find_if(photos.cbegin(), photos.cend(), isLinphoneDesktopPhoto);
if (it != photos.cend()) if (it != photos.cend())
...@@ -71,7 +68,7 @@ inline shared_ptr<belcard::BelCardPhoto> findBelcardPhoto (const shared_ptr<belc ...@@ -71,7 +68,7 @@ inline shared_ptr<belcard::BelCardPhoto> findBelcardPhoto (const shared_ptr<belc
return nullptr; return nullptr;
} }
inline void removeBelcardPhoto (const shared_ptr<belcard::BelCard> &belcard, bool cleanPathsOnly = false) { static void removeBelcardPhoto (const shared_ptr<belcard::BelCard> &belcard, bool cleanPathsOnly = false) {
list<shared_ptr<belcard::BelCardPhoto> > photos; list<shared_ptr<belcard::BelCardPhoto> > photos;
for (const auto photo : belcard->getPhotos()) { for (const auto photo : belcard->getPhotos()) {
if (isLinphoneDesktopPhoto(photo)) if (isLinphoneDesktopPhoto(photo))
...@@ -96,6 +93,21 @@ inline void removeBelcardPhoto (const shared_ptr<belcard::BelCard> &belcard, boo ...@@ -96,6 +93,21 @@ inline void removeBelcardPhoto (const shared_ptr<belcard::BelCard> &belcard, boo
} }
} }
static string interpretSipAddress (const QString &sipAddress) {
string out;
shared_ptr<linphone::Address> linphoneAddress = CoreManager::getInstance()->getCore()->interpretUrl(
::Utils::qStringToLinphoneString(sipAddress)
);
if (!linphoneAddress) {
qWarning() << QStringLiteral("Unable to interpret invalid sip address: `%1`.").arg(sipAddress);
return out;
}
return linphoneAddress->asStringUriOnly();
}
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
VcardModel::VcardModel (shared_ptr<linphone::Vcard> vcard, bool isReadOnly) { VcardModel::VcardModel (shared_ptr<linphone::Vcard> vcard, bool isReadOnly) {
...@@ -277,20 +289,14 @@ QVariantList VcardModel::getSipAddresses () const { ...@@ -277,20 +289,14 @@ QVariantList VcardModel::getSipAddresses () const {
bool VcardModel::addSipAddress (const QString &sipAddress) { bool VcardModel::addSipAddress (const QString &sipAddress) {
CHECK_VCARD_IS_WRITABLE(this); CHECK_VCARD_IS_WRITABLE(this);
// Check sip address format. string interpretedSipAddress = interpretSipAddress(sipAddress);
shared_ptr<linphone::Address> linphoneAddress = CoreManager::getInstance()->getCore()->interpretUrl( if (interpretedSipAddress.empty())
::Utils::qStringToLinphoneString(sipAddress)
);
if (!linphoneAddress) {
qWarning() << QStringLiteral("Unable to add invalid sip address on vcard: `%1`.").arg(sipAddress);
return false; return false;
}
// Add sip address in belcard. // Add sip address in belcard.
shared_ptr<belcard::BelCard> belcard = mVcard->getVcard(); shared_ptr<belcard::BelCard> belcard = mVcard->getVcard();
shared_ptr<belcard::BelCardImpp> value = belcard::BelCardGeneric::create<belcard::BelCardImpp>(); shared_ptr<belcard::BelCardImpp> value = belcard::BelCardGeneric::create<belcard::BelCardImpp>();
value->setValue(linphoneAddress->asStringUriOnly()); value->setValue(interpretedSipAddress);
if (!belcard->addImpp(value)) { if (!belcard->addImpp(value)) {
qWarning() << QStringLiteral("Unable to add sip address on vcard: `%1`.").arg(sipAddress); qWarning() << QStringLiteral("Unable to add sip address on vcard: `%1`.").arg(sipAddress);
...@@ -308,7 +314,9 @@ void VcardModel::removeSipAddress (const QString &sipAddress) { ...@@ -308,7 +314,9 @@ void VcardModel::removeSipAddress (const QString &sipAddress) {
shared_ptr<belcard::BelCard> belcard = mVcard->getVcard(); shared_ptr<belcard::BelCard> belcard = mVcard->getVcard();
list<shared_ptr<belcard::BelCardImpp> > addresses = belcard->getImpp(); list<shared_ptr<belcard::BelCardImpp> > addresses = belcard->getImpp();
shared_ptr<belcard::BelCardImpp> value = findBelCardValue(addresses, sipAddress); shared_ptr<belcard::BelCardImpp> value = findBelCardValue(
addresses, ::Utils::linphoneStringToQString(interpretSipAddress(sipAddress))
);
if (!value) { if (!value) {
qWarning() << QStringLiteral("Unable to remove sip address on vcard: `%1`.").arg(sipAddress); qWarning() << QStringLiteral("Unable to remove sip address on vcard: `%1`.").arg(sipAddress);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment