From f7a54fae1cb93dba1a1bc1bcadbe11251123e46f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Tue, 11 Dec 2018 09:58:30 -0500 Subject: [PATCH] contactmodel: get presence on startup Change-Id: I80b63f9ba0fb67e2fc0a4c6c42ec26b9250f3cd5 Reviewed-by: Kateryna Kostiuk<kateryna.kostiuk@savoirfairelinux.com> --- src/contactmodel.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/contactmodel.cpp b/src/contactmodel.cpp index 92eade8d..188fad50 100644 --- a/src/contactmodel.cpp +++ b/src/contactmodel.cpp @@ -46,6 +46,7 @@ // Dbus #include "dbus/configurationmanager.h" +#include "dbus/presencemanager.h" namespace lrc { @@ -507,6 +508,7 @@ ContactModelPimpl::fillsWithSIPContacts() bool ContactModelPimpl::fillsWithRINGContacts() { + // Add contacts from daemon const VectorMapStringString& contacts_vector = ConfigurationManager::instance().getContacts(linked.owner.id.c_str()); for (auto contact_info : contacts_vector) { @@ -548,6 +550,29 @@ ContactModelPimpl::fillsWithRINGContacts() { profile::to_string(profile::Type::RING), alias.toStdString(), photo.toStdString()); } + // Update presence + // TODO fix this map. This is dumb for now. The map contains values as keys, and empty values. + const VectorMapStringString& subscriptions {PresenceManager::instance().getSubscriptions(linked.owner.id.c_str())}; + for (const auto& subscription : subscriptions) { + auto first = true; + std::string uri = ""; + for (const auto& key : subscription) { + if (first) { + first = false; + uri = key.toStdString(); + } else { + { + std::lock_guard<std::mutex> lk(contactsMtx_); + auto it = contacts.find(uri); + if (it != contacts.end()) { + it->second.isPresent = key == "Online"; + linked.modelUpdated(uri, false); + } + } + break; + } + } + } return true; } -- GitLab