diff --git a/MainPage.xaml.cpp b/MainPage.xaml.cpp index 140a76b59549604e1eb16351964675067e36625e..ae7bda2109e5bc8e78a1b572b0963b8e3d66cfdb 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 a479dfd2ba3d329e786a6aad707bf50f56d5b7b6..66770c3bdae5959c543e62dc22084f84f8a286a5 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(); } }