From 8fb4296aa86755ae3231e856c8776355684feba0 Mon Sep 17 00:00:00 2001 From: Nicolas Jager <nicolas.jager@savoirfairelinux.com> Date: Sun, 11 Dec 2016 19:51:51 -0500 Subject: [PATCH] fix : disallow multiple contacts with same ring id Change-Id: I9d38babdef507d4e4619ab007442e1517d3711d1 Tuleap: #790 --- MainPage.xaml.cpp | 4 ++-- SmartPanel.xaml.cpp | 46 ++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 43 insertions(+), 7 deletions(-) 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 MainPage::Application_Resuming(Object^, Object^) 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 @@ void RingClientUWP::Views::SmartPanel::_usernameTextBoxEdition__KeyUp(Platform:: 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 @@ void RingClientUWP::Views::SmartPanel::OnregisteredNameFound(RingClientUWP::Look 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 @@ void RingClientUWP::Views::SmartPanel::_ringTxtBx__KeyUp(Platform::Object^ sende { 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(); } } -- GitLab