diff --git a/ContactsViewModel.cpp b/ContactsViewModel.cpp index 067f2954f4a52b61ea3c785d9bc3110557422bcd..7fab7433d3c7e24f97a613bcdbe53329e56ff50d 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 ab7e56d7d9f2e913a02f9a4180928e95916554c0..b8d720f5892a7fe44c594a89a9a3116c20693947 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 aa539a1cfc3fca3f420617ecf69465b550a5f3cc..65e0a68ebf1975c2c0e8e3618db665f5d66b6387 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 ce7289cdf003d4c373f75fdea1d586322876ed37..7a7a8284c687b75e45c73c78783846fc2ef40486 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 fe284c63d9226590c1bbd4eb736f70c149dffe76..fd8412529fa7699940bd338fa65ffbb0729cae05 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 d8991f15137795c4bc805c0c8f8b68bdb78af384..c3a39d339ec162fc33bc8e7fe2615782bcdf35c6 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 f6f5f54e151c99e8462db51d6675682eb467e5ba..90241d550d7708663298d9d38b126da76dbb70ff 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 d548f959d56bf488fe9690ac453930d7cf7cc07f..5a52bba0a9f6b9cbf4c2bf875cb99c73ed5fe57f 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