mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-07-23 06:31:20 -04:00
Merge pull request #2308 from csoler/v0.6-BugFixing_9
V0.6 bug fixing 9
This commit is contained in:
commit
dfa088acac
10 changed files with 87 additions and 52 deletions
|
@ -2039,7 +2039,7 @@ void RsGxsNetService::debugDump()
|
||||||
for(ServerMsgMap::const_iterator it(mServerMsgUpdateMap.begin());it!=mServerMsgUpdateMap.end();++it)
|
for(ServerMsgMap::const_iterator it(mServerMsgUpdateMap.begin());it!=mServerMsgUpdateMap.end();++it)
|
||||||
{
|
{
|
||||||
RsGxsGrpMetaTemporaryMap::const_iterator it2 = grpMetas.find(it->first) ;
|
RsGxsGrpMetaTemporaryMap::const_iterator it2 = grpMetas.find(it->first) ;
|
||||||
RsGxsGrpMetaData *grpMeta = (it2 != grpMetas.end())? it2->second : NULL;
|
auto grpMeta = (it2 != grpMetas.end())? it2->second : (std::shared_ptr<RsGxsGrpMetaData>()) ;
|
||||||
std::string subscribe_string = (grpMeta==NULL)?"Unknown" : ((grpMeta->mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED)?" Subscribed":" NOT Subscribed") ;
|
std::string subscribe_string = (grpMeta==NULL)?"Unknown" : ((grpMeta->mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED)?" Subscribed":" NOT Subscribed") ;
|
||||||
|
|
||||||
GXSNETDEBUG__G(it->first) << " Grp:" << it->first << " last local modification (secs ago): " << nice_time_stamp(time(NULL),it->second.msgUpdateTS) << ", " << subscribe_string << std::endl;
|
GXSNETDEBUG__G(it->first) << " Grp:" << it->first << " last local modification (secs ago): " << nice_time_stamp(time(NULL),it->second.msgUpdateTS) << ", " << subscribe_string << std::endl;
|
||||||
|
@ -5368,13 +5368,14 @@ void RsGxsNetService::receiveTurtleSearchResults(TurtleRequestId req,const unsig
|
||||||
#endif
|
#endif
|
||||||
uint32_t used_size = clear_group_data_len;
|
uint32_t used_size = clear_group_data_len;
|
||||||
RsItem *item = RsNxsSerialiser(mServType).deserialise(clear_group_data,&used_size) ;
|
RsItem *item = RsNxsSerialiser(mServType).deserialise(clear_group_data,&used_size) ;
|
||||||
|
RsNxsGrp *nxs_identity_grp=nullptr;
|
||||||
|
|
||||||
if(used_size < clear_group_data_len)
|
if(used_size < clear_group_data_len)
|
||||||
{
|
{
|
||||||
uint32_t remaining_size = clear_group_data_len-used_size ;
|
uint32_t remaining_size = clear_group_data_len-used_size ;
|
||||||
RsItem *item2 = RsNxsSerialiser(RS_SERVICE_GXS_TYPE_GXSID).deserialise(clear_group_data+used_size,&remaining_size) ;
|
RsItem *item2 = RsNxsSerialiser(RS_SERVICE_GXS_TYPE_GXSID).deserialise(clear_group_data+used_size,&remaining_size) ;
|
||||||
|
|
||||||
auto nxs_identity_grp = dynamic_cast<RsNxsGrp*>(item2);
|
nxs_identity_grp = dynamic_cast<RsNxsGrp*>(item2);
|
||||||
|
|
||||||
if(!nxs_identity_grp)
|
if(!nxs_identity_grp)
|
||||||
std::cerr << "(EE) decrypted item contains more data that cannot be deserialized as a GxsId. Unexpected!" << std::endl;
|
std::cerr << "(EE) decrypted item contains more data that cannot be deserialized as a GxsId. Unexpected!" << std::endl;
|
||||||
|
|
|
@ -143,6 +143,7 @@ struct RsGxsIdGroup : RsSerializable
|
||||||
rstime_t mLastUsageTS ;
|
rstime_t mLastUsageTS ;
|
||||||
|
|
||||||
// Not Serialised - for GUI's benefit.
|
// Not Serialised - for GUI's benefit.
|
||||||
|
bool mPgpLinked;
|
||||||
bool mPgpKnown;
|
bool mPgpKnown;
|
||||||
bool mIsAContact; // change that into flags one day
|
bool mIsAContact; // change that into flags one day
|
||||||
RsPgpId mPgpId;
|
RsPgpId mPgpId;
|
||||||
|
|
|
@ -969,16 +969,14 @@ bool p3IdService::createIdentity(
|
||||||
{
|
{
|
||||||
if(!rsNotify->cachePgpPassphrase(pgpPassword))
|
if(!rsNotify->cachePgpPassphrase(pgpPassword))
|
||||||
{
|
{
|
||||||
RsErr() << __PRETTY_FUNCTION__ << " Failure caching password"
|
RsErr() << __PRETTY_FUNCTION__ << " Failure caching password" << std::endl;
|
||||||
<< std::endl;
|
|
||||||
ret = false;
|
ret = false;
|
||||||
goto LabelCreateIdentityCleanup;
|
goto LabelCreateIdentityCleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!rsNotify->setDisableAskPassword(true))
|
if(!rsNotify->setDisableAskPassword(true))
|
||||||
{
|
{
|
||||||
RsErr() << __PRETTY_FUNCTION__ << " Failure disabling password user"
|
RsErr() << __PRETTY_FUNCTION__ << " Failure disabling password user request" << std::endl;
|
||||||
<< " request" << std::endl;
|
|
||||||
ret = false;
|
ret = false;
|
||||||
goto LabelCreateIdentityCleanup;
|
goto LabelCreateIdentityCleanup;
|
||||||
}
|
}
|
||||||
|
@ -990,8 +988,7 @@ bool p3IdService::createIdentity(
|
||||||
|
|
||||||
if(!createIdentity(token, params))
|
if(!createIdentity(token, params))
|
||||||
{
|
{
|
||||||
RsErr() << __PRETTY_FUNCTION__ << " Failed creating GXS group."
|
RsErr() << __PRETTY_FUNCTION__ << " Failed creating GXS group." << std::endl;
|
||||||
<< std::endl;
|
|
||||||
ret = false;
|
ret = false;
|
||||||
goto LabelCreateIdentityCleanup;
|
goto LabelCreateIdentityCleanup;
|
||||||
}
|
}
|
||||||
|
@ -1003,16 +1000,14 @@ bool p3IdService::createIdentity(
|
||||||
token, std::chrono::seconds(10), std::chrono::milliseconds(20) ))
|
token, std::chrono::seconds(10), std::chrono::milliseconds(20) ))
|
||||||
!= RsTokenService::COMPLETE )
|
!= RsTokenService::COMPLETE )
|
||||||
{
|
{
|
||||||
RsErr() << __PRETTY_FUNCTION__ << " waitToken("<< token
|
RsErr() << __PRETTY_FUNCTION__ << " waitToken("<< token << ") failed with: " << wtStatus << std::endl;
|
||||||
<< ") failed with: " << wtStatus << std::endl;
|
|
||||||
ret = false;
|
ret = false;
|
||||||
goto LabelCreateIdentityCleanup;
|
goto LabelCreateIdentityCleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!RsGenExchange::getPublishedGroupMeta(token, meta))
|
if(!RsGenExchange::getPublishedGroupMeta(token, meta))
|
||||||
{
|
{
|
||||||
RsErr() << __PRETTY_FUNCTION__ << " Failure getting updated group data."
|
RsErr() << __PRETTY_FUNCTION__ << " Failure getting updated group data." << std::endl;
|
||||||
<< std::endl;
|
|
||||||
ret = false;
|
ret = false;
|
||||||
goto LabelCreateIdentityCleanup;
|
goto LabelCreateIdentityCleanup;
|
||||||
}
|
}
|
||||||
|
@ -2022,6 +2017,7 @@ bool p3IdService::getGroupData(const uint32_t &token, std::vector<RsGxsIdGroup>
|
||||||
}
|
}
|
||||||
|
|
||||||
group.mIsAContact = (mContacts.find(RsGxsId(group.mMeta.mGroupId)) != mContacts.end());
|
group.mIsAContact = (mContacts.find(RsGxsId(group.mMeta.mGroupId)) != mContacts.end());
|
||||||
|
group.mPgpLinked = (!!(group.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility)) || !!(group.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID);
|
||||||
|
|
||||||
groups.push_back(group);
|
groups.push_back(group);
|
||||||
delete(item);
|
delete(item);
|
||||||
|
|
|
@ -191,6 +191,7 @@ void HomePage::toggleIncludeAllIPs()
|
||||||
|
|
||||||
HomePage::~HomePage()
|
HomePage::~HomePage()
|
||||||
{
|
{
|
||||||
|
rsEvents->unregisterEventsHandler(mEventHandlerId);
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -210,10 +210,10 @@ void IdEditDialog::setAvatar(const QPixmap &avatar)
|
||||||
mAvatar = avatar;
|
mAvatar = avatar;
|
||||||
|
|
||||||
if (!mAvatar.isNull()) {
|
if (!mAvatar.isNull()) {
|
||||||
ui->avatarLabel->setPixmap(mAvatar);
|
ui->avatarLabel->setPicture(avatar);
|
||||||
} else {
|
} else {
|
||||||
// we need to use the default pixmap here, generated from the ID
|
// we need to use the default pixmap here, generated from the ID
|
||||||
ui->avatarLabel->setPixmap(GxsIdDetails::makeDefaultIcon(RsGxsId(mEditGroup.mMeta.mGroupId)));
|
ui->avatarLabel->setPicture(GxsIdDetails::makeDefaultIcon(RsGxsId(mEditGroup.mMeta.mGroupId)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -551,6 +551,8 @@ void IdEditDialog::createId()
|
||||||
params.nickname = groupname.toUtf8().constData();
|
params.nickname = groupname.toUtf8().constData();
|
||||||
params.isPgpLinked = (ui->radioButton_GpgId->isChecked());
|
params.isPgpLinked = (ui->radioButton_GpgId->isChecked());
|
||||||
|
|
||||||
|
mAvatar = ui->avatarLabel->extractCroppedScaledPicture();
|
||||||
|
|
||||||
if (!mAvatar.isNull())
|
if (!mAvatar.isNull())
|
||||||
{
|
{
|
||||||
QByteArray ba;
|
QByteArray ba;
|
||||||
|
@ -639,7 +641,7 @@ void IdEditDialog::updateId()
|
||||||
RsGxsId keyId;
|
RsGxsId keyId;
|
||||||
std::string gpg_password;
|
std::string gpg_password;
|
||||||
|
|
||||||
if(!mEditGroup.mPgpId.isNull())
|
if(mEditGroup.mPgpLinked)
|
||||||
{
|
{
|
||||||
std::string gpg_name = rsPeers->getGPGName(rsPeers->getGPGOwnId());
|
std::string gpg_name = rsPeers->getGPGName(rsPeers->getGPGOwnId());
|
||||||
bool cancelled;
|
bool cancelled;
|
||||||
|
|
|
@ -175,7 +175,7 @@ void PostedPostDelegate::expandItem(RsGxsMessageId msgId,bool expanded)
|
||||||
else
|
else
|
||||||
mExpandedItems.erase(msgId);
|
mExpandedItems.erase(msgId);
|
||||||
|
|
||||||
mPostListWidget->forceRedraw();
|
mPostListWidget->redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t PostedPostDelegate::displayFlags(const RsGxsMessageId &id) const
|
uint8_t PostedPostDelegate::displayFlags(const RsGxsMessageId &id) const
|
||||||
|
@ -244,7 +244,7 @@ PostedListWidgetWithModel::PostedListWidgetWithModel(const RsGxsGroupId& postedI
|
||||||
/* Invoke the Qt Designer generated object setup routine */
|
/* Invoke the Qt Designer generated object setup routine */
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
ui->postsTree->setModel(mPostedPostsModel = new RsPostedPostsModel());
|
ui->postsTree->setModel(mPostedPostsModel = new RsPostedPostsModel(POSTS_CHUNK_SIZE));
|
||||||
ui->postsTree->setItemDelegate(mPostedPostsDelegate = new PostedPostDelegate(this));
|
ui->postsTree->setItemDelegate(mPostedPostsDelegate = new PostedPostDelegate(this));
|
||||||
ui->postsTree->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // prevents bug on w10, since row size depends on widget width
|
ui->postsTree->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // prevents bug on w10, since row size depends on widget width
|
||||||
ui->postsTree->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);// more beautiful if we scroll at pixel level
|
ui->postsTree->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);// more beautiful if we scroll at pixel level
|
||||||
|
@ -351,31 +351,45 @@ void PostedListWidgetWithModel::handlePostsTreeSizeChange(QSize size)
|
||||||
mPostedPostsModel->triggerRedraw();
|
mPostedPostsModel->triggerRedraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PostedListWidgetWithModel::updateShowLabel()
|
||||||
|
{
|
||||||
|
if (mPostedPostsModel->rowCount() > 0)
|
||||||
|
whileBlocking(ui->showLabel)->setText(QString::number(mPostedPostsModel->displayedStartPostIndex()+1)
|
||||||
|
+" - "+QString::number(mPostedPostsModel->displayedStartPostIndex()+mPostedPostsModel->rowCount()));
|
||||||
|
else
|
||||||
|
whileBlocking(ui->showLabel)->setText(tr("Empty"));
|
||||||
|
|
||||||
|
ui->nextButton->setEnabled(mPostedPostsModel->displayedStartPostIndex() + POSTS_CHUNK_SIZE < mPostedPostsModel->filteredPostsCount());
|
||||||
|
ui->prevButton->setEnabled(mPostedPostsModel->displayedStartPostIndex() > 0);
|
||||||
|
}
|
||||||
|
|
||||||
void PostedListWidgetWithModel::filterItems(QString text)
|
void PostedListWidgetWithModel::filterItems(QString text)
|
||||||
{
|
{
|
||||||
QStringList lst = text.split(" ",QString::SkipEmptyParts) ;
|
QStringList lst = text.split(" ",QString::SkipEmptyParts) ;
|
||||||
|
|
||||||
uint32_t count;
|
uint32_t count;
|
||||||
mPostedPostsModel->setFilter(lst,count) ;
|
mPostedPostsModel->setFilter(lst,count) ;
|
||||||
|
updateShowLabel();
|
||||||
ui->showLabel->setText(QString::number(mPostedPostsModel->displayedStartPostIndex()+1)+" - "+QString::number(std::min(mPostedPostsModel->filteredPostsCount(),mPostedPostsModel->displayedStartPostIndex()+POSTS_CHUNK_SIZE+1)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PostedListWidgetWithModel::nextPosts()
|
void PostedListWidgetWithModel::nextPosts()
|
||||||
{
|
{
|
||||||
|
ui->postsTree->selectionModel()->clear();
|
||||||
if(mPostedPostsModel->displayedStartPostIndex() + POSTS_CHUNK_SIZE < mPostedPostsModel->filteredPostsCount())
|
if(mPostedPostsModel->displayedStartPostIndex() + POSTS_CHUNK_SIZE < mPostedPostsModel->filteredPostsCount())
|
||||||
{
|
{
|
||||||
mPostedPostsModel->setPostsInterval(POSTS_CHUNK_SIZE+mPostedPostsModel->displayedStartPostIndex(),POSTS_CHUNK_SIZE);
|
mPostedPostsModel->setPostsInterval(POSTS_CHUNK_SIZE+mPostedPostsModel->displayedStartPostIndex(),POSTS_CHUNK_SIZE);
|
||||||
ui->showLabel->setText(QString::number(mPostedPostsModel->displayedStartPostIndex()+1)+" - "+QString::number(std::min(mPostedPostsModel->filteredPostsCount(),mPostedPostsModel->displayedStartPostIndex()+POSTS_CHUNK_SIZE+1)));
|
updateShowLabel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PostedListWidgetWithModel::prevPosts()
|
void PostedListWidgetWithModel::prevPosts()
|
||||||
{
|
{
|
||||||
if((int)mPostedPostsModel->displayedStartPostIndex() - POSTS_CHUNK_SIZE >= 0)
|
ui->postsTree->selectionModel()->clear();
|
||||||
|
|
||||||
|
if((int)mPostedPostsModel->displayedStartPostIndex() > 0)
|
||||||
{
|
{
|
||||||
mPostedPostsModel->setPostsInterval(mPostedPostsModel->displayedStartPostIndex()-POSTS_CHUNK_SIZE,POSTS_CHUNK_SIZE);
|
mPostedPostsModel->setPostsInterval((int)mPostedPostsModel->displayedStartPostIndex()-POSTS_CHUNK_SIZE,POSTS_CHUNK_SIZE);
|
||||||
ui->showLabel->setText(QString::number(mPostedPostsModel->displayedStartPostIndex()+1)+" - "+QString::number(std::min(mPostedPostsModel->filteredPostsCount(),mPostedPostsModel->displayedStartPostIndex()+POSTS_CHUNK_SIZE+1)));
|
updateShowLabel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -651,7 +665,7 @@ void PostedListWidgetWithModel::postPostLoad()
|
||||||
else
|
else
|
||||||
std::cerr << "No pre-selected channel post." << std::endl;
|
std::cerr << "No pre-selected channel post." << std::endl;
|
||||||
|
|
||||||
whileBlocking(ui->showLabel)->setText(QString::number(mPostedPostsModel->displayedStartPostIndex()+1)+" - "+QString::number(std::min(mPostedPostsModel->filteredPostsCount(),mPostedPostsModel->displayedStartPostIndex()+POSTS_CHUNK_SIZE+1)));
|
updateShowLabel();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PostedListWidgetWithModel::forceRedraw()
|
void PostedListWidgetWithModel::forceRedraw()
|
||||||
|
@ -659,7 +673,11 @@ void PostedListWidgetWithModel::forceRedraw()
|
||||||
if(mPostedPostsModel)
|
if(mPostedPostsModel)
|
||||||
mPostedPostsModel->deepUpdate();
|
mPostedPostsModel->deepUpdate();
|
||||||
}
|
}
|
||||||
|
void PostedListWidgetWithModel::redraw()
|
||||||
|
{
|
||||||
|
if(mPostedPostsModel)
|
||||||
|
mPostedPostsModel->triggerRedraw();
|
||||||
|
}
|
||||||
void PostedListWidgetWithModel::updateDisplay(bool complete)
|
void PostedListWidgetWithModel::updateDisplay(bool complete)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_CHANNEL
|
#ifdef DEBUG_CHANNEL
|
||||||
|
|
|
@ -99,7 +99,8 @@ public:
|
||||||
virtual bool navigate(const RsGxsMessageId&) override;
|
virtual bool navigate(const RsGxsMessageId&) override;
|
||||||
|
|
||||||
void updateDisplay(bool complete) ;
|
void updateDisplay(bool complete) ;
|
||||||
void forceRedraw(); // does not re-load the data, but makes sure the underlying model triggers a full redraw, recomputes sizes, etc.
|
void forceRedraw(); // does not re-load the data, but makes sure the underlying model triggers a full redraw, recomputes indexes, etc.
|
||||||
|
void redraw(); // does not re-load the data, but makes sure the underlying model triggers a full redraw, recomputes only sizes.
|
||||||
|
|
||||||
#ifdef TODO
|
#ifdef TODO
|
||||||
/* FeedHolder */
|
/* FeedHolder */
|
||||||
|
@ -149,6 +150,7 @@ private slots:
|
||||||
void nextPosts();
|
void nextPosts();
|
||||||
void prevPosts();
|
void prevPosts();
|
||||||
void filterItems(QString s);
|
void filterItems(QString s);
|
||||||
|
void updateShowLabel();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void handlePostsTreeSizeChange(QSize size);
|
void handlePostsTreeSizeChange(QSize size);
|
||||||
|
|
|
@ -42,9 +42,11 @@ const uint32_t RsPostedPostsModel::DEFAULT_DISPLAYED_NB_POSTS = 10;
|
||||||
|
|
||||||
std::ostream& operator<<(std::ostream& o, const QModelIndex& i);// defined elsewhere
|
std::ostream& operator<<(std::ostream& o, const QModelIndex& i);// defined elsewhere
|
||||||
|
|
||||||
RsPostedPostsModel::RsPostedPostsModel(QObject *parent)
|
RsPostedPostsModel::RsPostedPostsModel(int default_chunk_size, QObject *parent)
|
||||||
: QAbstractItemModel(parent), mTreeMode(TREE_MODE_PLAIN)
|
: QAbstractItemModel(parent), mTreeMode(TREE_MODE_PLAIN)
|
||||||
{
|
{
|
||||||
|
mDefaultDisplayedNbPosts = default_chunk_size;
|
||||||
|
|
||||||
initEmptyHierarchy();
|
initEmptyHierarchy();
|
||||||
|
|
||||||
mEventHandlerId = 0;
|
mEventHandlerId = 0;
|
||||||
|
@ -132,7 +134,7 @@ void RsPostedPostsModel::initEmptyHierarchy()
|
||||||
|
|
||||||
mPosts.clear();
|
mPosts.clear();
|
||||||
mFilteredPosts.clear();
|
mFilteredPosts.clear();
|
||||||
mDisplayedNbPosts = DEFAULT_DISPLAYED_NB_POSTS;
|
mDisplayedNbPosts = mDefaultDisplayedNbPosts;
|
||||||
mDisplayedStartIndex = 0;
|
mDisplayedStartIndex = 0;
|
||||||
|
|
||||||
postMods();
|
postMods();
|
||||||
|
@ -149,7 +151,8 @@ void RsPostedPostsModel::postMods()
|
||||||
}
|
}
|
||||||
void RsPostedPostsModel::update()
|
void RsPostedPostsModel::update()
|
||||||
{
|
{
|
||||||
emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(mDisplayedNbPosts,0,(void*)NULL));
|
if(mDisplayedNbPosts > 0)
|
||||||
|
emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(mDisplayedNbPosts-1,0,(void*)NULL));
|
||||||
}
|
}
|
||||||
void RsPostedPostsModel::triggerRedraw()
|
void RsPostedPostsModel::triggerRedraw()
|
||||||
{
|
{
|
||||||
|
@ -191,7 +194,7 @@ void RsPostedPostsModel::setFilter(const QStringList& strings, uint32_t& count)
|
||||||
count = mFilteredPosts.size();
|
count = mFilteredPosts.size();
|
||||||
|
|
||||||
mDisplayedStartIndex = 0;
|
mDisplayedStartIndex = 0;
|
||||||
mDisplayedNbPosts = std::min(count,DEFAULT_DISPLAYED_NB_POSTS) ;
|
mDisplayedNbPosts = std::min(count,mDefaultDisplayedNbPosts) ;
|
||||||
|
|
||||||
std::cerr << "After filtering: " << count << " posts remain." << std::endl;
|
std::cerr << "After filtering: " << count << " posts remain." << std::endl;
|
||||||
|
|
||||||
|
@ -491,19 +494,28 @@ void RsPostedPostsModel::setPostsInterval(int start,int nb_posts)
|
||||||
{
|
{
|
||||||
if(start >= (int)mFilteredPosts.size())
|
if(start >= (int)mFilteredPosts.size())
|
||||||
return;
|
return;
|
||||||
|
if(start < 0)
|
||||||
|
start = 0;
|
||||||
|
|
||||||
preMods();
|
preMods();
|
||||||
|
|
||||||
uint32_t old_nb_rows = rowCount() ;
|
int old_nb_rows = rowCount() ;
|
||||||
|
int new_nb_rows = (uint32_t)std::min(nb_posts,(int)mFilteredPosts.size() - start);
|
||||||
|
|
||||||
mDisplayedNbPosts = (uint32_t)std::min(nb_posts,(int)mFilteredPosts.size() - (start+1));
|
if(old_nb_rows > new_nb_rows)
|
||||||
mDisplayedStartIndex = start;
|
{
|
||||||
|
beginRemoveRows(QModelIndex(),new_nb_rows,old_nb_rows-1);
|
||||||
beginRemoveRows(QModelIndex(),mDisplayedNbPosts,old_nb_rows);
|
|
||||||
endRemoveRows();
|
endRemoveRows();
|
||||||
|
}
|
||||||
|
|
||||||
beginInsertRows(QModelIndex(),old_nb_rows,mDisplayedNbPosts);
|
mDisplayedStartIndex = start;
|
||||||
|
mDisplayedNbPosts = new_nb_rows;
|
||||||
|
|
||||||
|
if(new_nb_rows > old_nb_rows)
|
||||||
|
{
|
||||||
|
beginInsertRows(QModelIndex(),old_nb_rows,new_nb_rows-1);
|
||||||
endInsertRows();
|
endInsertRows();
|
||||||
|
}
|
||||||
|
|
||||||
postMods();
|
postMods();
|
||||||
}
|
}
|
||||||
|
@ -532,7 +544,7 @@ void RsPostedPostsModel::setPosts(const RsPostedGroup& group, std::vector<RsPost
|
||||||
uint32_t tmpval;
|
uint32_t tmpval;
|
||||||
setFilter(QStringList(),tmpval);
|
setFilter(QStringList(),tmpval);
|
||||||
|
|
||||||
mDisplayedNbPosts = std::min((uint32_t)mFilteredPosts.size(),DEFAULT_DISPLAYED_NB_POSTS);
|
mDisplayedNbPosts = std::min((uint32_t)mFilteredPosts.size(),mDefaultDisplayedNbPosts);
|
||||||
mDisplayedStartIndex = 0;
|
mDisplayedStartIndex = 0;
|
||||||
|
|
||||||
if (rowCount()>0)
|
if (rowCount()>0)
|
||||||
|
|
|
@ -92,7 +92,7 @@ class RsPostedPostsModel : public QAbstractItemModel
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit RsPostedPostsModel(QObject *parent = NULL);
|
explicit RsPostedPostsModel(int default_chunk_size,QObject *parent = NULL);
|
||||||
virtual ~RsPostedPostsModel() override;
|
virtual ~RsPostedPostsModel() override;
|
||||||
|
|
||||||
static const uint32_t COLUMN_THREAD_NB_COLUMNS = 0x01;
|
static const uint32_t COLUMN_THREAD_NB_COLUMNS = 0x01;
|
||||||
|
@ -159,6 +159,7 @@ public:
|
||||||
void setFilter(const QStringList &strings, uint32_t &count) ;
|
void setFilter(const QStringList &strings, uint32_t &count) ;
|
||||||
void setSortingStrategy(SortingStrategy s);
|
void setSortingStrategy(SortingStrategy s);
|
||||||
void setPostsInterval(int start,int nb_posts);
|
void setPostsInterval(int start,int nb_posts);
|
||||||
|
void setPostsDefaultInterval(int size);
|
||||||
|
|
||||||
#ifdef TODO
|
#ifdef TODO
|
||||||
void setAuthorOpinion(const QModelIndex& indx,RsOpinion op);
|
void setAuthorOpinion(const QModelIndex& indx,RsOpinion op);
|
||||||
|
@ -246,6 +247,7 @@ private:
|
||||||
std::vector<int> mFilteredPosts;
|
std::vector<int> mFilteredPosts;
|
||||||
uint32_t mDisplayedStartIndex;
|
uint32_t mDisplayedStartIndex;
|
||||||
uint32_t mDisplayedNbPosts;
|
uint32_t mDisplayedNbPosts;
|
||||||
|
uint32_t mDefaultDisplayedNbPosts;
|
||||||
SortingStrategy mSortingStrategy;
|
SortingStrategy mSortingStrategy;
|
||||||
|
|
||||||
RsEventsHandlerId_t mEventHandlerId ;
|
RsEventsHandlerId_t mEventHandlerId ;
|
||||||
|
|
|
@ -42,7 +42,7 @@ void RSTreeView::mouseMoveEvent(QMouseEvent *e)
|
||||||
{
|
{
|
||||||
QModelIndex idx = indexAt(e->pos());
|
QModelIndex idx = indexAt(e->pos());
|
||||||
|
|
||||||
if(idx != selectionModel()->currentIndex())
|
if(idx.isValid() && idx != selectionModel()->currentIndex())
|
||||||
selectionModel()->setCurrentIndex(idx,QItemSelectionModel::ClearAndSelect);
|
selectionModel()->setCurrentIndex(idx,QItemSelectionModel::ClearAndSelect);
|
||||||
|
|
||||||
QTreeView::mouseMoveEvent(e);
|
QTreeView::mouseMoveEvent(e);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue