Implement Ring usernames (Ethereum)

Change-Id: I9faeae5ad0bb2983876f53a3e5efe32d5c24ce9b
diff --git a/callwidget.cpp b/callwidget.cpp
index 2db55e7..14b82a2 100644
--- a/callwidget.cpp
+++ b/callwidget.cpp
@@ -186,6 +186,9 @@
                 ui->smartList->clearSelection();
         });
 
+        connect(&NameDirectory::instance(), SIGNAL(registeredNameFound(const Account*,NameDirectory::LookupStatus,const QString&,const QString&)),
+                this, SLOT(contactLineEdit_registeredNameFound(const Account*,NameDirectory::LookupStatus,const QString&,const QString&)));
+
     } catch (const std::exception& e) {
         qDebug() << "INIT ERROR" << e.what();
     }
@@ -662,16 +665,32 @@
 }
 
 void
+CallWidget::searchContactLineEditEntry(const URI &uri)
+{
+    auto cm = PhoneDirectoryModel::instance().getNumber(uri);
+    // if its a new CM, bring it to the top
+    if (cm->lastUsed() == 0)
+        cm->setLastUsed(QDateTime::currentDateTime().toTime_t());
+
+    // select cm
+    RecentModel::instance().selectionModel()->setCurrentIndex(RecentModel::instance().getIndex(cm),
+                                                              QItemSelectionModel::ClearAndSelect);
+    ui->ringContactLineEdit->clear();
+}
+
+void
 CallWidget::on_ringContactLineEdit_returnPressed()
 {
-    auto cm = PhoneDirectoryModel::instance().getNumber(ui->ringContactLineEdit->text());
-    time_t currentTime;
-    ::time(&currentTime);
-    cm->setLastUsed(currentTime);
-    ui->ringContactLineEdit->clear();
+    auto contactLineText = ui->ringContactLineEdit->text();
+    URI uri_passed = URI(contactLineText);
 
-    QModelIndex index = RecentModel::instance().getIndex(cm);
-    RecentModel::instance().selectionModel()->setCurrentIndex(index, QItemSelectionModel::ClearAndSelect);
+    if (!contactLineText.isNull() && contactLineText.length() > 0){
+
+        NameDirectory::instance().lookupName(nullptr, QString(), uri_passed);
+
+    } else {
+        searchContactLineEditEntry(uri_passed);
+    }
 }
 
 void
@@ -832,3 +851,39 @@
 {
     Utils::InvokeMailto(tr("Contact me on Ring"), tr("My RingId is : ") + ui->ringIdLabel->text());
 }
+
+void
+CallWidget::contactLineEdit_registeredNameFound(const Account* account,NameDirectory::LookupStatus status,
+                                                const QString& address,const QString& name)
+{
+    URI uri = URI(ui->ringContactLineEdit->text());
+    QString username_to_lookup = uri.userinfo();
+
+    if (username_to_lookup.compare(name) != 0){
+        return;
+    }
+
+    switch (status)
+    {
+        case NameDirectory::LookupStatus::SUCCESS:
+        {
+            uri = URI("ring:" + address);
+            qDebug() << uri;
+            searchContactLineEditEntry(uri);
+            break;
+        }
+        case NameDirectory::LookupStatus::INVALID_NAME:
+        {
+           qDebug() << "Invalid Ring username";
+           break;
+        }
+        case NameDirectory::LookupStatus::ERROR:
+        case NameDirectory::LookupStatus::NOT_FOUND:
+        default:
+        {
+            qDebug() << "Could not resolve Ring username";
+            break;
+        }
+    }
+}
+