diff --git a/callwidget.cpp b/callwidget.cpp index 06ef685311bc32e5236ce9abf66c4d8edfa5d086..db1b00ee053ff6ea90d6a854b5f86db5c89d396e 100644 --- a/callwidget.cpp +++ b/callwidget.cpp @@ -311,6 +311,7 @@ CallWidget::callStateChanged(Call* call, Call::State previousState) || call->state() == Call::State::FAILURE || call->state() == Call::State::ABORTED) { setActualCall(nullptr); + ui->instantMessagingWidget->setMediaText(nullptr); ui->videoWidget->hide(); displaySpinner(false); auto onHoldCall = callModel_->getActiveCalls().first(); @@ -321,6 +322,7 @@ CallWidget::callStateChanged(Call* call, Call::State previousState) } else if (call->state() == Call::State::CURRENT) { displaySpinner(false); ui->videoWidget->show(); + ui->instantMessagingWidget->setMediaText(actualCall_); } ui->callStateLabel->setText(QString(tr("Call State: %1", "%1 is the state of the call")) .arg(call->toHumanStateName())); @@ -394,7 +396,6 @@ void CallWidget::setActualCall(Call* value) { actualCall_ = value; - ui->instantMessagingWidget->setMediaText(actualCall_); } void diff --git a/instantmessagingwidget.cpp b/instantmessagingwidget.cpp index 34f55d305f6ae97fb3cf36603d0910bbb24166cf..df4346bce26bd78f2b4577ef3d8905062a87cbca 100644 --- a/instantmessagingwidget.cpp +++ b/instantmessagingwidget.cpp @@ -75,14 +75,27 @@ InstantMessagingWidget::setMediaText(Call *call) if (call != nullptr) { connect(call, SIGNAL(mediaAdded(Media::Media*)), this, SLOT(mediaAdd(Media::Media*))); - Media::Text *textMedia = call->addOutgoingMedia<Media::Text>(); - connect(ui->messageInput, &QLineEdit::returnPressed, [=]() - { - QMap<QString, QString> messages; - messages["text/plain"] = ui->messageInput->text(); - textMedia->send(messages); - ui->messageInput->clear(); - }); + Media::Text *textMedia = nullptr; + if (call->hasMedia(Media::Media::Type::TEXT, Media::Media::Direction::OUT)) { + textMedia = call->firstMedia<Media::Text>(Media::Media::Direction::OUT); + } else { + textMedia = call->addOutgoingMedia<Media::Text>(); + } + if (textMedia) { + connect(ui->messageOutput->model(), + SIGNAL(rowsInserted(const QModelIndex&, int, int)), + ui->messageOutput, SLOT(scrollToBottom())); + ui->messageOutput->setModel( + textMedia->recording()-> + instantMessagingModel()); + connect(ui->messageInput, &QLineEdit::returnPressed, [=]() + { + QMap<QString, QString> messages; + messages["text/plain"] = ui->messageInput->text(); + textMedia->send(messages); + ui->messageInput->clear(); + }); + } } else { ui->messageOutput->disconnect(); ui->messageInput->disconnect(); @@ -99,12 +112,6 @@ InstantMessagingWidget::mediaAdd(Media::Media *media) break; case Media::Media::Type::TEXT: if (media->direction() == Media::Text::Direction::IN) { - ui->messageOutput->setModel( - static_cast<Media::Text*>(media)->recording()-> - instantMessagingModel()); - connect(ui->messageOutput->model(), - SIGNAL(rowsInserted(const QModelIndex&, int, int)), - ui->messageOutput, SLOT(scrollToBottom())); connect(static_cast<Media::Text*>(media), SIGNAL(messageReceived(QMap<QString,QString>)), this, @@ -158,4 +165,5 @@ InstantMessagingWidget::onMsgReceived(const QMap<QString,QString>& message) GlobalSystemTray::instance().showMessage("Ring: Message Received", message["text/plain"]); QApplication::alert(this, 5000); } + this->show(); }