diff --git a/retroshare-gui/src/gui/feeds/BoardsCommentsItem.cpp b/retroshare-gui/src/gui/feeds/BoardsCommentsItem.cpp index 8081c0e99..59082a8fd 100644 --- a/retroshare-gui/src/gui/feeds/BoardsCommentsItem.cpp +++ b/retroshare-gui/src/gui/feeds/BoardsCommentsItem.cpp @@ -143,6 +143,7 @@ void BaseBoardsCommentsItem::loadGroup() { RsErr() << "GxsPostedGroupItem::loadGroup() ERROR getting data" << std::endl; mIsLoadingGroup = false; + deferred_update(); return; } @@ -150,7 +151,8 @@ void BaseBoardsCommentsItem::loadGroup() { std::cerr << "GxsPostedGroupItem::loadGroup() Wrong number of Items" << std::endl; mIsLoadingGroup = false; - return; + deferred_update(); + return; } RsPostedGroup group(groups[0]); @@ -182,7 +184,8 @@ void BaseBoardsCommentsItem::loadMessage() { RsErr() << "BaseBoardsCommentsItem::loadMessage() ERROR getting data" << std::endl; mIsLoadingMessage = false; - return; + deferred_update(); + return; } if (posts.size() == 1) @@ -243,7 +246,8 @@ void BaseBoardsCommentsItem::loadComment() { RsErr() << "BaseBoardsCommentsItem::loadGroup() ERROR getting data" << std::endl; mIsLoadingComment = false; - return; + deferred_update(); + return; } int comNb = comments.size(); diff --git a/retroshare-gui/src/gui/feeds/BoardsPostItem.cpp b/retroshare-gui/src/gui/feeds/BoardsPostItem.cpp index 4f2020ee3..9fcf15bff 100644 --- a/retroshare-gui/src/gui/feeds/BoardsPostItem.cpp +++ b/retroshare-gui/src/gui/feeds/BoardsPostItem.cpp @@ -220,6 +220,7 @@ void BoardsPostItem::loadGroup() { RsErr() << "BoardsPostItem::loadGroup() ERROR getting data for group " << groupId() << std::endl; mLoadingGroup = false; + deferred_update(); return; } @@ -228,6 +229,7 @@ void BoardsPostItem::loadGroup() std::cerr << "BoardsPostItem::loadGroup() Wrong number of Items for group " << groupId() ; std::cerr << std::endl; mLoadingGroup = false; + deferred_update(); return; } RsPostedGroup group(groups[0]); @@ -266,6 +268,7 @@ void BoardsPostItem::loadMessage() { RsErr() << "BoardsPostedItem::loadMessage() ERROR getting data" << std::endl; mLoadingMessage = false; + deferred_update(); return; } @@ -353,7 +356,7 @@ void BoardsPostItem::fill() ui->subjectLabel->setText(msgText); - std::cerr << "Copying 1 line from \"" << mPost.mNotes << "\"" << std::endl; + //std::cerr << "Copying 1 line from \"" << mPost.mNotes << "\"" << std::endl; //ui->newCommentLabel->setText(RsStringUtil::CopyLines(QString::fromUtf8(mPost.mNotes.c_str()), 1)) ; //ui->newCommentLabel->setText(RsHtml().formatText(NULL, QString::fromUtf8(mPost.mNotes.c_str()), /* RSHTML_FORMATTEXT_EMBED_SMILEYS |*/ RSHTML_FORMATTEXT_EMBED_LINKS)); diff --git a/retroshare-gui/src/gui/feeds/ChannelsCommentsItem.cpp b/retroshare-gui/src/gui/feeds/ChannelsCommentsItem.cpp index 88425975d..75a6106fc 100644 --- a/retroshare-gui/src/gui/feeds/ChannelsCommentsItem.cpp +++ b/retroshare-gui/src/gui/feeds/ChannelsCommentsItem.cpp @@ -211,6 +211,7 @@ void ChannelsCommentsItem::loadGroupData() { RsErr() << "GxsGxsChannelGroupItem::loadGroup() ERROR getting data for group " << groupId() << std::endl; mLoadingGroup = false; + deferred_update(); return; } @@ -219,6 +220,7 @@ void ChannelsCommentsItem::loadGroupData() std::cerr << "GxsGxsChannelGroupItem::loadGroup() Wrong number of Items for group " << groupId() ; std::cerr << std::endl; mLoadingGroup = false; + deferred_update(); return; } RsGxsChannelGroup group(groups[0]); @@ -257,6 +259,7 @@ void ChannelsCommentsItem::loadMessageData() { RsErr() << "GxsGxsChannelGroupItem::loadMessage() ERROR getting data" << std::endl; mLoadingMessage = false; + deferred_update(); return; } @@ -303,11 +306,13 @@ void ChannelsCommentsItem::loadCommentData() { RsErr() << "GxsGxsChannelGroupItem::loadComment() ERROR getting data" << std::endl; mLoadingComment = false; + deferred_update(); return; } if(comments.size()!=1) { mLoadingComment = false; + deferred_update(); return; } diff --git a/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.cpp b/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.cpp index ede105fdf..0adafe8e9 100644 --- a/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.cpp +++ b/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.cpp @@ -150,6 +150,7 @@ void GxsChannelGroupItem::loadGroup() { RsErr() << "PostedItem::loadGroup() ERROR getting data" << std::endl; mLoadingGroup = false; + deferred_update(); return; } @@ -157,6 +158,7 @@ void GxsChannelGroupItem::loadGroup() { std::cerr << "GxsGxsChannelGroupItem::loadGroup() Wrong number of Items"; std::cerr << std::endl; + deferred_update(); mLoadingGroup = false; return; } diff --git a/retroshare-gui/src/gui/feeds/GxsChannelPostItem.cpp b/retroshare-gui/src/gui/feeds/GxsChannelPostItem.cpp index ee4bb0ebc..9d6a9992f 100644 --- a/retroshare-gui/src/gui/feeds/GxsChannelPostItem.cpp +++ b/retroshare-gui/src/gui/feeds/GxsChannelPostItem.cpp @@ -219,6 +219,7 @@ void GxsChannelPostItem::loadGroup() { RsErr() << "GxsGxsChannelGroupItem::loadGroup() ERROR getting data for group " << groupId() << std::endl; mLoadingGroup = false; + deferred_update(); return; } @@ -227,6 +228,7 @@ void GxsChannelPostItem::loadGroup() std::cerr << "GxsGxsChannelGroupItem::loadGroup() Wrong number of Items for group " << groupId() ; std::cerr << std::endl; mLoadingGroup = false; + deferred_update(); return; } RsGxsChannelGroup group(groups[0]); @@ -265,6 +267,7 @@ void GxsChannelPostItem::loadMessage() { RsErr() << "GxsGxsChannelGroupItem::loadGroup() ERROR getting data" << std::endl; mLoadingMessage = false; + deferred_update(); return; } diff --git a/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp b/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp index 31d340ba9..c3592b958 100644 --- a/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp +++ b/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp @@ -161,6 +161,7 @@ void GxsForumGroupItem::loadGroup() { RsErr() << "GxsForumGroupItem::loadGroup() ERROR getting data" << std::endl; mLoadingGroup = false; + deferred_update(); return; } @@ -169,6 +170,7 @@ void GxsForumGroupItem::loadGroup() std::cerr << "GxsForumGroupItem::loadGroup() Wrong number of Items"; std::cerr << std::endl; mLoadingGroup = false; + deferred_update(); return; } RsGxsForumGroup group(groups[0]);// no reference to teporary accross threads! diff --git a/retroshare-gui/src/gui/feeds/GxsForumMsgItem.cpp b/retroshare-gui/src/gui/feeds/GxsForumMsgItem.cpp index fed89037b..333a6a577 100644 --- a/retroshare-gui/src/gui/feeds/GxsForumMsgItem.cpp +++ b/retroshare-gui/src/gui/feeds/GxsForumMsgItem.cpp @@ -167,6 +167,7 @@ void GxsForumMsgItem::loadGroup() { RsErr() << "GxsForumGroupItem::loadGroup() ERROR getting data" << std::endl; mLoadingGroup = false; + deferred_update(); return; } @@ -175,6 +176,7 @@ void GxsForumMsgItem::loadGroup() std::cerr << "GxsForumGroupItem::loadGroup() Wrong number of Items"; std::cerr << std::endl; mLoadingGroup = false; + deferred_update(); return; } RsGxsForumGroup group(groups[0]); @@ -229,6 +231,7 @@ void GxsForumMsgItem::loadMessage() { std::cerr << "GxsForumMsgItem::loadMessage() ERROR getting message data"; mLoadingMessage = false; + deferred_update(); return; } // now load the parent message. If not found, it's not a problem. diff --git a/retroshare-gui/src/gui/feeds/PostedGroupItem.cpp b/retroshare-gui/src/gui/feeds/PostedGroupItem.cpp index 1dbd295c9..2e341a00a 100644 --- a/retroshare-gui/src/gui/feeds/PostedGroupItem.cpp +++ b/retroshare-gui/src/gui/feeds/PostedGroupItem.cpp @@ -127,6 +127,7 @@ void PostedGroupItem::loadGroup() { RsErr() << "GxsPostedGroupItem::loadGroup() ERROR getting data" << std::endl; mLoadingGroup = false; + deferred_update(); return; } @@ -135,6 +136,7 @@ void PostedGroupItem::loadGroup() std::cerr << "GxsPostedGroupItem::loadGroup() Wrong number of Items"; std::cerr << std::endl; mLoadingGroup = false; + deferred_update(); return; } RsPostedGroup group(groups[0]); diff --git a/retroshare-gui/src/gui/gxs/GxsGroupFeedItem.cpp b/retroshare-gui/src/gui/gxs/GxsGroupFeedItem.cpp index 72f08ae8e..1e3d9973e 100644 --- a/retroshare-gui/src/gui/gxs/GxsGroupFeedItem.cpp +++ b/retroshare-gui/src/gui/gxs/GxsGroupFeedItem.cpp @@ -24,6 +24,8 @@ #include "gui/feeds/FeedHolder.h" #include "gui/gxs/RsGxsUpdateBroadcastBase.h" +#include "util/qtthreadsutils.h" + #include #include @@ -43,6 +45,7 @@ GxsGroupFeedItem::GxsGroupFeedItem(FeedHolder *feedHolder, uint32_t feedId, cons /* this are just generally useful for all children */ mIsHome = isHome; + mLastDelay = 300; // re-update after 300ms on fail. See deferred_update() /* load data if we can */ mGroupId = groupId; @@ -116,3 +119,19 @@ void GxsGroupFeedItem::requestGroup() loadGroup(); } +void GxsGroupFeedItem::deferred_update() +{ + mLastDelay = (int)(float(mLastDelay)*1.2); + mLastDelay += 100.0*drand48(); + + if(mLastDelay < 10000.0) + { + std::cerr << "Launching deferred update at " << mLastDelay << " ms." << std::endl; + RsQThreadUtils::postToObject( [this]() { QTimer::singleShot(mLastDelay,this,SLOT(update())); }, this ); + } +} + + + + + diff --git a/retroshare-gui/src/gui/gxs/GxsGroupFeedItem.h b/retroshare-gui/src/gui/gxs/GxsGroupFeedItem.h index 9bb21b6d0..83a8366ee 100644 --- a/retroshare-gui/src/gui/gxs/GxsGroupFeedItem.h +++ b/retroshare-gui/src/gui/gxs/GxsGroupFeedItem.h @@ -58,6 +58,9 @@ protected: virtual RetroShareLink::enumType getLinkType() = 0; virtual QString groupName() = 0; + // This triggers an update in the main thread after a short waiting period. Help loading objects that havn't loaded yet. + void deferred_update(); + protected slots: void subscribe(); void unsubscribe(); @@ -74,6 +77,7 @@ private slots: private: RsGxsGroupId mGroupId; + int mLastDelay; }; Q_DECLARE_METATYPE(RsGxsGroupId)