From a7570b70eb773e7771ee7670c641b33882a46980 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 3 Dec 2022 23:45:31 +0100 Subject: [PATCH] fixed proper setting of "from" field when heterogeneous destinations are used --- .../src/gui/msgs/MessageComposer.cpp | 42 ++++++++++--------- retroshare-gui/src/gui/msgs/MessageWidget.cpp | 2 +- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/retroshare-gui/src/gui/msgs/MessageComposer.cpp b/retroshare-gui/src/gui/msgs/MessageComposer.cpp index 65c026b72..4e0219b0c 100644 --- a/retroshare-gui/src/gui/msgs/MessageComposer.cpp +++ b/retroshare-gui/src/gui/msgs/MessageComposer.cpp @@ -1370,25 +1370,6 @@ bool MessageComposer::buildMessage(MessageInfo& mi) { // add a GXS signer/from in case the message is to be sent to a distant peer - bool at_least_one_gxsid = false; - - for(auto m:mi.destinations) - if(m.type() == MsgAddress::MSG_ADDRESS_TYPE_RSGXSID) - { - at_least_one_gxsid=true; - break; - } - - if(!at_least_one_gxsid) - mi.from = Rs::Msgs::MsgAddress(rsPeers->getOwnId(),MsgAddress::MSG_ADDRESS_MODE_TO); - else if(mi.from.type() != MsgAddress::MSG_ADDRESS_TYPE_RSGXSID) - { - QMessageBox::warning(this, tr("RetroShare"), tr("Please create an identity to sign distant messages, or remove the distant peers from the destination list."), QMessageBox::Ok); - return false; // Don't send if cannot sign. - } - else - mi.from = MsgAddress(RsGxsId(ui.respond_to_CB->itemData(ui.respond_to_CB->currentIndex()).toString().toStdString()),MsgAddress::MSG_ADDRESS_MODE_TO) ; - //std::cerr << "MessageSend: setting 'from' field to GXS id = " << mi.rsgxsid_srcId << std::endl; mi.title = misc::removeNewLine(ui.titleEdit->text()).toUtf8().constData(); @@ -1493,6 +1474,29 @@ bool MessageComposer::buildMessage(MessageInfo& mi) break ; } } + bool at_least_one_gxsid = false; + + for(auto m:mi.destinations) + if(m.type() == MsgAddress::MSG_ADDRESS_TYPE_RSGXSID) + { + at_least_one_gxsid=true; + break; + } + + if(!at_least_one_gxsid) + mi.from = Rs::Msgs::MsgAddress(rsPeers->getOwnId(),MsgAddress::MSG_ADDRESS_MODE_TO); + else + { + auto gxs_id_from = RsGxsId(ui.respond_to_CB->itemData(ui.respond_to_CB->currentIndex()).toString().toStdString()); + + if(gxs_id_from.isNull()) + { + QMessageBox::warning(this, tr("RetroShare"), tr("Please create an identity to sign distant messages, or remove the distant peers from the destination list."), QMessageBox::Ok); + return false; // Don't send if cannot sign. + } + mi.from = MsgAddress(RsGxsId(ui.respond_to_CB->itemData(ui.respond_to_CB->currentIndex()).toString().toStdString()),MsgAddress::MSG_ADDRESS_MODE_TO) ; + } + return true; } diff --git a/retroshare-gui/src/gui/msgs/MessageWidget.cpp b/retroshare-gui/src/gui/msgs/MessageWidget.cpp index 9bf3dcc35..7467e2e84 100644 --- a/retroshare-gui/src/gui/msgs/MessageWidget.cpp +++ b/retroshare-gui/src/gui/msgs/MessageWidget.cpp @@ -670,7 +670,7 @@ void MessageWidget::fill(const std::string &msgId) // link.createMessage(ownId, ""); // } - if(msgInfo.msgflags & RS_MSG_DISTANT) // distant message + if(msgInfo.from.type()==Rs::Msgs::MsgAddress::MSG_ADDRESS_TYPE_RSGXSID) // distant message { tooltip_string = PeerDefs::rsidFromId(msgInfo.from.toGxsId()) ; link = RetroShareLink::createMessage(msgInfo.from.toGxsId(), "");