From 315fb77d6346dfd45ec242e63b21507c625a7b61 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 28 Oct 2023 21:03:21 +0200 Subject: [PATCH 1/4] fixed forum and chnanel group feed items reacting to changes to the channel/forum group --- .../src/gui/feeds/GxsChannelGroupItem.cpp | 24 +++++++++++++++ .../src/gui/feeds/GxsChannelGroupItem.h | 1 + .../src/gui/feeds/GxsChannelGroupItem.ui | 2 +- .../src/gui/feeds/GxsForumGroupItem.cpp | 29 +++++++++++++++++-- .../src/gui/feeds/GxsForumGroupItem.h | 11 ++++--- 5 files changed, 60 insertions(+), 7 deletions(-) diff --git a/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.cpp b/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.cpp index e9c38a022..dc20c3aee 100644 --- a/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.cpp +++ b/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.cpp @@ -39,6 +39,29 @@ GxsChannelGroupItem::GxsChannelGroupItem(FeedHolder *feedHolder, uint32_t feedId setup(); requestGroup(); + + mEventHandlerId = 0; + rsEvents->registerEventsHandler( [this](std::shared_ptr event) + { + RsQThreadUtils::postToObject([=]() + { + const auto *e = dynamic_cast(event.get()); + + if(!e || e->mChannelGroupId != this->groupId()) + return; + + switch(e->mChannelEventCode) + { + case RsChannelEventCode::SUBSCRIBE_STATUS_CHANGED: + case RsChannelEventCode::UPDATED_CHANNEL: + case RsChannelEventCode::RECEIVED_PUBLISH_KEY: + loadGroup(); + break; + default: + break; + } + }, this ); + }, mEventHandlerId, RsEventType::GXS_CHANNELS ); } GxsChannelGroupItem::GxsChannelGroupItem(FeedHolder *feedHolder, uint32_t feedId, const RsGxsChannelGroup &group, bool isHome, bool autoUpdate) : @@ -51,6 +74,7 @@ GxsChannelGroupItem::GxsChannelGroupItem(FeedHolder *feedHolder, uint32_t feedId GxsChannelGroupItem::~GxsChannelGroupItem() { + rsEvents->unregisterEventsHandler(mEventHandlerId); delete(ui); } diff --git a/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.h b/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.h index cd7f6510b..8f0a6e332 100644 --- a/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.h +++ b/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.h @@ -66,6 +66,7 @@ private: /** Qt Designer generated object */ Ui::GxsChannelGroupItem *ui; + RsEventsHandlerId_t mEventHandlerId; }; #endif diff --git a/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.ui b/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.ui index 151e6920b..e17f53c48 100644 --- a/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.ui +++ b/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.ui @@ -251,7 +251,7 @@ Qt::NoFocus - Subscribe to Channel + Subscribe this Channel Subscribe diff --git a/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp b/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp index 43c94a377..23c9c35ac 100644 --- a/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp +++ b/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp @@ -35,8 +35,9 @@ GxsForumGroupItem::GxsForumGroupItem(FeedHolder *feedHolder, uint32_t feedId, co GxsGroupFeedItem(feedHolder, feedId, groupId, isHome, rsGxsForums, autoUpdate) { setup(); - requestGroup(); + + } GxsForumGroupItem::GxsForumGroupItem(FeedHolder *feedHolder, uint32_t feedId, const RsGxsGroupId &groupId, const std::list& added_moderators,const std::list& removed_moderators,bool isHome, bool autoUpdate): @@ -47,6 +48,29 @@ GxsForumGroupItem::GxsForumGroupItem(FeedHolder *feedHolder, uint32_t feedId, co setup(); requestGroup(); + + mEventHandlerId = 0; + rsEvents->registerEventsHandler( [this](std::shared_ptr event) + { + RsQThreadUtils::postToObject([=]() + { + const auto *e = dynamic_cast(event.get()); + + if(!e || e->mForumGroupId != this->groupId()) + return; + + switch(e->mForumEventCode) + { + case RsForumEventCode::SUBSCRIBE_STATUS_CHANGED: + case RsForumEventCode::UPDATED_FORUM: + case RsForumEventCode::MODERATOR_LIST_CHANGED: + loadGroup(); + break; + default: + break; + } + }, this ); + }, mEventHandlerId, RsEventType::GXS_FORUMS ); } GxsForumGroupItem::GxsForumGroupItem(FeedHolder *feedHolder, uint32_t feedId, const RsGxsForumGroup &group, bool isHome, bool autoUpdate) : @@ -59,7 +83,8 @@ GxsForumGroupItem::GxsForumGroupItem(FeedHolder *feedHolder, uint32_t feedId, co GxsForumGroupItem::~GxsForumGroupItem() { - delete(ui); + rsEvents->unregisterEventsHandler(mEventHandlerId); + delete(ui); } void GxsForumGroupItem::setup() diff --git a/retroshare-gui/src/gui/feeds/GxsForumGroupItem.h b/retroshare-gui/src/gui/feeds/GxsForumGroupItem.h index bfe24f2a7..e09a3cb13 100644 --- a/retroshare-gui/src/gui/feeds/GxsForumGroupItem.h +++ b/retroshare-gui/src/gui/feeds/GxsForumGroupItem.h @@ -22,6 +22,7 @@ #define _GXSFORUMGROUPITEM_H #include +#include #include "gui/gxs/GxsGroupFeedItem.h" namespace Ui { @@ -39,19 +40,19 @@ public: GxsForumGroupItem(FeedHolder *feedHolder, uint32_t feedId, const RsGxsGroupId &groupId, bool isHome, bool autoUpdate); GxsForumGroupItem(FeedHolder *feedHolder, uint32_t feedId, const RsGxsGroupId &groupId, const std::list& added_moderators,const std::list& removed_moderators,bool isHome, bool autoUpdate); GxsForumGroupItem(FeedHolder *feedHolder, uint32_t feedId, const RsGxsForumGroup &group, bool isHome, bool autoUpdate); - ~GxsForumGroupItem(); + virtual ~GxsForumGroupItem() override; bool setGroup(const RsGxsForumGroup &group); uint64_t uniqueIdentifier() const override { return hash_64bits("GxsForumGroupItem " + groupId().toStdString()) ; } protected: /* FeedItem */ - virtual void doExpand(bool open); + virtual void doExpand(bool open) override; /* GxsGroupFeedItem */ - virtual QString groupName(); + virtual QString groupName() override; virtual void loadGroup() override; - virtual RetroShareLink::enumType getLinkType() { return RetroShareLink::TYPE_FORUM; } + virtual RetroShareLink::enumType getLinkType() override { return RetroShareLink::TYPE_FORUM; } private slots: void subscribeForum(); @@ -69,6 +70,8 @@ private: std::list mAddedModerators; std::list mRemovedModerators; + + RsEventsHandlerId_t mEventHandlerId; }; #endif From 55651e73d9d3b073bc4c9f49a4e82a97548127eb Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 29 Oct 2023 20:47:00 +0100 Subject: [PATCH 2/4] made ConnectFriendWizard to accept retroshare links --- .../src/gui/connect/ConnectFriendWizard.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/retroshare-gui/src/gui/connect/ConnectFriendWizard.cpp b/retroshare-gui/src/gui/connect/ConnectFriendWizard.cpp index 4a7429f27..7ffdcd687 100755 --- a/retroshare-gui/src/gui/connect/ConnectFriendWizard.cpp +++ b/retroshare-gui/src/gui/connect/ConnectFriendWizard.cpp @@ -34,6 +34,7 @@ #endif #include "gui/common/FilesDefs.h" +#include "gui/RetroShareLink.h" #include "gui/settings/rsharesettings.h" #include "util/misc.h" #include "ConnectFriendWizard.h" @@ -449,8 +450,9 @@ void ConnectFriendWizard::initializePage(int id) } sockaddr_storage addr ; - +#ifdef DEBUG_FRIENDWIZARD std::cerr << "Cert IP = " << peerDetails.extAddr << std::endl; +#endif if(sockaddr_storage_ipv4_aton(addr,peerDetails.extAddr.c_str()) && sockaddr_storage_isValidNet(addr)) { @@ -870,7 +872,18 @@ void ConnectFriendWizard::cleanFriendCert() bool certValid = false; QString errorMsg ; QString certDetail; - std::string cert = ui->friendCertEdit->toPlainText().toUtf8().constData(); + + std::string cert ; + RetroShareLink rslink(ui->friendCertEdit->toPlainText()); + + if(rslink.valid() && rslink.type() == RetroShareLink::TYPE_CERTIFICATE) + cert = rslink.radix().toStdString(); + else + cert = ui->friendCertEdit->toPlainText().toUtf8().constData(); + +#ifdef DEBUG_FRIENDWIZARD + std::cerr << "Friend cert:\"" << cert << "\"" << std::endl; +#endif if (cert.empty()) { ui->friendCertCleanLabel->setToolTip(""); @@ -936,7 +949,7 @@ void ConnectFriendWizard::cleanFriendCert() void ConnectFriendWizard::pasteCert() { QClipboard *clipboard = QApplication::clipboard(); - ui->friendCertEdit->setPlainText(clipboard->text()); + ui->friendCertEdit->setPlainText(clipboard->text()); } void ConnectFriendWizard::openCert() From ab61149cb107ee07830b3c5ec62baf5946dd6172 Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 29 Oct 2023 21:05:02 +0100 Subject: [PATCH 3/4] fixed missing event handler registration --- .../src/gui/feeds/GxsChannelGroupItem.cpp | 21 +++++++++++-------- .../src/gui/feeds/GxsChannelGroupItem.h | 1 + .../src/gui/feeds/GxsForumGroupItem.cpp | 8 ++++--- .../src/gui/feeds/GxsForumGroupItem.h | 1 + 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.cpp b/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.cpp index dc20c3aee..a6213e740 100644 --- a/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.cpp +++ b/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.cpp @@ -37,9 +37,20 @@ GxsChannelGroupItem::GxsChannelGroupItem(FeedHolder *feedHolder, uint32_t feedId GxsGroupFeedItem(feedHolder, feedId, groupId, isHome, rsGxsChannels, autoUpdate) { setup(); - requestGroup(); + addEventHandler(); +} +GxsChannelGroupItem::GxsChannelGroupItem(FeedHolder *feedHolder, uint32_t feedId, const RsGxsChannelGroup &group, bool isHome, bool autoUpdate) : + GxsGroupFeedItem(feedHolder, feedId, group.mMeta.mGroupId, isHome, rsGxsChannels, autoUpdate) +{ + setup(); + setGroup(group); + addEventHandler(); +} + +void GxsChannelGroupItem::addEventHandler() +{ mEventHandlerId = 0; rsEvents->registerEventsHandler( [this](std::shared_ptr event) { @@ -64,14 +75,6 @@ GxsChannelGroupItem::GxsChannelGroupItem(FeedHolder *feedHolder, uint32_t feedId }, mEventHandlerId, RsEventType::GXS_CHANNELS ); } -GxsChannelGroupItem::GxsChannelGroupItem(FeedHolder *feedHolder, uint32_t feedId, const RsGxsChannelGroup &group, bool isHome, bool autoUpdate) : - GxsGroupFeedItem(feedHolder, feedId, group.mMeta.mGroupId, isHome, rsGxsChannels, autoUpdate) -{ - setup(); - - setGroup(group); -} - GxsChannelGroupItem::~GxsChannelGroupItem() { rsEvents->unregisterEventsHandler(mEventHandlerId); diff --git a/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.h b/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.h index 8f0a6e332..b0366bc98 100644 --- a/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.h +++ b/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.h @@ -60,6 +60,7 @@ private slots: private: void fill(); void setup(); + void addEventHandler(); private: RsGxsChannelGroup mGroup; diff --git a/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp b/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp index 23c9c35ac..5ad2e92f6 100644 --- a/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp +++ b/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp @@ -36,8 +36,7 @@ GxsForumGroupItem::GxsForumGroupItem(FeedHolder *feedHolder, uint32_t feedId, co { setup(); requestGroup(); - - + addEventHandler(); } GxsForumGroupItem::GxsForumGroupItem(FeedHolder *feedHolder, uint32_t feedId, const RsGxsGroupId &groupId, const std::list& added_moderators,const std::list& removed_moderators,bool isHome, bool autoUpdate): @@ -46,9 +45,12 @@ GxsForumGroupItem::GxsForumGroupItem(FeedHolder *feedHolder, uint32_t feedId, co mRemovedModerators(removed_moderators) { setup(); - requestGroup(); + addEventHandler(); +} +void GxsForumGroupItem::addEventHandler() +{ mEventHandlerId = 0; rsEvents->registerEventsHandler( [this](std::shared_ptr event) { diff --git a/retroshare-gui/src/gui/feeds/GxsForumGroupItem.h b/retroshare-gui/src/gui/feeds/GxsForumGroupItem.h index e09a3cb13..d80671e5a 100644 --- a/retroshare-gui/src/gui/feeds/GxsForumGroupItem.h +++ b/retroshare-gui/src/gui/feeds/GxsForumGroupItem.h @@ -61,6 +61,7 @@ private slots: private: void fill(); void setup(); + void addEventHandler(); private: RsGxsForumGroup mGroup; From b02acfae4bc700a893933ac1e7eef55ddbb19f4d Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 29 Oct 2023 21:06:09 +0100 Subject: [PATCH 4/4] fixed missing event handler registration --- retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp b/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp index 5ad2e92f6..663951a6c 100644 --- a/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp +++ b/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp @@ -79,8 +79,8 @@ GxsForumGroupItem::GxsForumGroupItem(FeedHolder *feedHolder, uint32_t feedId, co GxsGroupFeedItem(feedHolder, feedId, group.mMeta.mGroupId, isHome, rsGxsForums, autoUpdate) { setup(); - setGroup(group); + addEventHandler(); } GxsForumGroupItem::~GxsForumGroupItem()