windows: add partial contact backend
Refs #72110
Change-Id: Ib6177477a92e0a03e7eefd0de7c723abea2b0e40
diff --git a/callwidget.cpp b/callwidget.cpp
index 3203714..fefa346 100644
--- a/callwidget.cpp
+++ b/callwidget.cpp
@@ -26,6 +26,8 @@
#include "personmodel.h"
#include "fallbackpersoncollection.h"
#include "accountmodel.h"
+#include "categorizedcontactmodel.h"
+#include "windowscontactbackend.h"
#include "wizarddialog.h"
@@ -53,12 +55,26 @@
connect(callModel_, SIGNAL(callStateChanged(Call*, Call::State)),
this, SLOT(callStateChanged(Call*, Call::State)));
+ connect(AccountModel::instance()
+ , SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>))
+ , this
+ , SLOT(findRingAccount(QModelIndex, QModelIndex, QVector<int>)));
+
ui->callList->setModel(callModel_);
CategorizedHistoryModel::instance()->
addCollection<MinimalHistoryBackend>(LoadOptions::FORCE_ENABLED);
+ PersonModel::instance()->
+ addCollection<FallbackPersonCollection>(LoadOptions::FORCE_ENABLED);
+
+ PersonModel::instance()->
+ addCollection<WindowsContactBackend>(LoadOptions::FORCE_ENABLED);
+
ui->historyList->setModel(CategorizedHistoryModel::instance());
+ CategorizedContactModel::instance()->setSortAlphabetical(false);
+ ui->contactView->setModel(CategorizedContactModel::instance());
+ ui->contactView->setHeaderHidden(true);
ui->speakerSlider->setValue(Audio::Settings::instance()->playbackVolume());
ui->micSlider->setValue(Audio::Settings::instance()->captureVolume());
@@ -75,7 +91,33 @@
}
void
-CallWidget::findRingAccount() {
+CallWidget::findRingAccount(QModelIndex idx1, QModelIndex idx2, QVector<int> vec)
+{
+ Q_UNUSED(idx1)
+ Q_UNUSED(idx2)
+ Q_UNUSED(vec)
+
+ auto a_count = AccountModel::instance()->rowCount();
+ auto found = false;
+ for (int i = 0; i < a_count; ++i) {
+ auto idx = AccountModel::instance()->index(i, 0);
+ auto protocol = idx.data(static_cast<int>(Account::Role::Proto));
+ if ((Account::Protocol)protocol.toUInt() == Account::Protocol::RING) {
+ auto username = idx.data(static_cast<int>(Account::Role::Username));
+ ui->ringIdLabel->setText(
+ "Your Ring ID: " + username.toString());
+ found = true;
+ return;
+ }
+ }
+ if (not found){
+ ui->ringIdLabel->setText("NO RING ACCOUNT FOUND");
+ }
+}
+
+void
+CallWidget::findRingAccount()
+{
auto a_count = AccountModel::instance()->rowCount();
auto found = false;
@@ -94,7 +136,6 @@
WizardDialog *wizardDialog = new WizardDialog();
wizardDialog->exec();
delete wizardDialog;
- findRingAccount();
}
}
@@ -150,19 +191,21 @@
}
void
-CallWidget::callStateChanged(Call* call, Call::State previousState) {
+CallWidget::callStateChanged(Call* call, Call::State previousState)
+{
Q_UNUSED(previousState)
ui->callList->setCurrentIndex(callModel_->getIndex(actualCall_));
if (call->state() == Call::State::OVER) {
actualCall_ = nullptr;
ui->videoWidget->hide();
+ } else if (call->state() == Call::State::HOLD) {
+ ui->videoWidget->hide();
} else {
ui->videoWidget->show();
- connect(actualCall_, SIGNAL(isOver(Call*)),
- this, SLOT(callStateChanged(Call*,Call::State::OVER)));
ui->messageOutput->setModel(
IMConversationManager::instance()->getModel(actualCall_));
}
+ ui->callStateLabel->setText("Call State : " + state.at((int)call->state()));
}
void
@@ -220,3 +263,27 @@
CallWidget::atExit() {
}
+
+void
+CallWidget::on_contactView_doubleClicked(const QModelIndex &index)
+{
+ auto contact = index.data((int)ContactMethod::Role::Uri);
+ QString uri;
+
+ if (contact.isValid()) {
+ uri = contact.toString();
+ } else {
+ auto var = index.data((int)Person::Role::Object);
+ if (var.isValid()) {
+ Person* person = var.value<Person*>();
+ if (person->phoneNumbers().size() > 0) {
+ uri = person->phoneNumbers().at(0)->uri();
+ }
+ }
+ }
+ if (not uri.isEmpty()) {
+ auto outCall = CallModel::instance()->dialingCall(uri);
+ outCall->setDialNumber(uri);
+ outCall->performAction(Call::Action::ACCEPT);
+ }
+}