added handling of channel, forum and posted events in GUI

This commit is contained in:
csoler 2019-12-12 21:23:42 +01:00
parent eef5a5a8ef
commit 4fe6e46410
No known key found for this signature in database
GPG key ID: 7BCA522266C0804C
6 changed files with 174 additions and 74 deletions

View file

@ -61,7 +61,7 @@ enum class RsEventType : uint32_t
/// @see pqissl /// @see pqissl
PEER_CONNECTION = 4, PEER_CONNECTION = 4,
/// @see RsGxsChanges /// @see RsGxsChanges // this one should probably be removed because it's not used anywhere
GXS_CHANGES = 5, GXS_CHANGES = 5,
/// Emitted when a peer state changes, @see RsPeers /// Emitted when a peer state changes, @see RsPeers
@ -73,6 +73,15 @@ enum class RsEventType : uint32_t
/// @see RsGxsCircleEvent /// @see RsGxsCircleEvent
GXS_CIRCLES = 8, GXS_CIRCLES = 8,
/// @see RsGxsChannelEvent
GXS_CHANNELS = 9,
/// @see RsGxsForumEvent
GXS_FORUMS = 10,
/// @see RsGxsPostedEvent
GXS_POSTED = 11,
MAX /// Used to detect invalid event type passed MAX /// Used to detect invalid event type passed
}; };

View file

@ -102,6 +102,34 @@ struct RsGxsChannelPost : RsSerializable
~RsGxsChannelPost() override; ~RsGxsChannelPost() override;
}; };
struct RsGxsChannelEvent: RsEvent
{
RsGxsChannelEvent()
: RsEvent(RsEventType::GXS_CHANNELS), mChannelEventCode(UNKNOWN) {}
enum ChannelEventCode: uint8_t {
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 (group and msg id)
RECEIVED_PUBLISH_KEY = 0x05, // publish key for this channel has been received.
};
ChannelEventCode mChannelEventCode;
RsGxsGroupId mChannelGroupId;
RsGxsMessageId mChannelMsgId;
///* @see RsEvent @see RsSerializable
void serial_process( RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) override
{
RsEvent::serial_process(j, ctx);
RS_SERIAL_PROCESS(mChannelEventCode);
RS_SERIAL_PROCESS(mChannelGroupId);
RS_SERIAL_PROCESS(mChannelMsgId);
}
};
class RsGxsChannels: public RsGxsIfaceHelper, public RsGxsCommentService class RsGxsChannels: public RsGxsIfaceHelper, public RsGxsCommentService
{ {

View file

@ -104,6 +104,33 @@ struct RsGxsForumMsg : RsSerializable
~RsGxsForumMsg() override; ~RsGxsForumMsg() override;
}; };
struct RsGxsForumEvent: RsEvent
{
RsGxsForumEvent()
: RsEvent(RsEventType::GXS_FORUMS), mForumEventCode(UNKNOWN) {}
enum ForumEventCode: uint8_t {
UNKNOWN = 0x00,
NEW_FORUM = 0x01, // emitted when new forum is received
UPDATED_FORUM = 0x02, // emitted when existing forum is updated
NEW_MESSAGE = 0x03, // new message reeived in a particular forum (group and msg id)
UPDATED_MESSAGE = 0x04, // existing message has been updated in a particular forum (group and msg id)
};
ForumEventCode mForumEventCode;
RsGxsGroupId mForumGroupId;
RsGxsMessageId mForumMsgId;
///* @see RsEvent @see RsSerializable
void serial_process( RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) override
{
RsEvent::serial_process(j, ctx);
RS_SERIAL_PROCESS(mForumEventCode);
RS_SERIAL_PROCESS(mForumGroupId);
RS_SERIAL_PROCESS(mForumMsgId);
}
};
class RsGxsForums: public RsGxsIfaceHelper class RsGxsForums: public RsGxsIfaceHelper
{ {

View file

@ -68,6 +68,32 @@ class RsPostedGroup
std::ostream &operator<<(std::ostream &out, const RsPostedGroup &group); std::ostream &operator<<(std::ostream &out, const RsPostedGroup &group);
std::ostream &operator<<(std::ostream &out, const RsPostedPost &post); std::ostream &operator<<(std::ostream &out, const RsPostedPost &post);
struct RsGxsPostedEvent: RsEvent
{
RsGxsPostedEvent()
: RsEvent(RsEventType::GXS_POSTED), mPostedEventCode(UNKNOWN) {}
enum PostedEventCode: uint8_t {
UNKNOWN = 0x00,
NEW_POSTED_GROUP = 0x01,
NEW_MESSAGE = 0x02
};
PostedEventCode mPostedEventCode;
RsPeerId mAuthorId;
RsGxsGroupId mPostedGroupId;
RsGxsMessageId mPostedMsgId;
///* @see RsEvent @see RsSerializable
void serial_process( RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) override
{
RsEvent::serial_process(j, ctx);
RS_SERIAL_PROCESS(mPostedEventCode);
RS_SERIAL_PROCESS(mAuthorId);
RS_SERIAL_PROCESS(mPostedGroupId);
RS_SERIAL_PROCESS(mPostedMsgId);
}
};
class RsPosted : public RsGxsIfaceHelper, public RsGxsCommentService class RsPosted : public RsGxsIfaceHelper, public RsGxsCommentService
{ {

View file

@ -81,10 +81,6 @@ NewsFeed::NewsFeed(QWidget *parent) :
/* Invoke the Qt Designer generated object setup routine */ /* Invoke the Qt Designer generated object setup routine */
ui->setupUi(this); ui->setupUi(this);
mTokenQueueChannel = NULL;
mTokenQueueForum = NULL;
mTokenQueuePosted = NULL;
setUpdateWhenInvisible(true); setUpdateWhenInvisible(true);
if (!instance) { if (!instance) {
@ -134,16 +130,6 @@ NewsFeed::~NewsFeed()
if (instance == this) { if (instance == this) {
instance = NULL; instance = NULL;
} }
if (mTokenQueueChannel) {
delete(mTokenQueueChannel);
}
if (mTokenQueueForum) {
delete(mTokenQueueForum);
}
if (mTokenQueuePosted) {
delete(mTokenQueuePosted);
}
} }
UserNotify *NewsFeed::getUserNotify(QObject *parent) UserNotify *NewsFeed::getUserNotify(QObject *parent)
@ -199,6 +185,79 @@ void NewsFeed::handleEvent_main_thread(std::shared_ptr<const RsEvent> event)
if(event->mType == RsEventType::GXS_CIRCLES && (flags & RS_FEED_TYPE_CIRCLE)) if(event->mType == RsEventType::GXS_CIRCLES && (flags & RS_FEED_TYPE_CIRCLE))
handleCircleEvent(event); handleCircleEvent(event);
if(event->mType == RsEventType::GXS_CHANNELS && (flags & RS_FEED_TYPE_CHANNEL))
handleChannelEvent(event);
if(event->mType == RsEventType::GXS_FORUMS && (flags & RS_FEED_TYPE_FORUM))
handleForumEvent(event);
if(event->mType == RsEventType::GXS_POSTED && (flags & RS_FEED_TYPE_POSTED))
handlePostedEvent(event);
}
void NewsFeed::handlePostedEvent(std::shared_ptr<const RsEvent> event)
{
const RsGxsPostedEvent *pe = dynamic_cast<const RsGxsPostedEvent*>(event.get());
if(!pe)
return;
switch(pe->mPostedEventCode)
{
case RsGxsPostedEvent::NEW_POSTED_GROUP: addFeedItem( new PostedGroupItem(this, NEWSFEED_POSTEDNEWLIST, pe->mPostedGroupId, false, true));
break;
case RsGxsPostedEvent::NEW_MESSAGE: addFeedItem( new PostedItem(this, NEWSFEED_POSTEDMSGLIST, pe->mPostedGroupId, pe->mPostedMsgId, false, true));
break;
default:
break;
}
}
void NewsFeed::handleForumEvent(std::shared_ptr<const RsEvent> event)
{
const RsGxsForumEvent *pe = dynamic_cast<const RsGxsForumEvent*>(event.get());
if(!pe)
return;
switch(pe->mForumEventCode)
{
case RsGxsForumEvent::UPDATED_FORUM:
case RsGxsForumEvent::NEW_FORUM: addFeedItem(new GxsForumGroupItem(this, NEWSFEED_FORUMNEWLIST, pe->mForumGroupId, false, true));
break;
case RsGxsForumEvent::UPDATED_MESSAGE:
case RsGxsForumEvent::NEW_MESSAGE: addFeedItem(new GxsForumMsgItem(this, NEWSFEED_FORUMNEWLIST, pe->mForumGroupId, pe->mForumMsgId, false, true));
break;
default:
break;
}
}
void NewsFeed::handleChannelEvent(std::shared_ptr<const RsEvent> event)
{
const RsGxsChannelEvent *pe = dynamic_cast<const RsGxsChannelEvent*>(event.get());
if(!pe)
return;
switch(pe->mChannelEventCode)
{
case RsGxsChannelEvent::UPDATED_CHANNEL:
case RsGxsChannelEvent::NEW_CHANNEL: addFeedItem(new GxsChannelGroupItem(this, NEWSFEED_CHANNELNEWLIST, pe->mChannelGroupId, false, true));
break;
case RsGxsChannelEvent::UPDATED_MESSAGE:
case RsGxsChannelEvent::NEW_MESSAGE: addFeedItem(new GxsChannelPostItem(this, NEWSFEED_CHANNELNEWLIST, pe->mChannelGroupId, pe->mChannelMsgId, false, true));
break;
case RsGxsChannelEvent::RECEIVED_PUBLISH_KEY: addFeedItem(new GxsChannelGroupItem(this, NEWSFEED_CHANNELPUBKEYLIST, pe->mChannelGroupId, false, true));
break;
default:
break;
}
} }
void NewsFeed::handleCircleEvent(std::shared_ptr<const RsEvent> event) void NewsFeed::handleCircleEvent(std::shared_ptr<const RsEvent> event)
@ -248,7 +307,6 @@ void NewsFeed::handleCircleEvent(std::shared_ptr<const RsEvent> event)
} }
} }
void NewsFeed::handleConnectionEvent(std::shared_ptr<const RsEvent> event) void NewsFeed::handleConnectionEvent(std::shared_ptr<const RsEvent> event)
{ {
const RsConnectionEvent *pe = dynamic_cast<const RsConnectionEvent*>(event.get()); const RsConnectionEvent *pe = dynamic_cast<const RsConnectionEvent*>(event.get());
@ -360,7 +418,6 @@ void NewsFeed::updateDisplay()
if (flags & RS_FEED_TYPE_SECURITY_IP) if (flags & RS_FEED_TYPE_SECURITY_IP)
addFeedItemSecurityWrongExternalIpReported(fi, false); addFeedItemSecurityWrongExternalIpReported(fi, false);
break; break;
#endif
case RS_FEED_ITEM_CHANNEL_NEW: case RS_FEED_ITEM_CHANNEL_NEW:
if (flags & RS_FEED_TYPE_CHANNEL) if (flags & RS_FEED_TYPE_CHANNEL)
@ -442,6 +499,7 @@ void NewsFeed::updateDisplay()
if (flags & RS_FEED_TYPE_POSTED) if (flags & RS_FEED_TYPE_POSTED)
addFeedItemPostedMsg(fi); addFeedItemPostedMsg(fi);
break; break;
#endif
#if 0 #if 0
case RS_FEED_ITEM_BLOG_NEW: case RS_FEED_ITEM_BLOG_NEW:
@ -494,7 +552,6 @@ void NewsFeed::updateDisplay()
void NewsFeed::testFeeds(uint notifyFlags) void NewsFeed::testFeeds(uint notifyFlags)
{ {
#ifdef TODO
if (!instance) { if (!instance) {
return; return;
} }
@ -510,6 +567,7 @@ void NewsFeed::testFeeds(uint notifyFlags)
RsFeedItem fi; RsFeedItem fi;
#ifdef TODO
switch(type) { switch(type) {
case RS_FEED_TYPE_PEER: case RS_FEED_TYPE_PEER:
fi.mId1 = rsPeers->getOwnId().toStdString(); fi.mId1 = rsPeers->getOwnId().toStdString();
@ -652,12 +710,12 @@ void NewsFeed::testFeeds(uint notifyFlags)
break; break;
} }
#endif
} }
instance->ui->feedWidget->enableCountChangedSignal(true); instance->ui->feedWidget->enableCountChangedSignal(true);
instance->sendNewsFeedChanged(); instance->sendNewsFeedChanged();
#endif
} }
#ifdef TO_REMOVE #ifdef TO_REMOVE
@ -697,7 +755,6 @@ void NewsFeed::loadCircleGroup(const uint32_t &token)
} }
} }
} }
#endif
void NewsFeed::loadChannelGroup(const uint32_t &token) void NewsFeed::loadChannelGroup(const uint32_t &token)
{ {
@ -970,9 +1027,11 @@ void NewsFeed::loadPostedMessage(const uint32_t &token)
instance->addFeedItemPostedMsg(fi); instance->addFeedItemPostedMsg(fi);
} }
} }
#endif
void NewsFeed::loadRequest(const TokenQueue *queue, const TokenRequest &req) void NewsFeed::loadRequest(const TokenQueue *queue, const TokenRequest &req)
{ {
#ifdef TO_REMOVE
if (queue == mTokenQueueChannel) { if (queue == mTokenQueueChannel) {
switch (req.mUserType) { switch (req.mUserType) {
case TOKEN_TYPE_GROUP: case TOKEN_TYPE_GROUP:
@ -994,7 +1053,6 @@ void NewsFeed::loadRequest(const TokenQueue *queue, const TokenRequest &req)
} }
} }
#ifdef TO_REMOVE
if (queue == mTokenQueueCircle) { if (queue == mTokenQueueCircle) {
switch (req.mUserType) { switch (req.mUserType) {
case TOKEN_TYPE_GROUP: case TOKEN_TYPE_GROUP:
@ -1011,7 +1069,6 @@ void NewsFeed::loadRequest(const TokenQueue *queue, const TokenRequest &req)
break; break;
} }
} }
#endif
if (queue == mTokenQueueForum) { if (queue == mTokenQueueForum) {
switch (req.mUserType) { switch (req.mUserType) {
@ -1050,6 +1107,7 @@ void NewsFeed::loadRequest(const TokenQueue *queue, const TokenRequest &req)
break; break;
} }
} }
#endif
} }
void NewsFeed::testFeed(FeedNotify *feedNotify) void NewsFeed::testFeed(FeedNotify *feedNotify)
@ -1167,7 +1225,6 @@ void NewsFeed::addFeedItemPeerHello(const RsFeedItem &fi)
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
} }
#endif
void NewsFeed::addFeedItemPeerNew(const RsFeedItem &fi) void NewsFeed::addFeedItemPeerNew(const RsFeedItem &fi)
{ {
@ -1183,7 +1240,6 @@ void NewsFeed::addFeedItemPeerNew(const RsFeedItem &fi)
#endif #endif
} }
#ifdef TO_REMOVE
void NewsFeed::addFeedItemPeerOffset(const RsFeedItem &fi) void NewsFeed::addFeedItemPeerOffset(const RsFeedItem &fi)
{ {
/* make new widget */ /* make new widget */
@ -1254,7 +1310,6 @@ void NewsFeed::addFeedItemSecurityUnknownOut(const RsFeedItem &fi)
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
} }
#endif
void NewsFeed::addFeedItemSecurityIpBlacklisted(const RsFeedItem &fi, bool isTest) void NewsFeed::addFeedItemSecurityIpBlacklisted(const RsFeedItem &fi, bool isTest)
{ {
@ -1270,7 +1325,6 @@ void NewsFeed::addFeedItemSecurityIpBlacklisted(const RsFeedItem &fi, bool isTes
#endif #endif
} }
#ifdef TO_REMOVE
void NewsFeed::addFeedItemSecurityWrongExternalIpReported(const RsFeedItem &fi, bool isTest) void NewsFeed::addFeedItemSecurityWrongExternalIpReported(const RsFeedItem &fi, bool isTest)
{ {
/* make new widget */ /* make new widget */
@ -1284,7 +1338,6 @@ void NewsFeed::addFeedItemSecurityWrongExternalIpReported(const RsFeedItem &fi,
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
} }
#endif
void NewsFeed::addFeedItemChannelNew(const RsFeedItem &fi) void NewsFeed::addFeedItemChannelNew(const RsFeedItem &fi)
{ {
@ -1468,6 +1521,7 @@ void NewsFeed::addFeedItemPostedMsg(const RsFeedItem &fi)
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
} }
#endif
#if 0 #if 0
void NewsFeed::addFeedItemBlogNew(const RsFeedItem &fi) void NewsFeed::addFeedItemBlogNew(const RsFeedItem &fi)

View file

@ -107,37 +107,13 @@ private:
void handleSecurityEvent(std::shared_ptr<const RsEvent> event); void handleSecurityEvent(std::shared_ptr<const RsEvent> event);
void handleConnectionEvent(std::shared_ptr<const RsEvent> event); void handleConnectionEvent(std::shared_ptr<const RsEvent> event);
void handleCircleEvent(std::shared_ptr<const RsEvent> event); void handleCircleEvent(std::shared_ptr<const RsEvent> event);
void handleForumEvent(std::shared_ptr<const RsEvent> event);
void handlePostedEvent(std::shared_ptr<const RsEvent> event);
void handleChannelEvent(std::shared_ptr<const RsEvent> event);
void addFeedItem(FeedItem *item); void addFeedItem(FeedItem *item);
void addFeedItemIfUnique(FeedItem *item, bool replace); void addFeedItemIfUnique(FeedItem *item, bool replace);
void remUniqueFeedItem(FeedItem *item); void remUniqueFeedItem(FeedItem *item);
void addFeedItemPeerConnect(const RsFeedItem &fi);
void addFeedItemPeerDisconnect(const RsFeedItem &fi);
void addFeedItemPeerHello(const RsFeedItem &fi);
void addFeedItemPeerNew(const RsFeedItem &fi);
void addFeedItemPeerOffset(const RsFeedItem &fi);
void addFeedItemSecurityConnectAttempt(const RsFeedItem &fi);
void addFeedItemSecurityAuthDenied(const RsFeedItem &fi);
void addFeedItemSecurityUnknownIn(const RsFeedItem &fi);
void addFeedItemSecurityUnknownOut(const RsFeedItem &fi);
void addFeedItemSecurityIpBlacklisted(const RsFeedItem &fi, bool isTest);
void addFeedItemSecurityWrongExternalIpReported(const RsFeedItem &fi, bool isTest);
void addFeedItemChannelNew(const RsFeedItem &fi);
// void addFeedItemChannelUpdate(const RsFeedItem &fi);
void addFeedItemChannelMsg(const RsFeedItem &fi);
void addFeedItemChannelPublishKey(const RsFeedItem &fi);
void addFeedItemForumNew(const RsFeedItem &fi);
// void addFeedItemForumUpdate(const RsFeedItem &fi);
void addFeedItemForumMsg(const RsFeedItem &fi);
void addFeedItemPostedNew(const RsFeedItem &fi);
// void addFeedItemPostedUpdate(const RsFeedItem &fi);
void addFeedItemPostedMsg(const RsFeedItem &fi);
#if 0 #if 0
void addFeedItemBlogNew(const RsFeedItem &fi); void addFeedItemBlogNew(const RsFeedItem &fi);
void addFeedItemBlogMsg(const RsFeedItem &fi); void addFeedItemBlogMsg(const RsFeedItem &fi);
@ -147,27 +123,7 @@ private:
void addFeedItemMessage(const RsFeedItem &fi); void addFeedItemMessage(const RsFeedItem &fi);
void addFeedItemFilesNew(const RsFeedItem &fi); void addFeedItemFilesNew(const RsFeedItem &fi);
void addFeedItemCircleMembReq(const RsFeedItem &fi);
void remFeedItemCircleMembReq(const RsFeedItem &fi);
void addFeedItemCircleInvitRec(const RsFeedItem &fi);
virtual void loadChannelGroup(const uint32_t &token);
virtual void loadChannelPost(const uint32_t &token);
virtual void loadChannelPublishKey(const uint32_t &token);
virtual void loadForumGroup(const uint32_t &token);
virtual void loadForumMessage(const uint32_t &token);
virtual void loadForumPublishKey(const uint32_t &token);
virtual void loadPostedGroup(const uint32_t &token);
virtual void loadPostedMessage(const uint32_t &token);
private: private:
TokenQueue *mTokenQueueChannel;
TokenQueue *mTokenQueueCircle;
TokenQueue *mTokenQueueForum;
TokenQueue *mTokenQueuePosted;
/* UI - from Designer */ /* UI - from Designer */
Ui::NewsFeed *ui; Ui::NewsFeed *ui;