diff --git a/src/numbercompletionmodel.cpp b/src/numbercompletionmodel.cpp index e94730fd49b5d1f71ca59ef261385d195ac011a1..3b1704049f7afc83af02809e5443c75567757739 100644 --- a/src/numbercompletionmodel.cpp +++ b/src/numbercompletionmodel.cpp @@ -68,12 +68,13 @@ public: //Attributes QMultiMap<int,ContactMethod*> m_hNumbers ; - QString m_Prefix ; + URI m_Prefix ; Call* m_pCall ; bool m_Enabled ; bool m_UseUnregisteredAccount; QHash<Account*,TemporaryContactMethod*> m_hSipIaxTemporaryNumbers; + QHash<Account*,TemporaryContactMethod*> m_hRingTemporaryNumbers; public Q_SLOTS: void setPrefix(const QString& str); @@ -87,7 +88,7 @@ private: NumberCompletionModelPrivate::NumberCompletionModelPrivate(NumberCompletionModel* parent) : QObject(parent), q_ptr(parent), -m_pCall(nullptr),m_Enabled(false),m_UseUnregisteredAccount(true) +m_pCall(nullptr),m_Enabled(false),m_UseUnregisteredAccount(true), m_Prefix(QString()) { //Create the temporary number list bool hasNonIp2Ip = false; @@ -127,6 +128,14 @@ NumberCompletionModel::~NumberCompletionModel() delete cm; } + l = d_ptr->m_hRingTemporaryNumbers.values(); + d_ptr->m_hRingTemporaryNumbers.clear(); + + while(l.size()) { + TemporaryContactMethod* cm = l.takeAt(0); + delete cm; + } + delete d_ptr; } @@ -287,7 +296,13 @@ void NumberCompletionModelPrivate::setPrefix(const QString& str) } for(TemporaryContactMethod* cm : m_hSipIaxTemporaryNumbers) { - cm->setUri(str); + cm->setUri(m_Prefix); + } + + if (m_Prefix.protocolHint() == URI::ProtocolHint::RING) { + for(TemporaryContactMethod* cm : m_hRingTemporaryNumbers) { + cm->setUri(m_Prefix); + } } } @@ -329,6 +344,17 @@ void NumberCompletionModelPrivate::updateModel() } } + if (m_Prefix.protocolHint() == URI::ProtocolHint::RING) { + for (TemporaryContactMethod* cm : m_hRingTemporaryNumbers) { + const int weight = getWeight(cm->account()); + if (weight) { + q_ptr->beginInsertRows(QModelIndex(), m_hNumbers.size(), m_hNumbers.size()); + m_hNumbers.insert(weight,cm); + q_ptr->endInsertRows(); + } + } + } + for (ContactMethod* n : numbers) { if (m_UseUnregisteredAccount || ((n->account() && n->account()->registrationState() == Account::RegistrationState::READY) || !n->account())) { @@ -482,7 +508,12 @@ bool NumberCompletionModelPrivate::accountAdded(Account* a) m_hSipIaxTemporaryNumbers[a] = cm; } break; - case Account::Protocol::RING: + case Account::Protocol::RING: { + TemporaryContactMethod* cm = new TemporaryContactMethod(); + cm->setAccount(a); + m_hRingTemporaryNumbers[a] = cm; + } + break; case Account::Protocol::COUNT__: break; } @@ -494,7 +525,11 @@ void NumberCompletionModelPrivate::accountRemoved(Account* a) { TemporaryContactMethod* cm = m_hSipIaxTemporaryNumbers[a]; + if (!cm) + cm = m_hRingTemporaryNumbers[a]; + m_hSipIaxTemporaryNumbers[a] = nullptr; + m_hRingTemporaryNumbers [a] = nullptr; setPrefix(q_ptr->prefix());