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;
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();

View file

@ -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));

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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!

View file

@ -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.

View file

@ -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]);

View file

@ -24,6 +24,8 @@
#include "gui/feeds/FeedHolder.h"
#include "gui/gxs/RsGxsUpdateBroadcastBase.h"
#include "util/qtthreadsutils.h"
#include <iostream>
#include <algorithm>
@ -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 );
}
}

View file

@ -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)