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