added deferred update to feed items

This commit is contained in:
csoler 2025-11-22 17:51:42 +01:00
parent d86c5dabd3
commit 2eb48e0305
10 changed files with 51 additions and 4 deletions

View file

@ -143,6 +143,7 @@ void BaseBoardsCommentsItem::loadGroup()
{ {
RsErr() << "GxsPostedGroupItem::loadGroup() ERROR getting data" << std::endl; RsErr() << "GxsPostedGroupItem::loadGroup() ERROR getting data" << std::endl;
mIsLoadingGroup = false; mIsLoadingGroup = false;
deferred_update();
return; return;
} }
@ -150,7 +151,8 @@ void BaseBoardsCommentsItem::loadGroup()
{ {
std::cerr << "GxsPostedGroupItem::loadGroup() Wrong number of Items" << std::endl; std::cerr << "GxsPostedGroupItem::loadGroup() Wrong number of Items" << std::endl;
mIsLoadingGroup = false; mIsLoadingGroup = false;
return; deferred_update();
return;
} }
RsPostedGroup group(groups[0]); RsPostedGroup group(groups[0]);
@ -182,7 +184,8 @@ void BaseBoardsCommentsItem::loadMessage()
{ {
RsErr() << "BaseBoardsCommentsItem::loadMessage() ERROR getting data" << std::endl; RsErr() << "BaseBoardsCommentsItem::loadMessage() ERROR getting data" << std::endl;
mIsLoadingMessage = false; mIsLoadingMessage = false;
return; deferred_update();
return;
} }
if (posts.size() == 1) if (posts.size() == 1)
@ -243,7 +246,8 @@ void BaseBoardsCommentsItem::loadComment()
{ {
RsErr() << "BaseBoardsCommentsItem::loadGroup() ERROR getting data" << std::endl; RsErr() << "BaseBoardsCommentsItem::loadGroup() ERROR getting data" << std::endl;
mIsLoadingComment = false; mIsLoadingComment = false;
return; deferred_update();
return;
} }
int comNb = comments.size(); int comNb = comments.size();

View file

@ -220,6 +220,7 @@ void BoardsPostItem::loadGroup()
{ {
RsErr() << "BoardsPostItem::loadGroup() ERROR getting data for group " << groupId() << std::endl; RsErr() << "BoardsPostItem::loadGroup() ERROR getting data for group " << groupId() << std::endl;
mLoadingGroup = false; mLoadingGroup = false;
deferred_update();
return; return;
} }
@ -228,6 +229,7 @@ void BoardsPostItem::loadGroup()
std::cerr << "BoardsPostItem::loadGroup() Wrong number of Items for group " << groupId() ; std::cerr << "BoardsPostItem::loadGroup() Wrong number of Items for group " << groupId() ;
std::cerr << std::endl; std::cerr << std::endl;
mLoadingGroup = false; mLoadingGroup = false;
deferred_update();
return; return;
} }
RsPostedGroup group(groups[0]); RsPostedGroup group(groups[0]);
@ -266,6 +268,7 @@ void BoardsPostItem::loadMessage()
{ {
RsErr() << "BoardsPostedItem::loadMessage() ERROR getting data" << std::endl; RsErr() << "BoardsPostedItem::loadMessage() ERROR getting data" << std::endl;
mLoadingMessage = false; mLoadingMessage = false;
deferred_update();
return; return;
} }
@ -353,7 +356,7 @@ void BoardsPostItem::fill()
ui->subjectLabel->setText(msgText); 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(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)); //ui->newCommentLabel->setText(RsHtml().formatText(NULL, QString::fromUtf8(mPost.mNotes.c_str()), /* RSHTML_FORMATTEXT_EMBED_SMILEYS |*/ RSHTML_FORMATTEXT_EMBED_LINKS));

View file

@ -211,6 +211,7 @@ void ChannelsCommentsItem::loadGroupData()
{ {
RsErr() << "GxsGxsChannelGroupItem::loadGroup() ERROR getting data for group " << groupId() << std::endl; RsErr() << "GxsGxsChannelGroupItem::loadGroup() ERROR getting data for group " << groupId() << std::endl;
mLoadingGroup = false; mLoadingGroup = false;
deferred_update();
return; return;
} }
@ -219,6 +220,7 @@ void ChannelsCommentsItem::loadGroupData()
std::cerr << "GxsGxsChannelGroupItem::loadGroup() Wrong number of Items for group " << groupId() ; std::cerr << "GxsGxsChannelGroupItem::loadGroup() Wrong number of Items for group " << groupId() ;
std::cerr << std::endl; std::cerr << std::endl;
mLoadingGroup = false; mLoadingGroup = false;
deferred_update();
return; return;
} }
RsGxsChannelGroup group(groups[0]); RsGxsChannelGroup group(groups[0]);
@ -257,6 +259,7 @@ void ChannelsCommentsItem::loadMessageData()
{ {
RsErr() << "GxsGxsChannelGroupItem::loadMessage() ERROR getting data" << std::endl; RsErr() << "GxsGxsChannelGroupItem::loadMessage() ERROR getting data" << std::endl;
mLoadingMessage = false; mLoadingMessage = false;
deferred_update();
return; return;
} }
@ -303,11 +306,13 @@ void ChannelsCommentsItem::loadCommentData()
{ {
RsErr() << "GxsGxsChannelGroupItem::loadComment() ERROR getting data" << std::endl; RsErr() << "GxsGxsChannelGroupItem::loadComment() ERROR getting data" << std::endl;
mLoadingComment = false; mLoadingComment = false;
deferred_update();
return; return;
} }
if(comments.size()!=1) if(comments.size()!=1)
{ {
mLoadingComment = false; mLoadingComment = false;
deferred_update();
return; return;
} }

View file

@ -150,6 +150,7 @@ void GxsChannelGroupItem::loadGroup()
{ {
RsErr() << "PostedItem::loadGroup() ERROR getting data" << std::endl; RsErr() << "PostedItem::loadGroup() ERROR getting data" << std::endl;
mLoadingGroup = false; mLoadingGroup = false;
deferred_update();
return; return;
} }
@ -157,6 +158,7 @@ void GxsChannelGroupItem::loadGroup()
{ {
std::cerr << "GxsGxsChannelGroupItem::loadGroup() Wrong number of Items"; std::cerr << "GxsGxsChannelGroupItem::loadGroup() Wrong number of Items";
std::cerr << std::endl; std::cerr << std::endl;
deferred_update();
mLoadingGroup = false; mLoadingGroup = false;
return; return;
} }

View file

@ -219,6 +219,7 @@ void GxsChannelPostItem::loadGroup()
{ {
RsErr() << "GxsGxsChannelGroupItem::loadGroup() ERROR getting data for group " << groupId() << std::endl; RsErr() << "GxsGxsChannelGroupItem::loadGroup() ERROR getting data for group " << groupId() << std::endl;
mLoadingGroup = false; mLoadingGroup = false;
deferred_update();
return; return;
} }
@ -227,6 +228,7 @@ void GxsChannelPostItem::loadGroup()
std::cerr << "GxsGxsChannelGroupItem::loadGroup() Wrong number of Items for group " << groupId() ; std::cerr << "GxsGxsChannelGroupItem::loadGroup() Wrong number of Items for group " << groupId() ;
std::cerr << std::endl; std::cerr << std::endl;
mLoadingGroup = false; mLoadingGroup = false;
deferred_update();
return; return;
} }
RsGxsChannelGroup group(groups[0]); RsGxsChannelGroup group(groups[0]);
@ -265,6 +267,7 @@ void GxsChannelPostItem::loadMessage()
{ {
RsErr() << "GxsGxsChannelGroupItem::loadGroup() ERROR getting data" << std::endl; RsErr() << "GxsGxsChannelGroupItem::loadGroup() ERROR getting data" << std::endl;
mLoadingMessage = false; mLoadingMessage = false;
deferred_update();
return; return;
} }

View file

@ -161,6 +161,7 @@ void GxsForumGroupItem::loadGroup()
{ {
RsErr() << "GxsForumGroupItem::loadGroup() ERROR getting data" << std::endl; RsErr() << "GxsForumGroupItem::loadGroup() ERROR getting data" << std::endl;
mLoadingGroup = false; mLoadingGroup = false;
deferred_update();
return; return;
} }
@ -169,6 +170,7 @@ void GxsForumGroupItem::loadGroup()
std::cerr << "GxsForumGroupItem::loadGroup() Wrong number of Items"; std::cerr << "GxsForumGroupItem::loadGroup() Wrong number of Items";
std::cerr << std::endl; std::cerr << std::endl;
mLoadingGroup = false; mLoadingGroup = false;
deferred_update();
return; return;
} }
RsGxsForumGroup group(groups[0]);// no reference to teporary accross threads! RsGxsForumGroup group(groups[0]);// no reference to teporary accross threads!

View file

@ -167,6 +167,7 @@ void GxsForumMsgItem::loadGroup()
{ {
RsErr() << "GxsForumGroupItem::loadGroup() ERROR getting data" << std::endl; RsErr() << "GxsForumGroupItem::loadGroup() ERROR getting data" << std::endl;
mLoadingGroup = false; mLoadingGroup = false;
deferred_update();
return; return;
} }
@ -175,6 +176,7 @@ void GxsForumMsgItem::loadGroup()
std::cerr << "GxsForumGroupItem::loadGroup() Wrong number of Items"; std::cerr << "GxsForumGroupItem::loadGroup() Wrong number of Items";
std::cerr << std::endl; std::cerr << std::endl;
mLoadingGroup = false; mLoadingGroup = false;
deferred_update();
return; return;
} }
RsGxsForumGroup group(groups[0]); RsGxsForumGroup group(groups[0]);
@ -229,6 +231,7 @@ void GxsForumMsgItem::loadMessage()
{ {
std::cerr << "GxsForumMsgItem::loadMessage() ERROR getting message data"; std::cerr << "GxsForumMsgItem::loadMessage() ERROR getting message data";
mLoadingMessage = false; mLoadingMessage = false;
deferred_update();
return; return;
} }
// now load the parent message. If not found, it's not a problem. // now load the parent message. If not found, it's not a problem.

View file

@ -127,6 +127,7 @@ void PostedGroupItem::loadGroup()
{ {
RsErr() << "GxsPostedGroupItem::loadGroup() ERROR getting data" << std::endl; RsErr() << "GxsPostedGroupItem::loadGroup() ERROR getting data" << std::endl;
mLoadingGroup = false; mLoadingGroup = false;
deferred_update();
return; return;
} }
@ -135,6 +136,7 @@ void PostedGroupItem::loadGroup()
std::cerr << "GxsPostedGroupItem::loadGroup() Wrong number of Items"; std::cerr << "GxsPostedGroupItem::loadGroup() Wrong number of Items";
std::cerr << std::endl; std::cerr << std::endl;
mLoadingGroup = false; mLoadingGroup = false;
deferred_update();
return; return;
} }
RsPostedGroup group(groups[0]); RsPostedGroup group(groups[0]);

View file

@ -24,6 +24,8 @@
#include "gui/feeds/FeedHolder.h" #include "gui/feeds/FeedHolder.h"
#include "gui/gxs/RsGxsUpdateBroadcastBase.h" #include "gui/gxs/RsGxsUpdateBroadcastBase.h"
#include "util/qtthreadsutils.h"
#include <iostream> #include <iostream>
#include <algorithm> #include <algorithm>
@ -43,6 +45,7 @@ GxsGroupFeedItem::GxsGroupFeedItem(FeedHolder *feedHolder, uint32_t feedId, cons
/* this are just generally useful for all children */ /* this are just generally useful for all children */
mIsHome = isHome; mIsHome = isHome;
mLastDelay = 300; // re-update after 300ms on fail. See deferred_update()
/* load data if we can */ /* load data if we can */
mGroupId = groupId; mGroupId = groupId;
@ -116,3 +119,19 @@ void GxsGroupFeedItem::requestGroup()
loadGroup(); 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 );
}
}

View file

@ -58,6 +58,9 @@ protected:
virtual RetroShareLink::enumType getLinkType() = 0; virtual RetroShareLink::enumType getLinkType() = 0;
virtual QString groupName() = 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: protected slots:
void subscribe(); void subscribe();
void unsubscribe(); void unsubscribe();
@ -74,6 +77,7 @@ private slots:
private: private:
RsGxsGroupId mGroupId; RsGxsGroupId mGroupId;
int mLastDelay;
}; };
Q_DECLARE_METATYPE(RsGxsGroupId) Q_DECLARE_METATYPE(RsGxsGroupId)