diff --git a/libretroshare/src/file_sharing/hash_cache.cc b/libretroshare/src/file_sharing/hash_cache.cc index 87fe27a64..331f1a481 100644 --- a/libretroshare/src/file_sharing/hash_cache.cc +++ b/libretroshare/src/file_sharing/hash_cache.cc @@ -136,7 +136,13 @@ void HashStorage::threadTick() stopHashThread(); } - RsServer::notify()->notifyHashingInfo(NOTIFY_HASHTYPE_FINISH, "") ; + if(rsEvents) + { + auto ev = std::make_shared(); + ev->mEventCode = RsSharedDirectoriesEventCode::DIRECTORY_SWEEP_ENDED; + rsEvents->postEvent(ev); + } + //RsServer::notify()->notifyHashingInfo(NOTIFY_HASHTYPE_FINISH, "") ; } else { @@ -181,7 +187,14 @@ void HashStorage::threadTick() else rs_sprintf(tmpout, "%lu/%lu (%s - %d%%) : %s", (unsigned long int)mHashCounter+1, (unsigned long int)mTotalFilesToHash, friendlyUnit(mTotalHashedSize).c_str(), int(mTotalHashedSize/double(mTotalSizeToHash)*100.0), job.full_path.c_str()) ; - RsServer::notify()->notifyHashingInfo(NOTIFY_HASHTYPE_HASH_FILE, tmpout) ; + //RsServer::notify()->notifyHashingInfo(NOTIFY_HASHTYPE_HASH_FILE, tmpout) ; + if(rsEvents) + { + auto ev = std::make_shared(); + ev->mEventCode = RsSharedDirectoriesEventCode::HASHING_FILE; + ev->mMessage = tmpout; + rsEvents->postEvent(ev); + } double seconds_origin = rstime::RsScopeTimer::currentTime() ; diff --git a/libretroshare/src/ft/ftcontroller.cc b/libretroshare/src/ft/ftcontroller.cc index 45fc70845..0af02144f 100644 --- a/libretroshare/src/ft/ftcontroller.cc +++ b/libretroshare/src/ft/ftcontroller.cc @@ -816,10 +816,13 @@ bool ftController::completeFile(const RsFileHash& hash) } /* Notify GUI */ - RsServer::notify()->AddPopupMessage(RS_POPUP_DOWNLOAD, hash.toStdString(), name, ""); - - RsServer::notify()->notifyDownloadComplete(hash.toStdString()); - RsServer::notify()->notifyDownloadCompleteCount(completeCount); + if(rsEvents) + { + auto ev = std::make_shared(); + ev->mHash = hash; + ev->mFileTransferEventCode = RsFileTransferEventCode::DOWNLOAD_COMPLETE; + rsEvents->postEvent(ev); + } rsFiles->ForceDirectoryCheck(true) ; @@ -1412,7 +1415,12 @@ bool ftController::FileClearCompleted() IndicateConfigChanged(); } - RsServer::notify()->notifyDownloadCompleteCount(0); + if(rsEvents) + { + auto ev = std::make_shared(); + ev->mFileTransferEventCode = RsFileTransferEventCode::COMPLETED_FILES_REMOVED; + rsEvents->postEvent(ev); + } return true; } diff --git a/libretroshare/src/retroshare/rsevents.h b/libretroshare/src/retroshare/rsevents.h index d89846e1a..090368910 100644 --- a/libretroshare/src/retroshare/rsevents.h +++ b/libretroshare/src/retroshare/rsevents.h @@ -88,7 +88,13 @@ enum class RsEventType : uint32_t /// @see RsGxsPostedEvent GXS_IDENTITY = 12, - MAX /// Used to detect invalid event type passed + /// @see RsFiles + SHARED_DIRECTORIES = 13, + + /// @see RsFiles + FILE_TRANSFER = 14, + + MAX /// Used to detect invalid event type passed }; /** diff --git a/libretroshare/src/retroshare/rsfiles.h b/libretroshare/src/retroshare/rsfiles.h index e0793d8b7..3818a8f45 100644 --- a/libretroshare/src/retroshare/rsfiles.h +++ b/libretroshare/src/retroshare/rsfiles.h @@ -33,6 +33,7 @@ #include "serialiser/rsserializable.h" #include "rsturtle.h" #include "util/rstime.h" +#include "retroshare/rsevents.h" class RsFiles; @@ -114,6 +115,55 @@ const TransferRequestFlags RS_FILE_REQ_NO_SEARCH ( 0x02000000 ); // di const uint32_t RS_FILE_EXTRA_DELETE = 0x0010; +enum class RsSharedDirectoriesEventCode: uint8_t { + UNKNOWN = 0x00, + STARTING_DIRECTORY_SWEEP = 0x01, // (void) + HASHING_FILE = 0x02, // mMessage: full path and hashing speed of the file being hashed + DIRECTORY_SWEEP_ENDED = 0x03, // (void) + SAVING_FILE_INDEX = 0x04, // (void) +}; + +enum class RsFileTransferEventCode: uint8_t { + UNKNOWN = 0x00, + DOWNLOAD_COMPLETE = 0x01, // mHash: hash of the complete file + COMPLETED_FILES_REMOVED = 0x02, // +}; + +struct RsSharedDirectoriesEvent: RsEvent +{ + RsSharedDirectoriesEvent() : RsEvent(RsEventType::SHARED_DIRECTORIES), mEventCode(RsSharedDirectoriesEventCode::UNKNOWN) {} + ~RsSharedDirectoriesEvent() override = default; + + ///* @see RsEvent @see RsSerializable + void serial_process( RsGenericSerializer::SerializeJob j, RsGenericSerializer::SerializeContext& ctx ) override + { + RsEvent::serial_process(j, ctx); + + RS_SERIAL_PROCESS(mEventCode); + RS_SERIAL_PROCESS(mMessage); + } + + RsSharedDirectoriesEventCode mEventCode; + std::string mMessage; +}; + +struct RsFileTransferEvent: RsEvent +{ + RsFileTransferEvent() : RsEvent(RsEventType::FILE_TRANSFER), mFileTransferEventCode(RsFileTransferEventCode::UNKNOWN) {} + ~RsFileTransferEvent() override = default; + + ///* @see RsEvent @see RsSerializable + void serial_process( RsGenericSerializer::SerializeJob j, RsGenericSerializer::SerializeContext& ctx ) override + { + RsEvent::serial_process(j, ctx); + + RS_SERIAL_PROCESS(mFileTransferEventCode); + RS_SERIAL_PROCESS(mHash); + } + + RsFileTransferEventCode mFileTransferEventCode; + RsFileHash mHash; +}; struct SharedDirInfo : RsSerializable { static bool sameLists(const std::list& l1,const std::list& l2) diff --git a/libretroshare/src/retroshare/rsgxschannels.h b/libretroshare/src/retroshare/rsgxschannels.h index 9fa2f8638..615ff30f7 100644 --- a/libretroshare/src/retroshare/rsgxschannels.h +++ b/libretroshare/src/retroshare/rsgxschannels.h @@ -105,27 +105,15 @@ struct RsGxsChannelPost : RsSerializable enum class RsChannelEventCode: uint8_t { - UNKNOWN = 0x00, - NEW_CHANNEL = 0x01, /// emitted when new channel is received - - /// emitted when existing channel is updated - UPDATED_CHANNEL = 0x02, - - /// new message reeived in a particular channel (group and msg id) - NEW_MESSAGE = 0x03, - - /// existing message has been updated in a particular channel - UPDATED_MESSAGE = 0x04, - - /// publish key for this channel has been received - RECEIVED_PUBLISH_KEY = 0x05, - - /// subscription for channel mChannelGroupId changed. - SUBSCRIBE_STATUS_CHANGED = 0x06, - - /// existing message has been read or set to unread - READ_STATUS_CHANGED = 0x07, - + UNKNOWN = 0x00, + NEW_CHANNEL = 0x01, // emitted when new channel is received + UPDATED_CHANNEL = 0x02, // emitted when existing channel is updated + NEW_MESSAGE = 0x03, // new message reeived in a particular channel (group and msg id) + UPDATED_MESSAGE = 0x04, // existing message has been updated in a particular channel + RECEIVED_PUBLISH_KEY = 0x05, // publish key for this channel has been received + SUBSCRIBE_STATUS_CHANGED = 0x06, // subscription for channel mChannelGroupId changed. + READ_STATUS_CHANGED = 0x07, // existing message has been read or set to unread + RECEIVED_DISTANT_SEARCH_RESULT = 0x08, // result for the given group id available for the given turtle request id }; struct RsGxsChannelEvent: RsEvent @@ -137,6 +125,7 @@ struct RsGxsChannelEvent: RsEvent RsChannelEventCode mChannelEventCode; RsGxsGroupId mChannelGroupId; RsGxsMessageId mChannelMsgId; + TurtleRequestId mDistantSearchRequestId; ///* @see RsEvent @see RsSerializable void serial_process( RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) override @@ -146,6 +135,7 @@ struct RsGxsChannelEvent: RsEvent RS_SERIAL_PROCESS(mChannelEventCode); RS_SERIAL_PROCESS(mChannelGroupId); RS_SERIAL_PROCESS(mChannelMsgId); + RS_SERIAL_PROCESS(mDistantSearchRequestId); } }; diff --git a/libretroshare/src/retroshare/rsgxsservice.h b/libretroshare/src/retroshare/rsgxsservice.h index aab18b60b..cb4fcf7eb 100644 --- a/libretroshare/src/retroshare/rsgxsservice.h +++ b/libretroshare/src/retroshare/rsgxsservice.h @@ -40,7 +40,14 @@ typedef std::map > GxsMsgRelatedMe struct RsGxsNotify { enum NotifyType - { TYPE_PUBLISHED, TYPE_RECEIVED_NEW, TYPE_PROCESSED, TYPE_RECEIVED_PUBLISHKEY, TYPE_RECEIVED_DISTANT_SEARCH_RESULTS }; + { + TYPE_UNKNOWN = 0x00, + TYPE_PUBLISHED = 0x01, + TYPE_RECEIVED_NEW = 0x02, + TYPE_PROCESSED = 0x03, + TYPE_RECEIVED_PUBLISHKEY = 0x04, + TYPE_RECEIVED_DISTANT_SEARCH_RESULTS = 0x05 + }; virtual ~RsGxsNotify() {} virtual NotifyType getType() = 0; diff --git a/libretroshare/src/services/p3gxschannels.cc b/libretroshare/src/services/p3gxschannels.cc index 0ccdafc03..2a63b3cdb 100644 --- a/libretroshare/src/services/p3gxschannels.cc +++ b/libretroshare/src/services/p3gxschannels.cc @@ -245,6 +245,7 @@ void p3GxsChannels::notifyChanges(std::vector &changes) for(it = changes.begin(); it != changes.end(); ++it) { RsGxsMsgChange *msgChange = dynamic_cast(*it); + if (msgChange) { if (msgChange->getType() == RsGxsNotify::TYPE_RECEIVED_NEW|| msgChange->getType() == RsGxsNotify::TYPE_PUBLISHED) @@ -294,75 +295,84 @@ void p3GxsChannels::notifyChanges(std::vector &changes) } } } - else + + RsGxsGroupChange *grpChange = dynamic_cast(*it); + + if (grpChange && rsEvents) { - if (rsEvents) + switch (grpChange->getType()) { - RsGxsGroupChange *grpChange = dynamic_cast(*it); - if (grpChange) + default: + case RsGxsNotify::TYPE_PROCESSED: // happens when the group is subscribed + { + std::list &grpList = grpChange->mGrpIdList; + std::list::iterator git; + for (git = grpList.begin(); git != grpList.end(); ++git) { - switch (grpChange->getType()) - { - default: - case RsGxsNotify::TYPE_PROCESSED: // happens when the group is subscribed - { - std::list &grpList = grpChange->mGrpIdList; - std::list::iterator git; - for (git = grpList.begin(); git != grpList.end(); ++git) - { - auto ev = std::make_shared(); - ev->mChannelGroupId = *git; - ev->mChannelEventCode = RsChannelEventCode::SUBSCRIBE_STATUS_CHANGED; - rsEvents->postEvent(ev); - } - - } - break; - - case RsGxsNotify::TYPE_PUBLISHED: - case RsGxsNotify::TYPE_RECEIVED_NEW: - { - /* group received */ - std::list &grpList = grpChange->mGrpIdList; - std::list::iterator git; - RS_STACK_MUTEX(mKnownChannelsMutex); - for (git = grpList.begin(); git != grpList.end(); ++git) - { - if(mKnownChannels.find(*git) == mKnownChannels.end()) - { - mKnownChannels.insert(std::make_pair(*git,time(NULL))) ; - IndicateConfigChanged(); - - auto ev = std::make_shared(); - ev->mChannelGroupId = *git; - ev->mChannelEventCode = RsChannelEventCode::NEW_CHANNEL; - rsEvents->postEvent(ev); - } - else - std::cerr << "(II) Not notifying already known channel " << *git << std::endl; - } - break; - } - - case RsGxsNotify::TYPE_RECEIVED_PUBLISHKEY: - { - /* group received */ - std::list &grpList = grpChange->mGrpIdList; - std::list::iterator git; - for (git = grpList.begin(); git != grpList.end(); ++git) - { - auto ev = std::make_shared(); - ev->mChannelGroupId = *git; - ev->mChannelEventCode = RsChannelEventCode::RECEIVED_PUBLISH_KEY; - rsEvents->postEvent(ev); - } - break; - } - } + auto ev = std::make_shared(); + ev->mChannelGroupId = *git; + ev->mChannelEventCode = RsChannelEventCode::SUBSCRIBE_STATUS_CHANGED; + rsEvents->postEvent(ev); } + + } + break; + + case RsGxsNotify::TYPE_PUBLISHED: + case RsGxsNotify::TYPE_RECEIVED_NEW: + { + /* group received */ + std::list &grpList = grpChange->mGrpIdList; + std::list::iterator git; + RS_STACK_MUTEX(mKnownChannelsMutex); + for (git = grpList.begin(); git != grpList.end(); ++git) + { + if(mKnownChannels.find(*git) == mKnownChannels.end()) + { + mKnownChannels.insert(std::make_pair(*git,time(NULL))) ; + IndicateConfigChanged(); + + auto ev = std::make_shared(); + ev->mChannelGroupId = *git; + ev->mChannelEventCode = RsChannelEventCode::NEW_CHANNEL; + rsEvents->postEvent(ev); + } + else + std::cerr << "(II) Not notifying already known channel " << *git << std::endl; + } + break; + } + + case RsGxsNotify::TYPE_RECEIVED_PUBLISHKEY: + { + /* group received */ + std::list &grpList = grpChange->mGrpIdList; + std::list::iterator git; + for (git = grpList.begin(); git != grpList.end(); ++git) + { + auto ev = std::make_shared(); + ev->mChannelGroupId = *git; + ev->mChannelEventCode = RsChannelEventCode::RECEIVED_PUBLISH_KEY; + + rsEvents->postEvent(ev); + } + break; + } } } + RsGxsDistantSearchResultChange *dsrChange = dynamic_cast(*it); + + if(dsrChange && rsEvents) + { + auto ev = std::make_shared(); + ev->mChannelGroupId = dsrChange->mGroupId; + ev->mChannelEventCode = RsChannelEventCode::RECEIVED_DISTANT_SEARCH_RESULT; + ev->mDistantSearchRequestId = dsrChange->mRequestId; + + rsEvents->postEvent(ev); + } + /* shouldn't need to worry about groups - as they need to be subscribed to */ delete *it; } diff --git a/retroshare-gui/src/gui/FileTransfer/TransferUserNotify.cpp b/retroshare-gui/src/gui/FileTransfer/TransferUserNotify.cpp index e1bba6261..1ffda8303 100644 --- a/retroshare-gui/src/gui/FileTransfer/TransferUserNotify.cpp +++ b/retroshare-gui/src/gui/FileTransfer/TransferUserNotify.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "retroshare/rsfiles.h" #include "TransferUserNotify.h" #include "gui/notifyqt.h" #include "gui/MainWindow.h" @@ -27,7 +28,7 @@ TransferUserNotify::TransferUserNotify(QObject *parent) : { newTransferCount = 0; - connect(NotifyQt::getInstance(), SIGNAL(downloadCompleteCountChanged(int)), this, SLOT(downloadCountChanged(int))); +// connect(NotifyQt::getInstance(), SIGNAL(downloadCompleteCountChanged(int)), this, SLOT(downloadCountChanged(int))); } bool TransferUserNotify::hasSetting(QString *name, QString *group) @@ -50,7 +51,17 @@ QIcon TransferUserNotify::getMainIcon(bool hasNew) unsigned int TransferUserNotify::getNewCount() { - return newTransferCount; + std::list hashs; + rsFiles->FileDownloads(hashs); + FileInfo info; + + newTransferCount = 0; + + for(auto hash: hashs) + if(rsFiles->FileDetails(hash, RS_FILE_HINTS_DOWNLOAD, info) && info.downloadStatus==FT_STATE_COMPLETE) + ++newTransferCount; + + return newTransferCount; } QString TransferUserNotify::getTrayMessage(bool plural) @@ -68,8 +79,3 @@ void TransferUserNotify::iconClicked() MainWindow::showWindow(MainWindow::Transfers); } -void TransferUserNotify::downloadCountChanged(int count) -{ - newTransferCount = count; - updateIcon(); -} diff --git a/retroshare-gui/src/gui/FileTransfer/TransferUserNotify.h b/retroshare-gui/src/gui/FileTransfer/TransferUserNotify.h index 527326a5a..f883ed33c 100644 --- a/retroshare-gui/src/gui/FileTransfer/TransferUserNotify.h +++ b/retroshare-gui/src/gui/FileTransfer/TransferUserNotify.h @@ -32,9 +32,6 @@ public: virtual bool hasSetting(QString *name, QString *group); -private slots: - void downloadCountChanged(int count); - private: virtual QIcon getIcon(); virtual QIcon getMainIcon(bool hasNew); diff --git a/retroshare-gui/src/gui/FileTransfer/TransfersDialog.cpp b/retroshare-gui/src/gui/FileTransfer/TransfersDialog.cpp index 855d74ecb..22486fd2c 100644 --- a/retroshare-gui/src/gui/FileTransfer/TransfersDialog.cpp +++ b/retroshare-gui/src/gui/FileTransfer/TransfersDialog.cpp @@ -1091,10 +1091,34 @@ TransfersDialog::TransfersDialog(QWidget *parent) registerHelpButton(ui.helpButton,help_str,"TransfersDialog") ; + + mEventHandlerId=0; + rsEvents->registerEventsHandler(RsEventType::FILE_TRANSFER, [this](std::shared_ptr event) { handleEvent(event); }, mEventHandlerId ); +} + +void TransfersDialog::handleEvent(std::shared_ptr event) +{ + if(event->mType != RsEventType::FILE_TRANSFER) + return; + + const RsFileTransferEvent *fe = dynamic_cast(event.get()); + if(!fe) + return; + + switch (fe->mFileTransferEventCode) + { + case RsFileTransferEventCode::DOWNLOAD_COMPLETE: + case RsFileTransferEventCode::COMPLETED_FILES_REMOVED: + getUserNotify()->updateIcon(); + default: + break; + } } TransfersDialog::~TransfersDialog() { + rsEvents->unregisterEventsHandler(mEventHandlerId); + // save settings processSettings(false); } diff --git a/retroshare-gui/src/gui/FileTransfer/TransfersDialog.h b/retroshare-gui/src/gui/FileTransfer/TransfersDialog.h index 83da19c5c..21f642399 100644 --- a/retroshare-gui/src/gui/FileTransfer/TransfersDialog.h +++ b/retroshare-gui/src/gui/FileTransfer/TransfersDialog.h @@ -24,6 +24,7 @@ #include #include +#include #include "RsAutoUpdatePage.h" #include "ui_TransfersDialog.h" @@ -259,6 +260,7 @@ private: bool controlTransferFile(uint32_t flags); void changePriority(int priority); void setChunkStrategy(FileChunksInfo::ChunkStrategy s) ; + void handleEvent(std::shared_ptr event); QTreeView *downloadList; @@ -273,6 +275,7 @@ private: /** Qt Designer generated object */ Ui::TransfersDialog ui; + RsEventsHandlerId_t mEventHandlerId; public slots: // these four functions add entries to the transfers dialog, and return the row id of the entry modified/added // int addDLItem(int row, const FileInfo &fileInfo); diff --git a/retroshare-gui/src/gui/Identity/IdDialog.cpp b/retroshare-gui/src/gui/Identity/IdDialog.cpp index ffb29664a..cb9a2242d 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdDialog.cpp @@ -1377,6 +1377,9 @@ void IdDialog::circle_selected() IdDialog::~IdDialog() { + rsEvents->unregisterEventsHandler(mEventHandlerId_identity); + rsEvents->unregisterEventsHandler(mEventHandlerId_circles); + // save settings processSettings(false); @@ -2057,9 +2060,11 @@ QString IdDialog::createUsageString(const RsIdentityUsage& u) const return tr("Admin signature verification in service %1").arg(service_name); case RsIdentityUsage::GROUP_AUTHOR_SIGNATURE_CREATION: // not typically used, since most services do not require group author signatures return tr("Creation of author signature in service %1").arg(service_name); - case RsIdentityUsage::GROUP_AUTHOR_SIGNATURE_VALIDATION: case RsIdentityUsage::MESSAGE_AUTHOR_SIGNATURE_CREATION: // most common use case. Messages are signed by authors in e.g. forums. + return tr("Message signature creation in group %1 of service %2").arg(QString::fromStdString(u.mGrpId.toStdString())).arg(service_name); case RsIdentityUsage::GROUP_AUTHOR_KEEP_ALIVE: // Identities are stamped regularly by crawlign the set of messages for all groups. That helps keepign the useful identities in hand. + case RsIdentityUsage::GROUP_AUTHOR_SIGNATURE_VALIDATION: + return tr("Group author for group %1 in service %2").arg(QString::fromStdString(u.mGrpId.toStdString())).arg(service_name); break ; case RsIdentityUsage::MESSAGE_AUTHOR_SIGNATURE_VALIDATION: case RsIdentityUsage::MESSAGE_AUTHOR_KEEP_ALIVE: // Identities are stamped regularly by crawlign the set of messages for all groups. That helps keepign the useful identities in hand. @@ -2103,18 +2108,9 @@ QString IdDialog::createUsageString(const RsIdentityUsage& u) const { return tr("Generic signature."); } - case RsIdentityUsage::IDENTITY_GENERIC_ENCRYPTION: - { - return tr("Generic encryption."); - } - case RsIdentityUsage::IDENTITY_GENERIC_DECRYPTION: - { - return tr("Generic decryption."); - } - case RsIdentityUsage::CIRCLE_MEMBERSHIP_CHECK: - { - return tr("Membership verification in circle %1.").arg(QString::fromStdString(u.mGrpId.toStdString())); - } + case RsIdentityUsage::IDENTITY_GENERIC_ENCRYPTION: return tr("Generic encryption."); + case RsIdentityUsage::IDENTITY_GENERIC_DECRYPTION: return tr("Generic decryption."); + case RsIdentityUsage::CIRCLE_MEMBERSHIP_CHECK: return tr("Membership verification in circle %1.").arg(QString::fromStdString(u.mGrpId.toStdString())); #warning TODO! csoler 2017-01-03: Add the different strings and translations here. default: diff --git a/retroshare-gui/src/gui/Posted/PostedDialog.cpp b/retroshare-gui/src/gui/Posted/PostedDialog.cpp index 5e743b957..e696db36c 100644 --- a/retroshare-gui/src/gui/Posted/PostedDialog.cpp +++ b/retroshare-gui/src/gui/Posted/PostedDialog.cpp @@ -83,6 +83,7 @@ void PostedDialog::handleEvent_main_thread(std::shared_ptr event) PostedDialog::~PostedDialog() { + rsEvents->unregisterEventsHandler(mEventHandlerId); } UserNotify *PostedDialog::createUserNotify(QObject *parent) diff --git a/retroshare-gui/src/gui/common/NewFriendList.cpp b/retroshare-gui/src/gui/common/NewFriendList.cpp index cb4c68030..302ce9310 100644 --- a/retroshare-gui/src/gui/common/NewFriendList.cpp +++ b/retroshare-gui/src/gui/common/NewFriendList.cpp @@ -266,6 +266,7 @@ void NewFriendList::handleEvent(std::shared_ptr e) NewFriendList::~NewFriendList() { + rsEvents->unregisterEventsHandler(mEventHandlerId); delete ui; } diff --git a/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.h b/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.h index cc1fa7843..29a22d781 100644 --- a/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.h +++ b/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.h @@ -155,8 +155,6 @@ private: void initUi(); - void updateSearchResults(); - void openGroupInNewTab(const RsGxsGroupId &groupId); void groupSubscribe(bool subscribe); @@ -185,6 +183,8 @@ private: // void loadGroupSummary_CurrentGroup(const uint32_t &token); protected: + void updateSearchResults(); + bool mCountChildMsgs; // Count unread child messages? private: diff --git a/retroshare-gui/src/gui/gxs/RsGxsUpdateBroadcastPage.cpp b/retroshare-gui/src/gui/gxs/RsGxsUpdateBroadcastPage.cpp index 70a9a6fe5..bbb768bcc 100644 --- a/retroshare-gui/src/gui/gxs/RsGxsUpdateBroadcastPage.cpp +++ b/retroshare-gui/src/gui/gxs/RsGxsUpdateBroadcastPage.cpp @@ -42,11 +42,6 @@ void RsGxsUpdateBroadcastPage::setUpdateWhenInvisible(bool update) mBase->setUpdateWhenInvisible(update); } -const std::set& RsGxsUpdateBroadcastPage::getSearchResults() -{ - return mBase->getSearchResults(); -} - const std::set &RsGxsUpdateBroadcastPage::getGrpIdsMeta() { return mBase->getGrpIdsMeta(); diff --git a/retroshare-gui/src/gui/gxs/RsGxsUpdateBroadcastPage.h b/retroshare-gui/src/gui/gxs/RsGxsUpdateBroadcastPage.h index 3a37c06cd..ebf1000af 100644 --- a/retroshare-gui/src/gui/gxs/RsGxsUpdateBroadcastPage.h +++ b/retroshare-gui/src/gui/gxs/RsGxsUpdateBroadcastPage.h @@ -51,7 +51,8 @@ public: const std::map > &getMsgIds(); const std::map > &getMsgIdsMeta(); void getAllMsgIds(std::map > &msgIds); - const std::set& getSearchResults(); + + virtual const std::set getSearchResults() const { return std::set(); } // overload this for subclasses that provide distant search protected: virtual void showEvent(QShowEvent *event); diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp index f031772b3..e8534e8f7 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp @@ -76,6 +76,11 @@ void GxsChannelDialog::handleEvent_main_thread(std::shared_ptr ev updateMessageSummaryList(e->mChannelGroupId); break; + case RsChannelEventCode::RECEIVED_DISTANT_SEARCH_RESULT: + mSearchResults.insert(e->mDistantSearchRequestId); + updateSearchResults(); + break; + case RsChannelEventCode::NEW_CHANNEL: // [[fallthrough]]; case RsChannelEventCode::SUBSCRIBE_STATUS_CHANGED: updateDisplay(true); @@ -88,6 +93,7 @@ void GxsChannelDialog::handleEvent_main_thread(std::shared_ptr ev GxsChannelDialog::~GxsChannelDialog() { + rsEvents->unregisterEventsHandler(mEventHandlerId); } QString GxsChannelDialog::getHelpString() const diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.h b/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.h index 4c9c6eb95..1ab59ca1e 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.h +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.h @@ -48,6 +48,7 @@ protected: virtual QString getHelpString() const ; virtual void groupInfoToGroupItemInfo(const RsGroupMetaData &groupInfo, GroupItemInfo &groupItemInfo, const RsUserdata *userdata); virtual bool getDistantSearchResults(TurtleRequestId id, std::map& group_infos); + virtual const std::set getSearchResults() const override { return mSearchResults ; } virtual TurtleRequestId distantSearch(const QString& search_string) ; virtual void checkRequestGroup(const RsGxsGroupId& grpId) ; @@ -76,6 +77,8 @@ private: void handleEvent_main_thread(std::shared_ptr event); + std::set mSearchResults; + RsEventsHandlerId_t mEventHandlerId; }; diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidget.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidget.cpp index 7985d6489..3286c5f8b 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidget.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidget.cpp @@ -158,6 +158,7 @@ void GxsChannelPostsWidget::handleEvent_main_thread(std::shared_ptrunregisterEventsHandler(mEventHandlerId); // save settings processSettings(false); diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp index f57d29119..85343fdb8 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp @@ -490,6 +490,7 @@ void GxsForumThreadWidget::blank() GxsForumThreadWidget::~GxsForumThreadWidget() { + rsEvents->unregisterEventsHandler(mEventHandlerId); // save settings processSettings(false); diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumsDialog.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumsDialog.cpp index 7d5889e4d..71766ca63 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumsDialog.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumsDialog.cpp @@ -83,6 +83,7 @@ void GxsForumsDialog::handleEvent_main_thread(std::shared_ptr eve GxsForumsDialog::~GxsForumsDialog() { + rsEvents->unregisterEventsHandler(mEventHandlerId); } QString GxsForumsDialog::getHelpString() const diff --git a/retroshare-gui/src/gui/notifyqt.cpp b/retroshare-gui/src/gui/notifyqt.cpp index 27a81546a..a9bdd2705 100644 --- a/retroshare-gui/src/gui/notifyqt.cpp +++ b/retroshare-gui/src/gui/notifyqt.cpp @@ -349,6 +349,7 @@ void NotifyQt::notifyDiscInfoChanged() emit discInfoChanged() ; } +#ifdef TO_REMOVE void NotifyQt::notifyDownloadComplete(const std::string& fileHash) { { @@ -376,6 +377,7 @@ void NotifyQt::notifyDownloadCompleteCount(uint32_t count) emit downloadCompleteCountChanged(count); } +#endif void NotifyQt::notifyDiskFull(uint32_t loc,uint32_t size_in_mb) { @@ -582,6 +584,7 @@ void NotifyQt::notifyTurtleSearchResult(const RsPeerId& pid,uint32_t search_id,c } } +#ifdef TO_REMOVE void NotifyQt::notifyHashingInfo(uint32_t type, const std::string& fileinfo) { QString info; @@ -608,6 +611,7 @@ void NotifyQt::notifyHashingInfo(uint32_t type, const std::string& fileinfo) emit hashingInfoChanged(info); } +#endif void NotifyQt::notifyHistoryChanged(uint32_t msgId, int type) { diff --git a/retroshare-gui/src/gui/notifyqt.h b/retroshare-gui/src/gui/notifyqt.h index dd09bf4ea..19bd20bba 100644 --- a/retroshare-gui/src/gui/notifyqt.h +++ b/retroshare-gui/src/gui/notifyqt.h @@ -67,7 +67,9 @@ class NotifyQt: public QObject, public NotifyClient virtual void notifyChatStatus(const ChatId &chat_id,const std::string& status_string); virtual void notifyChatCleared(const ChatId &chat_id); virtual void notifyCustomState(const std::string& peer_id, const std::string& status_string); +#ifdef TO_REMOVE virtual void notifyHashingInfo(uint32_t type, const std::string& fileinfo); +#endif virtual void notifyTurtleSearchResult(const RsPeerId &pid, uint32_t search_id, const std::list& found_files); virtual void notifyTurtleSearchResult(uint32_t search_id,const std::list& found_groups); virtual void notifyPeerHasNewAvatar(std::string peer_id) ; @@ -85,8 +87,10 @@ class NotifyQt: public QObject, public NotifyClient virtual void notifyHistoryChanged(uint32_t msgId, int type); virtual void notifyDiscInfoChanged() ; +#ifdef TO_REMOVE virtual void notifyDownloadComplete(const std::string& fileHash); virtual void notifyDownloadCompleteCount(uint32_t count); +#endif virtual bool askForPassword(const std::string& title, const std::string& key_details, bool prev_is_bad, std::string& password, bool &cancelled); virtual bool askForPluginConfirmation(const std::string& plugin_filename, const std::string& plugin_file_hash,bool first_time); @@ -153,8 +157,6 @@ class NotifyQt: public QObject, public NotifyClient void chatMessageReceived(ChatMessage msg); void groupsChanged(int type) const ; void discInfoChanged() const ; - void downloadComplete(const QString& /* fileHash */); - void downloadCompleteCountChanged(int /* count */); #ifdef REMOVE void forumMsgReadSatusChanged(const QString& forumId, const QString& msgId, int status); void channelMsgReadSatusChanged(const QString& channelId, const QString& msgId, int status); diff --git a/retroshare-gui/src/gui/statusbar/hashingstatus.cpp b/retroshare-gui/src/gui/statusbar/hashingstatus.cpp index 602b36e89..997ca5f8f 100644 --- a/retroshare-gui/src/gui/statusbar/hashingstatus.cpp +++ b/retroshare-gui/src/gui/statusbar/hashingstatus.cpp @@ -52,11 +52,42 @@ HashingStatus::HashingStatus(QWidget *parent) hashloader->hide(); statusHashing->hide(); - connect(NotifyQt::getInstance(), SIGNAL(hashingInfoChanged(const QString&)), SLOT(updateHashingInfo(const QString&))); + mEventHandlerId=0; + rsEvents->registerEventsHandler(RsEventType::SHARED_DIRECTORIES, [this](std::shared_ptr event) { handleEvent(event); }, mEventHandlerId ); +} + +void HashingStatus::handleEvent(std::shared_ptr event) +{ + if(event->mType != RsEventType::SHARED_DIRECTORIES) + return; + + const RsSharedDirectoriesEvent *fe = dynamic_cast(event.get()); + if(!fe) + return; + + QString info; + + switch (fe->mEventCode) + { + case RsSharedDirectoriesEventCode::STARTING_DIRECTORY_SWEEP: + info = tr("Examining shared files..."); + break; + case RsSharedDirectoriesEventCode::DIRECTORY_SWEEP_ENDED: + break; + case RsSharedDirectoriesEventCode::HASHING_FILE: + info = tr("Hashing file") + " " + QString::fromUtf8(fe->mMessage.c_str()); + break; + case RsSharedDirectoriesEventCode::SAVING_FILE_INDEX: + info = tr("Saving file index..."); + break; + } + + updateHashingInfo(info); } HashingStatus::~HashingStatus() { + rsEvents->unregisterEventsHandler(mEventHandlerId); delete(movie); } diff --git a/retroshare-gui/src/gui/statusbar/hashingstatus.h b/retroshare-gui/src/gui/statusbar/hashingstatus.h index 340bed9c7..d157e60a0 100644 --- a/retroshare-gui/src/gui/statusbar/hashingstatus.h +++ b/retroshare-gui/src/gui/statusbar/hashingstatus.h @@ -22,6 +22,7 @@ #define HASHINGSTATUS_H #include +#include "retroshare/rsevents.h" class QLabel; class ElidedLabel; @@ -37,15 +38,16 @@ public: void setCompactMode(bool compact) {_compactMode = compact; } void mousePressEvent(QMouseEvent *); -public slots: - void updateHashingInfo(const QString&) ; - private: + void updateHashingInfo(const QString& s); + void handleEvent(std::shared_ptr event); + ElidedLabel *statusHashing; QLabel *hashloader; QString mLastText ; QMovie *movie; bool _compactMode; + RsEventsHandlerId_t mEventHandlerId; }; #endif diff --git a/retroshare-gui/src/util/RsGxsUpdateBroadcast.cpp b/retroshare-gui/src/util/RsGxsUpdateBroadcast.cpp index 934226da4..efd54a8e7 100644 --- a/retroshare-gui/src/util/RsGxsUpdateBroadcast.cpp +++ b/retroshare-gui/src/util/RsGxsUpdateBroadcast.cpp @@ -45,6 +45,11 @@ RsGxsUpdateBroadcast::RsGxsUpdateBroadcast(RsGxsIfaceHelper *ifaceImpl) : }, mEventHandlerId ); } +RsGxsUpdateBroadcast::~RsGxsUpdateBroadcast() +{ + rsEvents->unregisterEventsHandler(mEventHandlerId); +} + void RsGxsUpdateBroadcast::cleanup() { QMap::iterator it; diff --git a/retroshare-gui/src/util/RsGxsUpdateBroadcast.h b/retroshare-gui/src/util/RsGxsUpdateBroadcast.h index 1383c18dd..1ec733bfa 100644 --- a/retroshare-gui/src/util/RsGxsUpdateBroadcast.h +++ b/retroshare-gui/src/util/RsGxsUpdateBroadcast.h @@ -40,6 +40,9 @@ public: static RsGxsUpdateBroadcast *get(RsGxsIfaceHelper* ifaceImpl); +protected: + virtual ~RsGxsUpdateBroadcast(); + signals: void changed(); void msgsChanged(const std::map >& msgIds, const std::map >& msgIdsMeta);