fix : disallow multiple contacts with same ring id

Change-Id: I9d38babdef507d4e4619ab007442e1517d3711d1
Tuleap: #790
diff --git a/MainPage.xaml.cpp b/MainPage.xaml.cpp
index 140a76b..ae7bda2 100644
--- a/MainPage.xaml.cpp
+++ b/MainPage.xaml.cpp
@@ -343,8 +343,8 @@
 

 void RingClientUWP::MainPage::OncloseMessageTextPage()

 {

-    auto smartPanel = dynamic_cast<SmartPanel^>(_smartPanel_->Content);

-    smartPanel->unselectContact();

+    SmartPanelItemsViewModel::instance->_selectedItem = nullptr;

+    showFrame(_welcomeFrame_);

 }

 

 

diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp
index a479dfd..66770c3 100644
--- a/SmartPanel.xaml.cpp
+++ b/SmartPanel.xaml.cpp
@@ -1316,7 +1316,6 @@
     checkStateEditionMenu();

 }

 

-// (XXX) il ne faudrait plus de ringtextbox dans cette fonction, elle devrait etre vider avant de receveoir le resultat

 void RingClientUWP::Views::SmartPanel::OnregisteredNameFound(RingClientUWP::LookupStatus status, const std::string& address, const std::string& name)

 {

     if (menuOpen == MenuOpen::ACCOUNTS_LIST) { // if true, we did the lookup for a new account

@@ -1381,16 +1380,53 @@
 

         switch (status) {

         case LookupStatus::SUCCESS:

+        {

             if (contact->_contactStatus == ContactStatus::WAITING_FOR_ACTIVATION) {

                 contact->_contactStatus = ContactStatus::READY;

                 contact->ringID_ = Utils::toPlatformString(address);

                 ringTxtBxPlaceHolderDelay("username found and added.", 5000);

                 ContactsViewModel::instance->saveContactsToFile();

             }

-            break;

+            else {

+                /* in that case we delete a possible suroggate */

+                for each (Contact^ co in ContactsViewModel::instance->contactsList) {

+                    if (co->_contactStatus == ContactStatus::WAITING_FOR_ACTIVATION

+                            && co->_name == Utils::toPlatformString(name)) {

+                        auto item = SmartPanelItemsViewModel::instance->findItem(co);

+                        ContactsViewModel::instance->deleteContact(co);

+                        SmartPanelItemsViewModel::instance->removeItem(item);

+                    }

+

+                }

+

+            }

+

+            /* open the text message page */

+            auto item = SmartPanelItemsViewModel::instance->findItem(contact);

+            SmartPanelItemsViewModel::instance->_selectedItem = item;

+            summonMessageTextPage();

+        }

+        break;

         case LookupStatus::INVALID_NAME:

             if (name.length() == 40) {

-                ringTxtBxPlaceHolderDelay("ring id added.", 5000); // (XXX) on devrait valider que ce soit bien une clee ring

+

+                /* first we check if some contact is registred with this ring id */

+                auto contactAlreadyRecorded = ContactsViewModel::instance->findContactByRingId(Utils::toPlatformString(name));

+                if (contactAlreadyRecorded) {

+                    ringTxtBxPlaceHolderDelay("you already have a contact with this ring id.", 5000);

+                    /* delete the contact added recently */

+                    auto item = SmartPanelItemsViewModel::instance->findItem(contact);

+                    ContactsViewModel::instance->deleteContact(contact);

+                    SmartPanelItemsViewModel::instance->removeItem(item);

+

+                    /* open the message text with the contact already recorder*/

+                    item = SmartPanelItemsViewModel::instance->findItem(contactAlreadyRecorded);

+                    SmartPanelItemsViewModel::instance->_selectedItem = item;

+                    summonMessageTextPage();

+                    break;

+                }

+

+                ringTxtBxPlaceHolderDelay("ring id added.", 5000); // refacto : we should check if it's an actual ring id

                 contact->ringID_ = Utils::toPlatformString(name);

                 contact->_contactStatus = ContactStatus::READY;

                 ContactsViewModel::instance->saveContactsToFile();

@@ -1664,9 +1700,9 @@
 {

     if (e->Key == Windows::System::VirtualKey::Enter) {

         for (auto item : SmartPanelItemsViewModel::instance->itemsList) {

-            if (item->_contact->_name == _ringTxtBx_->Text) {

+            if (item->_contact->_name == _ringTxtBx_->Text || item->_contact->ringID_ == _ringTxtBx_->Text) {

                 SmartPanelItemsViewModel::instance->_selectedItem = item;

-                return;

+                summonMessageTextPage();

             }

         }