Merge pull request #456 from PhenomRetroShare/Fix_ForumItemSortOnLastView

Fix Forum Item sort on LastPost View.
This commit is contained in:
Cyril Soler 2016-08-06 15:46:01 +02:00 committed by GitHub
commit 329a7e73e2
4 changed files with 49 additions and 39 deletions

View File

@ -39,20 +39,20 @@ uint32_t RsGxsGrpMetaData::serial_size(uint32_t api_version)
s += mGroupId.serial_size(); s += mGroupId.serial_size();
s += mOrigGrpId.serial_size(); s += mOrigGrpId.serial_size();
s += mParentGrpId.serial_size(); s += mParentGrpId.serial_size();
s += GetTlvStringSize(mGroupName); s += GetTlvStringSize(mGroupName);
s += 4; // mGroupFlags s += 4; // mGroupFlags
s += 4; // mPublishTs s += 4; // mPublishTs
s += 4; // mCircleType s += 4; // mCircleType
s += 4; // mAuthenFlag s += 4; // mAuthenFlag
s += mAuthorId.serial_size(); s += mAuthorId.serial_size();
s += GetTlvStringSize(mServiceString); s += GetTlvStringSize(mServiceString);
s += mCircleId.serial_size(); s += mCircleId.serial_size();
s += signSet.TlvSize(); s += signSet.TlvSize();
s += keys.TlvSize(); s += keys.TlvSize();
if(api_version == RS_GXS_GRP_META_DATA_VERSION_ID_0002) if(api_version == RS_GXS_GRP_META_DATA_VERSION_ID_0002)
s += 4; // mSignFlag s += 4; // mSignFlag
else if(api_version != RS_GXS_GRP_META_DATA_VERSION_ID_0001) else if(api_version != RS_GXS_GRP_META_DATA_VERSION_ID_0001)
std::cerr << "(EE) wrong/unknown API version " << api_version << " requested in RsGxsGrpMetaData::serial_size()" << std::endl; std::cerr << "(EE) wrong/unknown API version " << api_version << " requested in RsGxsGrpMetaData::serial_size()" << std::endl;
@ -203,7 +203,7 @@ bool RsGxsGrpMetaData::deserialise(void *data, uint32_t &pktsize)
int RsGxsMsgMetaData::refcount = 0; int RsGxsMsgMetaData::refcount = 0;
RsGxsMsgMetaData::RsGxsMsgMetaData(){ RsGxsMsgMetaData::RsGxsMsgMetaData(){
clear();
//std::cout << "\nrefcount++ : " << ++refcount << std::endl; //std::cout << "\nrefcount++ : " << ++refcount << std::endl;
return; return;
} }
@ -227,8 +227,8 @@ uint32_t RsGxsMsgMetaData::serial_size()
s += signSet.TlvSize(); s += signSet.TlvSize();
s += GetTlvStringSize(mMsgName); s += GetTlvStringSize(mMsgName);
s += 4; // mPublishTS s += 4; // mPublishTS
s += 4; // mMsgFlags s += 4; // mMsgFlags
return s; return s;
} }
@ -311,7 +311,7 @@ bool RsGxsMsgMetaData::deserialise(void *data, uint32_t *size)
ok &= signSet.GetTlv(data, *size, &offset); ok &= signSet.GetTlv(data, *size, &offset);
ok &= GetTlvString(data, *size, &offset, 0, mMsgName); ok &= GetTlvString(data, *size, &offset, 0, mMsgName);
uint32_t t=0; uint32_t t=0;
ok &= getRawUInt32(data, *size, &offset, &t); ok &= getRawUInt32(data, *size, &offset, &t);
mPublishTs = t; mPublishTs = t;
ok &= getRawUInt32(data, *size, &offset, &mMsgFlags); ok &= getRawUInt32(data, *size, &offset, &mMsgFlags);

View File

@ -973,44 +973,54 @@ void GxsForumThreadWidget::fillThreadStatus(QString text)
ui->progressText->setText(text); ui->progressText->setText(text);
} }
QTreeWidgetItem *GxsForumThreadWidget::convertMsgToThreadWidget(const RsGxsForumMsg &msg, bool useChildTS, uint32_t filterColumn) QTreeWidgetItem *GxsForumThreadWidget::convertMsgToThreadWidget(const RsGxsForumMsg &msg, bool useChildTS, uint32_t filterColumn, QTreeWidgetItem *parent)
{ {
// Early check for a message that should be hidden because its author // Early check for a message that should be hidden because its author
// is flagged with a bad reputation // is flagged with a bad reputation
bool redacted = rsIdentity->isBanned(msg.mMeta.mAuthorId) ; bool redacted = rsIdentity->isBanned(msg.mMeta.mAuthorId) ;
GxsIdRSTreeWidgetItem *item = new GxsIdRSTreeWidgetItem(mThreadCompareRole,GxsIdDetails::ICON_TYPE_ALL || (redacted?(GxsIdDetails::ICON_TYPE_REDACTED):0)); GxsIdRSTreeWidgetItem *item = new GxsIdRSTreeWidgetItem(mThreadCompareRole,GxsIdDetails::ICON_TYPE_ALL || (redacted?(GxsIdDetails::ICON_TYPE_REDACTED):0));
item->moveToThread(ui->threadTreeWidget->thread()); item->moveToThread(ui->threadTreeWidget->thread());
QString text;
if(redacted) if(redacted)
item->setText(COLUMN_THREAD_TITLE, tr("[ ... Redacted message ... ]")); item->setText(COLUMN_THREAD_TITLE, tr("[ ... Redacted message ... ]"));
else else
item->setText(COLUMN_THREAD_TITLE, QString::fromUtf8(msg.mMeta.mMsgName.c_str())); item->setText(COLUMN_THREAD_TITLE, QString::fromUtf8(msg.mMeta.mMsgName.c_str()));
//msg.mMeta.mChildTs Was not updated when received new child
// so do it here.
QDateTime qtime; QDateTime qtime;
QString sort; qtime.setTime_t(msg.mMeta.mPublishTs);
if (useChildTS) QString itemText = DateTime::formatDateTime(qtime);
qtime.setTime_t(msg.mMeta.mChildTs); QString itemSort = QString::number(msg.mMeta.mPublishTs);//Don't need to format it as for sort.
else
qtime.setTime_t(msg.mMeta.mPublishTs);
text = DateTime::formatDateTime(qtime);
sort = qtime.toString("yyyyMMdd_hhmmss");
if (useChildTS) if (useChildTS)
{ {
qtime.setTime_t(msg.mMeta.mPublishTs); for(QTreeWidgetItem *grandParent = parent; grandParent!=NULL; grandParent = grandParent->parent())
text += " / "; {
text += DateTime::formatDateTime(qtime); //Update Parent Child TimeStamp
sort += "_" + qtime.toString("yyyyMMdd_hhmmss"); QString oldTSText = grandParent->text(COLUMN_THREAD_DATE);
QString oldTSSort = grandParent->data(COLUMN_THREAD_DATE, ROLE_THREAD_SORT).toString();
QString oldCTSText = oldTSText.split("|").at(0);
QString oldPTSText = oldTSText.contains("|") ? oldTSText.split(" | ").at(1) : oldCTSText;//If first time parent get only its mPublishTs
QString oldCTSSort = oldTSSort.split("|").at(0);
QString oldPTSSort = oldTSSort.contains("|") ? oldTSSort.split(" | ").at(1) : oldCTSSort;
if (oldCTSSort.toDouble() < itemSort.toDouble())
{
grandParent->setText(COLUMN_THREAD_DATE, DateTime::formatDateTime(qtime) + " | " + oldPTSText);
grandParent->setData(COLUMN_THREAD_DATE, ROLE_THREAD_SORT, itemSort + " | " + oldPTSSort);
}
}
} }
item->setText(COLUMN_THREAD_DATE, text);
item->setData(COLUMN_THREAD_DATE, ROLE_THREAD_SORT, sort); item->setText(COLUMN_THREAD_DATE, itemText);
item->setData(COLUMN_THREAD_DATE, ROLE_THREAD_SORT, itemSort);
// Set later with GxsIdRSTreeWidgetItem::setId // Set later with GxsIdRSTreeWidgetItem::setId
item->setData(COLUMN_THREAD_DATA, ROLE_THREAD_AUTHOR, QString::fromStdString(msg.mMeta.mAuthorId.toStdString())); item->setData(COLUMN_THREAD_DATA, ROLE_THREAD_AUTHOR, QString::fromStdString(msg.mMeta.mAuthorId.toStdString()));
@ -1061,7 +1071,8 @@ QTreeWidgetItem *GxsForumThreadWidget::convertMsgToThreadWidget(const RsGxsForum
#endif #endif
item->setData(COLUMN_THREAD_DATA, ROLE_THREAD_STATUS, msg.mMeta.mMsgStatus); item->setData(COLUMN_THREAD_DATA, ROLE_THREAD_STATUS, msg.mMeta.mMsgStatus);
item->setData(COLUMN_THREAD_DATA, ROLE_THREAD_MISSING, false); item->setData(COLUMN_THREAD_DATA, ROLE_THREAD_MISSING, false);
if (parent) parent->addChild(item);
return item; return item;
} }

View File

@ -51,7 +51,7 @@ public:
unsigned int newCount() { return mNewCount; } unsigned int newCount() { return mNewCount; }
unsigned int unreadCount() { return mUnreadCount; } unsigned int unreadCount() { return mUnreadCount; }
QTreeWidgetItem *convertMsgToThreadWidget(const RsGxsForumMsg &msg, bool useChildTS, uint32_t filterColumn); QTreeWidgetItem *convertMsgToThreadWidget(const RsGxsForumMsg &msg, bool useChildTS, uint32_t filterColumn, QTreeWidgetItem *parent = NULL);
QTreeWidgetItem *generateMissingItem(const RsGxsMessageId &msgId); QTreeWidgetItem *generateMissingItem(const RsGxsMessageId &msgId);
// Callback for all Loads. // Callback for all Loads.

View File

@ -218,8 +218,7 @@ void GxsForumsFillThread::run()
std::cerr << "GxsForumsFillThread::run() adding " << msg.mMeta.mMsgId << std::endl; std::cerr << "GxsForumsFillThread::run() adding " << msg.mMeta.mMsgId << std::endl;
#endif #endif
QTreeWidgetItem *item = mParent->convertMsgToThreadWidget(msg, mUseChildTS, mFilterColumn); QTreeWidgetItem *item = mParent->convertMsgToThreadWidget(msg, mUseChildTS, mFilterColumn, threadPair.second);
threadPair.second->addChild(item);
calculateExpand(msg, item); calculateExpand(msg, item);