mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-06-26 07:11:08 -04:00
added a few missing mutexes in prevent searches to be shown when already known
This commit is contained in:
parent
2067b106e4
commit
47e760a2c5
4 changed files with 34 additions and 32 deletions
|
@ -5109,6 +5109,8 @@ bool RsGxsNetService::locked_stampMsgServerUpdateTS(const RsGxsGroupId& gid)
|
||||||
|
|
||||||
TurtleRequestId RsGxsNetService::turtleGroupRequest(const RsGxsGroupId& group_id)
|
TurtleRequestId RsGxsNetService::turtleGroupRequest(const RsGxsGroupId& group_id)
|
||||||
{
|
{
|
||||||
|
RS_STACK_MUTEX(mNxsMutex) ;
|
||||||
|
|
||||||
time_t now = time(NULL);
|
time_t now = time(NULL);
|
||||||
auto it = mSearchedGroups.find(group_id) ;
|
auto it = mSearchedGroups.find(group_id) ;
|
||||||
|
|
||||||
|
@ -5157,6 +5159,7 @@ bool RsGxsNetService::retrieveDistantSearchResults(TurtleRequestId req,std::map<
|
||||||
}
|
}
|
||||||
bool RsGxsNetService::retrieveDistantGroupSummary(const RsGxsGroupId& group_id,RsGxsGroupSummary& gs)
|
bool RsGxsNetService::retrieveDistantGroupSummary(const RsGxsGroupId& group_id,RsGxsGroupSummary& gs)
|
||||||
{
|
{
|
||||||
|
RS_STACK_MUTEX(mNxsMutex) ;
|
||||||
for(auto it(mDistantSearchResults.begin());it!=mDistantSearchResults.end();++it)
|
for(auto it(mDistantSearchResults.begin());it!=mDistantSearchResults.end();++it)
|
||||||
{
|
{
|
||||||
auto it2 = it->second.find(group_id) ;
|
auto it2 = it->second.find(group_id) ;
|
||||||
|
|
|
@ -1140,14 +1140,14 @@ void LocalSharedFilesDialog::spawnCustomPopupMenu( QPoint point )
|
||||||
{
|
{
|
||||||
shareChannelMenu.setIcon(QIcon(IMAGE_CHANNEL));
|
shareChannelMenu.setIcon(QIcon(IMAGE_CHANNEL));
|
||||||
|
|
||||||
std::list<RsGroupMetaData> grp_metas ;
|
std::map<RsGxsGroupId,RsGroupMetaData> grp_metas ;
|
||||||
channelDialog->getGroupList(grp_metas) ;
|
channelDialog->getGroupList(grp_metas) ;
|
||||||
|
|
||||||
std::vector<std::pair<std::string,RsGxsGroupId> > grplist ; // I dont use a std::map because two or more channels may have the same name.
|
std::vector<std::pair<std::string,RsGxsGroupId> > grplist ; // I dont use a std::map because two or more channels may have the same name.
|
||||||
|
|
||||||
for(auto it(grp_metas.begin());it!=grp_metas.end();++it)
|
for(auto it(grp_metas.begin());it!=grp_metas.end();++it)
|
||||||
if(IS_GROUP_PUBLISHER((*it).mSubscribeFlags) && IS_GROUP_SUBSCRIBED((*it).mSubscribeFlags))
|
if(IS_GROUP_PUBLISHER((*it).second.mSubscribeFlags) && IS_GROUP_SUBSCRIBED((*it).second.mSubscribeFlags))
|
||||||
grplist.push_back(std::make_pair((*it).mGroupName, (*it).mGroupId));
|
grplist.push_back(std::make_pair((*it).second.mGroupName, (*it).second.mGroupId));
|
||||||
|
|
||||||
std::sort(grplist.begin(),grplist.end(),ChannelCompare()) ;
|
std::sort(grplist.begin(),grplist.end(),ChannelCompare()) ;
|
||||||
|
|
||||||
|
@ -1164,14 +1164,14 @@ void LocalSharedFilesDialog::spawnCustomPopupMenu( QPoint point )
|
||||||
{
|
{
|
||||||
shareForumMenu.setIcon(QIcon(IMAGE_FORUMS));
|
shareForumMenu.setIcon(QIcon(IMAGE_FORUMS));
|
||||||
|
|
||||||
std::list<RsGroupMetaData> grp_metas ;
|
std::map<RsGxsGroupId,RsGroupMetaData> grp_metas ;
|
||||||
forumsDialog->getGroupList(grp_metas) ;
|
forumsDialog->getGroupList(grp_metas) ;
|
||||||
|
|
||||||
std::vector<std::pair<std::string,RsGxsGroupId> > grplist ; // I dont use a std::map because two or more channels may have the same name.
|
std::vector<std::pair<std::string,RsGxsGroupId> > grplist ; // I dont use a std::map because two or more channels may have the same name.
|
||||||
|
|
||||||
for(auto it(grp_metas.begin());it!=grp_metas.end();++it)
|
for(auto it(grp_metas.begin());it!=grp_metas.end();++it)
|
||||||
if(IS_GROUP_SUBSCRIBED((*it).mSubscribeFlags))
|
if(IS_GROUP_SUBSCRIBED((*it).second.mSubscribeFlags))
|
||||||
grplist.push_back(std::make_pair((*it).mGroupName, (*it).mGroupId));
|
grplist.push_back(std::make_pair((*it).second.mGroupName, (*it).second.mGroupId));
|
||||||
|
|
||||||
std::sort(grplist.begin(),grplist.end(),ChannelCompare()) ;
|
std::sort(grplist.begin(),grplist.end(),ChannelCompare()) ;
|
||||||
|
|
||||||
|
|
|
@ -123,7 +123,7 @@ GxsGroupFrameDialog::~GxsGroupFrameDialog()
|
||||||
delete(ui);
|
delete(ui);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GxsGroupFrameDialog::getGroupList(std::list<RsGroupMetaData>& group_list)
|
void GxsGroupFrameDialog::getGroupList(std::map<RsGxsGroupId, RsGroupMetaData> &group_list)
|
||||||
{
|
{
|
||||||
group_list = mCachedGroupMetas ;
|
group_list = mCachedGroupMetas ;
|
||||||
|
|
||||||
|
@ -265,8 +265,6 @@ void GxsGroupFrameDialog::updateSearchResults()
|
||||||
|
|
||||||
auto it2 = mSearchGroupsItems.find(*it);
|
auto it2 = mSearchGroupsItems.find(*it);
|
||||||
|
|
||||||
std::set<RsGxsGroupId>& known_groups(mKnownGroups[*it]) ;
|
|
||||||
|
|
||||||
if(mSearchGroupsItems.end() == it2)
|
if(mSearchGroupsItems.end() == it2)
|
||||||
{
|
{
|
||||||
std::cerr << "GxsGroupFrameDialog::updateSearchResults(): received result notification for req " << std::hex << *it << std::dec << " but no item present!" << std::endl;
|
std::cerr << "GxsGroupFrameDialog::updateSearchResults(): received result notification for req " << std::hex << *it << std::dec << " but no item present!" << std::endl;
|
||||||
|
@ -276,12 +274,10 @@ void GxsGroupFrameDialog::updateSearchResults()
|
||||||
QList<GroupItemInfo> group_items ;
|
QList<GroupItemInfo> group_items ;
|
||||||
|
|
||||||
for(auto it3(group_infos.begin());it3!=group_infos.end();++it3)
|
for(auto it3(group_infos.begin());it3!=group_infos.end();++it3)
|
||||||
if(known_groups.end() == known_groups.find(it3->first))
|
if(mCachedGroupMetas.find(it3->first) == mCachedGroupMetas.end())
|
||||||
{
|
{
|
||||||
std::cerr << " adding new group " << it3->first << " " << it3->second.group_id << " \"" << it3->second.group_name << "\"" << std::endl;
|
std::cerr << " adding new group " << it3->first << " " << it3->second.group_id << " \"" << it3->second.group_name << "\"" << std::endl;
|
||||||
|
|
||||||
known_groups.insert(it3->first) ;
|
|
||||||
|
|
||||||
GroupItemInfo i ;
|
GroupItemInfo i ;
|
||||||
i.id = QString(it3->second.group_id.toStdString().c_str()) ;
|
i.id = QString(it3->second.group_id.toStdString().c_str()) ;
|
||||||
i.name = QString::fromUtf8(it3->second.group_name.c_str()) ;
|
i.name = QString::fromUtf8(it3->second.group_name.c_str()) ;
|
||||||
|
@ -768,6 +764,8 @@ void GxsGroupFrameDialog::changedCurrentGroup(const QString &groupId)
|
||||||
}
|
}
|
||||||
|
|
||||||
// send a request for the group, if it has been distant-searched.
|
// send a request for the group, if it has been distant-searched.
|
||||||
|
|
||||||
|
if(mCachedGroupMetas.find(mGroupId) == mCachedGroupMetas.end())
|
||||||
checkRequestGroup(mGroupId) ;
|
checkRequestGroup(mGroupId) ;
|
||||||
|
|
||||||
/* search exisiting tab */
|
/* search exisiting tab */
|
||||||
|
@ -894,7 +892,7 @@ void GxsGroupFrameDialog::groupInfoToGroupItemInfo(const RsGroupMetaData &groupI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GxsGroupFrameDialog::insertGroupsData(const std::list<RsGroupMetaData> &groupList, const RsUserdata *userdata)
|
void GxsGroupFrameDialog::insertGroupsData(const std::map<RsGxsGroupId,RsGroupMetaData> &groupList, const RsUserdata *userdata)
|
||||||
{
|
{
|
||||||
if (!mInitialized) {
|
if (!mInitialized) {
|
||||||
return;
|
return;
|
||||||
|
@ -902,20 +900,18 @@ void GxsGroupFrameDialog::insertGroupsData(const std::list<RsGroupMetaData> &gro
|
||||||
|
|
||||||
mInFill = true;
|
mInFill = true;
|
||||||
|
|
||||||
std::list<RsGroupMetaData>::const_iterator it;
|
|
||||||
|
|
||||||
QList<GroupItemInfo> adminList;
|
QList<GroupItemInfo> adminList;
|
||||||
QList<GroupItemInfo> subList;
|
QList<GroupItemInfo> subList;
|
||||||
QList<GroupItemInfo> popList;
|
QList<GroupItemInfo> popList;
|
||||||
QList<GroupItemInfo> otherList;
|
QList<GroupItemInfo> otherList;
|
||||||
std::multimap<uint32_t, GroupItemInfo> popMap;
|
std::multimap<uint32_t, GroupItemInfo> popMap;
|
||||||
|
|
||||||
for (it = groupList.begin(); it != groupList.end(); ++it) {
|
for (auto it = groupList.begin(); it != groupList.end(); ++it) {
|
||||||
/* sort it into Publish (Own), Subscribed, Popular and Other */
|
/* sort it into Publish (Own), Subscribed, Popular and Other */
|
||||||
uint32_t flags = it->mSubscribeFlags;
|
uint32_t flags = it->second.mSubscribeFlags;
|
||||||
|
|
||||||
GroupItemInfo groupItemInfo;
|
GroupItemInfo groupItemInfo;
|
||||||
groupInfoToGroupItemInfo(*it, groupItemInfo, userdata);
|
groupInfoToGroupItemInfo(it->second, groupItemInfo, userdata);
|
||||||
|
|
||||||
if (IS_GROUP_SUBSCRIBED(flags))
|
if (IS_GROUP_SUBSCRIBED(flags))
|
||||||
{
|
{
|
||||||
|
@ -932,7 +928,7 @@ void GxsGroupFrameDialog::insertGroupsData(const std::list<RsGroupMetaData> &gro
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//popMap.insert(std::make_pair(it->mPop, groupItemInfo)); /* rate the others by popularity */
|
//popMap.insert(std::make_pair(it->mPop, groupItemInfo)); /* rate the others by popularity */
|
||||||
popMap.insert(std::make_pair(it->mLastPost, groupItemInfo)); /* rate the others by time of last post */
|
popMap.insert(std::make_pair(it->second.mLastPost, groupItemInfo)); /* rate the others by time of last post */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1043,9 +1039,12 @@ void GxsGroupFrameDialog::loadGroupSummary(const uint32_t &token)
|
||||||
RsUserdata *userdata = NULL;
|
RsUserdata *userdata = NULL;
|
||||||
loadGroupSummaryToken(token, groupInfo, userdata);
|
loadGroupSummaryToken(token, groupInfo, userdata);
|
||||||
|
|
||||||
mCachedGroupMetas = groupInfo ;
|
mCachedGroupMetas.clear();
|
||||||
|
for(auto it(groupInfo.begin());it!=groupInfo.end();++it)
|
||||||
|
mCachedGroupMetas[(*it).mGroupId] = *it;
|
||||||
|
|
||||||
insertGroupsData(groupInfo, userdata);
|
insertGroupsData(mCachedGroupMetas, userdata);
|
||||||
|
updateSearchResults();
|
||||||
|
|
||||||
mStateHelper->setLoading(TOKEN_TYPE_GROUP_SUMMARY, false);
|
mStateHelper->setLoading(TOKEN_TYPE_GROUP_SUMMARY, false);
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,7 @@ public:
|
||||||
|
|
||||||
virtual QString getHelpString() const =0;
|
virtual QString getHelpString() const =0;
|
||||||
|
|
||||||
virtual void getGroupList(std::list<RsGroupMetaData>& groups) ;
|
virtual void getGroupList(std::map<RsGxsGroupId,RsGroupMetaData> &groups) ;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void showEvent(QShowEvent *event);
|
virtual void showEvent(QShowEvent *event);
|
||||||
|
@ -162,7 +162,7 @@ private:
|
||||||
void processSettings(bool load);
|
void processSettings(bool load);
|
||||||
|
|
||||||
// New Request/Response Loading Functions.
|
// New Request/Response Loading Functions.
|
||||||
void insertGroupsData(const std::list<RsGroupMetaData> &groupList, const RsUserdata *userdata);
|
void insertGroupsData(const std::map<RsGxsGroupId, RsGroupMetaData> &groupList, const RsUserdata *userdata);
|
||||||
|
|
||||||
void requestGroupSummary();
|
void requestGroupSummary();
|
||||||
void loadGroupSummary(const uint32_t &token);
|
void loadGroupSummary(const uint32_t &token);
|
||||||
|
@ -209,7 +209,7 @@ private:
|
||||||
/** Qt Designer generated object */
|
/** Qt Designer generated object */
|
||||||
Ui::GxsGroupFrameDialog *ui;
|
Ui::GxsGroupFrameDialog *ui;
|
||||||
|
|
||||||
std::list<RsGroupMetaData> mCachedGroupMetas;
|
std::map<RsGxsGroupId,RsGroupMetaData> mCachedGroupMetas;
|
||||||
|
|
||||||
std::map<uint32_t,QTreeWidgetItem*> mSearchGroupsItems ;
|
std::map<uint32_t,QTreeWidgetItem*> mSearchGroupsItems ;
|
||||||
std::map<uint32_t,std::set<RsGxsGroupId> > mKnownGroups;
|
std::map<uint32_t,std::set<RsGxsGroupId> > mKnownGroups;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue