From c130e11a33e86ed4f13bd38e4d0e8873bc14bad5 Mon Sep 17 00:00:00 2001
From: Emmanuel Lepage Vallee <emmanuel.lepage@savoirfairelinux.com>
Date: Wed, 3 Jun 2015 16:40:52 -0400
Subject: [PATCH] call: Pre-format the URI for consistency

Refs #74054

Change-Id: I9789611b4e470a74c4bcf0ff6fae5adac0c49604
---
 src/call.cpp         | 40 ++++++++++++++++++++++++++++++++++------
 src/private/call_p.h |  1 +
 2 files changed, 35 insertions(+), 6 deletions(-)

diff --git a/src/call.cpp b/src/call.cpp
index e836ad38..cf28648e 100644
--- a/src/call.cpp
+++ b/src/call.cpp
@@ -366,7 +366,7 @@ Call::~Call()
 Call* CallPrivate::buildExistingCall(const QString& callId)
 {
    CallManagerInterface& callManager = DBus::CallManager::instance();
-   MapStringString       details     = callManager.getCallDetails(callId);
+   MapStringString       details     = getCallDetailsCommon(callId);
 
    //Too noisy
    //qDebug() << "Constructing existing call with details : " << details;
@@ -424,11 +424,41 @@ Call* CallPrivate::buildDialingCall(const QString & peerName, Account* account)
    return call;
 }
 
+MapStringString CallPrivate::getCallDetailsCommon(const QString& callId)
+{
+
+   CallManagerInterface& callManager = DBus::CallManager::instance();
+
+   MapStringString details = callManager.getCallDetails(callId);
+
+   const QString account = details[ CallPrivate::DetailsMapFields::ACCOUNT_ID ];
+
+   if (account.isEmpty())
+      return details;
+
+   Account* acc = AccountModel::instance()->getById(account.toLatin1());
+
+   //Only keep the useful part of the URI
+   if (acc && acc->protocol() == Account::Protocol::RING)
+      details[DetailsMapFields::PEER_NUMBER] = URI(details[DetailsMapFields::PEER_NUMBER]).format(
+         URI::Section::SCHEME    |
+         URI::Section::USER_INFO
+      );
+   else
+      details[DetailsMapFields::PEER_NUMBER] = URI(details[DetailsMapFields::PEER_NUMBER]).format(
+         URI::Section::SCHEME    |
+         URI::Section::USER_INFO |
+         URI::Section::HOSTNAME
+      );
+
+   return details;
+}
+
 ///Build a call from a dbus event
 Call* CallPrivate::buildIncomingCall(const QString& callId)
 {
    CallManagerInterface& callManager = DBus::CallManager::instance();
-   MapStringString details = callManager.getCallDetails(callId);
+   MapStringString details = getCallDetailsCommon(callId);
 
    const QString from          = details[ CallPrivate::DetailsMapFields::PEER_NUMBER ];
    const QString account       = details[ CallPrivate::DetailsMapFields::ACCOUNT_ID  ];
@@ -460,8 +490,7 @@ Call* CallPrivate::buildIncomingCall(const QString& callId)
 ///Build a ringing call (from dbus)
 Call* CallPrivate::buildRingingCall(const QString & callId)
 {
-   CallManagerInterface& callManager = DBus::CallManager::instance();
-   MapStringString details = callManager.getCallDetails(callId);
+   MapStringString details = getCallDetailsCommon(callId);
 
    const QString from          = details[ CallPrivate::DetailsMapFields::PEER_NUMBER ];
    const QString account       = details[ CallPrivate::DetailsMapFields::ACCOUNT_ID  ];
@@ -1169,8 +1198,7 @@ Call::State CallPrivate::stateChanged(const QString& newStateName)
          return m_CurrentState;
       }
 
-      CallManagerInterface & callManager = DBus::CallManager::instance();
-      MapStringString details = callManager.getCallDetails(m_DringId);
+      MapStringString details = getCallDetailsCommon(m_DringId);
       if (details[CallPrivate::DetailsMapFields::PEER_NAME] != m_PeerName)
          m_PeerName = details[CallPrivate::DetailsMapFields::PEER_NAME];
 
diff --git a/src/private/call_p.h b/src/private/call_p.h
index 19d5b732..13c13d93 100644
--- a/src/private/call_p.h
+++ b/src/private/call_p.h
@@ -241,6 +241,7 @@ public:
    void registerRenderer(Video::Renderer* renderer);
    void removeRenderer(Video::Renderer* renderer);
    void setRecordingPath(const QString& path);
+   static MapStringString getCallDetailsCommon(const QString& callId);
    template<typename T>
    T* mediaFactory(Media::Media::Direction dir);
 
-- 
GitLab