Move createOriginalPulse / createReplyPulse to libretroshare

message creation logic moved to libretroshare
GUI classes cleaned up.
This commit is contained in:
drbob 2020-05-16 22:35:32 +10:00
parent 11ce959b2f
commit 8df5a886db
10 changed files with 292 additions and 221 deletions

View file

@ -144,7 +144,7 @@ class RsWirePulse
std::string mPulseText;
uint32_t mPulseType;
uint32_t mReplySentiment; // only relevant if a reply.
uint32_t mSentiment; // sentiment can be asserted at any point.
// These Ref to the related (parent or reply) if reply (RESPONSE set)
// Mode RESPONSE REFERENCE
@ -222,13 +222,15 @@ virtual bool getGroups(const std::list<RsGxsGroupId> grpIds,
// New Blocking Interfaces.
// Plan to migrate all GUI calls to these, and remove old interfaces above.
// These are not single requests, but return data graphs for display.
virtual bool createOriginalPulse(RsGxsGroupId grpId, std::string msg) = 0;
virtual bool createOriginalPulse(const RsGxsGroupId &grpId, RsWirePulseSPtr pPulse) = 0;
virtual bool createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId,
RsGxsGroupId replyWith, uint32_t reply_type,
uint32_t sentiment, std::string msg) = 0;
RsWirePulseSPtr pPulse) = 0;
// Provide Group Details for display.
// Provide Individual Group Details for display.
virtual bool getWireGroup(const RsGxsGroupId &groupId, RsWireGroupSPtr &grp) = 0;
virtual bool getWirePulse(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId, RsWirePulseSPtr &pPulse) = 0;
// Provide list of pulses associated with groups.
virtual bool getPulsesForGroups(const std::list<RsGxsGroupId> &groupIds,

View file

@ -61,7 +61,7 @@ void RsGxsWirePulseItem::clear()
{
pulse.mPulseText.clear();
pulse.mPulseType = 0;
pulse.mReplySentiment = 0;
pulse.mSentiment = 0;
pulse.mRefGroupId.clear();
pulse.mRefGroupName.clear();
pulse.mRefOrigMsgId.clear();
@ -81,7 +81,7 @@ void RsGxsWirePulseItem::serial_process(RsGenericSerializer::SerializeJob j,RsGe
{
RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_MSG,pulse.mPulseText,"pulse.mPulseText") ;
RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_UINT32_PARAM,pulse.mPulseType,"pulse.mPulseType") ;
RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_UINT32_PARAM,pulse.mReplySentiment,"pulse.mReplySentiment") ;
RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_UINT32_PARAM,pulse.mSentiment,"pulse.mSentiment") ;
RsTypeSerializer::serial_process(j,ctx,pulse.mRefGroupId,"pulse.mRefGroupId") ;
RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_NAME,pulse.mRefGroupName,"pulse.mRefGroupName") ;
RsTypeSerializer::serial_process(j,ctx,pulse.mRefOrigMsgId,"pulse.mRefOrigMsgId") ;

View file

@ -447,6 +447,10 @@ bool p3Wire::fetchPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsWirePulseSPt
pPulse = std::make_shared<RsWirePulse>(pulses[0]);
std::cerr << "p3Wire::fetchPulse() retrieved token: " << *pPulse;
std::cerr << std::endl;
std::cerr << "p3Wire::fetchPulse() ANS GrpId: " << pPulse->mMeta.mGroupId;
std::cerr << " MsgId: " << pPulse->mMeta.mMsgId;
std::cerr << " OrigMsgId: " << pPulse->mMeta.mOrigMsgId;
std::cerr << std::endl;
} else {
std::cerr << "p3Wire::fetchPulse() ERROR multiple pulses";
std::cerr << std::endl;
@ -469,8 +473,7 @@ bool p3Wire::fetchPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsWirePulseSPt
}
// New Interfaces.
// TODO: createOriginalPulse has not been tested.
bool p3Wire::createOriginalPulse(RsGxsGroupId grpId, std::string msg)
bool p3Wire::createOriginalPulse(const RsGxsGroupId &grpId, RsWirePulseSPtr pPulse)
{
// request Group.
std::list<RsGxsGroupId> groupIds = { grpId };
@ -499,6 +502,7 @@ bool p3Wire::createOriginalPulse(RsGxsGroupId grpId, std::string msg)
}
// Create Msg.
// Start fresh, just to be sure nothing dodgy happens in UX world.
RsWirePulse pulse;
pulse.mMeta.mGroupId = group.mMeta.mGroupId;
@ -507,9 +511,14 @@ bool p3Wire::createOriginalPulse(RsGxsGroupId grpId, std::string msg)
pulse.mMeta.mParentId.clear();
pulse.mMeta.mOrigMsgId.clear();
// copy info over
pulse.mPulseType = WIRE_PULSE_TYPE_ORIGINAL;
pulse.mReplySentiment = WIRE_PULSE_SENTIMENT_NO_SENTIMENT;
pulse.mPulseText = msg;
pulse.mSentiment = pPulse->mSentiment;
pulse.mPulseText = pPulse->mPulseText;
pulse.mImage1 = pPulse->mImage1;
pulse.mImage2 = pPulse->mImage2;
pulse.mImage3 = pPulse->mImage3;
pulse.mImage4 = pPulse->mImage4;
// all mRefs should empty.
@ -527,8 +536,7 @@ bool p3Wire::createOriginalPulse(RsGxsGroupId grpId, std::string msg)
return true;
}
// TODO: createReplyPulse has not been tested.
bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGroupId replyWith, uint32_t reply_type, uint32_t /*sentiment*/, std::string msg)
bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGroupId replyWith, uint32_t reply_type, RsWirePulseSPtr pPulse)
{
// check reply_type. can only be ONE.
if (!((reply_type == WIRE_PULSE_TYPE_REPLY) ||
@ -550,26 +558,41 @@ bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGro
return false;
}
if (groups.size() != 2) {
std::cerr << "p3Wire::createReplyPulse() getGroups != 2";
std::cerr << std::endl;
return false;
}
// extract group info.
RsWireGroup replyToGroup;
RsWireGroup replyWithGroup;
if (groups[0].mMeta.mGroupId == grpId) {
if (grpId == replyWith)
{
if (groups.size() != 1) {
std::cerr << "p3Wire::createReplyPulse() getGroups != 1";
std::cerr << std::endl;
return false;
}
replyToGroup = groups[0];
replyWithGroup = groups[1];
} else {
replyToGroup = groups[1];
replyWithGroup = groups[0];
}
else
{
if (groups.size() != 2) {
std::cerr << "p3Wire::createReplyPulse() getGroups != 2";
std::cerr << std::endl;
return false;
}
if (groups[0].mMeta.mGroupId == grpId) {
replyToGroup = groups[0];
replyWithGroup = groups[1];
} else {
replyToGroup = groups[1];
replyWithGroup = groups[0];
}
}
// check groupIds match
if ((replyToGroup.mMeta.mGroupId != grpId) ||
(replyToGroup.mMeta.mGroupId != replyWith))
(replyWithGroup.mMeta.mGroupId != replyWith))
{
std::cerr << "p3Wire::createReplyPulse() groupid mismatch";
std::cerr << std::endl;
@ -604,8 +627,8 @@ bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGro
responsePulse.mMeta.mOrigMsgId.clear();
responsePulse.mPulseType = WIRE_PULSE_TYPE_RESPONSE | reply_type;
responsePulse.mReplySentiment = 0; // toPulseSentiment(ui.comboBox_sentiment->currentIndex());
responsePulse.mPulseText = msg; // ui.textEdit_Pulse->toPlainText().toStdString();
responsePulse.mSentiment = pPulse->mSentiment;
responsePulse.mPulseText = pPulse->mPulseText;
// mRefs refer to parent post.
responsePulse.mRefGroupId = replyToPulse->mMeta.mGroupId;
@ -615,13 +638,59 @@ bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGro
responsePulse.mRefPublishTs = replyToPulse->mMeta.mPublishTs;
responsePulse.mRefPulseText = replyToPulse->mPulseText;
std::cerr << "p3Wire::createReplyPulse() create Response Pulse";
std::cerr << std::endl;
uint32_t token;
createPulse(token, responsePulse);
if (!createPulse(token, responsePulse))
{
std::cerr << "p3Wire::createReplyPulse() FAILED to create Response Pulse";
std::cerr << std::endl;
return false;
}
int result = waitToken(token);
if (result != RsTokenService::COMPLETE)
{
std::cerr << "p3Wire::createReplyPulse() FAILED(2) to create Response Pulse";
std::cerr << std::endl;
return false;
}
// get MsgId.
std::pair<RsGxsGroupId, RsGxsMessageId> responsePair;
if (!acknowledgeMsg(token, responsePair))
{
std::cerr << "p3Wire::createReplyPulse() FAILED acknowledgeMsg for Response Pulse";
std::cerr << std::endl;
return false;
}
// update responsePulse.
// TODO.
std::cerr << "p3Wire::createReplyPulse() Response Pulse ID: (";
std::cerr << responsePair.first.toStdString() << ", ";
std::cerr << responsePair.second.toStdString() << ")";
std::cerr << std::endl;
// retrieve newly generated message.
// **********************************************************
RsWirePulseSPtr createdResponsePulse;
if (!fetchPulse(responsePair.first, responsePair.second, createdResponsePulse))
{
std::cerr << "p3Wire::createReplyPulse() fetch createdReponsePulse FAILED";
std::cerr << std::endl;
return false;
}
/* Check that pulses is created properly */
if ((createdResponsePulse->mMeta.mGroupId != responsePulse.mMeta.mGroupId) ||
(createdResponsePulse->mPulseText != responsePulse.mPulseText) ||
(createdResponsePulse->mRefGroupId != responsePulse.mRefGroupId) ||
(createdResponsePulse->mRefOrigMsgId != responsePulse.mRefOrigMsgId))
{
std::cerr << "p3Wire::createReplyPulse() fetch createdReponsePulse FAILED";
std::cerr << std::endl;
return false;
}
// create ReplyTo Ref Msg.
std::cerr << "PulseAddDialog::postRefPulse() create Reference!";
@ -637,7 +706,7 @@ bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGro
refPulse.mMeta.mOrigMsgId.clear();
refPulse.mPulseType = WIRE_PULSE_TYPE_REFERENCE | reply_type;
refPulse.mReplySentiment = 0; //toPulseSentiment(ui.comboBox_sentiment->currentIndex());
refPulse.mSentiment = 0; // should this be =? createdResponsePulse->mSentiment;
// Dont put parent PulseText into refPulse - it is available on Thread Msg.
// otherwise gives impression it is correctly setup Parent / Reply...
@ -647,15 +716,41 @@ bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGro
// refs refer back to own Post.
refPulse.mRefGroupId = replyWithGroup.mMeta.mGroupId;
refPulse.mRefGroupName = replyWithGroup.mMeta.mGroupName;
refPulse.mRefOrigMsgId = responsePulse.mMeta.mOrigMsgId;
refPulse.mRefOrigMsgId = createdResponsePulse->mMeta.mOrigMsgId;
refPulse.mRefAuthorId = replyWithGroup.mMeta.mAuthorId;
refPulse.mRefPublishTs = responsePulse.mMeta.mPublishTs;
refPulse.mRefPulseText = responsePulse.mPulseText;
// uint32_t token;
rsWire->createPulse(token, refPulse);
refPulse.mRefPublishTs = createdResponsePulse->mMeta.mPublishTs;
refPulse.mRefPulseText = createdResponsePulse->mPulseText;
// publish Ref Msg.
if (!createPulse(token, refPulse))
{
std::cerr << "p3Wire::createReplyPulse() FAILED to create Ref Pulse";
std::cerr << std::endl;
return false;
}
result = waitToken(token);
if (result != RsTokenService::COMPLETE)
{
std::cerr << "p3Wire::createReplyPulse() FAILED(2) to create Ref Pulse";
std::cerr << std::endl;
return false;
}
// get MsgId.
std::pair<RsGxsGroupId, RsGxsMessageId> refPair;
if (!acknowledgeMsg(token, refPair))
{
std::cerr << "p3Wire::createReplyPulse() FAILED acknowledgeMsg for Ref Pulse";
std::cerr << std::endl;
return false;
}
std::cerr << "p3Wire::createReplyPulse() Success: Ref Pulse ID: (";
std::cerr << refPair.first.toStdString() << ", ";
std::cerr << refPair.second.toStdString() << ")";
std::cerr << std::endl;
return true;
}
@ -706,6 +801,15 @@ bool p3Wire::getWireGroup(const RsGxsGroupId &groupId, RsWireGroupSPtr &grp)
return true;
}
// TODO Remove duplicate ...
bool p3Wire::getWirePulse(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId, RsWirePulseSPtr &pPulse)
{
return fetchPulse(groupId, msgId, pPulse);
}
bool compare_time(const RsWirePulseSPtr& first, const RsWirePulseSPtr &second)
{
return first->mMeta.mPublishTs > second->mMeta.mPublishTs;

View file

@ -63,10 +63,10 @@ public:
// New Interfaces.
// Blocking, request structures for display.
virtual bool createOriginalPulse(RsGxsGroupId grpId, std::string msg) override;
virtual bool createOriginalPulse(const RsGxsGroupId &grpId, RsWirePulseSPtr pPulse) override;
virtual bool createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId,
RsGxsGroupId replyWith, uint32_t reply_type,
uint32_t sentiment, std::string msg) override;
RsWirePulseSPtr pPulse) override;
#if 0
virtual bool createReplyPulse(uint32_t &token, RsWirePulse &pulse) override;
@ -75,6 +75,7 @@ public:
#endif
virtual bool getWireGroup(const RsGxsGroupId &groupId, RsWireGroupSPtr &grp) override;
virtual bool getWirePulse(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId, RsWirePulseSPtr &pPulse) override;
virtual bool getPulsesForGroups(const std::list<RsGxsGroupId> &groupIds, std::list<RsWirePulseSPtr> &pulsePtrs) override;