Merge pull request #2728 from csoler/v0.6-Turtle-001

Simple change to make SearchDialog use RsEvents to catch turtle search results
This commit is contained in:
csoler 2023-05-06 18:09:38 +02:00 committed by GitHub
commit a3eae71f0b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 44 additions and 2 deletions

View File

@ -37,6 +37,7 @@
#include "gui/advsearch/advancedsearchdialog.h" #include "gui/advsearch/advancedsearchdialog.h"
#include "gui/common/RSTreeWidgetItem.h" #include "gui/common/RSTreeWidgetItem.h"
#include "util/QtVersion.h" #include "util/QtVersion.h"
#include "util/qtthreadsutils.h"
#include <retroshare/rsfiles.h> #include <retroshare/rsfiles.h>
#include <retroshare/rsturtle.h> #include <retroshare/rsturtle.h>
@ -217,6 +218,15 @@ SearchDialog::SearchDialog(QWidget *parent)
checkText(ui.lineEdit->text()); checkText(ui.lineEdit->text());
// add an event handler to get search results (previously available through notifyQt)
mEventHandlerId = 0;
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> event)
{
RsQThreadUtils::postToObject([=](){ handleEvent_main_thread(event); }, this );
}, mEventHandlerId, RsEventType::FILE_TRANSFER );
} }
SearchDialog::~SearchDialog() SearchDialog::~SearchDialog()
@ -235,6 +245,29 @@ SearchDialog::~SearchDialog()
ui.searchResultWidget->setItemDelegateForColumn(SR_SIZE_COL, nullptr); ui.searchResultWidget->setItemDelegateForColumn(SR_SIZE_COL, nullptr);
ui.searchResultWidget->setItemDelegateForColumn(SR_AGE_COL, nullptr); ui.searchResultWidget->setItemDelegateForColumn(SR_AGE_COL, nullptr);
rsEvents->unregisterEventsHandler(mEventHandlerId);
}
void SearchDialog::handleEvent_main_thread(std::shared_ptr<const RsEvent> event)
{
if(event->mType != RsEventType::FILE_TRANSFER)
return;
auto fe = dynamic_cast<const RsFileTransferEvent*>(event.get());
if(!fe || fe->mFileTransferEventCode!=RsFileTransferEventCode::NEW_DISTANT_SEARCH_RESULTS)
return;
for(uint32_t i=0;i<fe->mResults.size();++i)
{
FileDetail f;
f.hash = fe->mResults[i].fHash;
f.name = fe->mResults[i].fName;
f.size = fe->mResults[i].fSize;
updateFiles(fe->mRequestId,f);
}
} }
void SearchDialog::processSettings(bool bLoad) void SearchDialog::processSettings(bool bLoad)
@ -961,7 +994,7 @@ void SearchDialog::processResultQueue()
while(!searchResultsQueue.empty() && nb_treated_elements++ < 250) while(!searchResultsQueue.empty() && nb_treated_elements++ < 250)
{ {
qulonglong search_id = searchResultsQueue.back().first ; qulonglong search_id = searchResultsQueue.back().first ;
FileDetail& file = searchResultsQueue.back().second ; const FileDetail& file = searchResultsQueue.back().second ;
#ifdef DEBUG #ifdef DEBUG
std::cout << "Updating file detail:" << std::endl ; std::cout << "Updating file detail:" << std::endl ;

View File

@ -22,6 +22,7 @@
#define _SEARCHDIALOG_H #define _SEARCHDIALOG_H
#include "retroshare/rstypes.h" #include "retroshare/rstypes.h"
#include "retroshare/rsevents.h"
#include "ui_SearchDialog.h" #include "ui_SearchDialog.h"
#include "retroshare-gui/mainpage.h" #include "retroshare-gui/mainpage.h"
@ -125,6 +126,7 @@ private:
void setIconAndType(QTreeWidgetItem *item, const QString& filename); void setIconAndType(QTreeWidgetItem *item, const QString& filename);
void downloadDirectory(const QTreeWidgetItem *item, const QString &base); void downloadDirectory(const QTreeWidgetItem *item, const QString &base);
void getSourceFriendsForHash(const RsFileHash &hash,std::list<RsPeerId> &srcIds); void getSourceFriendsForHash(const RsFileHash &hash,std::list<RsPeerId> &srcIds);
void handleEvent_main_thread(std::shared_ptr<const RsEvent> event);
/** the advanced search dialog instance */ /** the advanced search dialog instance */
AdvancedSearchDialog * advSearchDialog; AdvancedSearchDialog * advSearchDialog;
@ -176,6 +178,8 @@ private:
bool _queueIsAlreadyTakenCareOf ; bool _queueIsAlreadyTakenCareOf ;
std::vector<std::pair<qulonglong,FileDetail> > searchResultsQueue ; std::vector<std::pair<qulonglong,FileDetail> > searchResultsQueue ;
RsEventsHandlerId_t mEventHandlerId ;
}; };
#endif #endif

View File

@ -482,6 +482,8 @@ void NotifyQt::notifyTurtleSearchResult(uint32_t /*search_id*/,const std::list<T
std::cerr << "(EE) missing code to handle GXS turtle search result." << std::endl; std::cerr << "(EE) missing code to handle GXS turtle search result." << std::endl;
} }
#ifdef TO_REMOVE
// Mai 2023: distant turtle search now uses RsEvents.
void NotifyQt::notifyTurtleSearchResult(const RsPeerId& pid,uint32_t search_id,const std::list<TurtleFileInfo>& files) void NotifyQt::notifyTurtleSearchResult(const RsPeerId& pid,uint32_t search_id,const std::list<TurtleFileInfo>& files)
{ {
{ {
@ -507,6 +509,7 @@ void NotifyQt::notifyTurtleSearchResult(const RsPeerId& pid,uint32_t search_id,c
emit gotTurtleSearchResult(search_id,det) ; emit gotTurtleSearchResult(search_id,det) ;
} }
} }
#endif
void NotifyQt::notifyHistoryChanged(uint32_t msgId, int type) void NotifyQt::notifyHistoryChanged(uint32_t msgId, int type)
{ {

View File

@ -67,7 +67,9 @@ class NotifyQt: public QObject, public NotifyClient
virtual void notifyChatStatus(const ChatId &chat_id,const std::string& status_string); virtual void notifyChatStatus(const ChatId &chat_id,const std::string& status_string);
virtual void notifyChatCleared(const ChatId &chat_id); virtual void notifyChatCleared(const ChatId &chat_id);
virtual void notifyCustomState(const std::string& peer_id, const std::string& status_string); virtual void notifyCustomState(const std::string& peer_id, const std::string& status_string);
#ifdef TO_REMOVE
virtual void notifyTurtleSearchResult(const RsPeerId &pid, uint32_t search_id, const std::list<TurtleFileInfo>& found_files); virtual void notifyTurtleSearchResult(const RsPeerId &pid, uint32_t search_id, const std::list<TurtleFileInfo>& found_files);
#endif
virtual void notifyTurtleSearchResult(uint32_t search_id,const std::list<TurtleGxsInfo>& found_groups); virtual void notifyTurtleSearchResult(uint32_t search_id,const std::list<TurtleGxsInfo>& found_groups);
virtual void notifyPeerHasNewAvatar(std::string peer_id) ; virtual void notifyPeerHasNewAvatar(std::string peer_id) ;
virtual void notifyOwnAvatarChanged() ; virtual void notifyOwnAvatarChanged() ;

View File

@ -540,7 +540,7 @@ feenableexcept(FE_INVALID | FE_DIVBYZERO);
qRegisterMetaType<RsPeerId>("RsPeerId") ; qRegisterMetaType<RsPeerId>("RsPeerId") ;
std::cerr << "connecting signals and slots" << std::endl ; std::cerr << "connecting signals and slots" << std::endl ;
QObject::connect(notify,SIGNAL(gotTurtleSearchResult(qulonglong,FileDetail)),w->transfersDialog->searchDialog ,SLOT(updateFiles(qulonglong,FileDetail))) ; // QObject::connect(notify,SIGNAL(gotTurtleSearchResult(qulonglong,FileDetail)),w->transfersDialog->searchDialog ,SLOT(updateFiles(qulonglong,FileDetail))) ;
QObject::connect(notify,SIGNAL(deferredSignatureHandlingRequested()),notify,SLOT(handleSignatureEvent()),Qt::QueuedConnection) ; QObject::connect(notify,SIGNAL(deferredSignatureHandlingRequested()),notify,SLOT(handleSignatureEvent()),Qt::QueuedConnection) ;
QObject::connect(notify,SIGNAL(chatLobbyTimeShift(int)),notify,SLOT(handleChatLobbyTimeShift(int)),Qt::QueuedConnection) ; QObject::connect(notify,SIGNAL(chatLobbyTimeShift(int)),notify,SLOT(handleChatLobbyTimeShift(int)),Qt::QueuedConnection) ;
QObject::connect(notify,SIGNAL(diskFull(int,int)) ,w ,SLOT(displayDiskSpaceWarning(int,int))) ; QObject::connect(notify,SIGNAL(diskFull(int,int)) ,w ,SLOT(displayDiskSpaceWarning(int,int))) ;