mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-12-27 00:19:25 -05:00
added notifications for identities
This commit is contained in:
parent
90bb6c0011
commit
424e7be52f
@ -85,6 +85,9 @@ enum class RsEventType : uint32_t
|
|||||||
/// @see RsGxsPostedEvent
|
/// @see RsGxsPostedEvent
|
||||||
GXS_POSTED = 11,
|
GXS_POSTED = 11,
|
||||||
|
|
||||||
|
/// @see RsGxsPostedEvent
|
||||||
|
GXS_IDENTITY = 12,
|
||||||
|
|
||||||
MAX /// Used to detect invalid event type passed
|
MAX /// Used to detect invalid event type passed
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -304,6 +304,32 @@ private:
|
|||||||
RsIdentityUsage();
|
RsIdentityUsage();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class RsGxsIdentityEventCode: uint8_t
|
||||||
|
{
|
||||||
|
UNKNOWN = 0x00,
|
||||||
|
NEW_IDENTITY = 0x01,
|
||||||
|
DELETED_IDENTITY = 0x02,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RsGxsIdentityEvent: public RsEvent
|
||||||
|
{
|
||||||
|
RsGxsIdentityEvent()
|
||||||
|
: RsEvent(RsEventType::GXS_IDENTITY),
|
||||||
|
mIdentityEventCode(RsGxsIdentityEventCode::UNKNOWN) {}
|
||||||
|
|
||||||
|
RsGxsIdentityEventCode mIdentityEventCode;
|
||||||
|
RsGxsGroupId mIdentityId;
|
||||||
|
|
||||||
|
///* @see RsEvent @see RsSerializable
|
||||||
|
void serial_process( RsGenericSerializer::SerializeJob j, RsGenericSerializer::SerializeContext& ctx ) override
|
||||||
|
{
|
||||||
|
RsEvent::serial_process(j, ctx);
|
||||||
|
RS_SERIAL_PROCESS(mIdentityEventCode);
|
||||||
|
RS_SERIAL_PROCESS(mIdentityId);
|
||||||
|
}
|
||||||
|
|
||||||
|
~RsGxsIdentityEvent() override = default;
|
||||||
|
};
|
||||||
|
|
||||||
struct RsIdentityDetails : RsSerializable
|
struct RsIdentityDetails : RsSerializable
|
||||||
{
|
{
|
||||||
|
@ -603,7 +603,6 @@ void p3IdService::notifyChanges(std::vector<RsGxsNotify *> &changes)
|
|||||||
|
|
||||||
for(uint32_t i = 0;i<changes.size();++i)
|
for(uint32_t i = 0;i<changes.size();++i)
|
||||||
{
|
{
|
||||||
RsGxsGroupChange *groupChange = dynamic_cast<RsGxsGroupChange *>(changes[i]);
|
|
||||||
RsGxsMsgChange *msgChange = dynamic_cast<RsGxsMsgChange *>(changes[i]);
|
RsGxsMsgChange *msgChange = dynamic_cast<RsGxsMsgChange *>(changes[i]);
|
||||||
|
|
||||||
if (msgChange && !msgChange->metaChange())
|
if (msgChange && !msgChange->metaChange())
|
||||||
@ -614,8 +613,8 @@ void p3IdService::notifyChanges(std::vector<RsGxsNotify *> &changes)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
std::map<RsGxsGroupId, std::set<RsGxsMessageId> > &msgChangeMap = msgChange->msgChangeMap;
|
std::map<RsGxsGroupId, std::set<RsGxsMessageId> > &msgChangeMap = msgChange->msgChangeMap;
|
||||||
std::map<RsGxsGroupId, std::set<RsGxsMessageId> >::iterator mit;
|
|
||||||
for(mit = msgChangeMap.begin(); mit != msgChangeMap.end(); ++mit)
|
for(auto mit = msgChangeMap.begin(); mit != msgChangeMap.end(); ++mit)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_IDS
|
#ifdef DEBUG_IDS
|
||||||
std::cerr << "p3IdService::notifyChanges() Msgs for Group: " << mit->first;
|
std::cerr << "p3IdService::notifyChanges() Msgs for Group: " << mit->first;
|
||||||
@ -624,7 +623,8 @@ void p3IdService::notifyChanges(std::vector<RsGxsNotify *> &changes)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* shouldn't need to worry about groups - as they need to be subscribed to */
|
RsGxsGroupChange *groupChange = dynamic_cast<RsGxsGroupChange *>(changes[i]);
|
||||||
|
|
||||||
if (groupChange && !groupChange->metaChange())
|
if (groupChange && !groupChange->metaChange())
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_IDS
|
#ifdef DEBUG_IDS
|
||||||
@ -632,9 +632,8 @@ void p3IdService::notifyChanges(std::vector<RsGxsNotify *> &changes)
|
|||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
std::list<RsGxsGroupId> &groupList = groupChange->mGrpIdList;
|
std::list<RsGxsGroupId> &groupList = groupChange->mGrpIdList;
|
||||||
std::list<RsGxsGroupId>::iterator git;
|
|
||||||
|
|
||||||
for(git = groupList.begin(); git != groupList.end();)
|
for(auto git = groupList.begin(); git != groupList.end();++git)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_IDS
|
#ifdef DEBUG_IDS
|
||||||
std::cerr << "p3IdService::notifyChanges() Auto Subscribe to Incoming Groups: " << *git;
|
std::cerr << "p3IdService::notifyChanges() Auto Subscribe to Incoming Groups: " << *git;
|
||||||
@ -649,16 +648,24 @@ void p3IdService::notifyChanges(std::vector<RsGxsNotify *> &changes)
|
|||||||
|
|
||||||
timeStampKey(RsGxsId(*git),RsIdentityUsage(serviceType(),RsIdentityUsage::IDENTITY_DATA_UPDATE)) ;
|
timeStampKey(RsGxsId(*git),RsIdentityUsage(serviceType(),RsIdentityUsage::IDENTITY_DATA_UPDATE)) ;
|
||||||
|
|
||||||
++git;
|
// notify that a new identity is received, if needed
|
||||||
}
|
|
||||||
else
|
|
||||||
git = groupList.erase(git) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(groupList.empty())
|
switch(groupChange->getType())
|
||||||
{
|
{
|
||||||
delete changes[i] ;
|
case RsGxsNotify::TYPE_PUBLISHED:
|
||||||
changes[i] = NULL ;
|
case RsGxsNotify::TYPE_RECEIVED_NEW:
|
||||||
|
{
|
||||||
|
auto ev = std::make_shared<RsGxsIdentityEvent>();
|
||||||
|
ev->mIdentityId = *git;
|
||||||
|
ev->mIdentityEventCode = RsGxsIdentityEventCode::NEW_IDENTITY;
|
||||||
|
rsEvents->postEvent(ev);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1070,6 +1077,14 @@ bool p3IdService::deleteIdentity(RsGxsId& id)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(rsEvents)
|
||||||
|
{
|
||||||
|
auto ev = std::make_shared<RsGxsIdentityEvent>();
|
||||||
|
ev->mIdentityId = grouId;
|
||||||
|
ev->mIdentityEventCode = RsGxsIdentityEventCode::DELETED_IDENTITY;
|
||||||
|
rsEvents->postEvent(ev);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,9 +62,6 @@ CirclesDialog::CirclesDialog(QWidget *parent)
|
|||||||
mStateHelper->addWidget(CIRCLESDIALOG_GROUPMETA, ui.pushButton_editCircle);
|
mStateHelper->addWidget(CIRCLESDIALOG_GROUPMETA, ui.pushButton_editCircle);
|
||||||
|
|
||||||
mStateHelper->addWidget(CIRCLESDIALOG_GROUPMETA, ui.treeWidget_membership, UISTATE_ACTIVE_ENABLED);
|
mStateHelper->addWidget(CIRCLESDIALOG_GROUPMETA, ui.treeWidget_membership, UISTATE_ACTIVE_ENABLED);
|
||||||
// mStateHelper->addWidget(CIRCLESDIALOG_GROUPMETA, ui.treeWidget_friends, UISTATE_ACTIVE_ENABLED);
|
|
||||||
// mStateHelper->addWidget(CIRCLESDIALOG_GROUPMETA, ui.treeWidget_category, UISTATE_ACTIVE_ENABLED);
|
|
||||||
|
|
||||||
mStateHelper->setWidgetEnabled(ui.pushButton_editCircle, false);
|
mStateHelper->setWidgetEnabled(ui.pushButton_editCircle, false);
|
||||||
|
|
||||||
/* Connect signals */
|
/* Connect signals */
|
||||||
@ -74,19 +71,13 @@ CirclesDialog::CirclesDialog(QWidget *parent)
|
|||||||
connect(ui.todoPushButton, SIGNAL(clicked()), this, SLOT(todo()));
|
connect(ui.todoPushButton, SIGNAL(clicked()), this, SLOT(todo()));
|
||||||
|
|
||||||
connect(ui.treeWidget_membership, SIGNAL(itemSelectionChanged()), this, SLOT(circle_selected()));
|
connect(ui.treeWidget_membership, SIGNAL(itemSelectionChanged()), this, SLOT(circle_selected()));
|
||||||
// connect(ui.treeWidget_friends, SIGNAL(itemSelectionChanged()), this, SLOT(friend_selected()));
|
|
||||||
// connect(ui.treeWidget_category, SIGNAL(itemSelectionChanged()), this, SLOT(category_selected()));
|
|
||||||
|
|
||||||
/* Setup TokenQueue */
|
/* Setup TokenQueue */
|
||||||
mCircleQueue = new TokenQueue(rsGxsCircles->getTokenService(), this);
|
mCircleQueue = new TokenQueue(rsGxsCircles->getTokenService(), this);
|
||||||
|
|
||||||
/* Set header resize modes and initial section sizes */
|
/* Set header resize modes and initial section sizes */
|
||||||
QHeaderView * membership_header = ui.treeWidget_membership->header () ;
|
QHeaderView * membership_header = ui.treeWidget_membership->header () ;
|
||||||
membership_header->resizeSection ( CIRCLEGROUP_CIRCLE_COL_GROUPNAME, 200 );
|
membership_header->resizeSection ( CIRCLEGROUP_CIRCLE_COL_GROUPNAME, 200 );
|
||||||
|
|
||||||
// QHeaderView * friends_header = ui.treeWidget_friends->header () ;
|
|
||||||
// friends_header->resizeSection ( CIRCLEGROUP_FRIEND_COL_NAME, 200 );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CirclesDialog::~CirclesDialog()
|
CirclesDialog::~CirclesDialog()
|
||||||
|
@ -58,35 +58,9 @@ private slots:
|
|||||||
void friend_selected();
|
void friend_selected();
|
||||||
void category_selected();
|
void category_selected();
|
||||||
|
|
||||||
#if 0
|
|
||||||
void OpenOrShowAddPageDialog();
|
|
||||||
void OpenOrShowAddGroupDialog();
|
|
||||||
void OpenOrShowEditDialog();
|
|
||||||
void OpenOrShowRepublishDialog();
|
|
||||||
|
|
||||||
void groupTreeChanged();
|
|
||||||
|
|
||||||
void newGroup();
|
|
||||||
void showGroupDetails();
|
|
||||||
void editGroupDetails();
|
|
||||||
|
|
||||||
void insertWikiGroups();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void reloadAll();
|
void reloadAll();
|
||||||
|
|
||||||
#if 0
|
|
||||||
voidclearWikiPage();
|
|
||||||
void clearGroupTree();
|
|
||||||
|
|
||||||
void updateWikiPage(const RsWikiSnapshot &page);
|
|
||||||
|
|
||||||
bool getSelectedPage(std::string &groupId, std::string &pageId, std::string &origPageId);
|
|
||||||
std::string getSelectedPage();
|
|
||||||
std::string getSelectedGroup();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void requestGroupMeta();
|
void requestGroupMeta();
|
||||||
void loadGroupMeta(const uint32_t &token);
|
void loadGroupMeta(const uint32_t &token);
|
||||||
|
|
||||||
|
@ -35,10 +35,12 @@
|
|||||||
#include "gui/chat/ChatDialog.h"
|
#include "gui/chat/ChatDialog.h"
|
||||||
#include "gui/Circles/CreateCircleDialog.h"
|
#include "gui/Circles/CreateCircleDialog.h"
|
||||||
#include "gui/common/UIStateHelper.h"
|
#include "gui/common/UIStateHelper.h"
|
||||||
|
#include "gui/common/UserNotify.h"
|
||||||
#include "gui/gxs/GxsIdDetails.h"
|
#include "gui/gxs/GxsIdDetails.h"
|
||||||
#include "gui/gxs/RsGxsUpdateBroadcastBase.h"
|
#include "gui/gxs/RsGxsUpdateBroadcastBase.h"
|
||||||
#include "gui/msgs/MessageComposer.h"
|
#include "gui/msgs/MessageComposer.h"
|
||||||
#include "gui/settings/rsharesettings.h"
|
#include "gui/settings/rsharesettings.h"
|
||||||
|
#include "util/qtthreadsutils.h"
|
||||||
#include "retroshare-gui/RsAutoUpdatePage.h"
|
#include "retroshare-gui/RsAutoUpdatePage.h"
|
||||||
#include "util/misc.h"
|
#include "util/misc.h"
|
||||||
#include "util/QtVersion.h"
|
#include "util/QtVersion.h"
|
||||||
@ -148,6 +150,9 @@ IdDialog::IdDialog(QWidget *parent) :
|
|||||||
|
|
||||||
mIdQueue = NULL;
|
mIdQueue = NULL;
|
||||||
|
|
||||||
|
mEventHandlerId = 0;
|
||||||
|
rsEvents->registerEventsHandler(RsEventType::GXS_IDENTITY, [this](std::shared_ptr<const RsEvent> event) { RsQThreadUtils::postToObject( [=]() { handleEvent_main_thread(event); }, this ); }, mEventHandlerId );
|
||||||
|
|
||||||
// This is used to grab the broadcast of changes from p3GxsCircles, which is discarded by the current dialog, since it expects data for p3Identity only.
|
// This is used to grab the broadcast of changes from p3GxsCircles, which is discarded by the current dialog, since it expects data for p3Identity only.
|
||||||
mCirclesBroadcastBase = new RsGxsUpdateBroadcastBase(rsGxsCircles, this);
|
mCirclesBroadcastBase = new RsGxsUpdateBroadcastBase(rsGxsCircles, this);
|
||||||
connect(mCirclesBroadcastBase, SIGNAL(fillDisplay(bool)), this, SLOT(updateCirclesDisplay(bool)));
|
connect(mCirclesBroadcastBase, SIGNAL(fillDisplay(bool)), this, SLOT(updateCirclesDisplay(bool)));
|
||||||
@ -398,6 +403,29 @@ IdDialog::IdDialog(QWidget *parent) :
|
|||||||
tmer->start(10000) ; // update every 10 secs.
|
tmer->start(10000) ; // update every 10 secs.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IdDialog::handleEvent_main_thread(std::shared_ptr<const RsEvent> event)
|
||||||
|
{
|
||||||
|
if(event->mType != RsEventType::GXS_IDENTITY)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const RsGxsIdentityEvent *e = dynamic_cast<const RsGxsIdentityEvent*>(event.get());
|
||||||
|
|
||||||
|
if(!e)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch(e->mIdentityEventCode)
|
||||||
|
{
|
||||||
|
case RsGxsIdentityEventCode::DELETED_IDENTITY:
|
||||||
|
case RsGxsIdentityEventCode::NEW_IDENTITY:
|
||||||
|
|
||||||
|
requestIdList();
|
||||||
|
getUserNotify()->updateIcon();
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void IdDialog::clearPerson()
|
void IdDialog::clearPerson()
|
||||||
{
|
{
|
||||||
QFontMetricsF f(ui->avLabel_Person->font()) ;
|
QFontMetricsF f(ui->avLabel_Person->font()) ;
|
||||||
|
@ -158,6 +158,9 @@ private:
|
|||||||
RsGxsGroupId mIdToNavigate;
|
RsGxsGroupId mIdToNavigate;
|
||||||
int filter;
|
int filter;
|
||||||
|
|
||||||
|
void handleEvent_main_thread(std::shared_ptr<const RsEvent> event);
|
||||||
|
RsEventsHandlerId_t mEventHandlerId;
|
||||||
|
|
||||||
/* UI - Designer */
|
/* UI - Designer */
|
||||||
Ui::IdDialog *ui;
|
Ui::IdDialog *ui;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user