mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-02-03 11:00:14 -05:00
Merge pull request #2308 from csoler/v0.6-BugFixing_9
V0.6 bug fixing 9
This commit is contained in:
commit
dfa088acac
@ -2039,7 +2039,7 @@ void RsGxsNetService::debugDump()
|
||||
for(ServerMsgMap::const_iterator it(mServerMsgUpdateMap.begin());it!=mServerMsgUpdateMap.end();++it)
|
||||
{
|
||||
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") ;
|
||||
|
||||
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
|
||||
uint32_t used_size = clear_group_data_len;
|
||||
RsItem *item = RsNxsSerialiser(mServType).deserialise(clear_group_data,&used_size) ;
|
||||
RsNxsGrp *nxs_identity_grp=nullptr;
|
||||
|
||||
if(used_size < clear_group_data_len)
|
||||
{
|
||||
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) ;
|
||||
|
||||
auto nxs_identity_grp = dynamic_cast<RsNxsGrp*>(item2);
|
||||
nxs_identity_grp = dynamic_cast<RsNxsGrp*>(item2);
|
||||
|
||||
if(!nxs_identity_grp)
|
||||
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 ;
|
||||
|
||||
// Not Serialised - for GUI's benefit.
|
||||
bool mPgpLinked;
|
||||
bool mPgpKnown;
|
||||
bool mIsAContact; // change that into flags one day
|
||||
RsPgpId mPgpId;
|
||||
|
@ -969,16 +969,14 @@ bool p3IdService::createIdentity(
|
||||
{
|
||||
if(!rsNotify->cachePgpPassphrase(pgpPassword))
|
||||
{
|
||||
RsErr() << __PRETTY_FUNCTION__ << " Failure caching password"
|
||||
<< std::endl;
|
||||
RsErr() << __PRETTY_FUNCTION__ << " Failure caching password" << std::endl;
|
||||
ret = false;
|
||||
goto LabelCreateIdentityCleanup;
|
||||
}
|
||||
|
||||
if(!rsNotify->setDisableAskPassword(true))
|
||||
{
|
||||
RsErr() << __PRETTY_FUNCTION__ << " Failure disabling password user"
|
||||
<< " request" << std::endl;
|
||||
RsErr() << __PRETTY_FUNCTION__ << " Failure disabling password user request" << std::endl;
|
||||
ret = false;
|
||||
goto LabelCreateIdentityCleanup;
|
||||
}
|
||||
@ -990,8 +988,7 @@ bool p3IdService::createIdentity(
|
||||
|
||||
if(!createIdentity(token, params))
|
||||
{
|
||||
RsErr() << __PRETTY_FUNCTION__ << " Failed creating GXS group."
|
||||
<< std::endl;
|
||||
RsErr() << __PRETTY_FUNCTION__ << " Failed creating GXS group." << std::endl;
|
||||
ret = false;
|
||||
goto LabelCreateIdentityCleanup;
|
||||
}
|
||||
@ -1003,16 +1000,14 @@ bool p3IdService::createIdentity(
|
||||
token, std::chrono::seconds(10), std::chrono::milliseconds(20) ))
|
||||
!= RsTokenService::COMPLETE )
|
||||
{
|
||||
RsErr() << __PRETTY_FUNCTION__ << " waitToken("<< token
|
||||
<< ") failed with: " << wtStatus << std::endl;
|
||||
RsErr() << __PRETTY_FUNCTION__ << " waitToken("<< token << ") failed with: " << wtStatus << std::endl;
|
||||
ret = false;
|
||||
goto LabelCreateIdentityCleanup;
|
||||
}
|
||||
|
||||
if(!RsGenExchange::getPublishedGroupMeta(token, meta))
|
||||
{
|
||||
RsErr() << __PRETTY_FUNCTION__ << " Failure getting updated group data."
|
||||
<< std::endl;
|
||||
RsErr() << __PRETTY_FUNCTION__ << " Failure getting updated group data." << std::endl;
|
||||
ret = false;
|
||||
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.mPgpLinked = (!!(group.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility)) || !!(group.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID);
|
||||
|
||||
groups.push_back(group);
|
||||
delete(item);
|
||||
|
@ -191,6 +191,7 @@ void HomePage::toggleIncludeAllIPs()
|
||||
|
||||
HomePage::~HomePage()
|
||||
{
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId);
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
@ -210,10 +210,10 @@ void IdEditDialog::setAvatar(const QPixmap &avatar)
|
||||
mAvatar = avatar;
|
||||
|
||||
if (!mAvatar.isNull()) {
|
||||
ui->avatarLabel->setPixmap(mAvatar);
|
||||
} else {
|
||||
ui->avatarLabel->setPicture(avatar);
|
||||
} else {
|
||||
// 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,18 +551,20 @@ void IdEditDialog::createId()
|
||||
params.nickname = groupname.toUtf8().constData();
|
||||
params.isPgpLinked = (ui->radioButton_GpgId->isChecked());
|
||||
|
||||
if (!mAvatar.isNull())
|
||||
{
|
||||
QByteArray ba;
|
||||
QBuffer buffer(&ba);
|
||||
mAvatar = ui->avatarLabel->extractCroppedScaledPicture();
|
||||
|
||||
buffer.open(QIODevice::WriteOnly);
|
||||
mAvatar.save(&buffer, "PNG"); // writes image into ba in PNG format
|
||||
if (!mAvatar.isNull())
|
||||
{
|
||||
QByteArray ba;
|
||||
QBuffer buffer(&ba);
|
||||
|
||||
params.mImage.copy((uint8_t *) ba.data(), ba.size());
|
||||
}
|
||||
else
|
||||
params.mImage.clear();
|
||||
buffer.open(QIODevice::WriteOnly);
|
||||
mAvatar.save(&buffer, "PNG"); // writes image into ba in PNG format
|
||||
|
||||
params.mImage.copy((uint8_t *) ba.data(), ba.size());
|
||||
}
|
||||
else
|
||||
params.mImage.clear();
|
||||
|
||||
RsGxsId keyId;
|
||||
std::string gpg_password;
|
||||
@ -639,7 +641,7 @@ void IdEditDialog::updateId()
|
||||
RsGxsId keyId;
|
||||
std::string gpg_password;
|
||||
|
||||
if(!mEditGroup.mPgpId.isNull())
|
||||
if(mEditGroup.mPgpLinked)
|
||||
{
|
||||
std::string gpg_name = rsPeers->getGPGName(rsPeers->getGPGOwnId());
|
||||
bool cancelled;
|
||||
|
@ -175,7 +175,7 @@ void PostedPostDelegate::expandItem(RsGxsMessageId msgId,bool expanded)
|
||||
else
|
||||
mExpandedItems.erase(msgId);
|
||||
|
||||
mPostListWidget->forceRedraw();
|
||||
mPostListWidget->redraw();
|
||||
}
|
||||
|
||||
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 */
|
||||
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->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
|
||||
@ -351,31 +351,45 @@ void PostedListWidgetWithModel::handlePostsTreeSizeChange(QSize size)
|
||||
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)
|
||||
{
|
||||
QStringList lst = text.split(" ",QString::SkipEmptyParts) ;
|
||||
|
||||
uint32_t count;
|
||||
mPostedPostsModel->setFilter(lst,count) ;
|
||||
|
||||
ui->showLabel->setText(QString::number(mPostedPostsModel->displayedStartPostIndex()+1)+" - "+QString::number(std::min(mPostedPostsModel->filteredPostsCount(),mPostedPostsModel->displayedStartPostIndex()+POSTS_CHUNK_SIZE+1)));
|
||||
updateShowLabel();
|
||||
}
|
||||
|
||||
void PostedListWidgetWithModel::nextPosts()
|
||||
{
|
||||
ui->postsTree->selectionModel()->clear();
|
||||
if(mPostedPostsModel->displayedStartPostIndex() + POSTS_CHUNK_SIZE < mPostedPostsModel->filteredPostsCount())
|
||||
{
|
||||
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()
|
||||
{
|
||||
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);
|
||||
ui->showLabel->setText(QString::number(mPostedPostsModel->displayedStartPostIndex()+1)+" - "+QString::number(std::min(mPostedPostsModel->filteredPostsCount(),mPostedPostsModel->displayedStartPostIndex()+POSTS_CHUNK_SIZE+1)));
|
||||
mPostedPostsModel->setPostsInterval((int)mPostedPostsModel->displayedStartPostIndex()-POSTS_CHUNK_SIZE,POSTS_CHUNK_SIZE);
|
||||
updateShowLabel();
|
||||
}
|
||||
}
|
||||
|
||||
@ -651,7 +665,7 @@ void PostedListWidgetWithModel::postPostLoad()
|
||||
else
|
||||
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()
|
||||
@ -659,7 +673,11 @@ void PostedListWidgetWithModel::forceRedraw()
|
||||
if(mPostedPostsModel)
|
||||
mPostedPostsModel->deepUpdate();
|
||||
}
|
||||
|
||||
void PostedListWidgetWithModel::redraw()
|
||||
{
|
||||
if(mPostedPostsModel)
|
||||
mPostedPostsModel->triggerRedraw();
|
||||
}
|
||||
void PostedListWidgetWithModel::updateDisplay(bool complete)
|
||||
{
|
||||
#ifdef DEBUG_CHANNEL
|
||||
|
@ -99,7 +99,8 @@ public:
|
||||
virtual bool navigate(const RsGxsMessageId&) override;
|
||||
|
||||
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
|
||||
/* FeedHolder */
|
||||
@ -149,6 +150,7 @@ private slots:
|
||||
void nextPosts();
|
||||
void prevPosts();
|
||||
void filterItems(QString s);
|
||||
void updateShowLabel();
|
||||
|
||||
public slots:
|
||||
void handlePostsTreeSizeChange(QSize size);
|
||||
|
@ -42,10 +42,12 @@ const uint32_t RsPostedPostsModel::DEFAULT_DISPLAYED_NB_POSTS = 10;
|
||||
|
||||
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)
|
||||
{
|
||||
initEmptyHierarchy();
|
||||
mDefaultDisplayedNbPosts = default_chunk_size;
|
||||
|
||||
initEmptyHierarchy();
|
||||
|
||||
mEventHandlerId = 0;
|
||||
mSortingStrategy = SORT_NEW_SCORE;
|
||||
@ -132,7 +134,7 @@ void RsPostedPostsModel::initEmptyHierarchy()
|
||||
|
||||
mPosts.clear();
|
||||
mFilteredPosts.clear();
|
||||
mDisplayedNbPosts = DEFAULT_DISPLAYED_NB_POSTS;
|
||||
mDisplayedNbPosts = mDefaultDisplayedNbPosts;
|
||||
mDisplayedStartIndex = 0;
|
||||
|
||||
postMods();
|
||||
@ -149,7 +151,8 @@ void RsPostedPostsModel::postMods()
|
||||
}
|
||||
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()
|
||||
{
|
||||
@ -191,7 +194,7 @@ void RsPostedPostsModel::setFilter(const QStringList& strings, uint32_t& count)
|
||||
count = mFilteredPosts.size();
|
||||
|
||||
mDisplayedStartIndex = 0;
|
||||
mDisplayedNbPosts = std::min(count,DEFAULT_DISPLAYED_NB_POSTS) ;
|
||||
mDisplayedNbPosts = std::min(count,mDefaultDisplayedNbPosts) ;
|
||||
|
||||
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())
|
||||
return;
|
||||
if(start < 0)
|
||||
start = 0;
|
||||
|
||||
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));
|
||||
mDisplayedStartIndex = start;
|
||||
if(old_nb_rows > new_nb_rows)
|
||||
{
|
||||
beginRemoveRows(QModelIndex(),new_nb_rows,old_nb_rows-1);
|
||||
endRemoveRows();
|
||||
}
|
||||
|
||||
beginRemoveRows(QModelIndex(),mDisplayedNbPosts,old_nb_rows);
|
||||
endRemoveRows();
|
||||
mDisplayedStartIndex = start;
|
||||
mDisplayedNbPosts = new_nb_rows;
|
||||
|
||||
beginInsertRows(QModelIndex(),old_nb_rows,mDisplayedNbPosts);
|
||||
endInsertRows();
|
||||
if(new_nb_rows > old_nb_rows)
|
||||
{
|
||||
beginInsertRows(QModelIndex(),old_nb_rows,new_nb_rows-1);
|
||||
endInsertRows();
|
||||
}
|
||||
|
||||
postMods();
|
||||
}
|
||||
@ -532,7 +544,7 @@ void RsPostedPostsModel::setPosts(const RsPostedGroup& group, std::vector<RsPost
|
||||
uint32_t 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;
|
||||
|
||||
if (rowCount()>0)
|
||||
|
@ -92,7 +92,7 @@ class RsPostedPostsModel : public QAbstractItemModel
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit RsPostedPostsModel(QObject *parent = NULL);
|
||||
explicit RsPostedPostsModel(int default_chunk_size,QObject *parent = NULL);
|
||||
virtual ~RsPostedPostsModel() override;
|
||||
|
||||
static const uint32_t COLUMN_THREAD_NB_COLUMNS = 0x01;
|
||||
@ -159,6 +159,7 @@ public:
|
||||
void setFilter(const QStringList &strings, uint32_t &count) ;
|
||||
void setSortingStrategy(SortingStrategy s);
|
||||
void setPostsInterval(int start,int nb_posts);
|
||||
void setPostsDefaultInterval(int size);
|
||||
|
||||
#ifdef TODO
|
||||
void setAuthorOpinion(const QModelIndex& indx,RsOpinion op);
|
||||
@ -246,6 +247,7 @@ private:
|
||||
std::vector<int> mFilteredPosts;
|
||||
uint32_t mDisplayedStartIndex;
|
||||
uint32_t mDisplayedNbPosts;
|
||||
uint32_t mDefaultDisplayedNbPosts;
|
||||
SortingStrategy mSortingStrategy;
|
||||
|
||||
RsEventsHandlerId_t mEventHandlerId ;
|
||||
|
@ -42,7 +42,7 @@ void RSTreeView::mouseMoveEvent(QMouseEvent *e)
|
||||
{
|
||||
QModelIndex idx = indexAt(e->pos());
|
||||
|
||||
if(idx != selectionModel()->currentIndex())
|
||||
if(idx.isValid() && idx != selectionModel()->currentIndex())
|
||||
selectionModel()->setCurrentIndex(idx,QItemSelectionModel::ClearAndSelect);
|
||||
|
||||
QTreeView::mouseMoveEvent(e);
|
||||
|
Loading…
x
Reference in New Issue
Block a user