diff --git a/src/contactmodel.cpp b/src/contactmodel.cpp index f7db96457f304383b8d006ceefd553ad79dc0137..9ab019b9a6c19e4b123d3d50b0c753a9f75b16b6 100644 --- a/src/contactmodel.cpp +++ b/src/contactmodel.cpp @@ -85,8 +85,8 @@ public: /** * Helpers for searchContact. Search for a given RING or SIP contact. */ - void searchRingContact(const std::string& query); - void searchSipContact(const std::string& query); + void searchRingContact(const URI& query); + void searchSipContact(const URI& query); /** * Update temporary item to display a given message about a given uri. */ @@ -339,8 +339,6 @@ ContactModel::searchContact(const std::string& query) auto uri = URI(QString(query.c_str())); - std::string uriID = uri.format(URI::Section::USER_INFO | URI::Section::HOSTNAME | URI::Section::PORT).toStdString(); - auto uriScheme = uri.schemeType(); if (uri.schemeType() == URI::SchemeType::NONE) { // uri has no scheme, default to current account scheme @@ -352,9 +350,9 @@ ContactModel::searchContact(const std::string& query) } if (uriScheme == URI::SchemeType::SIP && owner.profileInfo.type == profile::Type::SIP) { - pimpl_->searchSipContact(uriID); + pimpl_->searchSipContact(uri); } else if (uriScheme == URI::SchemeType::RING && owner.profileInfo.type == profile::Type::RING) { - pimpl_->searchRingContact(uriID); + pimpl_->searchRingContact(uri); } else { pimpl_->updateTemporaryMessage(tr("Bad URI scheme").toStdString(), uri.full().toStdString()); } @@ -371,38 +369,48 @@ ContactModelPimpl::updateTemporaryMessage(const std::string& mes, const std::str } void -ContactModelPimpl::searchRingContact(const std::string& query) +ContactModelPimpl::searchRingContact(const URI& query) { - if (query.empty()) { + if (query.isEmpty()) { return; } - updateTemporaryMessage(tr("Searching…").toStdString(), query); + std::string uriID = query.format(URI::Section::USER_INFO | URI::Section::HOSTNAME | URI::Section::PORT).toStdString(); + if (query.protocolHint() == URI::ProtocolHint::RING) { + // no lookup, this is a ring infoHash + auto& temporaryContact = contacts[""]; + temporaryContact.profileInfo.uri = uriID; + temporaryContact.profileInfo.alias = uriID; + temporaryContact.profileInfo.type = profile::Type::TEMPORARY; + } else { + updateTemporaryMessage(tr("Searching…").toStdString(), uriID); - // Default searching - if (auto* account = AccountModel::instance().getById(linked.owner.id.c_str())) { - account->lookupName(QString(query.c_str())); + // Default searching + if (auto* account = AccountModel::instance().getById(linked.owner.id.c_str())) { + account->lookupName(QString(uriID.c_str())); + } } } void -ContactModelPimpl::searchSipContact(const std::string& query) +ContactModelPimpl::searchSipContact(const URI& query) { - if (query.empty()) { + if (query.isEmpty()) { return; } + std::string uriID = query.format(URI::Section::USER_INFO | URI::Section::HOSTNAME | URI::Section::PORT).toStdString(); auto& temporaryContact = contacts[""]; { std::lock_guard<std::mutex> lk(contactsMtx_); - if (contacts.find(query) == contacts.end()) { - temporaryContact.profileInfo.uri = query; - temporaryContact.profileInfo.alias = query; + if (contacts.find(uriID) == contacts.end()) { + temporaryContact.profileInfo.uri = uriID; + temporaryContact.profileInfo.alias = uriID; temporaryContact.profileInfo.type = profile::Type::TEMPORARY; } } - emit linked.modelUpdated(query); + emit linked.modelUpdated(uriID); } uint64_t