From 8f805cd542b8165cb921e9ae8d2b9192ab60f444 Mon Sep 17 00:00:00 2001
From: Nicolas Jager <nicolas.jager@savoirfairelinux.com>
Date: Wed, 5 Oct 2016 11:54:40 -0400
Subject: [PATCH] message text : screen messages sent during a call

Change-Id: Ifb7d8ed39d4cd6359ead1e5ff365fd700e604527
Tuleap: #1209
---
 ContactsViewModel.cpp    | 25 +++++++++++++++++++++++++
 ContactsViewModel.h      |  1 +
 MessageTextPage.xaml.cpp |  8 ++++++++
 MessageTextPage.xaml.h   |  1 +
 RingD.cpp                |  4 +---
 RingD.h                  |  2 ++
 VideoPage.xaml.cpp       | 11 +++++++----
 VideoPage.xaml.h         |  1 +
 8 files changed, 46 insertions(+), 7 deletions(-)

diff --git a/ContactsViewModel.cpp b/ContactsViewModel.cpp
index 067f295..7fab743 100644
--- a/ContactsViewModel.cpp
+++ b/ContactsViewModel.cpp
@@ -66,6 +66,7 @@ ContactsViewModel::ContactsViewModel()
             saveContactsToFile();
         }
     });
+    RingD::instance->incomingMessage += ref new RingClientUWP::IncomingMessage(this, &RingClientUWP::ViewModel::ContactsViewModel::OnincomingMessage);
 }
 
 Contact^ // refacto : remove "byName"
@@ -167,3 +168,27 @@ ContactsViewModel::Destringify(String^ data)
         }
     }
 }
+
+
+void RingClientUWP::ViewModel::ContactsViewModel::OnincomingMessage(Platform::String ^callId, Platform::String ^from, Platform::String ^payload)
+{
+    auto contact = findContactByName(from);
+
+    /* the contact HAS TO BE already registered */
+    if (contact) {
+        auto item = SmartPanelItemsViewModel::instance->_selectedItem;
+
+        contact->_conversation->addMessage(""/* date not yet used*/, MSG_FROM_CONTACT, payload);
+
+        /* save contacts conversation to disk */
+        contact->saveConversationToFile();
+
+        auto selectedContact = (item) ? item->_contact : nullptr;
+
+        if (contact->ringID_ == from && contact != selectedContact) {
+            contact->_unreadMessages++;
+            /* saveContactsToFile used to save the notification */
+            saveContactsToFile();
+        }
+    }
+}
diff --git a/ContactsViewModel.h b/ContactsViewModel.h
index ab7e56d..b8d720f 100644
--- a/ContactsViewModel.h
+++ b/ContactsViewModel.h
@@ -68,6 +68,7 @@ private:
     Contact^ currentItem_;
     Contact^ oldItem_;
 
+    void OnincomingMessage(Platform::String ^callId, Platform::String ^from, Platform::String ^payload);
 };
 }
 }
diff --git a/MessageTextPage.xaml.cpp b/MessageTextPage.xaml.cpp
index aa539a1..65e0a68 100644
--- a/MessageTextPage.xaml.cpp
+++ b/MessageTextPage.xaml.cpp
@@ -49,6 +49,8 @@ MessageTextPage::MessageTextPage()
     String^ fromRingId, String^ payload) {
         scrollDown();
     });
+    RingD::instance->incomingMessage += ref new RingClientUWP::IncomingMessage(this, &RingClientUWP::Views::MessageTextPage::OnincomingMessage);
+
 }
 
 void
@@ -135,3 +137,9 @@ Object ^ RingClientUWP::Views::BubbleHorizontalAlignement::ConvertBack(Object ^
 
 RingClientUWP::Views::BubbleHorizontalAlignement::BubbleHorizontalAlignement()
 {}
+
+
+void RingClientUWP::Views::MessageTextPage::OnincomingMessage(Platform::String ^callId, Platform::String ^from, Platform::String ^payload)
+{
+    scrollDown();
+}
diff --git a/MessageTextPage.xaml.h b/MessageTextPage.xaml.h
index ce7289c..7a7a828 100644
--- a/MessageTextPage.xaml.h
+++ b/MessageTextPage.xaml.h
@@ -49,6 +49,7 @@ private:
     void _sendBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void _messageTextBox__KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e);
     void sendMessage();
+    void OnincomingMessage(Platform::String ^callId, Platform::String ^from, Platform::String ^payload);
 };
 }
 }
diff --git a/RingD.cpp b/RingD.cpp
index fe284c6..fd84125 100644
--- a/RingD.cpp
+++ b/RingD.cpp
@@ -235,7 +235,6 @@ RingClientUWP::RingD::startDaemon()
                     auto contact = ContactsViewModel::instance->findContactByName(from2);
                     auto item = SmartPanelItemsViewModel::instance->findItem(contact);
                     item->_callId = callId2;
-
                 }));
             }),
             DRing::exportable_callback<DRing::CallSignal::StateChange>([this](
@@ -315,8 +314,7 @@ RingClientUWP::RingD::startDaemon()
                     CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(
                         CoreDispatcherPriority::High, ref new DispatchedHandler([=]()
                     {
-                        // DOIT ETRE DIFFEREND.... NE PAS UTILISE accoutId2
-                        //incomingAccountMessage(accountId2, from2, payload);
+                        incomingMessage(callId2, from2, payload);
                         MSG_("message recu :" + i.second);
                     }));
                 }
diff --git a/RingD.h b/RingD.h
index d8991f1..c3a39d3 100644
--- a/RingD.h
+++ b/RingD.h
@@ -31,6 +31,7 @@ delegate void IncomingCall(String^ accountId, String^ callId, String^ from);
 delegate void StateChange(String^ callId, CallStatus state, int code);
 delegate void IncomingAccountMessage(String^ accountId, String^ from, String^ payload);
 delegate void CallPlaced(String^ callId);
+delegate void IncomingMessage(String^ callId, String^ from, String^ payload);
 
 
 public ref class RingD sealed
@@ -95,6 +96,7 @@ internal:
     event IncomingCall^ incomingCall;
     event StateChange^ stateChange;
     event IncomingAccountMessage^ incomingAccountMessage;
+    event IncomingMessage^ incomingMessage;
     event CallPlaced^ callPlaced;
 
 private:
diff --git a/VideoPage.xaml.cpp b/VideoPage.xaml.cpp
index f6f5f54..90241d5 100644
--- a/VideoPage.xaml.cpp
+++ b/VideoPage.xaml.cpp
@@ -125,10 +125,7 @@ VideoPage::VideoPage()
         }
     });
 
-    RingD::instance->incomingAccountMessage += ref new IncomingAccountMessage([&](String^ accountId,
-    String^ from, String^ payload) {
-        scrollDown();
-    });
+    RingD::instance->incomingMessage += ref new RingClientUWP::IncomingMessage(this, &RingClientUWP::Views::VideoPage::OnincomingMessage);
 }
 
 void
@@ -333,3 +330,9 @@ VideoPage::WriteFrameAsSoftwareBitmapAsync(String^ id, uint8_t* buf, int width,
         }
     });
 }
+
+
+void RingClientUWP::Views::VideoPage::OnincomingMessage(Platform::String ^callId, Platform::String ^from, Platform::String ^payload)
+{
+    scrollDown();
+}
diff --git a/VideoPage.xaml.h b/VideoPage.xaml.h
index d548f95..5a52bba 100644
--- a/VideoPage.xaml.h
+++ b/VideoPage.xaml.h
@@ -115,6 +115,7 @@ private:
     void _videoControl__PointerMoved(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
     void btnAny_entered(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
     void btnAny_exited(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
+    void OnincomingMessage(Platform::String ^callId, Platform::String ^from, Platform::String ^payload);
 };
 }
 }
\ No newline at end of file
-- 
GitLab