mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-12-12 07:16:19 -05:00
Merge pull request #2951 from csoler/v0.6-Notify2
Getting rid of old notify system
This commit is contained in:
commit
553d2e8f50
124 changed files with 2160 additions and 2476 deletions
|
|
@ -1 +1 @@
|
|||
Subproject commit a82f87cc935694e903bc5b99768d4390d421fb14
|
||||
Subproject commit 96e249a06d8f30c2aace38beecc8fb7271159a88
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
#include "FeedReaderStringDefs.h"
|
||||
#include "gui/common/RSTreeWidgetItem.h"
|
||||
#include "gui/settings/rsharesettings.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/RsGUIEventManager.h"
|
||||
#include "FeedReaderUserNotify.h"
|
||||
#include "gui/Posted/PostedCreatePostDialog.h"
|
||||
#include "util/imageutil.h"
|
||||
|
|
@ -73,7 +73,7 @@ FeedReaderDialog::FeedReaderDialog(RsFeedReader *feedReader, FeedReaderNotify *n
|
|||
connect(mNotify, &FeedReaderNotify::feedChanged, this, &FeedReaderDialog::feedChanged, Qt::QueuedConnection);
|
||||
connect(mNotify, &FeedReaderNotify::optimizeImage, this, &FeedReaderDialog::optimizeImage, Qt::QueuedConnection);
|
||||
|
||||
connect(NotifyQt::getInstance(), SIGNAL(settingsChanged()), this, SLOT(settingsChanged()));
|
||||
connect(RsGUIEventManager::getInstance(), SIGNAL(settingsChanged()), this, SLOT(settingsChanged()));
|
||||
|
||||
/* connect signals */
|
||||
connect(ui->feedTreeWidget, SIGNAL(itemActivated(QTreeWidgetItem*,int)), this, SLOT(feedTreeItemActivated(QTreeWidgetItem*)));
|
||||
|
|
@ -570,7 +570,7 @@ void FeedReaderDialog::feedChanged(uint32_t feedId, int type)
|
|||
}
|
||||
|
||||
FeedInfo feedInfo;
|
||||
if (type != NOTIFY_TYPE_DEL) {
|
||||
if (type != FeedReaderNotify::NOTIFY_TYPE_DEL) {
|
||||
if (!mFeedReader->getFeedInfo(feedId, feedInfo)) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -580,12 +580,12 @@ void FeedReaderDialog::feedChanged(uint32_t feedId, int type)
|
|||
}
|
||||
}
|
||||
|
||||
if (type == NOTIFY_TYPE_MOD || type == NOTIFY_TYPE_DEL) {
|
||||
if (type == FeedReaderNotify::NOTIFY_TYPE_MOD || type == FeedReaderNotify::NOTIFY_TYPE_DEL) {
|
||||
QTreeWidgetItemIterator it(ui->feedTreeWidget);
|
||||
QTreeWidgetItem *item;
|
||||
while ((item = *it) != NULL) {
|
||||
if (item->data(COLUMN_FEED_DATA, ROLE_FEED_ID).toUInt() == feedId) {
|
||||
if (type == NOTIFY_TYPE_MOD) {
|
||||
if (type == FeedReaderNotify::NOTIFY_TYPE_MOD) {
|
||||
updateFeedItem(item, feedInfo);
|
||||
} else {
|
||||
delete(item);
|
||||
|
|
@ -596,7 +596,7 @@ void FeedReaderDialog::feedChanged(uint32_t feedId, int type)
|
|||
}
|
||||
}
|
||||
|
||||
if (type == NOTIFY_TYPE_ADD) {
|
||||
if (type == FeedReaderNotify::NOTIFY_TYPE_ADD) {
|
||||
QTreeWidgetItemIterator it(ui->feedTreeWidget);
|
||||
QTreeWidgetItem *itemParent;
|
||||
while ((itemParent = *it) != NULL) {
|
||||
|
|
|
|||
|
|
@ -40,15 +40,15 @@ class FeedReaderDialog : public MainPage
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
FeedReaderDialog(RsFeedReader *feedReader, FeedReaderNotify *notify, QWidget *parent = 0);
|
||||
FeedReaderDialog(RsFeedReader *feedReader, FeedReaderNotify *notify, QWidget *parent = 0);
|
||||
~FeedReaderDialog();
|
||||
|
||||
static QIcon iconFromFeed(const FeedInfo &feedInfo);
|
||||
|
||||
protected:
|
||||
virtual UserNotify *createUserNotify(QObject *parent) override;
|
||||
virtual void showEvent(QShowEvent *event);
|
||||
bool eventFilter(QObject *obj, QEvent *ev);
|
||||
virtual void showEvent(QShowEvent *event) override;
|
||||
bool eventFilter(QObject *obj, QEvent *ev) override;
|
||||
|
||||
private slots:
|
||||
void settingsChanged();
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ void FeedReaderFeedNotify::msgChanged(uint32_t feedId, const QString &msgId, int
|
|||
return;
|
||||
}
|
||||
|
||||
if (type != NOTIFY_TYPE_ADD) {
|
||||
if (type != FeedReaderNotify::NOTIFY_TYPE_ADD) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -515,12 +515,12 @@ void FeedReaderMessageWidget::feedChanged(uint32_t feedId, int type)
|
|||
return;
|
||||
}
|
||||
|
||||
if (type == NOTIFY_TYPE_DEL) {
|
||||
if (type == FeedReaderNotify::NOTIFY_TYPE_DEL) {
|
||||
setFeedId(0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == NOTIFY_TYPE_MOD) {
|
||||
if (type == FeedReaderNotify::NOTIFY_TYPE_MOD) {
|
||||
if (!mFeedReader->getFeedInfo(mFeedId, mFeedInfo)) {
|
||||
setFeedId(0);
|
||||
return;
|
||||
|
|
@ -555,18 +555,18 @@ void FeedReaderMessageWidget::msgChanged(uint32_t feedId, const QString &msgId,
|
|||
}
|
||||
|
||||
FeedMsgInfo msgInfo;
|
||||
if (type != NOTIFY_TYPE_DEL) {
|
||||
if (type != FeedReaderNotify::NOTIFY_TYPE_DEL) {
|
||||
if (!mFeedReader->getMsgInfo(feedId, msgId.toStdString(), msgInfo)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (type == NOTIFY_TYPE_MOD || type == NOTIFY_TYPE_DEL) {
|
||||
if (type == FeedReaderNotify::NOTIFY_TYPE_MOD || type == FeedReaderNotify::NOTIFY_TYPE_DEL) {
|
||||
QTreeWidgetItemIterator it(ui->msgTreeWidget);
|
||||
QTreeWidgetItem *item;
|
||||
while ((item = *it) != NULL) {
|
||||
if (item->data(COLUMN_MSG_DATA, ROLE_MSG_ID).toString() == msgId) {
|
||||
if (type == NOTIFY_TYPE_MOD) {
|
||||
if (type == FeedReaderNotify::NOTIFY_TYPE_MOD) {
|
||||
updateMsgItem(item, msgInfo);
|
||||
filterItem(item);
|
||||
} else {
|
||||
|
|
@ -578,13 +578,13 @@ void FeedReaderMessageWidget::msgChanged(uint32_t feedId, const QString &msgId,
|
|||
}
|
||||
}
|
||||
|
||||
if (type == NOTIFY_TYPE_MOD) {
|
||||
if (type == FeedReaderNotify::NOTIFY_TYPE_MOD) {
|
||||
if (msgId.toStdString() == currentMsgId()) {
|
||||
updateCurrentMessage();
|
||||
}
|
||||
}
|
||||
|
||||
if (type == NOTIFY_TYPE_ADD) {
|
||||
if (type == FeedReaderNotify::NOTIFY_TYPE_ADD) {
|
||||
QTreeWidgetItem *item = new RSTreeWidgetItem(mMsgCompareRole);
|
||||
updateMsgItem(item, msgInfo);
|
||||
ui->msgTreeWidget->addTopLevelItem(item);
|
||||
|
|
|
|||
|
|
@ -29,6 +29,13 @@ class FeedReaderNotify : public QObject, public RsFeedReaderNotify
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
// These replace the variables from the old notify system. It's simpler than switching the entire
|
||||
// feedreader plugin to the new rsEvents system
|
||||
|
||||
static const int NOTIFY_TYPE_ADD = 0x01;
|
||||
static const int NOTIFY_TYPE_DEL = 0x02;
|
||||
static const int NOTIFY_TYPE_MOD = 0x03;
|
||||
|
||||
FeedReaderNotify();
|
||||
|
||||
/* RsFeedReaderNotify */
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ void FeedReaderUserNotify::iconClicked()
|
|||
|
||||
void FeedReaderUserNotify::feedChanged(uint32_t /*feedId*/, int type)
|
||||
{
|
||||
if (type == NOTIFY_TYPE_DEL) {
|
||||
if (type == FeedReaderNotify::NOTIFY_TYPE_DEL) {
|
||||
updateIcon();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -294,13 +294,13 @@ void PreviewFeedDialog::feedChanged(uint32_t feedId, int type)
|
|||
return;
|
||||
}
|
||||
|
||||
if (type == NOTIFY_TYPE_DEL) {
|
||||
if (type == FeedReaderNotify::NOTIFY_TYPE_DEL) {
|
||||
/* feed deleted */
|
||||
mFeedId = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == NOTIFY_TYPE_ADD || type == NOTIFY_TYPE_MOD) {
|
||||
if (type == FeedReaderNotify::NOTIFY_TYPE_ADD || type == FeedReaderNotify::NOTIFY_TYPE_MOD) {
|
||||
FeedInfo feedInfo;
|
||||
if (!mFeedReader->getFeedInfo(mFeedId, feedInfo)) {
|
||||
return;
|
||||
|
|
@ -320,18 +320,18 @@ void PreviewFeedDialog::msgChanged(uint32_t feedId, const QString &msgId, int ty
|
|||
}
|
||||
|
||||
switch (type) {
|
||||
case NOTIFY_TYPE_ADD:
|
||||
case FeedReaderNotify::NOTIFY_TYPE_ADD:
|
||||
if (mMsgId.empty()) {
|
||||
mMsgId = msgId.toStdString();
|
||||
updateMsg();
|
||||
}
|
||||
break;
|
||||
case NOTIFY_TYPE_MOD:
|
||||
case FeedReaderNotify::NOTIFY_TYPE_MOD:
|
||||
if (mMsgId == msgId.toStdString()) {
|
||||
updateMsg();
|
||||
}
|
||||
break;
|
||||
case NOTIFY_TYPE_DEL:
|
||||
case FeedReaderNotify::NOTIFY_TYPE_DEL:
|
||||
if (mMsgId == msgId.toStdString()) {
|
||||
std::list<std::string>::iterator it = std::find(mMsgIds.begin(), mMsgIds.end(), mMsgId);
|
||||
if (it != mMsgIds.end()) {
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
#include "rsFeedReaderItems.h"
|
||||
#include "p3FeedReader.h"
|
||||
#include "gui/FeedReaderNotify.h"
|
||||
#include "p3FeedReaderThread.h"
|
||||
#include "rsitems/rsconfigitems.h"
|
||||
#include "retroshare/rsiface.h"
|
||||
|
|
@ -415,7 +416,7 @@ RsFeedResult p3FeedReader::addFolder(uint32_t parentId, const std::string &name,
|
|||
IndicateConfigChanged(RsConfigMgr::CheckPriority::SAVE_NOW);
|
||||
|
||||
if (mNotify) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_ADD);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_ADD);
|
||||
}
|
||||
|
||||
return RS_FEED_RESULT_SUCCESS;
|
||||
|
|
@ -455,7 +456,7 @@ RsFeedResult p3FeedReader::setFolder(uint32_t feedId, const std::string &name)
|
|||
IndicateConfigChanged(RsConfigMgr::CheckPriority::SAVE_NOW);
|
||||
|
||||
if (mNotify) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
}
|
||||
|
||||
return RS_FEED_RESULT_SUCCESS;
|
||||
|
|
@ -502,7 +503,7 @@ RsFeedResult p3FeedReader::addFeed(const FeedInfo &feedInfo, uint32_t &feedId)
|
|||
IndicateConfigChanged(RsConfigMgr::CheckPriority::SAVE_NOW);
|
||||
|
||||
if (mNotify) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_ADD);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_ADD);
|
||||
}
|
||||
|
||||
return RS_FEED_RESULT_SUCCESS;
|
||||
|
|
@ -587,7 +588,7 @@ RsFeedResult p3FeedReader::setFeed(uint32_t feedId, const FeedInfo &feedInfo)
|
|||
IndicateConfigChanged(RsConfigMgr::CheckPriority::SAVE_NOW);
|
||||
|
||||
if (mNotify) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
}
|
||||
|
||||
if (!forumId.empty()) {
|
||||
|
|
@ -658,7 +659,7 @@ RsFeedResult p3FeedReader::setParent(uint32_t feedId, uint32_t parentId)
|
|||
IndicateConfigChanged(RsConfigMgr::CheckPriority::SAVE_NOW);
|
||||
|
||||
if (mNotify) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -756,7 +757,7 @@ bool p3FeedReader::removeFeed(uint32_t feedId)
|
|||
/* only notify remove of feed */
|
||||
std::list<uint32_t>::iterator it;
|
||||
for (it = removedFeedIds.begin(); it != removedFeedIds.end(); ++it) {
|
||||
mNotify->notifyFeedChanged(*it, NOTIFY_TYPE_DEL);
|
||||
mNotify->notifyFeedChanged(*it, FeedReaderNotify::NOTIFY_TYPE_DEL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -803,7 +804,7 @@ bool p3FeedReader::addPreviewFeed(const FeedInfo &feedInfo, uint32_t &feedId)
|
|||
}
|
||||
|
||||
if (mNotify) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_ADD);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_ADD);
|
||||
}
|
||||
|
||||
{
|
||||
|
|
@ -925,8 +926,8 @@ bool p3FeedReader::removeMsg(uint32_t feedId, const std::string &msgId)
|
|||
}
|
||||
|
||||
if (mNotify) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyMsgChanged(feedId, msgId, NOTIFY_TYPE_DEL);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyMsgChanged(feedId, msgId, FeedReaderNotify::NOTIFY_TYPE_DEL);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -977,11 +978,11 @@ bool p3FeedReader::removeMsgs(uint32_t feedId, const std::list<std::string> &msg
|
|||
}
|
||||
|
||||
if (mNotify && !removedMsgs.empty()) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
|
||||
std::list<std::string>::iterator it;
|
||||
for (it = removedMsgs.begin(); it != removedMsgs.end(); ++it) {
|
||||
mNotify->notifyMsgChanged(feedId, *it, NOTIFY_TYPE_DEL);
|
||||
mNotify->notifyMsgChanged(feedId, *it, FeedReaderNotify::NOTIFY_TYPE_DEL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1224,7 +1225,7 @@ bool p3FeedReader::processFeed(uint32_t feedId)
|
|||
|
||||
if (mNotify) {
|
||||
for (it = notifyIds.begin(); it != notifyIds.end(); ++it) {
|
||||
mNotify->notifyFeedChanged(*it, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyFeedChanged(*it, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1273,8 +1274,8 @@ bool p3FeedReader::setMessageRead(uint32_t feedId, const std::string &msgId, boo
|
|||
if (changed) {
|
||||
IndicateConfigChanged(RsConfigMgr::CheckPriority::SAVE_OFTEN);
|
||||
if (mNotify) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyMsgChanged(feedId, msgId, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyMsgChanged(feedId, msgId, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1328,10 +1329,10 @@ bool p3FeedReader::retransformMsg(uint32_t feedId, const std::string &msgId)
|
|||
IndicateConfigChanged(RsConfigMgr::CheckPriority::SAVE_NOW);
|
||||
if (mNotify) {
|
||||
if (feedChanged) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
}
|
||||
if (msgChanged) {
|
||||
mNotify->notifyMsgChanged(feedId, msgId, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyMsgChanged(feedId, msgId, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1466,7 +1467,7 @@ int p3FeedReader::tick()
|
|||
|
||||
if (mNotify) {
|
||||
for (it = notifyIds.begin(); it != notifyIds.end(); ++it) {
|
||||
mNotify->notifyFeedChanged(*it, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyFeedChanged(*it, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
}
|
||||
if (imageToOptimze) {
|
||||
mNotify->notifyOptimizeImage();
|
||||
|
|
@ -1526,7 +1527,7 @@ void p3FeedReader::cleanFeeds()
|
|||
if (mNotify) {
|
||||
std::list<std::pair<uint32_t, std::string> >::iterator it;
|
||||
for (it = removedMsgIds.begin(); it != removedMsgIds.end(); ++it) {
|
||||
mNotify->notifyMsgChanged(it->first, it->second, NOTIFY_TYPE_DEL);
|
||||
mNotify->notifyMsgChanged(it->first, it->second, FeedReaderNotify::NOTIFY_TYPE_DEL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1801,7 +1802,7 @@ bool p3FeedReader::getFeedToDownload(RsFeedReaderFeed &feed, uint32_t neededFeed
|
|||
}
|
||||
|
||||
if (mNotify) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -1852,7 +1853,7 @@ void p3FeedReader::onDownloadSuccess(uint32_t feedId, const std::string &content
|
|||
}
|
||||
|
||||
if (mNotify) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1889,7 +1890,7 @@ void p3FeedReader::onDownloadError(uint32_t feedId, RsFeedReaderErrorState resul
|
|||
}
|
||||
|
||||
if (mNotify) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1944,7 +1945,7 @@ bool p3FeedReader::getFeedToProcess(RsFeedReaderFeed &feed, uint32_t neededFeedI
|
|||
}
|
||||
|
||||
if (mNotify) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -2323,11 +2324,11 @@ void p3FeedReader::onProcessSuccess_addMsgs(uint32_t feedId, std::list<RsFeedRea
|
|||
}
|
||||
|
||||
if (mNotify) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
|
||||
std::list<std::string>::iterator it;
|
||||
for (it = addedMsgs.begin(); it != addedMsgs.end(); ++it) {
|
||||
mNotify->notifyMsgChanged(feedId, *it, NOTIFY_TYPE_ADD);
|
||||
mNotify->notifyMsgChanged(feedId, *it, FeedReaderNotify::NOTIFY_TYPE_ADD);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2365,7 +2366,7 @@ void p3FeedReader::onProcessError(uint32_t feedId, RsFeedReaderErrorState result
|
|||
}
|
||||
|
||||
if (mNotify) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2433,7 +2434,7 @@ void p3FeedReader::setFeedInfo(uint32_t feedId, const std::string &name, const s
|
|||
}
|
||||
|
||||
if (mNotify) {
|
||||
mNotify->notifyFeedChanged(feedId, NOTIFY_TYPE_MOD);
|
||||
mNotify->notifyFeedChanged(feedId, FeedReaderNotify::NOTIFY_TYPE_MOD);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,9 +32,9 @@ class RsFeedReaderMsg;
|
|||
class p3FeedReaderThread;
|
||||
|
||||
class RsGxsForums;
|
||||
struct RsGxsForumGroup;
|
||||
class RsGxsForumGroup;
|
||||
class RsPosted;
|
||||
struct RsPostedGroup;
|
||||
class RsPostedGroup;
|
||||
class RsGxsIfaceHelper;
|
||||
|
||||
class p3FeedReader : public RsPQIService, public RsFeedReader
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
/*Retroshare-Gui*/
|
||||
#include "gui/chat/ChatDialog.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/RsGUIEventManager.h"
|
||||
#include "util/HandleRichText.h"
|
||||
|
||||
VOIPToasterItem::VOIPToasterItem(const RsPeerId &peer_id, const QString &msg, const voipToasterItem_Type type)
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@
|
|||
|
||||
#include "ChatLobbyWidget.h"
|
||||
|
||||
#include "notifyqt.h"
|
||||
#include "RetroShareLink.h"
|
||||
#include "chat/ChatLobbyDialog.h"
|
||||
#include "chat/ChatLobbyUserNotify.h"
|
||||
|
|
@ -35,11 +34,11 @@
|
|||
#include "settings/rsharesettings.h"
|
||||
#include "util/HandleRichText.h"
|
||||
#include "util/misc.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
#include "util/RsQtVersion.h"
|
||||
|
||||
#include "retroshare/rsmsgs.h"
|
||||
#include "retroshare/rspeers.h"
|
||||
#include "retroshare/rsnotify.h"
|
||||
#include "retroshare/rsidentity.h"
|
||||
|
||||
#include <QGridLayout>
|
||||
|
|
@ -105,9 +104,39 @@ ChatLobbyWidget::ChatLobbyWidget(QWidget *parent, Qt::WindowFlags flags)
|
|||
myInviteYesButton = NULL;
|
||||
myInviteIdChooser = NULL;
|
||||
|
||||
QObject::connect( NotifyQt::getInstance(), SIGNAL(lobbyListChanged()), SLOT(lobbyChanged()));
|
||||
QObject::connect( NotifyQt::getInstance(), SIGNAL(chatLobbyEvent(qulonglong,int,RsGxsId,QString)), this, SLOT(displayChatLobbyEvent(qulonglong,int,RsGxsId,QString)));
|
||||
QObject::connect( NotifyQt::getInstance(), SIGNAL(chatLobbyInviteReceived()), this, SLOT(readChatLobbyInvites()));
|
||||
mEventHandlerId = 0;
|
||||
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> event)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=](){
|
||||
auto ev = dynamic_cast<const RsChatLobbyEvent *>(event.get());
|
||||
|
||||
if(!ev) return;
|
||||
|
||||
switch(ev->mEventCode)
|
||||
{
|
||||
case RsChatLobbyEventCode::CHAT_LOBBY_INVITE_RECEIVED:
|
||||
readChatLobbyInvites();
|
||||
break;
|
||||
|
||||
case RsChatLobbyEventCode::CHAT_LOBBY_LIST_CHANGED:
|
||||
lobbyChanged();
|
||||
break;
|
||||
|
||||
case RsChatLobbyEventCode::CHAT_LOBBY_EVENT_PEER_LEFT:
|
||||
case RsChatLobbyEventCode::CHAT_LOBBY_EVENT_PEER_STATUS:
|
||||
case RsChatLobbyEventCode::CHAT_LOBBY_EVENT_PEER_JOINED:
|
||||
case RsChatLobbyEventCode::CHAT_LOBBY_EVENT_PEER_CHANGE_NICKNAME:
|
||||
case RsChatLobbyEventCode::CHAT_LOBBY_EVENT_KEEP_ALIVE:
|
||||
|
||||
handleChatLobbyEvent(ev->mLobbyId,ev->mEventCode,ev->mGxsId,QString::fromUtf8(ev->mStr.c_str()));
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}, this );
|
||||
}, mEventHandlerId, RsEventType::CHAT_SERVICE );
|
||||
|
||||
QObject::connect( ui.lobbyTreeWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(lobbyTreeWidgetCustomPopupMenu(QPoint)));
|
||||
QObject::connect( ui.lobbyTreeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(itemDoubleClicked(QTreeWidgetItem*,int)));
|
||||
|
|
@ -236,6 +265,7 @@ ChatLobbyWidget::ChatLobbyWidget(QWidget *parent, Qt::WindowFlags flags)
|
|||
|
||||
ChatLobbyWidget::~ChatLobbyWidget()
|
||||
{
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId);
|
||||
// save settings
|
||||
processSettings(false);
|
||||
|
||||
|
|
@ -650,7 +680,7 @@ void ChatLobbyWidget::updateDisplay()
|
|||
|
||||
if (autoSubscribe && subscribed && _lobby_infos.find(lobby.lobby_id) == _lobby_infos.end())
|
||||
{
|
||||
ChatDialog *cd = ChatDialog::getChat(ChatId(lobby.lobby_id), RS_CHAT_OPEN);
|
||||
ChatDialog *cd = ChatDialog::getChat(ChatId(lobby.lobby_id), RsChatFlags::RS_CHAT_OPEN);
|
||||
|
||||
addChatPage(dynamic_cast<ChatLobbyDialog*>(cd));
|
||||
}
|
||||
|
|
@ -753,7 +783,7 @@ void ChatLobbyWidget::showLobby(QTreeWidgetItem *item)
|
|||
showBlankPage(id) ;
|
||||
else
|
||||
{
|
||||
_lobby_infos[id].dialog->showDialog(RS_CHAT_FOCUS);
|
||||
_lobby_infos[id].dialog->showDialog(RsChatFlags::RS_CHAT_FOCUS);
|
||||
if (_lobby_infos[id].dialog->isWindowed())
|
||||
showBlankPage(id, true);
|
||||
}
|
||||
|
|
@ -816,7 +846,7 @@ bool ChatLobbyWidget::showLobbyAnchor(ChatLobbyId id, QString anchor)
|
|||
if(_lobby_infos.find(id) == _lobby_infos.end()) {
|
||||
showBlankPage(id) ;
|
||||
} else {
|
||||
_lobby_infos[id].dialog->showDialog(RS_CHAT_FOCUS);
|
||||
_lobby_infos[id].dialog->showDialog(RsChatFlags::RS_CHAT_FOCUS);
|
||||
if (_lobby_infos[id].dialog->isWindowed())
|
||||
showBlankPage(id, true);
|
||||
|
||||
|
|
@ -1158,10 +1188,10 @@ void ChatLobbyWidget::itemDoubleClicked(QTreeWidgetItem *item, int /*column*/)
|
|||
subscribeChatLobbyAtItem(item);
|
||||
}
|
||||
|
||||
void ChatLobbyWidget::displayChatLobbyEvent(qulonglong lobby_id, int event_type, const RsGxsId &gxs_id, const QString& str)
|
||||
void ChatLobbyWidget::handleChatLobbyEvent(uint64_t lobby_id, RsChatLobbyEventCode event_type, const RsGxsId &gxs_id, const QString& str)
|
||||
{
|
||||
if (ChatLobbyDialog *cld = dynamic_cast<ChatLobbyDialog*>(ChatDialog::getExistingChat(ChatId(lobby_id)))) {
|
||||
cld->displayLobbyEvent(event_type, gxs_id, str);
|
||||
cld->handleLobbyEvent(event_type, gxs_id, str);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -89,8 +89,8 @@ protected slots:
|
|||
void unsubscribeItem();
|
||||
void itemDoubleClicked(QTreeWidgetItem *item, int column);
|
||||
void updateCurrentLobby() ;
|
||||
void displayChatLobbyEvent(qulonglong lobby_id, int event_type, const RsGxsId& gxs_id, const QString& str);
|
||||
void readChatLobbyInvites();
|
||||
void handleChatLobbyEvent(uint64_t lobby_id, RsChatLobbyEventCode event_type, const RsGxsId &gxs_id, const QString& str);
|
||||
void readChatLobbyInvites();
|
||||
void showLobby(QTreeWidgetItem *lobby_item) ;
|
||||
void showBlankPage(ChatLobbyId id, bool subscribed = false) ;
|
||||
void unsubscribeChatLobby(ChatLobbyId id) ;
|
||||
|
|
@ -151,5 +151,7 @@ private:
|
|||
|
||||
/* UI - from Designer */
|
||||
Ui::ChatLobbyWidget ui;
|
||||
|
||||
RsEventsHandlerId_t mEventHandlerId;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@
|
|||
|
||||
#include "rshare.h"
|
||||
#include "gui/MainWindow.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/RemoteDirModel.h"
|
||||
#include "gui/RetroShareLink.h"
|
||||
#include "gui/ShareManager.h"
|
||||
|
|
@ -35,6 +34,7 @@
|
|||
#include "gui/settings/rsharesettings.h"
|
||||
#include "util/RsQtVersion.h"
|
||||
#include "util/RsAction.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
#include "util/misc.h"
|
||||
#include "util/rstime.h"
|
||||
#include "util/rsdir.h"
|
||||
|
|
@ -166,6 +166,7 @@ public:
|
|||
|
||||
SharedFilesDialog::~SharedFilesDialog()
|
||||
{
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId);
|
||||
delete tree_model;
|
||||
delete flat_model;
|
||||
delete tree_proxyModel;
|
||||
|
|
@ -177,9 +178,36 @@ SharedFilesDialog::SharedFilesDialog(bool remote_mode, QWidget *parent)
|
|||
/* Invoke the Qt Designer generated object setup routine */
|
||||
ui.setupUi(this);
|
||||
|
||||
NotifyQt *notify = NotifyQt::getInstance();
|
||||
connect(notify, SIGNAL(filesPreModChanged(bool)), this, SLOT(preModDirectories(bool)));
|
||||
connect(notify, SIGNAL(filesPostModChanged(bool)), this, SLOT(postModDirectories(bool)));
|
||||
//connect(notify, SIGNAL(filesPreModChanged(bool)), this, SLOT(preModDirectories(bool)));
|
||||
//connect(notify, SIGNAL(filesPostModChanged(bool)), this, SLOT(postModDirectories(bool)));
|
||||
|
||||
mEventHandlerId = 0;
|
||||
|
||||
rsEvents->registerEventsHandler([this](std::shared_ptr<const RsEvent> event)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=](){
|
||||
|
||||
auto e = dynamic_cast<const RsSharedDirectoriesEvent*>(event.get());
|
||||
|
||||
switch(e->mEventCode)
|
||||
{
|
||||
case RsSharedDirectoriesEventCode::OWN_DIR_LIST_PROCESSING:
|
||||
preModDirectories(true);
|
||||
break;
|
||||
|
||||
case RsSharedDirectoriesEventCode::OWN_DIR_LIST_UPDATED:
|
||||
postModDirectories(true);
|
||||
break;
|
||||
|
||||
case RsSharedDirectoriesEventCode::FRIEND_DIR_LIST_UPDATED:
|
||||
preModDirectories(false);
|
||||
postModDirectories(false);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
};}, this);
|
||||
}, mEventHandlerId,RsEventType::SHARED_DIRECTORIES);
|
||||
|
||||
connect(ui.viewType_CB, SIGNAL(currentIndexChanged(int)), this, SLOT(changeCurrentViewModel(int)));
|
||||
connect(ui.dirTreeView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT( spawnCustomPopupMenu( QPoint ) ) );
|
||||
|
|
@ -739,7 +767,6 @@ void SharedFilesDialog::collCreate()
|
|||
model->getDirDetailsFromSelect(lst, dirVec);
|
||||
|
||||
auto RemoteMode = isRemote();
|
||||
FileSearchFlags f = RemoteMode?RS_FILE_HINTS_REMOTE:RS_FILE_HINTS_LOCAL ;
|
||||
|
||||
QString dir_name;
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
#ifndef _SHAREDFILESDIALOG_H
|
||||
#define _SHAREDFILESDIALOG_H
|
||||
|
||||
#include <retroshare/rsevents.h>
|
||||
#include "ui_SharedFilesDialog.h"
|
||||
|
||||
#include <retroshare-gui/RsAutoUpdatePage.h>
|
||||
|
|
@ -145,6 +146,8 @@ protected:
|
|||
QString lastFilterString;
|
||||
QString mLastFilterText ;
|
||||
RsProtectedTimer* mFilterTimer;
|
||||
|
||||
RsEventsHandlerId_t mEventHandlerId ;
|
||||
};
|
||||
|
||||
class LocalSharedFilesDialog : public SharedFilesDialog
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@
|
|||
|
||||
#include "retroshare/rsfiles.h"
|
||||
#include "TransferUserNotify.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/MainWindow.h"
|
||||
|
||||
TransferUserNotify::TransferUserNotify(QObject *parent) :
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@
|
|||
|
||||
#include "TransfersDialog.h"
|
||||
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/SoundManager.h"
|
||||
#include "gui/RetroShareLink.h"
|
||||
#include "gui/common/FilesDefs.h"
|
||||
|
|
@ -1010,7 +1009,6 @@ TransfersDialog::TransfersDialog(QWidget *parent)
|
|||
connect(collViewAct,SIGNAL(triggered()),this,SLOT(collView()));
|
||||
collOpenAct = new QAction(FilesDefs::getIconFromQtResourcePath(IMAGE_COLLOPEN), tr( "Download from collection file..." ), this );
|
||||
connect(collOpenAct, SIGNAL(triggered()), this, SLOT(collOpen()));
|
||||
connect(NotifyQt::getInstance(), SIGNAL(downloadComplete(QString)), this, SLOT(collAutoOpen(QString)));
|
||||
|
||||
/** Setup the actions for the download header context menu */
|
||||
showDLSizeAct= new QAction(tr("Size"),this);
|
||||
|
|
@ -1115,14 +1113,8 @@ void TransfersDialog::handleEvent_main_thread(std::shared_ptr<const RsEvent> eve
|
|||
switch (fe->mFileTransferEventCode)
|
||||
{
|
||||
case RsFileTransferEventCode::DOWNLOAD_COMPLETE:
|
||||
{
|
||||
FileInfo nfo ;
|
||||
if(!rsFiles->FileDetails(fe->mHash, RS_FILE_HINTS_DOWNLOAD, nfo))
|
||||
break;
|
||||
collAutoOpen(fe->mHash);
|
||||
|
||||
SoundManager::play(SOUND_DOWNLOAD_COMPLETE);
|
||||
NotifyQt::getInstance()->addToaster(RS_POPUP_DOWNLOAD, fe->mHash.toStdString(), nfo.fname.c_str(),"");
|
||||
}
|
||||
[[fallthrough]];
|
||||
|
||||
case RsFileTransferEventCode::COMPLETED_FILES_REMOVED:
|
||||
|
|
@ -2578,11 +2570,10 @@ void TransfersDialog::collOpen()
|
|||
QMessageBox::information(nullptr,tr("Error openning collection file"),RsCollection::errorString(code));
|
||||
}
|
||||
|
||||
void TransfersDialog::collAutoOpen(const QString &fileHash)
|
||||
void TransfersDialog::collAutoOpen(const RsFileHash& hash)
|
||||
{
|
||||
if (Settings->valueFromGroup("Transfer","AutoDLColl").toBool())
|
||||
{
|
||||
RsFileHash hash = RsFileHash(fileHash.toStdString());
|
||||
FileInfo info;
|
||||
if (rsFiles->FileDetails(hash, RS_FILE_HINTS_DOWNLOAD, info)) {
|
||||
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ private slots:
|
|||
void collModif();
|
||||
void collView();
|
||||
void collOpen();
|
||||
void collAutoOpen(const QString& fileHash);
|
||||
void collAutoOpen(const RsFileHash &hash);
|
||||
|
||||
void setShowDLSizeColumn(bool show);
|
||||
void setShowDLCompleteColumn(bool show);
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ FriendServerControl::FriendServerControl(QWidget *parent)
|
|||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> event)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=](){ handleEvent_main_thread(event); }, this );
|
||||
}, mEventHandlerId_peer, RsEventType::PEER_CONNECTION );
|
||||
}, mEventHandlerId_peer, RsEventType::FRIEND_LIST );
|
||||
}
|
||||
|
||||
void FriendServerControl::onAutoAddFriends(bool b)
|
||||
|
|
@ -145,14 +145,14 @@ void FriendServerControl::handleEvent_main_thread(std::shared_ptr<const RsEvent>
|
|||
}
|
||||
|
||||
{
|
||||
const RsConnectionEvent *pe = dynamic_cast<const RsConnectionEvent*>(event.get());
|
||||
const RsFriendListEvent *pe = dynamic_cast<const RsFriendListEvent*>(event.get());
|
||||
|
||||
if(pe)
|
||||
switch(pe->mConnectionInfoCode)
|
||||
switch(pe->mEventCode)
|
||||
{
|
||||
case RsConnectionEventCode::PEER_ADDED:
|
||||
case RsConnectionEventCode::PEER_REMOVED:
|
||||
case RsConnectionEventCode::PEER_CONNECTED: updateContactsStatus();
|
||||
case RsFriendListEventCode::NODE_ADDED:
|
||||
case RsFriendListEventCode::NODE_REMOVED:
|
||||
case RsFriendListEventCode::NODE_CONNECTED: updateContactsStatus();
|
||||
break;
|
||||
|
||||
default: ;
|
||||
|
|
@ -169,7 +169,7 @@ FriendServerControl::~FriendServerControl()
|
|||
rsEvents->unregisterEventsHandler(mEventHandlerId_peer);
|
||||
}
|
||||
|
||||
void FriendServerControl::launchStatusContextMenu(QPoint p)
|
||||
void FriendServerControl::launchStatusContextMenu(QPoint /* p */)
|
||||
{
|
||||
RsPeerId peer_id = getCurrentPeer();
|
||||
|
||||
|
|
|
|||
|
|
@ -34,12 +34,12 @@
|
|||
#include "groups/CreateGroup.h"
|
||||
#include "MainWindow.h"
|
||||
#include "NewsFeed.h"
|
||||
#include "notifyqt.h"
|
||||
#include "profile/ProfileWidget.h"
|
||||
#include "profile/StatusMessage.h"
|
||||
#include "RetroShareLink.h"
|
||||
#include "settings/rsharesettings.h"
|
||||
#include "util/misc.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
#include "util/DateTime.h"
|
||||
#include "FriendsDialog.h"
|
||||
#include "NetworkView.h"
|
||||
|
|
@ -77,12 +77,49 @@ FriendsDialog::FriendsDialog(QWidget *parent) : MainPage(parent)
|
|||
ui.chatWidget->setWelcomeMessage(msg);
|
||||
ui.chatWidget->init(ChatId::makeBroadcastId(), tr("Broadcast"));
|
||||
|
||||
connect(NotifyQt::getInstance(), SIGNAL(chatMessageReceived(ChatMessage)), this, SLOT(chatMessageReceived(ChatMessage)));
|
||||
connect(NotifyQt::getInstance(), SIGNAL(chatStatusChanged(ChatId,QString)), this, SLOT(chatStatusReceived(ChatId,QString)));
|
||||
mEventHandlerId_chat = 0;
|
||||
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=]()
|
||||
{
|
||||
auto fe = dynamic_cast<const RsChatServiceEvent*>(e.get()); if(!fe) return;
|
||||
|
||||
switch(fe->mEventCode)
|
||||
{
|
||||
case RsChatServiceEventCode::CHAT_MESSAGE_RECEIVED: chatMessageReceived(fe->mMsg); break;
|
||||
case RsChatServiceEventCode::CHAT_STATUS_CHANGED: chatStatusReceived(fe->mCid,QString::fromUtf8(fe->mStr.c_str())); break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
, this );
|
||||
}, mEventHandlerId_chat, RsEventType::CHAT_SERVICE );
|
||||
|
||||
#else // def RS_DIRECT_CHAT
|
||||
ui.tabWidget->removeTab(ui.tabWidget->indexOf(ui.groupChatTab));
|
||||
ui.tabWidget->removeTab(ui.tabWidget->indexOf(ui.groupChatTab));
|
||||
#endif // def RS_DIRECT_CHAT
|
||||
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=]()
|
||||
{
|
||||
auto fe = dynamic_cast<const RsFriendListEvent*>(e.get()); if(!fe) return;
|
||||
|
||||
switch(fe->mEventCode)
|
||||
{
|
||||
case RsFriendListEventCode::OWN_STATUS_CHANGED: loadmypersonalstatus();
|
||||
break;
|
||||
default: // OWN_AVATAR_CHANGED is handled in AvatarWidget
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
, this );
|
||||
}, mEventHandlerId_friends, RsEventType::FRIEND_LIST );
|
||||
|
||||
mEventHandlerId_friends = 0;
|
||||
|
||||
connect( ui.mypersonalstatusLabel, SIGNAL(clicked()), SLOT(statusmessage()));
|
||||
connect( ui.actionSet_your_Avatar, SIGNAL(triggered()), this, SLOT(getAvatar()));
|
||||
|
|
@ -153,6 +190,8 @@ FriendsDialog::~FriendsDialog ()
|
|||
if (this == instance) {
|
||||
instance = NULL;
|
||||
}
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId_friends);
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId_chat);
|
||||
}
|
||||
|
||||
void FriendsDialog::activatePage(FriendsDialog::Page page)
|
||||
|
|
@ -200,7 +239,17 @@ void FriendsDialog::processSettings(bool bLoad)
|
|||
|
||||
void FriendsDialog::chatMessageReceived(const ChatMessage &msg)
|
||||
{
|
||||
if(msg.chat_id.isBroadcast())
|
||||
if(!msg.chat_id.isBroadcast())
|
||||
return;
|
||||
|
||||
QDateTime sendTime = QDateTime::fromTime_t(msg.sendTime);
|
||||
QDateTime recvTime = QDateTime::fromTime_t(msg.recvTime);
|
||||
QString message = QString::fromUtf8(msg.msg.c_str());
|
||||
QString name = QString::fromUtf8(rsPeers->getPeerName(msg.broadcast_peer_id).c_str());
|
||||
|
||||
ui.chatWidget->addChatMsg(msg.incoming, name, sendTime, recvTime, message, ChatWidget::MSGTYPE_NORMAL);
|
||||
|
||||
if(ui.chatWidget->isActive())
|
||||
{
|
||||
QDateTime sendTime = DateTime::DateTimeFromTime_t(msg.sendTime);
|
||||
QDateTime recvTime = DateTime::DateTimeFromTime_t(msg.recvTime);
|
||||
|
|
@ -220,11 +269,11 @@ void FriendsDialog::chatMessageReceived(const ChatMessage &msg)
|
|||
|
||||
void FriendsDialog::chatStatusReceived(const ChatId &chat_id, const QString &status_string)
|
||||
{
|
||||
if(chat_id.isBroadcast())
|
||||
{
|
||||
QString name = QString::fromUtf8(rsPeers->getPeerName(chat_id.broadcast_status_peer_id).c_str());
|
||||
ui.chatWidget->updateStatusString(name + " %1", status_string);
|
||||
}
|
||||
if(!chat_id.isBroadcast())
|
||||
return;
|
||||
|
||||
QString name = QString::fromUtf8(rsPeers->getPeerName(chat_id.broadcast_status_peer_id).c_str());
|
||||
ui.chatWidget->updateStatusString(name + " %1", status_string);
|
||||
}
|
||||
|
||||
void FriendsDialog::addFriend()
|
||||
|
|
|
|||
|
|
@ -70,9 +70,6 @@ public:
|
|||
IdDialog *idDialog;
|
||||
|
||||
private slots:
|
||||
void chatMessageReceived(const ChatMessage& msg);
|
||||
void chatStatusReceived(const ChatId& chat_id, const QString& status_string);
|
||||
|
||||
void addFriend();
|
||||
|
||||
void statusmessage();
|
||||
|
|
@ -89,10 +86,17 @@ signals:
|
|||
void notifyGroupChat(const QString&,const QString&) ;
|
||||
|
||||
private:
|
||||
void chatMessageReceived(const ChatMessage& msg);
|
||||
void chatStatusReceived(const ChatId& chat_id, const QString& status_string);
|
||||
|
||||
void processSettings(bool bLoad);
|
||||
|
||||
/** Qt Designer generated object */
|
||||
Ui::FriendsDialog ui;
|
||||
RsEventsHandlerId_t mEventHandlerId_friends ;
|
||||
#ifdef RS_DIRECT_CHAT
|
||||
RsEventsHandlerId_t mEventHandlerId_chat ;
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@
|
|||
#include "retroshare/rstor.h"
|
||||
#include "retroshare/rsidentity.h"
|
||||
#include "retroshare/rsinit.h"
|
||||
#include "retroshare/rsnotify.h"
|
||||
#include "rsserver/rsaccounts.h"
|
||||
#include "util/rsrandom.h"
|
||||
|
||||
|
|
@ -643,7 +642,7 @@ void GenCertDialog::genPerson()
|
|||
std::cout << "RsAccounts::GenerateSSLCertificate" << std::endl;
|
||||
|
||||
// now cache the PGP password so that it's not asked again for immediately signing the key
|
||||
rsNotify->cachePgpPassphrase(ui.password_input->text().toUtf8().constData()) ;
|
||||
rsLoginHelper->cachePgpPassphrase(ui.password_input->text().toUtf8().constData()) ;
|
||||
|
||||
bool okGen = RsAccounts::createNewAccount(PGPId, "", genLoc, "", isHiddenLoc, isAutoTor, sslPasswd, sslId, err);
|
||||
|
||||
|
|
@ -656,7 +655,7 @@ void GenCertDialog::genPerson()
|
|||
// Normally we should clear the cached passphrase as soon as possible. However,some other GUI components may still need it at start.
|
||||
// (csoler) This is really bad: we have to guess that 30 secs will be enough. I have no better way to do this.
|
||||
|
||||
QTimer::singleShot(30000, []() { rsNotify->clearPgpPassphrase(); } );
|
||||
QTimer::singleShot(30000, []() { RsLoginHelper::clearPgpPassphrase(); } );
|
||||
|
||||
accept();
|
||||
}
|
||||
|
|
@ -664,7 +663,7 @@ void GenCertDialog::genPerson()
|
|||
else
|
||||
{
|
||||
// Now clear the cached passphrase
|
||||
rsNotify->clearPgpPassphrase();
|
||||
RsLoginHelper::clearPgpPassphrase();
|
||||
|
||||
/* Message Dialog */
|
||||
QMessageBox::warning(this,
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@
|
|||
#include "util/qtthreadsutils.h"
|
||||
#include "util/misc.h"
|
||||
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/common/FilesDefs.h"
|
||||
#include "gui/msgs/MessageComposer.h"
|
||||
#include "gui/connect/ConnectFriendWizard.h"
|
||||
|
|
|
|||
|
|
@ -29,10 +29,10 @@
|
|||
#include "gui/gxs/GxsIdDetails.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
#include "util/misc.h"
|
||||
#include "gui/notifyqt.h"
|
||||
|
||||
#include "retroshare/rsidentity.h"
|
||||
#include "retroshare/rspeers.h"
|
||||
#include "retroshare/rsinit.h"
|
||||
#include "gui/common/FilesDefs.h"
|
||||
#include "util/imageutil.h"
|
||||
#include "util/RsQtVersion.h"
|
||||
|
|
@ -596,9 +596,9 @@ void IdEditDialog::createId()
|
|||
std::string gpg_name = rsPeers->getGPGName(rsPeers->getGPGOwnId());
|
||||
bool cancelled;
|
||||
|
||||
rsNotify->clearPgpPassphrase(); // just in case
|
||||
RsLoginHelper::clearPgpPassphrase(); // just in case
|
||||
|
||||
if(!NotifyQt::getInstance()->askForPassword(tr("Profile password needed.").toStdString(),
|
||||
if(!RsLoginHelper::askForPassword(tr("Profile password needed.").toStdString(),
|
||||
gpg_name + " (" + rsPeers->getOwnId().toStdString() + ")",
|
||||
false,
|
||||
gpg_password,cancelled))
|
||||
|
|
@ -670,9 +670,9 @@ void IdEditDialog::updateId()
|
|||
std::string gpg_name = rsPeers->getGPGName(rsPeers->getGPGOwnId());
|
||||
bool cancelled;
|
||||
|
||||
rsNotify->clearPgpPassphrase(); // just in case
|
||||
RsLoginHelper::clearPgpPassphrase(); // just in case
|
||||
|
||||
if(!NotifyQt::getInstance()->askForPassword(tr("Profile password needed.").toStdString(),
|
||||
if(!RsLoginHelper::askForPassword(tr("Profile password needed.").toStdString(),
|
||||
gpg_name + " (" + rsPeers->getOwnId().toStdString() + ")",
|
||||
false,
|
||||
gpg_password,cancelled))
|
||||
|
|
|
|||
|
|
@ -168,7 +168,7 @@ public:
|
|||
|
||||
/* Color definitions (for standard see default.qss) */
|
||||
QColor mTextColorGroup;
|
||||
QColor mTextColorStatus[RS_STATUS_COUNT];
|
||||
QColor mTextColorStatus[(int)RsStatusValue::RS_STATUS_COUNT];
|
||||
|
||||
void setIdentities(const std::list<RsGroupMetaData>& identities_meta);
|
||||
|
||||
|
|
|
|||
|
|
@ -31,9 +31,11 @@
|
|||
#include <QMenuBar>
|
||||
#include <QActionGroup>
|
||||
|
||||
#include <retroshare/rsplugin.h>
|
||||
#include <retroshare/rsconfig.h>
|
||||
#include <util/argstream.h>
|
||||
#include "retroshare/rsplugin.h"
|
||||
#include "retroshare/rsconfig.h"
|
||||
#include "retroshare/rsevents.h"
|
||||
#include "util/argstream.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
|
||||
#if defined(Q_OS_DARWIN)
|
||||
#include "gui/common/MacDockIconHandler.h"
|
||||
|
|
@ -65,7 +67,6 @@
|
|||
#include "chat/ChatDialog.h"
|
||||
#include "RetroShareLink.h"
|
||||
#include "SoundManager.h"
|
||||
#include "notifyqt.h"
|
||||
#include "common/UserNotify.h"
|
||||
#include "gui/ServicePermissionDialog.h"
|
||||
|
||||
|
|
@ -99,7 +100,6 @@
|
|||
#include "retroshare/rsiface.h"
|
||||
#include "retroshare/rspeers.h"
|
||||
#include "retroshare/rsfiles.h"
|
||||
#include "retroshare/rsnotify.h"
|
||||
#include "retroshare/rsinit.h"
|
||||
|
||||
#include "gui/gxschannels/GxsChannelDialog.h"
|
||||
|
|
@ -121,11 +121,11 @@
|
|||
#include "gui/statistics/StatisticsWindow.h"
|
||||
|
||||
#include "gui/connect/ConnectFriendWizard.h"
|
||||
#include "gui/RsGUIEventManager.h"
|
||||
#include "gui/common/RsCollectionDialog.h"
|
||||
#include "settings/rsettingswin.h"
|
||||
#include "settings/rsharesettings.h"
|
||||
#include "common/StatusDefs.h"
|
||||
#include "gui/notifyqt.h"
|
||||
|
||||
#ifdef RS_WEBUI
|
||||
# include "settings/WebuiPage.h"
|
||||
|
|
@ -341,10 +341,8 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags flags)
|
|||
|
||||
createNotifyIcons();
|
||||
|
||||
/* calculate friend count */
|
||||
/* intialize friend count */
|
||||
updateFriends();
|
||||
connect(NotifyQt::getInstance(), SIGNAL(peerStatusChanged(QString,int)), this, SLOT(updateFriends()));
|
||||
connect(NotifyQt::getInstance(), SIGNAL(friendsChanged()), this, SLOT(updateFriends()));
|
||||
|
||||
loadOwnStatus();
|
||||
|
||||
|
|
@ -359,10 +357,28 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags flags)
|
|||
timer->connect(timer, SIGNAL(timeout()), this, SLOT(updateStatus()));
|
||||
timer->start(1000);
|
||||
|
||||
connect(NotifyQt::getInstance(), SIGNAL(settingsChanged()), this, SLOT(settingsChanged()));
|
||||
connect(RsGUIEventManager::getInstance(), SIGNAL(settingsChanged()), this, SLOT(settingsChanged()));
|
||||
settingsChanged();
|
||||
|
||||
mFontSizeHandler.registerFontSize(ui->listWidget, 1.5f);
|
||||
|
||||
mEventHandlerId_friends = 0;
|
||||
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=]()
|
||||
{
|
||||
auto fe = dynamic_cast<const RsFriendListEvent*>(e.get());
|
||||
|
||||
if(!fe)
|
||||
return;
|
||||
|
||||
updateFriends();
|
||||
}
|
||||
, this );
|
||||
}, mEventHandlerId_friends, RsEventType::FRIEND_LIST );
|
||||
|
||||
|
||||
}
|
||||
|
||||
/** Destructor. */
|
||||
|
|
@ -373,6 +389,8 @@ MainWindow::~MainWindow()
|
|||
Settings->setValueToGroup("MainWindow", "SplitterState", ui->splitter->saveState());
|
||||
Settings->setValueToGroup("MainWindow", "State", saveState());
|
||||
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId_friends);
|
||||
|
||||
delete statusComboBox;
|
||||
delete peerstatus;
|
||||
delete natstatus;
|
||||
|
|
@ -597,28 +615,6 @@ void MainWindow::setNewPage(int page)
|
|||
}
|
||||
}
|
||||
|
||||
void MainWindow::displayDiskSpaceWarning(int loc,int size_limit_mb)
|
||||
{
|
||||
QString locString ;
|
||||
switch(loc)
|
||||
{
|
||||
case RS_PARTIALS_DIRECTORY: locString = "Partials" ;
|
||||
break ;
|
||||
|
||||
case RS_CONFIG_DIRECTORY: locString = "Config" ;
|
||||
break ;
|
||||
|
||||
case RS_DOWNLOAD_DIRECTORY: locString = "Download" ;
|
||||
break ;
|
||||
|
||||
default:
|
||||
std::cerr << "Error: " << __PRETTY_FUNCTION__ << " was called with an unknown parameter loc=" << loc << std::endl ;
|
||||
return ;
|
||||
}
|
||||
QMessageBox::critical(NULL,tr("Low disk space warning"),
|
||||
tr("The disk space in your")+" "+locString +" "+tr("directory is running low (current limit is")+" "+QString::number(size_limit_mb)+tr("MB). \n\n RetroShare will now safely suspend any disk access to this directory. \n\n Please make some free space and click Ok.")) ;
|
||||
}
|
||||
|
||||
/** Creates a tray icon with a context menu and adds it to the system
|
||||
* notification area. */
|
||||
void MainWindow::createTrayIcon()
|
||||
|
|
@ -1352,11 +1348,6 @@ void MainWindow::receiveNewArgs(QStringList args)
|
|||
retroshareLinkActivated(link.toUrl());
|
||||
}
|
||||
|
||||
void MainWindow::displayErrorMessage(int /*a*/,int /*b*/,const QString& error_msg)
|
||||
{
|
||||
QMessageBox::critical(NULL, tr("Internal Error"),error_msg) ;
|
||||
}
|
||||
|
||||
void MainWindow::closeEvent(QCloseEvent *e)
|
||||
{
|
||||
e->ignore();
|
||||
|
|
@ -1454,7 +1445,7 @@ MainWindow::retranslateUi()
|
|||
}
|
||||
|
||||
/* set status object to status value */
|
||||
static void setStatusObject(QObject *pObject, int nStatus)
|
||||
static void setStatusObject(QObject *pObject, RsStatusValue nStatus)
|
||||
{
|
||||
QMenu *pMenu = dynamic_cast<QMenu*>(pObject);
|
||||
if (pMenu) {
|
||||
|
|
@ -1465,7 +1456,7 @@ static void setStatusObject(QObject *pObject, int nStatus)
|
|||
continue;
|
||||
}
|
||||
|
||||
if (pAction->data().toInt() == nStatus) {
|
||||
if (pAction->data().toInt() == (int)nStatus) {
|
||||
pAction->setChecked(true);
|
||||
break;
|
||||
}
|
||||
|
|
@ -1475,7 +1466,7 @@ static void setStatusObject(QObject *pObject, int nStatus)
|
|||
RSComboBox *pComboBox = dynamic_cast<RSComboBox*>(pObject);
|
||||
if (pComboBox) {
|
||||
/* set index of combobox */
|
||||
int nIndex = pComboBox->findData(nStatus, Qt::UserRole);
|
||||
int nIndex = pComboBox->findData((int)nStatus, Qt::UserRole);
|
||||
if (nIndex != -1) {
|
||||
pComboBox->setCurrentIndex(nIndex);
|
||||
}
|
||||
|
|
@ -1538,20 +1529,20 @@ void MainWindow::initializeStatusObject(QObject *pObject, bool bConnect)
|
|||
/* initialize menu */
|
||||
QActionGroup *pGroup = new QActionGroup(pMenu);
|
||||
|
||||
QAction *pAction = new QAction(QIcon(StatusDefs::imageStatus(RS_STATUS_ONLINE)), StatusDefs::name(RS_STATUS_ONLINE), pMenu);
|
||||
pAction->setData(RS_STATUS_ONLINE);
|
||||
QAction *pAction = new QAction(QIcon(StatusDefs::imageStatus(RsStatusValue::RS_STATUS_ONLINE)), StatusDefs::name(RsStatusValue::RS_STATUS_ONLINE), pMenu);
|
||||
pAction->setData((int)RsStatusValue::RS_STATUS_ONLINE);
|
||||
pAction->setCheckable(true);
|
||||
pMenu->addAction(pAction);
|
||||
pGroup->addAction(pAction);
|
||||
|
||||
pAction = new QAction(QIcon(StatusDefs::imageStatus(RS_STATUS_BUSY)), StatusDefs::name(RS_STATUS_BUSY), pMenu);
|
||||
pAction->setData(RS_STATUS_BUSY);
|
||||
pAction = new QAction(QIcon(StatusDefs::imageStatus(RsStatusValue::RS_STATUS_BUSY)), StatusDefs::name(RsStatusValue::RS_STATUS_BUSY), pMenu);
|
||||
pAction->setData((int)RsStatusValue::RS_STATUS_BUSY);
|
||||
pAction->setCheckable(true);
|
||||
pMenu->addAction(pAction);
|
||||
pGroup->addAction(pAction);
|
||||
|
||||
pAction = new QAction(QIcon(StatusDefs::imageStatus(RS_STATUS_AWAY)), StatusDefs::name(RS_STATUS_AWAY), pMenu);
|
||||
pAction->setData(RS_STATUS_AWAY);
|
||||
pAction = new QAction(QIcon(StatusDefs::imageStatus(RsStatusValue::RS_STATUS_AWAY)), StatusDefs::name(RsStatusValue::RS_STATUS_AWAY), pMenu);
|
||||
pAction->setData((int)RsStatusValue::RS_STATUS_AWAY);
|
||||
pAction->setCheckable(true);
|
||||
pMenu->addAction(pAction);
|
||||
pGroup->addAction(pAction);
|
||||
|
|
@ -1563,9 +1554,9 @@ void MainWindow::initializeStatusObject(QObject *pObject, bool bConnect)
|
|||
/* initialize combobox */
|
||||
RSComboBox *pComboBox = dynamic_cast<RSComboBox*>(pObject);
|
||||
if (pComboBox) {
|
||||
pComboBox->addItem(QIcon(StatusDefs::imageStatus(RS_STATUS_ONLINE)), StatusDefs::name(RS_STATUS_ONLINE), RS_STATUS_ONLINE);
|
||||
pComboBox->addItem(QIcon(StatusDefs::imageStatus(RS_STATUS_BUSY)), StatusDefs::name(RS_STATUS_BUSY), RS_STATUS_BUSY);
|
||||
pComboBox->addItem(QIcon(StatusDefs::imageStatus(RS_STATUS_AWAY)), StatusDefs::name(RS_STATUS_AWAY), RS_STATUS_AWAY);
|
||||
pComboBox->addItem(QIcon(StatusDefs::imageStatus(RsStatusValue::RS_STATUS_ONLINE)), StatusDefs::name(RsStatusValue::RS_STATUS_ONLINE), (int)RsStatusValue::RS_STATUS_ONLINE);
|
||||
pComboBox->addItem(QIcon(StatusDefs::imageStatus(RsStatusValue::RS_STATUS_BUSY)), StatusDefs::name(RsStatusValue::RS_STATUS_BUSY), (int)RsStatusValue::RS_STATUS_BUSY);
|
||||
pComboBox->addItem(QIcon(StatusDefs::imageStatus(RsStatusValue::RS_STATUS_AWAY)), StatusDefs::name(RsStatusValue::RS_STATUS_AWAY), (int)RsStatusValue::RS_STATUS_AWAY);
|
||||
|
||||
if (bConnect) {
|
||||
connect(pComboBox, SIGNAL(activated(int)), this, SLOT(statusChangedComboBox(int)));
|
||||
|
|
@ -1593,11 +1584,11 @@ void MainWindow::removeStatusObject(QObject *pObject)
|
|||
}
|
||||
|
||||
/** Save own status Online,Away,Busy **/
|
||||
void MainWindow::setStatus(QObject *pObject, int nStatus)
|
||||
void MainWindow::setStatus(QObject *pObject, RsStatusValue nStatus)
|
||||
{
|
||||
if (isIdle && nStatus == (int) RS_STATUS_ONLINE) {
|
||||
if (isIdle && nStatus == RsStatusValue::RS_STATUS_ONLINE) {
|
||||
/* set idle only when I am online */
|
||||
nStatus = RS_STATUS_INACTIVE;
|
||||
nStatus = RsStatusValue::RS_STATUS_INACTIVE;
|
||||
}
|
||||
|
||||
rsStatus->sendStatus(RsPeerId(), nStatus);
|
||||
|
|
@ -1617,7 +1608,7 @@ void MainWindow::statusChangedMenu(QAction *pAction)
|
|||
return;
|
||||
}
|
||||
|
||||
setStatus(pAction->parent(), pAction->data().toInt());
|
||||
setStatus(pAction->parent(), RsStatusValue(pAction->data().toInt()));
|
||||
}
|
||||
|
||||
/* new status from combobox in statusbar */
|
||||
|
|
@ -1628,7 +1619,7 @@ void MainWindow::statusChangedComboBox(int index)
|
|||
}
|
||||
|
||||
/* no object known */
|
||||
setStatus(NULL, statusComboBox->itemData(index, Qt::UserRole).toInt());
|
||||
setStatus(NULL, RsStatusValue(statusComboBox->itemData(index, Qt::UserRole).toInt()));
|
||||
}
|
||||
|
||||
/*new setting*/
|
||||
|
|
|
|||
|
|
@ -25,6 +25,9 @@
|
|||
#include <QSystemTrayIcon>
|
||||
#include <set>
|
||||
|
||||
#include "retroshare/rsevents.h"
|
||||
#include "retroshare/rsstatus.h"
|
||||
|
||||
#include "gui/common/rwindow.h"
|
||||
#include "gui/common/RSComboBox.h"
|
||||
#include "util/FontSizeHandler.h"
|
||||
|
|
@ -183,7 +186,7 @@ public:
|
|||
/* initialize widget with status informations, status constant stored in data or in Qt::UserRole */
|
||||
void initializeStatusObject(QObject *pObject, bool bConnect);
|
||||
void removeStatusObject(QObject *pObject);
|
||||
void setStatus(QObject *pObject, int nStatus);
|
||||
void setStatus(QObject *pObject, RsStatusValue nStatus);
|
||||
|
||||
RSComboBox *statusComboBoxInstance();
|
||||
PeerStatus *peerstatusInstance();
|
||||
|
|
@ -207,9 +210,7 @@ public:
|
|||
|
||||
public slots:
|
||||
void receiveNewArgs(QStringList args);
|
||||
void displayErrorMessage(int,int,const QString&) ;
|
||||
void postModDirectories(bool update_local);
|
||||
void displayDiskSpaceWarning(int loc,int size_limit_mb) ;
|
||||
void checkAndSetIdle(int idleTime);
|
||||
|
||||
void externalLinkActivated(const QUrl &url);
|
||||
|
|
@ -375,6 +376,7 @@ private:
|
|||
FontSizeHandler mFontSizeHandler;
|
||||
|
||||
Ui::MainWindow *ui ;
|
||||
};
|
||||
|
||||
RsEventsHandlerId_t mEventHandlerId_friends;
|
||||
};
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@
|
|||
#include <retroshare/rspeers.h>
|
||||
#include <retroshare/rsmsgs.h>
|
||||
#include <retroshare/rsstatus.h>
|
||||
#include <retroshare/rsnotify.h>
|
||||
|
||||
#include "rshare.h"
|
||||
#include "MessengerWindow.h"
|
||||
|
|
@ -37,9 +36,9 @@
|
|||
|
||||
#include "MainWindow.h"
|
||||
#include "ShareManager.h"
|
||||
#include "notifyqt.h"
|
||||
#include "connect/ConnectFriendWizard.h"
|
||||
#include "util/PixmapMerging.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
#include "LogoBar.h"
|
||||
#include "util/Widget.h"
|
||||
#include "util/misc.h"
|
||||
|
|
@ -95,8 +94,26 @@ MessengerWindow::MessengerWindow(QWidget* parent, Qt::WindowFlags flags)
|
|||
|
||||
connect(ui.messagelineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(savestatusmessage()));
|
||||
|
||||
connect(NotifyQt::getInstance(), SIGNAL(ownStatusMessageChanged()), this, SLOT(loadmystatusmessage()));
|
||||
connect(NotifyQt::getInstance(), SIGNAL(peerStatusChanged(QString,int)), this, SLOT(updateOwnStatus(QString,int)));
|
||||
mEventHandlerId = 0;
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=](){
|
||||
auto fe = dynamic_cast<const RsFriendListEvent*>(e.get());
|
||||
|
||||
if(!fe) return;
|
||||
|
||||
switch(fe->mEventCode)
|
||||
{
|
||||
case RsFriendListEventCode::NODE_STATUS_CHANGED: updateOwnStatus(QString::fromStdString(fe->mSslId.toStdString()),fe->mStatus);
|
||||
break;
|
||||
case RsFriendListEventCode::OWN_STATUS_CHANGED: loadmystatusmessage();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}, this );
|
||||
},mEventHandlerId,RsEventType::FRIEND_LIST);
|
||||
|
||||
for (std::set<RsPgpId>::iterator peerIt = expandedPeers.begin(); peerIt != expandedPeers.end(); ++peerIt) {
|
||||
ui.friendList->addPeerToExpand(*peerIt);
|
||||
|
|
@ -159,6 +176,7 @@ MessengerWindow::~MessengerWindow ()
|
|||
{
|
||||
// save settings
|
||||
processSettings(false);
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId);
|
||||
|
||||
MainWindow *pMainWindow = MainWindow::getInstance();
|
||||
if (pMainWindow) {
|
||||
|
|
@ -214,7 +232,7 @@ void MessengerWindow::savestatusmessage()
|
|||
rsMsgs->setCustomStateString(ui.messagelineEdit->currentText().toUtf8().constData());
|
||||
}
|
||||
|
||||
void MessengerWindow::updateOwnStatus(const QString &peer_id, int status)
|
||||
void MessengerWindow::updateOwnStatus(const QString &peer_id, RsStatusValue status)
|
||||
{
|
||||
// add self nick + own status
|
||||
if (peer_id == QString::fromStdString(rsPeers->getOwnId().toStdString()))
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ private slots:
|
|||
/** Open Shared Manager **/
|
||||
void openShareManager();
|
||||
|
||||
void updateOwnStatus(const QString &peer_id, int status);
|
||||
void updateOwnStatus(const QString &peer_id, RsStatusValue status);
|
||||
|
||||
void savestatusmessage();
|
||||
|
||||
|
|
@ -68,6 +68,7 @@ private:
|
|||
|
||||
static std::set<RsPgpId> expandedPeers ;
|
||||
static std::set<RsNodeGroupId> expandedGroups ;
|
||||
RsEventsHandlerId_t mEventHandlerId ;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#include <algorithm>
|
||||
|
||||
#include "gui/elastic/elnode.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
|
||||
/********
|
||||
* #define DEBUG_NETWORKVIEW
|
||||
|
|
@ -60,12 +61,32 @@ NetworkView::NetworkView(QWidget *parent)
|
|||
connect( ui.nameBox, SIGNAL(textChanged(QString)), this, SLOT(setNameSearch(QString)));
|
||||
|
||||
_should_update = true ;
|
||||
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> event)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=](){
|
||||
auto ev = dynamic_cast<const RsGossipDiscoveryEvent *>(event.get());
|
||||
|
||||
if(!ev) return;
|
||||
|
||||
switch(ev->mGossipDiscoveryEventType)
|
||||
{
|
||||
case RsGossipDiscoveryEventType::DISCOVERY_INFO_RECEIVED: update();
|
||||
[[fallthrough]];
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}, this );
|
||||
}, mEventHandlerId, RsEventType::GOSSIP_DISCOVERY );
|
||||
|
||||
}
|
||||
|
||||
NetworkView::~NetworkView()
|
||||
{
|
||||
if(mScene != NULL)
|
||||
delete mScene ;
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId);
|
||||
|
||||
if(mScene != NULL)
|
||||
delete mScene ;
|
||||
}
|
||||
|
||||
void NetworkView::setEdgeLength(int l)
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#include <QGraphicsScene>
|
||||
|
||||
#include <retroshare/rstypes.h>
|
||||
#include <retroshare/rsevents.h>
|
||||
|
||||
#include <retroshare-gui/RsAutoUpdatePage.h>
|
||||
#include "ui_NetworkView.h"
|
||||
|
|
@ -65,6 +66,7 @@ class NetworkView : public RsAutoUpdatePage
|
|||
std::map<RsPgpId,GraphWidget::NodeId> _node_ids ;
|
||||
|
||||
bool _should_update ;
|
||||
RsEventsHandlerId_t mEventHandlerId;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@
|
|||
#include <retroshare/rsgxschannels.h>
|
||||
#include <retroshare/rsgxsforums.h>
|
||||
#include <retroshare/rsmsgs.h>
|
||||
#include <retroshare/rsnotify.h>
|
||||
#include <retroshare/rspeers.h>
|
||||
#include <retroshare/rsplugin.h>
|
||||
#include <retroshare/rsposted.h>
|
||||
|
|
@ -58,7 +57,6 @@
|
|||
#include "msgs/MessageInterface.h"
|
||||
|
||||
#include "common/FeedNotify.h"
|
||||
#include "notifyqt.h"
|
||||
|
||||
#define ROLE_RECEIVED FEED_TREEWIDGET_SORTROLE
|
||||
|
||||
|
|
@ -76,7 +74,7 @@ static NewsFeed* instance = nullptr;
|
|||
NewsFeed::NewsFeed(QWidget *parent) : MainPage(parent), ui(new Ui::NewsFeed),
|
||||
mEventTypes({
|
||||
RsEventType::AUTHSSL_CONNECTION_AUTENTICATION,
|
||||
RsEventType::PEER_CONNECTION ,
|
||||
RsEventType::FRIEND_LIST ,
|
||||
RsEventType::GXS_CIRCLES ,
|
||||
RsEventType::GXS_CHANNELS ,
|
||||
RsEventType::GXS_FORUMS ,
|
||||
|
|
@ -192,27 +190,27 @@ void NewsFeed::handleEvent(std::shared_ptr<const RsEvent> event)
|
|||
|
||||
void NewsFeed::handleEvent_main_thread(std::shared_ptr<const RsEvent> event)
|
||||
{
|
||||
uint flags = Settings->getNewsFeedFlags();
|
||||
RsFeedTypeFlags flags = (RsFeedTypeFlags)Settings->getNewsFeedFlags();
|
||||
|
||||
if(event->mType == RsEventType::AUTHSSL_CONNECTION_AUTENTICATION && (flags & RS_FEED_TYPE_SECURITY))
|
||||
if(event->mType == RsEventType::AUTHSSL_CONNECTION_AUTENTICATION && (!!(flags & RsFeedTypeFlags::RS_FEED_TYPE_SECURITY)))
|
||||
handleSecurityEvent(event);
|
||||
|
||||
if(event->mType == RsEventType::PEER_CONNECTION && (flags & RS_FEED_TYPE_PEER))
|
||||
if(event->mType == RsEventType::FRIEND_LIST && (!!(flags & RsFeedTypeFlags::RS_FEED_TYPE_PEER)))
|
||||
handleConnectionEvent(event);
|
||||
|
||||
if(event->mType == RsEventType::GXS_CIRCLES && (flags & RS_FEED_TYPE_CIRCLE))
|
||||
if(event->mType == RsEventType::GXS_CIRCLES && (!!(flags & RsFeedTypeFlags::RS_FEED_TYPE_CIRCLE)))
|
||||
handleCircleEvent(event);
|
||||
|
||||
if(event->mType == RsEventType::GXS_CHANNELS && (flags & RS_FEED_TYPE_CHANNEL))
|
||||
if(event->mType == RsEventType::GXS_CHANNELS && (!!(flags & RsFeedTypeFlags::RS_FEED_TYPE_CHANNEL)))
|
||||
handleChannelEvent(event);
|
||||
|
||||
if(event->mType == RsEventType::GXS_FORUMS && (flags & RS_FEED_TYPE_FORUM))
|
||||
if(event->mType == RsEventType::GXS_FORUMS && (!!(flags & RsFeedTypeFlags::RS_FEED_TYPE_FORUM)))
|
||||
handleForumEvent(event);
|
||||
|
||||
if(event->mType == RsEventType::GXS_POSTED && (flags & RS_FEED_TYPE_POSTED))
|
||||
if(event->mType == RsEventType::GXS_POSTED && (!!(flags & RsFeedTypeFlags::RS_FEED_TYPE_POSTED)))
|
||||
handlePostedEvent(event);
|
||||
|
||||
if(event->mType == RsEventType::MAIL_STATUS && (flags & RS_FEED_TYPE_MSG))
|
||||
if(event->mType == RsEventType::MAIL_STATUS && (!!(flags & RsFeedTypeFlags::RS_FEED_TYPE_MSG)))
|
||||
handleMailEvent(event);
|
||||
}
|
||||
|
||||
|
|
@ -389,25 +387,25 @@ void NewsFeed::handleCircleEvent(std::shared_ptr<const RsEvent> event)
|
|||
case RsGxsCircleEventCode::CIRCLE_MEMBERSHIP_REQUEST:
|
||||
// only show membership requests if we're an admin of that circle
|
||||
if(details.isIdInInviteeList(pe->mGxsId))
|
||||
addFeedItemIfUnique(new GxsCircleItem(this, NEWSFEED_CIRCLELIST, pe->mCircleId, pe->mGxsId, RS_FEED_ITEM_CIRCLE_MEMB_JOIN),true);
|
||||
addFeedItemIfUnique(new GxsCircleItem(this, NEWSFEED_CIRCLELIST, pe->mCircleId, pe->mGxsId, RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_MEMB_JOIN),true);
|
||||
else if(details.mAmIAdmin)
|
||||
addFeedItemIfUnique(new GxsCircleItem(this, NEWSFEED_CIRCLELIST, pe->mCircleId, pe->mGxsId, RS_FEED_ITEM_CIRCLE_MEMB_REQ),true);
|
||||
addFeedItemIfUnique(new GxsCircleItem(this, NEWSFEED_CIRCLELIST, pe->mCircleId, pe->mGxsId, RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_MEMB_REQ),true);
|
||||
|
||||
break;
|
||||
|
||||
case RsGxsCircleEventCode::CIRCLE_MEMBERSHIP_LEAVE:
|
||||
|
||||
if(details.isIdInInviteeList(pe->mGxsId))
|
||||
addFeedItemIfUnique(new GxsCircleItem(this, NEWSFEED_CIRCLELIST, pe->mCircleId, pe->mGxsId, RS_FEED_ITEM_CIRCLE_MEMB_LEAVE),true);
|
||||
addFeedItemIfUnique(new GxsCircleItem(this, NEWSFEED_CIRCLELIST, pe->mCircleId, pe->mGxsId, RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_MEMB_LEAVE),true);
|
||||
break;
|
||||
|
||||
case RsGxsCircleEventCode::CIRCLE_MEMBERSHIP_ID_ADDED_TO_INVITEE_LIST:
|
||||
if(rsIdentity->isOwnId(pe->mGxsId))
|
||||
{
|
||||
if(details.isIdRequestingMembership(pe->mGxsId))
|
||||
addFeedItemIfUnique(new GxsCircleItem(this, NEWSFEED_CIRCLELIST, pe->mCircleId, pe->mGxsId, RS_FEED_ITEM_CIRCLE_MEMB_ACCEPTED),true);
|
||||
addFeedItemIfUnique(new GxsCircleItem(this, NEWSFEED_CIRCLELIST, pe->mCircleId, pe->mGxsId, RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_MEMB_ACCEPTED),true);
|
||||
else
|
||||
addFeedItemIfUnique(new GxsCircleItem(this, NEWSFEED_CIRCLELIST, pe->mCircleId, pe->mGxsId, RS_FEED_ITEM_CIRCLE_INVITE_REC),true);
|
||||
addFeedItemIfUnique(new GxsCircleItem(this, NEWSFEED_CIRCLELIST, pe->mCircleId, pe->mGxsId, RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_INVITE_REC),true);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -415,9 +413,9 @@ void NewsFeed::handleCircleEvent(std::shared_ptr<const RsEvent> event)
|
|||
if(rsIdentity->isOwnId(pe->mGxsId))
|
||||
{
|
||||
if(details.isIdRequestingMembership(pe->mGxsId))
|
||||
addFeedItemIfUnique(new GxsCircleItem(this, NEWSFEED_CIRCLELIST, pe->mCircleId, pe->mGxsId, RS_FEED_ITEM_CIRCLE_MEMB_REVOKED),true);
|
||||
addFeedItemIfUnique(new GxsCircleItem(this, NEWSFEED_CIRCLELIST, pe->mCircleId, pe->mGxsId, RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_MEMB_REVOKED),true);
|
||||
else
|
||||
addFeedItemIfUnique(new GxsCircleItem(this, NEWSFEED_CIRCLELIST, pe->mCircleId, pe->mGxsId, RS_FEED_ITEM_CIRCLE_INVITE_CANCELLED),true);
|
||||
addFeedItemIfUnique(new GxsCircleItem(this, NEWSFEED_CIRCLELIST, pe->mCircleId, pe->mGxsId, RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_INVITE_CANCELLED),true);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -428,31 +426,26 @@ void NewsFeed::handleCircleEvent(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 RsFriendListEvent *pe = dynamic_cast<const RsFriendListEvent*>(event.get());
|
||||
if(!pe) return;
|
||||
|
||||
auto& e(*pe);
|
||||
|
||||
#ifdef NEWS_DEBUG
|
||||
std::cerr << "NotifyQt: handling connection event from peer " << e.mSslId << std::endl;
|
||||
#endif
|
||||
|
||||
switch(e.mConnectionInfoCode)
|
||||
switch(e.mEventCode)
|
||||
{
|
||||
case RsConnectionEventCode::PEER_CONNECTED:
|
||||
case RsFriendListEventCode::NODE_CONNECTED:
|
||||
addFeedItemIfUnique(new PeerItem(this, NEWSFEED_PEERLIST, e.mSslId, PEER_TYPE_CONNECT, false), true);
|
||||
NotifyQt::getInstance()->addToaster(RS_POPUP_CONNECT, e.mSslId.toStdString().c_str(), "", "");
|
||||
break;
|
||||
case RsConnectionEventCode::PEER_DISCONNECTED: // not handled yet
|
||||
case RsFriendListEventCode::NODE_DISCONNECTED: // not handled yet
|
||||
break;
|
||||
case RsConnectionEventCode::PEER_TIME_SHIFT:
|
||||
case RsFriendListEventCode::NODE_TIME_SHIFT:
|
||||
addFeedItemIfUnique(new PeerItem(this, NEWSFEED_PEERLIST, e.mSslId, PEER_TYPE_OFFSET, false),false);
|
||||
break;
|
||||
case RsConnectionEventCode::PEER_REPORTS_WRONG_IP:
|
||||
case RsFriendListEventCode::NODE_REPORTS_WRONG_IP:
|
||||
addFeedItemIfUnique(new SecurityIpItem(
|
||||
this, e.mSslId, e.mOwnLocator.toString(),
|
||||
e.mReportedLocator.toString(),
|
||||
RS_FEED_ITEM_SEC_IP_WRONG_EXTERNAL_IP_REPORTED,
|
||||
RsFeedTypeFlags::RS_FEED_ITEM_SEC_IP_WRONG_EXTERNAL_IP_REPORTED,
|
||||
false ), false);
|
||||
break;
|
||||
default: break;
|
||||
|
|
@ -467,34 +460,31 @@ void NewsFeed::handleSecurityEvent(std::shared_ptr<const RsEvent> event)
|
|||
return;
|
||||
|
||||
auto& e(*pe);
|
||||
#ifdef NEWS_DEBUG
|
||||
std::cerr << "NotifyQt: handling security event from (" << e.mSslId << "," << e.mPgpId << ") error code: " << (int)e.mErrorCode << std::endl;
|
||||
#endif
|
||||
uint flags = Settings->getNewsFeedFlags();
|
||||
RsFeedTypeFlags flags = (RsFeedTypeFlags)Settings->getNewsFeedFlags();
|
||||
|
||||
if(e.mErrorCode == RsAuthSslError::PEER_REFUSED_CONNECTION && (flags & RS_FEED_TYPE_SECURITY_IP))
|
||||
if(e.mErrorCode == RsAuthSslError::PEER_REFUSED_CONNECTION && (!!(flags & RsFeedTypeFlags::RS_FEED_TYPE_SECURITY_IP)))
|
||||
{
|
||||
addFeedItemIfUnique(new PeerItem(this, NEWSFEED_PEERLIST, e.mSslId, PEER_TYPE_HELLO, false), true );
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
uint32_t FeedItemType=0;
|
||||
RsFeedTypeFlags FeedItemType(RsFeedTypeFlags::RS_FEED_TYPE_NONE);
|
||||
|
||||
switch(e.mErrorCode)
|
||||
{
|
||||
case RsAuthSslError::NO_CERTIFICATE_SUPPLIED: // fallthrough
|
||||
case RsAuthSslError::MISMATCHED_PGP_ID: // fallthrough
|
||||
case RsAuthSslError::MISSING_AUTHENTICATION_INFO:
|
||||
FeedItemType = RS_FEED_ITEM_SEC_BAD_CERTIFICATE; break;
|
||||
FeedItemType = RsFeedTypeFlags::RS_FEED_ITEM_SEC_BAD_CERTIFICATE; break;
|
||||
case RsAuthSslError::PGP_SIGNATURE_VALIDATION_FAILED:
|
||||
FeedItemType = RS_FEED_ITEM_SEC_WRONG_SIGNATURE; break;
|
||||
FeedItemType = RsFeedTypeFlags::RS_FEED_ITEM_SEC_WRONG_SIGNATURE; break;
|
||||
case RsAuthSslError::NOT_A_FRIEND:
|
||||
FeedItemType = RS_FEED_ITEM_SEC_CONNECT_ATTEMPT; break;
|
||||
FeedItemType = RsFeedTypeFlags::RS_FEED_ITEM_SEC_CONNECT_ATTEMPT; break;
|
||||
case RsAuthSslError::IP_IS_BLACKLISTED:
|
||||
FeedItemType = RS_FEED_ITEM_SEC_IP_BLACKLISTED; break;
|
||||
FeedItemType = RsFeedTypeFlags::RS_FEED_ITEM_SEC_IP_BLACKLISTED; break;
|
||||
case RsAuthSslError::MISSING_CERTIFICATE:
|
||||
FeedItemType = RS_FEED_ITEM_SEC_MISSING_CERTIFICATE; break;
|
||||
FeedItemType = RsFeedTypeFlags::RS_FEED_ITEM_SEC_MISSING_CERTIFICATE; break;
|
||||
default:
|
||||
return; // display nothing
|
||||
}
|
||||
|
|
@ -504,13 +494,11 @@ void NewsFeed::handleSecurityEvent(std::shared_ptr<const RsEvent> event)
|
|||
|
||||
addFeedItemIfUnique(new SecurityItem(this, NEWSFEED_SECLIST, e.mPgpId, e.mSslId, det.location, e.mLocator.toString(), FeedItemType, false), true );
|
||||
|
||||
if (Settings->getMessageFlags() & RS_MESSAGE_CONNECT_ATTEMPT)
|
||||
if (Settings->getMessageFlags() & RshareSettings::RS_MESSAGE_CONNECT_ATTEMPT)
|
||||
MessageComposer::addConnectAttemptMsg(e.mPgpId, e.mSslId, QString::fromStdString(det.name + "(" + det.location + ")"));
|
||||
|
||||
NotifyQt::getInstance()->addToaster(RS_POPUP_CONNECT_ATTEMPT, e.mPgpId.toStdString().c_str(), det.location, e.mSslId.toStdString().c_str());
|
||||
}
|
||||
|
||||
void NewsFeed::testFeeds(uint /*notifyFlags*/)
|
||||
void NewsFeed::testFeeds(RsFeedTypeFlags /*notifyFlags*/)
|
||||
{
|
||||
uint flags = Settings->getNewsFeedFlags();
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#include <retroshare-gui/mainpage.h>
|
||||
|
||||
#include "gui/feeds/FeedHolder.h"
|
||||
#include "gui/feeds/FeedItem.h"
|
||||
#include <retroshare-gui/RsAutoUpdatePage.h>
|
||||
|
||||
#define IMAGE_NEWSFEED ":/icons/png/newsfeed.png"
|
||||
|
|
@ -67,19 +68,19 @@ public:
|
|||
/** Default Destructor */
|
||||
virtual ~NewsFeed();
|
||||
|
||||
virtual QIcon iconPixmap() const { return QIcon(IMAGE_NEWSFEED) ; } //MainPage
|
||||
virtual QString pageName() const { return tr("Activity") ; } //MainPage
|
||||
virtual QString helpText() const { return ""; } //MainPage
|
||||
virtual QIcon iconPixmap() const override { return QIcon(IMAGE_NEWSFEED) ; } //MainPage
|
||||
virtual QString pageName() const override { return tr("Activity") ; } //MainPage
|
||||
virtual QString helpText() const override { return ""; } //MainPage
|
||||
|
||||
virtual UserNotify *createUserNotify(QObject *parent) override;
|
||||
|
||||
/* FeedHolder Functions (for FeedItem functionality) */
|
||||
virtual QScrollArea *getScrollArea();
|
||||
virtual void deleteFeedItem(FeedItem *item, uint32_t type);
|
||||
virtual void openChat(const RsPeerId& peerId);
|
||||
virtual void openComments(uint32_t type, const RsGxsGroupId &groupId, const QVector<RsGxsMessageId> &versions, const RsGxsMessageId &msgId, const QString &title);
|
||||
virtual QScrollArea *getScrollArea()override ;
|
||||
virtual void deleteFeedItem(FeedItem *item, uint32_t type)override ;
|
||||
virtual void openChat(const RsPeerId& peerId)override ;
|
||||
virtual void openComments(uint32_t type, const RsGxsGroupId &groupId, const QVector<RsGxsMessageId> &versions, const RsGxsMessageId &msgId, const QString &title)override ;
|
||||
|
||||
static void testFeeds(uint notifyFlags);
|
||||
static void testFeeds(RsFeedTypeFlags notifyFlags);
|
||||
static void testFeed(FeedNotify *feedNotify);
|
||||
|
||||
void handleEvent(std::shared_ptr<const RsEvent> event); // get events from libretroshare
|
||||
|
|
|
|||
|
|
@ -37,8 +37,8 @@
|
|||
#include "gui/common/UIStateHelper.h"
|
||||
#include "gui/common/RSTabWidget.h"
|
||||
#include "gui/settings/rsharesettings.h"
|
||||
#include "gui/RsGUIEventManager.h"
|
||||
#include "gui/feeds/SubFileItem.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/Identity/IdDialog.h"
|
||||
#include "gui/RetroShareLink.h"
|
||||
#include "util/HandleRichText.h"
|
||||
|
|
@ -289,7 +289,7 @@ PostedListWidgetWithModel::PostedListWidgetWithModel(const RsGxsGroupId& postedI
|
|||
connect(ui->submitPostButton, SIGNAL(clicked()), this, SLOT(createMsg()));
|
||||
connect(ui->subscribeToolButton, SIGNAL(subscribe(bool)), this, SLOT(subscribeGroup(bool)));
|
||||
connect(ui->filter_LE, SIGNAL(textChanged(QString)), this, SLOT(filterItems(QString)));
|
||||
connect(NotifyQt::getInstance(), SIGNAL(settingsChanged()),this, SLOT(settingsChanged()));
|
||||
connect(RsGUIEventManager::getInstance(), SIGNAL(settingsChanged()),this, SLOT(settingsChanged()));
|
||||
|
||||
/* add filter actions */
|
||||
ui->postsTree->setPlaceholderText(tr("No posts available in this board"));
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@
|
|||
#include <retroshare/rsgxsforums.h>
|
||||
#include <retroshare/rsidentity.h>
|
||||
#include <retroshare/rsmsgs.h>
|
||||
#include <retroshare/rsnotify.h>
|
||||
#include <retroshare/rspeers.h>
|
||||
|
||||
#include <QApplication>
|
||||
|
|
@ -1758,7 +1757,7 @@ static void processList(const QStringList &list, const QString &textSingular, co
|
|||
}
|
||||
else
|
||||
{
|
||||
ChatDialog* chatDialog = ChatDialog::getChat(chatId, Settings->getChatFlags());
|
||||
ChatDialog* chatDialog = ChatDialog::getChat(chatId, (RsChatFlags)Settings->getChatFlags());
|
||||
if (chatDialog) {
|
||||
chatroomFound.append(link.name());
|
||||
} else {
|
||||
|
|
|
|||
732
retroshare-gui/src/gui/RsGUIEventManager.cpp
Normal file
732
retroshare-gui/src/gui/RsGUIEventManager.cpp
Normal file
|
|
@ -0,0 +1,732 @@
|
|||
/*******************************************************************************
|
||||
* gui/RsGUIEventManager.cpp *
|
||||
* *
|
||||
* Copyright (c) 2010 Retroshare Team <retroshare.project@gmail.com> *
|
||||
* *
|
||||
* This program is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>. *
|
||||
* *
|
||||
*******************************************************************************/
|
||||
|
||||
#include "gui/common/FilesDefs.h"
|
||||
#include <retroshare/rsgxsifacehelper.h>
|
||||
|
||||
#include <retroshare/rspeers.h>
|
||||
#include <retroshare/rsidentity.h>
|
||||
#include <retroshare/rsmsgs.h>
|
||||
#include <retroshare/rsinit.h>
|
||||
#include <util/rsdir.h>
|
||||
#include <util/qtthreadsutils.h>
|
||||
|
||||
#include <retroshare-gui/RsAutoUpdatePage.h>
|
||||
|
||||
#include "rshare.h"
|
||||
#include "MainWindow.h"
|
||||
#include "toaster/OnlineToaster.h"
|
||||
#include "toaster/MessageToaster.h"
|
||||
#include "toaster/DownloadToaster.h"
|
||||
#include "toaster/ChatToaster.h"
|
||||
#include "toaster/GroupChatToaster.h"
|
||||
#include "toaster/ChatLobbyToaster.h"
|
||||
#include "toaster/FriendRequestToaster.h"
|
||||
#include "toaster/ToasterItem.h"
|
||||
#include "common/ToasterNotify.h"
|
||||
#include "RsGUIEventManager.h"
|
||||
|
||||
#include "chat/ChatDialog.h"
|
||||
#include "chat/ChatLobbyDialog.h"
|
||||
#include "chat/ChatWidget.h"
|
||||
#include "FriendsDialog.h"
|
||||
#include "gui/settings/rsharesettings.h"
|
||||
#include "SoundManager.h"
|
||||
|
||||
#include "retroshare/rsplugin.h"
|
||||
|
||||
#include <QInputDialog>
|
||||
#include <QMessageBox>
|
||||
//#include <QMutexLocker>
|
||||
#include <QThread>
|
||||
#include <QTimer>
|
||||
|
||||
/*****
|
||||
* #define NOTIFY_DEBUG
|
||||
****/
|
||||
|
||||
/*static*/ RsGUIEventManager *RsGUIEventManager::_instance = nullptr;
|
||||
/*static*/ bool RsGUIEventManager::_disableAllToaster = false;
|
||||
|
||||
/*static*/ void RsGUIEventManager::Create ()
|
||||
{
|
||||
if (_instance == nullptr)
|
||||
_instance = new RsGUIEventManager ();
|
||||
}
|
||||
|
||||
/*static*/ RsGUIEventManager *RsGUIEventManager::getInstance ()
|
||||
{
|
||||
return _instance;
|
||||
}
|
||||
|
||||
/*static*/ bool RsGUIEventManager::isAllDisable ()
|
||||
{
|
||||
return _disableAllToaster;
|
||||
}
|
||||
|
||||
void RsGUIEventManager::SetDisableAll(bool bValue)
|
||||
{
|
||||
if (bValue!=_disableAllToaster)
|
||||
{
|
||||
_disableAllToaster=bValue;
|
||||
emit disableAllChanged(bValue);
|
||||
}
|
||||
}
|
||||
|
||||
RsGUIEventManager::RsGUIEventManager() : cDialog(NULL)
|
||||
{
|
||||
runningToasterTimer = new QTimer(this);
|
||||
connect(runningToasterTimer, SIGNAL(timeout()), this, SLOT(runningTick()));
|
||||
runningToasterTimer->setInterval(10); // tick 100 times a second
|
||||
runningToasterTimer->setSingleShot(true);
|
||||
{
|
||||
QMutexLocker m(&_mutex) ;
|
||||
_enabled = false ;
|
||||
}
|
||||
|
||||
#warning TODO: do we need a timer anymore??
|
||||
|
||||
// Catch all events that require toasters and
|
||||
|
||||
mEventHandlerId = 0;
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> event)
|
||||
{
|
||||
if(event->mType == RsEventType::SYSTEM && dynamic_cast<const RsSystemEvent*>(event.get())->mEventCode == RsSystemEventCode::PASSWORD_REQUESTED)
|
||||
sync_handleIncomingEvent(event);
|
||||
else
|
||||
RsQThreadUtils::postToObject([=](){ async_handleIncomingEvent(event); }, this );
|
||||
}, mEventHandlerId); // No event type means we expect to catch all possible events
|
||||
}
|
||||
|
||||
bool RsGUIEventManager::GUI_askForPassword(const std::string& title, const std::string& key_details, bool prev_is_bad)
|
||||
{
|
||||
RsAutoUpdatePage::lockAllEvents() ;
|
||||
|
||||
QString windowTitle;
|
||||
if (title == "")
|
||||
windowTitle = tr("Passphrase required");
|
||||
else if (title == "AuthSSLimpl::SignX509ReqWithGPG()")
|
||||
windowTitle = tr("You need to sign your node's certificate.");
|
||||
else if (title == "p3IdService::service_CreateGroup()")
|
||||
windowTitle = tr("You need to sign your forum/chatrooms identity.");
|
||||
else
|
||||
windowTitle = QString::fromStdString(title);
|
||||
|
||||
QString labelText = ( prev_is_bad ? QString("%1<br/><br/>").arg(tr("Wrong password !")) : QString() )
|
||||
+ QString("<b>%1</b><br/>Profile: <i>%2</i>\n")
|
||||
.arg( tr("Please enter your Retroshare passphrase")
|
||||
, QString::fromUtf8(key_details.c_str()) );
|
||||
|
||||
QLineEdit::EchoMode textEchoMode = QLineEdit::Password;
|
||||
bool modal = true;
|
||||
|
||||
bool sameThread = QThread::currentThread() == qApp->thread();
|
||||
Gui_InputDialogReturn ret;
|
||||
qRegisterMetaType<Gui_InputDialogReturn>("Gui_InputDialogReturn");
|
||||
QMetaObject::invokeMethod( MainWindow::getInstance()
|
||||
, "guiInputDialog"
|
||||
, sameThread ? Qt::DirectConnection : Qt::BlockingQueuedConnection
|
||||
, Q_RETURN_ARG(Gui_InputDialogReturn, ret)
|
||||
, Q_ARG(QString, windowTitle)
|
||||
, Q_ARG(QString, labelText)
|
||||
, Q_ARG(QLineEdit::EchoMode, textEchoMode)
|
||||
, Q_ARG(bool, modal)
|
||||
);
|
||||
//cancelled = false ;
|
||||
|
||||
RsAutoUpdatePage::unlockAllEvents() ;
|
||||
|
||||
if (ret.execReturn == QDialog::Rejected) {
|
||||
RsLoginHelper::clearPgpPassphrase();
|
||||
//cancelled = true ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
if (ret.execReturn == QDialog::Accepted) {
|
||||
auto password = ret.textValue.toUtf8().constData();
|
||||
RsLoginHelper::cachePgpPassphrase(password);
|
||||
return true;
|
||||
}
|
||||
|
||||
RsLoginHelper::clearPgpPassphrase();
|
||||
return false;
|
||||
}
|
||||
bool RsGUIEventManager::GUI_askForPluginConfirmation(const std::string& plugin_file_name, const RsFileHash& plugin_file_hash, bool first_time)
|
||||
{
|
||||
// By default, when no information is known about plugins, just dont load them. They will be enabled from the GUI by the user.
|
||||
|
||||
if(first_time)
|
||||
return false ;
|
||||
|
||||
RsAutoUpdatePage::lockAllEvents() ;
|
||||
|
||||
QMessageBox dialog;
|
||||
dialog.setWindowTitle(tr("Unregistered plugin/executable"));
|
||||
|
||||
QString text ;
|
||||
text += tr( "RetroShare has detected an unregistered plugin. This happens in two cases:<UL><LI>Your RetroShare executable has changed.</LI><LI>The plugin has changed</LI></UL>Click on Yes to authorize this plugin, or No to deny it. You can change your mind later in Options -> Plugins, then restart." ) ;
|
||||
text += "<UL>" ;
|
||||
text += "<LI>Hash:\t" + QString::fromStdString(plugin_file_hash.toStdString()) + "</LI>" ;
|
||||
text += "<LI>File:\t" + QString::fromStdString(plugin_file_name) + "</LI>";
|
||||
text += "</UL>" ;
|
||||
|
||||
dialog.setText(text) ;
|
||||
dialog.setWindowIcon(FilesDefs::getIconFromQtResourcePath(":/icons/logo_128.png"));
|
||||
dialog.setStandardButtons(QMessageBox::Yes | QMessageBox::No) ;
|
||||
|
||||
int ret = dialog.exec();
|
||||
|
||||
RsAutoUpdatePage::unlockAllEvents() ;
|
||||
|
||||
if (ret == QMessageBox::Yes)
|
||||
return true;
|
||||
else
|
||||
{
|
||||
rsPlugins->disablePlugin(plugin_file_hash);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void RsGUIEventManager::enable()
|
||||
{
|
||||
QMutexLocker m(&_mutex) ;
|
||||
std::cerr << "Enabling notification system" << std::endl;
|
||||
_enabled = true ;
|
||||
}
|
||||
|
||||
void RsGUIEventManager::sync_handleIncomingEvent(std::shared_ptr<const RsEvent> event)
|
||||
{
|
||||
auto ev6 = dynamic_cast<const RsSystemEvent*>(event.get());
|
||||
|
||||
if(ev6->mEventCode == RsSystemEventCode::PASSWORD_REQUESTED)
|
||||
GUI_askForPassword(ev6->passwd_request_title, ev6->passwd_request_key_details, ev6->passwd_request_prev_is_bad);
|
||||
else if(ev6->mEventCode == RsSystemEventCode::NEW_PLUGIN_FOUND)
|
||||
GUI_askForPluginConfirmation(ev6->plugin_file_name, ev6->plugin_file_hash, ev6->plugin_first_time);
|
||||
}
|
||||
|
||||
void RsGUIEventManager::async_handleIncomingEvent(std::shared_ptr<const RsEvent> event)
|
||||
{
|
||||
/* Finally Check for PopupMessages / System Error Messages */
|
||||
|
||||
RsNotifyPopupFlags popupflags = (RsNotifyPopupFlags)Settings->getNotifyFlags();
|
||||
|
||||
auto insertToaster = [this](ToasterItem *toaster) {
|
||||
|
||||
/* init attributes */
|
||||
toaster->widget->setWindowFlags(Qt::ToolTip | Qt::WindowStaysOnTopHint);
|
||||
|
||||
/* add toaster to waiting list */
|
||||
waitingToasterList.push_back(toaster);
|
||||
};
|
||||
|
||||
// check for all possibly handled events
|
||||
|
||||
auto ev1 = dynamic_cast<const RsMailStatusEvent*>(event.get());
|
||||
|
||||
if(ev1)
|
||||
{
|
||||
if(ev1->mMailStatusEventCode == RsMailStatusEventCode::NEW_MESSAGE)
|
||||
{
|
||||
SoundManager::play(SOUND_MESSAGE_ARRIVED);
|
||||
|
||||
if((!!(popupflags & RsNotifyPopupFlags::RS_POPUP_MSG)) && !_disableAllToaster)
|
||||
{
|
||||
for(auto msgid:ev1->mChangedMsgIds)
|
||||
{
|
||||
Rs::Msgs::MessageInfo msgInfo;
|
||||
if(rsMsgs->getMessage(msgid, msgInfo))
|
||||
insertToaster(new ToasterItem(new MessageToaster(msgInfo.from.toStdString(), QString::fromUtf8(msgInfo.title.c_str()), QString::fromUtf8(msgInfo.msg.c_str()))));
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
auto ev2 = dynamic_cast<const RsFriendListEvent*>(event.get());
|
||||
|
||||
if(ev2)
|
||||
{
|
||||
if(ev2->mEventCode == RsFriendListEventCode::NODE_CONNECTED)
|
||||
{
|
||||
SoundManager::play(SOUND_USER_ONLINE);
|
||||
|
||||
if ((!!(popupflags & RsNotifyPopupFlags::RS_POPUP_CONNECT)) && !_disableAllToaster)
|
||||
insertToaster(new ToasterItem(new OnlineToaster(ev2->mSslId)));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
auto ev3 = dynamic_cast<const RsFileTransferEvent*>(event.get());
|
||||
|
||||
if(ev3)
|
||||
{
|
||||
if(ev3->mFileTransferEventCode == RsFileTransferEventCode::DOWNLOAD_COMPLETE)
|
||||
{
|
||||
SoundManager::play(SOUND_DOWNLOAD_COMPLETE);
|
||||
|
||||
if ((!!(popupflags & RsNotifyPopupFlags::RS_POPUP_DOWNLOAD)) && !_disableAllToaster)
|
||||
insertToaster(new ToasterItem(new DownloadToaster(ev3->mHash)));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
auto ev4 = dynamic_cast<const RsAuthSslConnectionAutenticationEvent*>(event.get());
|
||||
|
||||
if(ev4)
|
||||
{
|
||||
if(ev4->mErrorCode == RsAuthSslError::NOT_A_FRIEND)
|
||||
{
|
||||
if ((!!(popupflags & RsNotifyPopupFlags::RS_POPUP_CONNECT_ATTEMPT)) && !_disableAllToaster)
|
||||
// id = gpgid
|
||||
// title = ssl name
|
||||
// msg = peer id
|
||||
insertToaster(new ToasterItem(new FriendRequestToaster(ev4->mPgpId, ev4->mSslId)));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
auto ev5 = dynamic_cast<const RsChatServiceEvent*>(event.get());
|
||||
|
||||
if(ev5)
|
||||
{
|
||||
// This code below should be simplified. In particular GroupChatToaster, ChatToaster and ChatLobbyToaster should be only one class.
|
||||
|
||||
if(ev5->mEventCode == RsChatServiceEventCode::CHAT_MESSAGE_RECEIVED)
|
||||
{
|
||||
if (ev5->mCid.isPeerId() && (!!(popupflags & RsNotifyPopupFlags::RS_POPUP_CHAT)) && !_disableAllToaster)
|
||||
{
|
||||
// TODO: fix for distant chat, look up if dstant chat uses RS_POPUP_CHAT
|
||||
ChatDialog *chatDialog = ChatDialog::getChat(ev5->mCid);
|
||||
ChatWidget *chatWidget;
|
||||
|
||||
if (chatDialog && (chatWidget = chatDialog->getChatWidget()) && chatWidget->isActive()) // do not show when active
|
||||
return;
|
||||
|
||||
insertToaster(new ToasterItem(new ChatToaster(ev5->mCid.toPeerId(), QString::fromUtf8(ev5->mMsg.msg.c_str()))));
|
||||
}
|
||||
#ifdef RS_DIRECT_CHAT
|
||||
else if (ev5->mCid.isBroadcast() && (!!(popupflags & RsNotifyPopupFlags::RS_POPUP_GROUPCHAT)) && !_disableAllToaster)
|
||||
{
|
||||
MainWindow *mainWindow = MainWindow::getInstance();
|
||||
if (mainWindow && mainWindow->isActiveWindow() && !mainWindow->isMinimized()
|
||||
&& (MainWindow::getActivatePage() == MainWindow::Friends) && (FriendsDialog::isGroupChatActive()))
|
||||
return;
|
||||
|
||||
insertToaster(new ToasterItem(new GroupChatToaster(ev5->mCid.toPeerId(), QString::fromUtf8(ev5->mMsg.msg.c_str()))));
|
||||
}
|
||||
#endif
|
||||
else if (ev5->mCid.isLobbyId() && (!!(popupflags & RsNotifyPopupFlags::RS_POPUP_CHATLOBBY)) && !_disableAllToaster)
|
||||
{
|
||||
ChatDialog *chatDialog = ChatDialog::getChat(ev5->mCid);
|
||||
ChatWidget *chatWidget;
|
||||
|
||||
if (chatDialog && (chatWidget = chatDialog->getChatWidget()) && chatWidget->isActive())
|
||||
return;
|
||||
|
||||
ChatLobbyDialog *chatLobbyDialog = dynamic_cast<ChatLobbyDialog*>(chatDialog);
|
||||
|
||||
if (!chatLobbyDialog || chatLobbyDialog->isParticipantMuted(ev5->mMsg.lobby_peer_gxs_id))
|
||||
return;
|
||||
|
||||
insertToaster(new ToasterItem(new ChatLobbyToaster(ev5->mCid.toLobbyId(), ev5->mMsg.lobby_peer_gxs_id, QString::fromUtf8(ev5->mMsg.msg.c_str()))));
|
||||
}
|
||||
else
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
auto ev6 = dynamic_cast<const RsSystemEvent*>(event.get());
|
||||
|
||||
if(ev6)
|
||||
{
|
||||
switch(ev6->mEventCode)
|
||||
{
|
||||
case RsSystemEventCode::TIME_SHIFT_PROBLEM:
|
||||
displayErrorMessage(RsNotifySysFlags::RS_SYS_WARNING,tr("System time mismatch"),tr("Time shift problem notification. Make sure your machine is on time, because it will break chat rooms."));
|
||||
break;
|
||||
|
||||
case RsSystemEventCode::DISK_SPACE_ERROR:
|
||||
displayDiskSpaceWarning(ev6->mDiskErrorLocation,ev6->mDiskErrorSizeLimit);
|
||||
break;
|
||||
|
||||
case RsSystemEventCode::DATA_STREAMING_ERROR:
|
||||
case RsSystemEventCode::GENERAL_ERROR:
|
||||
displayErrorMessage(RsNotifySysFlags::RS_SYS_WARNING,tr("Internal error"),QString::fromUtf8(ev6->mErrorMsg.c_str()));
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
return;
|
||||
};
|
||||
|
||||
|
||||
/*Now check Plugins*/
|
||||
|
||||
if(rsPlugins) // rsPlugins may not be initialized yet if we're handlign TorManager events.
|
||||
{
|
||||
int pluginCount = rsPlugins->nbPlugins();
|
||||
|
||||
for (int i = 0; i < pluginCount; ++i) {
|
||||
RsPlugin *rsPlugin = rsPlugins->plugin(i);
|
||||
if (rsPlugin) {
|
||||
ToasterNotify *toasterNotify = rsPlugin->qt_toasterNotify();
|
||||
if (toasterNotify) {
|
||||
insertToaster(toasterNotify->toasterItem());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Now start the waiting toasters */
|
||||
startWaitingToasters();
|
||||
}
|
||||
|
||||
void RsGUIEventManager::testToasters(RsNotifyPopupFlags notifyFlags, /*RshareSettings::enumToasterPosition*/ int position, QPoint margin)
|
||||
{
|
||||
QString title = tr("Test");
|
||||
QString message = tr("This is a test.");
|
||||
|
||||
RsPeerId id = rsPeers->getOwnId();
|
||||
RsPgpId pgpid = rsPeers->getGPGOwnId();
|
||||
|
||||
uint pos = 0;
|
||||
uint nf = (uint)notifyFlags;
|
||||
|
||||
while (nf) {
|
||||
uint type = nf & (1 << pos);
|
||||
nf &= ~(1 << pos);
|
||||
++pos;
|
||||
|
||||
ToasterItem *toaster = NULL;
|
||||
|
||||
switch(type)
|
||||
{
|
||||
case (int)RsNotifyPopupFlags::RS_POPUP_ENCRYPTED_MSG:
|
||||
toaster = new ToasterItem(new MessageToaster(std::string(), tr("Unknown title"), QString("[%1]").arg(tr("Encrypted message"))));
|
||||
break;
|
||||
case (int)RsNotifyPopupFlags::RS_POPUP_MSG:
|
||||
toaster = new ToasterItem(new MessageToaster(id.toStdString(), title, message));
|
||||
break;
|
||||
case (int)RsNotifyPopupFlags::RS_POPUP_CONNECT:
|
||||
toaster = new ToasterItem(new OnlineToaster(id));
|
||||
break;
|
||||
case (int)RsNotifyPopupFlags::RS_POPUP_DOWNLOAD:
|
||||
toaster = new ToasterItem(new DownloadToaster(RsFileHash::random()));
|
||||
break;
|
||||
case (int)RsNotifyPopupFlags::RS_POPUP_CHAT:
|
||||
toaster = new ToasterItem(new ChatToaster(id, message));
|
||||
break;
|
||||
case (int)RsNotifyPopupFlags::RS_POPUP_GROUPCHAT:
|
||||
#ifdef RS_DIRECT_CHAT
|
||||
toaster = new ToasterItem(new GroupChatToaster(id, message));
|
||||
#endif // RS_DIRECT_CHAT
|
||||
break;
|
||||
case (int)RsNotifyPopupFlags::RS_POPUP_CHATLOBBY:
|
||||
{
|
||||
std::list<RsGxsId> gxsid;
|
||||
if(rsIdentity->getOwnIds(gxsid) && (gxsid.size() > 0)){
|
||||
toaster = new ToasterItem(new ChatLobbyToaster(0, gxsid.front(), message));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case (int)RsNotifyPopupFlags::RS_POPUP_CONNECT_ATTEMPT:
|
||||
toaster = new ToasterItem(new FriendRequestToaster(pgpid, id));
|
||||
break;
|
||||
}
|
||||
|
||||
if (toaster) {
|
||||
/* init attributes */
|
||||
toaster->widget->setWindowFlags(Qt::ToolTip | Qt::WindowStaysOnTopHint);
|
||||
toaster->position = (RshareSettings::enumToasterPosition) position;
|
||||
toaster->margin = margin;
|
||||
|
||||
/* add toaster to waiting list */
|
||||
|
||||
waitingToasterList.push_back(toaster);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RsGUIEventManager::testToaster(ToasterNotify *toasterNotify, /*RshareSettings::enumToasterPosition*/ int position, QPoint margin)
|
||||
{
|
||||
|
||||
if (!toasterNotify) {
|
||||
return;
|
||||
}
|
||||
|
||||
ToasterItem *toaster = toasterNotify->testToasterItem();
|
||||
|
||||
if (toaster) {
|
||||
/* init attributes */
|
||||
toaster->widget->setWindowFlags(Qt::ToolTip | Qt::WindowStaysOnTopHint);
|
||||
toaster->position = (RshareSettings::enumToasterPosition) position;
|
||||
toaster->margin = margin;
|
||||
|
||||
/* add toaster to waiting list */
|
||||
//QMutexLocker lock(&waitingToasterMutex);
|
||||
waitingToasterList.push_back(toaster);
|
||||
}
|
||||
}
|
||||
|
||||
void RsGUIEventManager::testToaster(QString tag, ToasterNotify *toasterNotify, /*RshareSettings::enumToasterPosition*/ int position, QPoint margin)
|
||||
{
|
||||
|
||||
if (!toasterNotify) {
|
||||
return;
|
||||
}
|
||||
|
||||
ToasterItem *toaster = toasterNotify->testToasterItem(tag);
|
||||
|
||||
if (toaster) {
|
||||
/* init attributes */
|
||||
toaster->widget->setWindowFlags(Qt::ToolTip | Qt::WindowStaysOnTopHint);
|
||||
toaster->position = (RshareSettings::enumToasterPosition) position;
|
||||
toaster->margin = margin;
|
||||
|
||||
/* add toaster to waiting list */
|
||||
|
||||
waitingToasterList.push_back(toaster);
|
||||
}
|
||||
}
|
||||
|
||||
void RsGUIEventManager::notifyChatFontChanged()
|
||||
{
|
||||
{
|
||||
QMutexLocker m(&_mutex) ;
|
||||
if(!_enabled)
|
||||
return ;
|
||||
}
|
||||
|
||||
emit chatFontChanged();
|
||||
}
|
||||
void RsGUIEventManager::notifyChatStyleChanged(int /*ChatStyle::enumStyleType*/ styleType)
|
||||
{
|
||||
{
|
||||
QMutexLocker m(&_mutex) ;
|
||||
if(!_enabled)
|
||||
return ;
|
||||
}
|
||||
|
||||
emit chatStyleChanged(styleType);
|
||||
}
|
||||
|
||||
void RsGUIEventManager::notifySettingsChanged()
|
||||
{
|
||||
emit settingsChanged();
|
||||
}
|
||||
|
||||
void RsGUIEventManager::startWaitingToasters()
|
||||
{
|
||||
{
|
||||
if (waitingToasterList.empty()) {
|
||||
/* No toasters are waiting */
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
if (runningToasterList.size() >= 3) {
|
||||
/* Don't show more than 3 toasters at once */
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
ToasterItem *toaster = NULL;
|
||||
|
||||
{
|
||||
if (waitingToasterList.size()) {
|
||||
/* Take one toaster of the waiting list */
|
||||
toaster = waitingToasterList.front();
|
||||
waitingToasterList.pop_front();
|
||||
}
|
||||
}
|
||||
|
||||
if (toaster) {
|
||||
|
||||
/* Calculate positions */
|
||||
QSize size = toaster->widget->size();
|
||||
|
||||
QRect desktopGeometry = RsApplication::primaryScreenGeometry();
|
||||
|
||||
switch (toaster->position) {
|
||||
case RshareSettings::TOASTERPOS_TOPLEFT:
|
||||
toaster->startPos = QPoint(desktopGeometry.left() + toaster->margin.x(), desktopGeometry.top() - size.height());
|
||||
toaster->endPos = QPoint(toaster->startPos.x(), desktopGeometry.top() + toaster->margin.y());
|
||||
break;
|
||||
case RshareSettings::TOASTERPOS_TOPRIGHT:
|
||||
toaster->startPos = QPoint(desktopGeometry.right() - size.width() - toaster->margin.x(), desktopGeometry.top() - size.height());
|
||||
toaster->endPos = QPoint(toaster->startPos.x(), desktopGeometry.top() + toaster->margin.y());
|
||||
break;
|
||||
case RshareSettings::TOASTERPOS_BOTTOMLEFT:
|
||||
toaster->startPos = QPoint(desktopGeometry.left() + toaster->margin.x(), desktopGeometry.bottom());
|
||||
toaster->endPos = QPoint(toaster->startPos.x(), desktopGeometry.bottom() - size.height() - toaster->margin.y());
|
||||
break;
|
||||
case RshareSettings::TOASTERPOS_BOTTOMRIGHT: // default
|
||||
default:
|
||||
toaster->startPos = QPoint(desktopGeometry.right() - size.width() - toaster->margin.x(), desktopGeometry.bottom());
|
||||
toaster->endPos = QPoint(toaster->startPos.x(), desktopGeometry.bottom() - size.height() - toaster->margin.y());
|
||||
break;
|
||||
}
|
||||
|
||||
/* Initialize widget */
|
||||
toaster->widget->move(toaster->startPos);
|
||||
|
||||
/* Initialize toaster */
|
||||
toaster->elapsedTimeToShow = 0;
|
||||
toaster->elapsedTimeToLive = 0;
|
||||
toaster->elapsedTimeToHide = 0;
|
||||
|
||||
/* Add toaster to the running list */
|
||||
runningToasterList.push_front(toaster);
|
||||
if (runningToasterTimer->isActive() == false) {
|
||||
/* Start the toaster timer */
|
||||
runningToasterTimer->start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RsGUIEventManager::runningTick()
|
||||
{
|
||||
//QMutexLocker lock(&runningToasterMutex);
|
||||
|
||||
int interval = runningToasterTimer->interval();
|
||||
QPoint diff;
|
||||
|
||||
QList<ToasterItem*>::iterator it = runningToasterList.begin();
|
||||
while (it != runningToasterList.end()) {
|
||||
ToasterItem *toaster = *it;
|
||||
|
||||
bool visible = true;
|
||||
if (toaster->elapsedTimeToShow) {
|
||||
/* Toaster is started, check for visible */
|
||||
visible = toaster->widget->isVisible();
|
||||
}
|
||||
|
||||
QPoint newPos;
|
||||
enum { NOTHING, SHOW, HIDE } operation = NOTHING;
|
||||
|
||||
if (visible && toaster->elapsedTimeToShow <= toaster->timeToShow) {
|
||||
/* Toaster is showing */
|
||||
if (toaster->elapsedTimeToShow == 0) {
|
||||
/* Toaster is not visible, show it now */
|
||||
operation = SHOW;
|
||||
}
|
||||
|
||||
toaster->elapsedTimeToShow += interval;
|
||||
|
||||
newPos = QPoint(toaster->startPos.x() - (toaster->startPos.x() - toaster->endPos.x()) * toaster->elapsedTimeToShow / toaster->timeToShow,
|
||||
toaster->startPos.y() - (toaster->startPos.y() - toaster->endPos.y()) * toaster->elapsedTimeToShow / toaster->timeToShow);
|
||||
} else if (visible && toaster->elapsedTimeToLive <= toaster->timeToLive) {
|
||||
/* Toaster is living */
|
||||
toaster->elapsedTimeToLive += interval;
|
||||
|
||||
newPos = toaster->endPos;
|
||||
} else if (visible && toaster->elapsedTimeToHide <= toaster->timeToHide) {
|
||||
/* Toaster is hiding */
|
||||
toaster->elapsedTimeToHide += interval;
|
||||
|
||||
if (toaster->elapsedTimeToHide == toaster->timeToHide) {
|
||||
/* Toaster is back at the start position, hide it */
|
||||
operation = HIDE;
|
||||
}
|
||||
|
||||
newPos = QPoint(toaster->startPos.x() - (toaster->startPos.x() - toaster->endPos.x()) * (toaster->timeToHide - toaster->elapsedTimeToHide) / toaster->timeToHide,
|
||||
toaster->startPos.y() - (toaster->startPos.y() - toaster->endPos.y()) * (toaster->timeToHide - toaster->elapsedTimeToHide) / toaster->timeToHide);
|
||||
} else {
|
||||
/* Toaster is hidden, delete it */
|
||||
it = runningToasterList.erase(it);
|
||||
//delete(toaster->widget);
|
||||
delete(toaster);
|
||||
continue;
|
||||
}
|
||||
|
||||
toaster->widget->move(newPos + diff);
|
||||
diff += newPos - toaster->startPos;
|
||||
|
||||
QRect mask = QRect(0, 0, toaster->widget->width(), qAbs(toaster->startPos.y() - newPos.y()));
|
||||
if (newPos.y() > toaster->startPos.y()) {
|
||||
/* Toaster is moving from top */
|
||||
mask.moveTop(toaster->widget->height() - (newPos.y() - toaster->startPos.y()));
|
||||
}
|
||||
toaster->widget->setMask(QRegion(mask));
|
||||
|
||||
switch (operation) {
|
||||
case NOTHING:
|
||||
break;
|
||||
case SHOW:
|
||||
toaster->widget->show();
|
||||
break;
|
||||
case HIDE:
|
||||
toaster->widget->hide();
|
||||
break;
|
||||
}
|
||||
|
||||
++it;
|
||||
}
|
||||
|
||||
if (runningToasterList.size()) {
|
||||
/* There are more running toasters, start the timer again */
|
||||
runningToasterTimer->start();
|
||||
}
|
||||
}
|
||||
|
||||
void RsGUIEventManager::displayErrorMessage(RsNotifySysFlags type,const QString& title,const QString& error_msg)
|
||||
{
|
||||
/* make a warning message */
|
||||
switch(type)
|
||||
{
|
||||
case RsNotifySysFlags::RS_SYS_ERROR: QMessageBox::critical(MainWindow::getInstance(),title,error_msg);
|
||||
break;
|
||||
|
||||
case RsNotifySysFlags::RS_SYS_WARNING: QMessageBox::warning(MainWindow::getInstance(),title,error_msg);
|
||||
break;
|
||||
|
||||
case RsNotifySysFlags::RS_SYS_INFO: QMessageBox::information(MainWindow::getInstance(),title,error_msg);
|
||||
break;
|
||||
|
||||
default: std::cerr << "Warning: unhandled system error type " << type << std::endl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void RsGUIEventManager::displayDiskSpaceWarning(int loc,int size_limit_mb)
|
||||
{
|
||||
QString locString ;
|
||||
switch(loc)
|
||||
{
|
||||
case RS_PARTIALS_DIRECTORY: locString = "Partials" ;
|
||||
break ;
|
||||
|
||||
case RS_CONFIG_DIRECTORY: locString = "Config" ;
|
||||
break ;
|
||||
|
||||
case RS_DOWNLOAD_DIRECTORY: locString = "Download" ;
|
||||
break ;
|
||||
|
||||
default:
|
||||
std::cerr << "Error: " << __PRETTY_FUNCTION__ << " was called with an unknown parameter loc=" << loc << std::endl ;
|
||||
return ;
|
||||
}
|
||||
QMessageBox::critical(NULL,tr("Low disk space warning"),
|
||||
tr("The disk space in your")+" "+locString +" "+tr("directory is running low (current limit is")+" "+QString::number(size_limit_mb)+tr("MB). \n\n RetroShare will now safely suspend any disk access to this directory. \n\n Please make some free space and click Ok.")) ;
|
||||
}
|
||||
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* gui/NotifyQt.h *
|
||||
* gui/RsGUIEventManager.h *
|
||||
* *
|
||||
* Copyright (c) 2010 Retroshare Team <retroshare.project@gmail.com> *
|
||||
* *
|
||||
|
|
@ -23,13 +23,14 @@
|
|||
|
||||
#include <retroshare/rsiface.h>
|
||||
#include <retroshare/rsturtle.h>
|
||||
#include <retroshare/rsnotify.h>
|
||||
#include <retroshare/rsmsgs.h>
|
||||
#include <QObject>
|
||||
#include <QMutex>
|
||||
#include <QPoint>
|
||||
//#include <QMutex>
|
||||
|
||||
#include "settings/rsharesettings.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
class QTimer;
|
||||
|
|
@ -47,92 +48,40 @@ class SignatureEventData ;
|
|||
struct TurtleFileInfo;
|
||||
struct TurtleGxsInfo;
|
||||
|
||||
class NotifyQt: public QObject, public NotifyClient
|
||||
class RsGUIEventManager: public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
static NotifyQt *Create ();
|
||||
static NotifyQt *getInstance ();
|
||||
static void Create();
|
||||
static RsGUIEventManager *getInstance ();
|
||||
static bool isAllDisable();
|
||||
void enable() ;
|
||||
|
||||
virtual ~NotifyQt() = default;
|
||||
virtual ~RsGUIEventManager() = default;
|
||||
|
||||
void setNetworkDialog(NetworkDialog *c) { cDialog = c; }
|
||||
|
||||
virtual void notifyListPreChange(int list, int type);
|
||||
virtual void notifyListChange(int list, int type);
|
||||
virtual void notifyErrorMsg(int list, int sev, std::string msg);
|
||||
virtual void notifyChatMessage(const ChatMessage& /* msg */);
|
||||
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 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 notifyPeerHasNewAvatar(std::string peer_id) ;
|
||||
virtual void notifyOwnAvatarChanged() ;
|
||||
virtual void notifyChatLobbyEvent(uint64_t /* lobby id */, uint32_t /* event type */, const RsGxsId & /*nickname*/, const std::string& /* any string */) ;
|
||||
virtual void notifyChatLobbyTimeShift(int time_shift) ;
|
||||
|
||||
virtual void notifyOwnStatusMessageChanged() ;
|
||||
virtual void notifyDiskFull(uint32_t loc,uint32_t size_in_mb) ;
|
||||
/* peer has changed the state */
|
||||
virtual void notifyPeerStatusChanged(const std::string& peer_id, uint32_t state);
|
||||
/* one or more peers has changed the states */
|
||||
virtual void notifyPeerStatusChangedSummary();
|
||||
|
||||
virtual void notifyHistoryChanged(uint32_t msgId, int type);
|
||||
|
||||
virtual void notifyDiscInfoChanged() ;
|
||||
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);
|
||||
virtual bool GUI_askForPassword(const std::string& title, const std::string& key_details, bool prev_is_bad);
|
||||
virtual bool GUI_askForPluginConfirmation(const std::string& plugin_filename, const RsFileHash& plugin_file_hash,bool first_time);
|
||||
|
||||
/* Notify from GUI */
|
||||
void notifyChatFontChanged();
|
||||
void notifyChatStyleChanged(int /*ChatStyle::enumStyleType*/ styleType);
|
||||
|
||||
void testToasters(uint notifyFlags, /*RshareSettings::enumToasterPosition*/ int position, QPoint margin);
|
||||
void testToasters(RsNotifyPopupFlags notifyFlags, /*RshareSettings::enumToasterPosition*/ int position, QPoint margin);
|
||||
void testToaster(ToasterNotify *toasterNotify, /*RshareSettings::enumToasterPosition*/ int position, QPoint margin);
|
||||
void testToaster(QString tag, ToasterNotify *toasterNotify, /*RshareSettings::enumToasterPosition*/ int position, QPoint margin);
|
||||
|
||||
#ifdef TO_REMOVE
|
||||
void addToaster(uint notifyFlags, const std::string& id, const std::string& title, const std::string& msg);
|
||||
#endif
|
||||
void notifySettingsChanged();
|
||||
|
||||
signals:
|
||||
// It's beneficial to send info to the GUI using signals, because signals are thread-safe
|
||||
// as they get queued by Qt.
|
||||
//
|
||||
void hashingInfoChanged(const QString&) const ;
|
||||
void filesPreModChanged(bool) const ;
|
||||
void filesPostModChanged(bool) const ;
|
||||
void transfersChanged() const ;
|
||||
void friendsChanged() const ;
|
||||
void lobbyListChanged() const ;
|
||||
void chatLobbyEvent(qulonglong,int,const RsGxsId&,const QString&) ;
|
||||
void neighboursChanged() const ;
|
||||
void configChanged() const ;
|
||||
void logInfoChanged(const QString&) const ;
|
||||
void chatStatusChanged(const ChatId&,const QString&) const ;
|
||||
void chatCleared(const ChatId&) const ;
|
||||
void peerHasNewCustomStateString(const QString& /* peer_id */, const QString& /* status_string */) const ;
|
||||
void peerHasNewAvatar(const QString& peer_id) const ;
|
||||
void ownAvatarChanged() const ;
|
||||
void ownStatusMessageChanged() const ;
|
||||
void errorOccurred(int,int,const QString&) const ;
|
||||
void diskFull(int,int) const ;
|
||||
void peerStatusChanged(const QString& /* peer_id */, int /* status */);
|
||||
void peerStatusChangedSummary() const;
|
||||
void gxsChange(const RsGxsChanges& /* changes */);
|
||||
void chatMessageReceived(ChatMessage msg);
|
||||
void groupsChanged(int type) const ;
|
||||
void discInfoChanged() const ;
|
||||
void historyChanged(uint msgId, int type);
|
||||
void chatLobbyInviteReceived() ;
|
||||
void deferredSignatureHandlingRequested() ;
|
||||
void chatLobbyTimeShift(int time_shift) ;
|
||||
void connectionWithoutCert();
|
||||
|
||||
/* Notify from GUI */
|
||||
void chatFontChanged();
|
||||
|
|
@ -141,25 +90,24 @@ class NotifyQt: public QObject, public NotifyClient
|
|||
void disableAllChanged(bool disableAll) const;
|
||||
|
||||
public slots:
|
||||
void UpdateGUI(); /* called by timer */
|
||||
void SetDisableAll(bool bValue);
|
||||
|
||||
private slots:
|
||||
void runningTick();
|
||||
void handleSignatureEvent() ;
|
||||
void handleChatLobbyTimeShift(int) ;
|
||||
|
||||
private:
|
||||
NotifyQt();
|
||||
RsGUIEventManager();
|
||||
|
||||
static NotifyQt *_instance;
|
||||
static void displayDiskSpaceWarning(int loc,int size_limit_mb);
|
||||
static void displayErrorMessage(RsNotifySysFlags type,const QString& title,const QString& error_msg);
|
||||
|
||||
static RsGUIEventManager *_instance;
|
||||
static bool _disableAllToaster;
|
||||
|
||||
/* system notifications */
|
||||
|
||||
void startWaitingToasters();
|
||||
|
||||
// QMutex waitingToasterMutex; // for lock of the waiting toaster list
|
||||
QList<ToasterItem*> waitingToasterList;
|
||||
|
||||
QTimer *runningToasterTimer;
|
||||
|
|
@ -172,6 +120,11 @@ class NotifyQt: public QObject, public NotifyClient
|
|||
|
||||
/* so we can update windows */
|
||||
NetworkDialog *cDialog;
|
||||
|
||||
void async_handleIncomingEvent(std::shared_ptr<const RsEvent> e);
|
||||
void sync_handleIncomingEvent(std::shared_ptr<const RsEvent> e);
|
||||
|
||||
RsEventsHandlerId_t mEventHandlerId;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -35,9 +35,9 @@
|
|||
#include "gui/common/GroupFlagsWidget.h"
|
||||
#include "gui/common/GroupSelectionBox.h"
|
||||
#include "gui/common/GroupDefs.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "util/RsQtVersion.h"
|
||||
#include "util/misc.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
#include "gui/common/FilesDefs.h"
|
||||
|
||||
/* Images for context menu icons */
|
||||
|
|
@ -73,7 +73,21 @@ ShareManager::ShareManager()
|
|||
connect(ui.shareddirList, SIGNAL(cellDoubleClicked(int,int)), this, SLOT(doubleClickedCell(int,int)));
|
||||
connect(ui.shareddirList, SIGNAL(cellChanged(int,int)), this, SLOT(handleCellChange(int,int)));
|
||||
|
||||
connect(NotifyQt::getInstance(), SIGNAL(groupsChanged(int)), this, SLOT(reload()));
|
||||
mEventHandlerId = 0;
|
||||
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=]()
|
||||
{
|
||||
auto fe = dynamic_cast<const RsFriendListEvent*>(e.get());
|
||||
|
||||
if(!fe)
|
||||
return;
|
||||
|
||||
reload();
|
||||
}
|
||||
, this );
|
||||
}, mEventHandlerId, RsEventType::FRIEND_LIST );
|
||||
|
||||
QHeaderView* header = ui.shareddirList->horizontalHeader();
|
||||
QHeaderView_setSectionResizeModeColumn(header, COLUMN_PATH, QHeaderView::Stretch);
|
||||
|
|
@ -152,6 +166,7 @@ ShareManager::~ShareManager()
|
|||
{
|
||||
_instance = NULL;
|
||||
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId);
|
||||
Settings->saveWidgetInformation(this);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -77,6 +77,7 @@ private:
|
|||
Ui::ShareManager ui;
|
||||
|
||||
std::vector<SharedDirInfo> mDirInfos ;
|
||||
RsEventsHandlerId_t mEventHandlerId;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
#include "settings/rsharesettings.h"
|
||||
|
||||
#include "retroshare/rsinit.h"
|
||||
#include "retroshare/rsnotify.h"
|
||||
|
||||
#include <QLineEdit>
|
||||
#include <QMessageBox>
|
||||
|
|
@ -119,13 +118,11 @@ void StartDialog::loadPerson()
|
|||
RsPeerId accountId = RsPeerId((data.toString()).toStdString());
|
||||
|
||||
// Cache the passphrase, so that it is not asked again.
|
||||
rsNotify->cachePgpPassphrase(ui.password_input->text().toUtf8().constData()) ;
|
||||
rsNotify->setDisableAskPassword(true);
|
||||
RsLoginHelper::cachePgpPassphrase(ui.password_input->text().toUtf8().constData()) ;
|
||||
|
||||
bool res = RsApplication::loadCertificate(accountId, ui.autologin_checkbox->isChecked()) ;
|
||||
|
||||
rsNotify->setDisableAskPassword(false);
|
||||
rsNotify->clearPgpPassphrase();
|
||||
RsLoginHelper::clearPgpPassphrase();
|
||||
|
||||
if(res)
|
||||
accept();
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@
|
|||
#include "gui/SoundManager.h"
|
||||
|
||||
#include <retroshare/rsiface.h>
|
||||
#include <retroshare/rsnotify.h>
|
||||
#include <retroshare/rspeers.h>
|
||||
|
||||
static std::map<ChatId, ChatDialog*> chatDialogsList;
|
||||
|
|
@ -86,7 +85,7 @@ void ChatDialog::init(const ChatId &id, const QString &title)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/*static*/ ChatDialog* ChatDialog::getChat(ChatId id, uint chatflags)
|
||||
/*static*/ ChatDialog* ChatDialog::getChat(ChatId id, RsChatFlags chatflags)
|
||||
{
|
||||
if(id.isBroadcast() || id.isNotSet())
|
||||
return NULL; // broadcast is not handled by a chat dialog
|
||||
|
|
@ -97,9 +96,9 @@ void ChatDialog::init(const ChatId &id, const QString &title)
|
|||
if (cd == NULL) {
|
||||
|
||||
if(id.isDistantChatId())
|
||||
chatflags = RS_CHAT_OPEN | RS_CHAT_FOCUS; // force open for distant chat
|
||||
chatflags = RsChatFlags::RS_CHAT_OPEN | RsChatFlags::RS_CHAT_FOCUS; // force open for distant chat
|
||||
|
||||
if (chatflags & RS_CHAT_OPEN) {
|
||||
if (!!(chatflags & RsChatFlags::RS_CHAT_OPEN)) {
|
||||
if (id.isLobbyId()) {
|
||||
ChatLobbyDialog* cld = new ChatLobbyDialog(id.toLobbyId());
|
||||
cld->init(ChatId(), "");
|
||||
|
|
@ -176,7 +175,7 @@ void ChatDialog::init(const ChatId &id, const QString &title)
|
|||
// play sound when recv a message
|
||||
SoundManager::play(SOUND_NEW_CHAT_MESSAGE);
|
||||
|
||||
ChatDialog *cd = getChat(msg.chat_id, Settings->getChatFlags());
|
||||
ChatDialog *cd = getChat(msg.chat_id, (RsChatFlags)Settings->getChatFlags());
|
||||
if(cd)
|
||||
cd->addChatMsg(msg);
|
||||
else
|
||||
|
|
@ -185,7 +184,7 @@ void ChatDialog::init(const ChatId &id, const QString &title)
|
|||
|
||||
/*static*/ void ChatDialog::chatFriend(const ChatId &peerId, const bool forceFocus)
|
||||
{
|
||||
getChat(peerId, forceFocus ? RS_CHAT_OPEN | RS_CHAT_FOCUS : RS_CHAT_OPEN);
|
||||
getChat(peerId, forceFocus ? (RsChatFlags::RS_CHAT_OPEN | RsChatFlags::RS_CHAT_FOCUS) : RsChatFlags::RS_CHAT_OPEN);
|
||||
|
||||
// below is the old code witch does lots of error checking.
|
||||
// because there are many different chat types, there are also different ways to check if the id is valid
|
||||
|
|
@ -330,7 +329,7 @@ QString ChatDialog::getOwnName() const
|
|||
return "ChatDialog::getOwnName(): invalid id type passed (RsPeerId is required). This is a bug.";
|
||||
}
|
||||
|
||||
void ChatDialog::setPeerStatus(uint32_t status)
|
||||
void ChatDialog::setPeerStatus(RsStatusValue status)
|
||||
{
|
||||
ChatWidget *cw = getChatWidget();
|
||||
if (cw)
|
||||
|
|
@ -338,22 +337,17 @@ void ChatDialog::setPeerStatus(uint32_t status)
|
|||
// convert to virtual peer id
|
||||
// this is only required for private and distant chat,
|
||||
// because lobby and broadcast does not have a status
|
||||
RsPeerId vpid;
|
||||
if(mChatId.isPeerId())
|
||||
vpid = mChatId.toPeerId();
|
||||
if(mChatId.isDistantChatId())
|
||||
vpid = RsPeerId(mChatId.toDistantChatId());
|
||||
cw->updateStatus(QString::fromStdString(vpid.toStdString()), status);
|
||||
cw->updateStatus(mChatId, status);
|
||||
}
|
||||
}
|
||||
int ChatDialog::getPeerStatus()
|
||||
RsStatusValue ChatDialog::getPeerStatus()
|
||||
{
|
||||
ChatWidget *cw = getChatWidget();
|
||||
if (cw) {
|
||||
return cw->getPeerStatus();
|
||||
}
|
||||
|
||||
return 0;
|
||||
return RsStatusValue::RS_STATUS_OFFLINE;
|
||||
}
|
||||
|
||||
QString ChatDialog::getTitle()
|
||||
|
|
|
|||
|
|
@ -23,10 +23,13 @@
|
|||
#ifndef CHATDIALOG_H
|
||||
#define CHATDIALOG_H
|
||||
|
||||
#include "retroshare/rsstatus.h"
|
||||
|
||||
#include <QWidget>
|
||||
#include <retroshare/rsmsgs.h>
|
||||
|
||||
class ChatWidget;
|
||||
#include "gui/chat/ChatWidget.h"
|
||||
|
||||
class RSStyle;
|
||||
|
||||
class ChatDialog : public QWidget
|
||||
|
|
@ -35,14 +38,14 @@ class ChatDialog : public QWidget
|
|||
|
||||
public:
|
||||
static ChatDialog *getExistingChat(ChatId id);
|
||||
static ChatDialog *getChat(ChatId id, uint chatflags = 0);
|
||||
static ChatDialog *getChat(ChatId id, RsChatFlags chatflags = RsChatFlags::RS_CHAT_NONE);
|
||||
static void cleanupChat();
|
||||
static void chatFriend(const ChatId &peerId, bool forceFocus = true);
|
||||
static void chatFriend(const RsPgpId &gpgId, bool forceFocus = true);
|
||||
static void closeChat(const ChatId &chat_id);
|
||||
static void chatMessageReceived(ChatMessage msg);
|
||||
|
||||
virtual void showDialog(uint /*chatflags*/) {}
|
||||
virtual void showDialog(RsChatFlags /*chatflags*/) {}
|
||||
|
||||
virtual ChatWidget *getChatWidget() = 0;
|
||||
virtual bool hasPeerStatus() = 0;
|
||||
|
|
@ -58,8 +61,8 @@ public:
|
|||
bool setStyle();
|
||||
const RSStyle *getStyle();
|
||||
|
||||
int getPeerStatus();
|
||||
void setPeerStatus(uint32_t state);
|
||||
RsStatusValue getPeerStatus();
|
||||
void setPeerStatus(RsStatusValue state);
|
||||
|
||||
void focusDialog();
|
||||
|
||||
|
|
|
|||
|
|
@ -45,7 +45,6 @@
|
|||
#include "util/HandleRichText.h"
|
||||
#include "util/RsQtVersion.h"
|
||||
|
||||
#include "retroshare/rsnotify.h"
|
||||
#include "util/rstime.h"
|
||||
#include "util/DateTime.h"
|
||||
|
||||
|
|
@ -848,25 +847,26 @@ QString ChatLobbyDialog::getParticipantName(const RsGxsId& gxs_id) const
|
|||
}
|
||||
|
||||
|
||||
void ChatLobbyDialog::displayLobbyEvent(int event_type, const RsGxsId& gxs_id, const QString& str)
|
||||
void ChatLobbyDialog::handleLobbyEvent(RsChatLobbyEventCode event_type, const RsGxsId& gxs_id, const QString& str)
|
||||
{
|
||||
RsGxsId qsParticipant;
|
||||
|
||||
QString name= getParticipantName(gxs_id) ;
|
||||
|
||||
//std::cerr << "Received ChatLobby event " << (int)event_type << " for lobby " << (void*)lobbyId << std::endl;
|
||||
switch (event_type)
|
||||
{
|
||||
case RS_CHAT_LOBBY_EVENT_PEER_LEFT:
|
||||
case RsChatLobbyEventCode::CHAT_LOBBY_EVENT_PEER_LEFT:
|
||||
qsParticipant=gxs_id;
|
||||
ui.chatWidget->addChatMsg(true, tr("Chat room management"), QDateTime::currentDateTime(), QDateTime::currentDateTime(), tr("%1 has left the room.").arg(RsHtml::plainText(name)), ChatWidget::MSGTYPE_SYSTEM);
|
||||
emit peerLeft(id()) ;
|
||||
break;
|
||||
case RS_CHAT_LOBBY_EVENT_PEER_JOINED:
|
||||
case RsChatLobbyEventCode::CHAT_LOBBY_EVENT_PEER_JOINED:
|
||||
qsParticipant=gxs_id;
|
||||
ui.chatWidget->addChatMsg(true, tr("Chat room management"), QDateTime::currentDateTime(), QDateTime::currentDateTime(), tr("%1 joined the room.").arg(RsHtml::plainText(name)), ChatWidget::MSGTYPE_SYSTEM);
|
||||
emit peerJoined(id()) ;
|
||||
break;
|
||||
case RS_CHAT_LOBBY_EVENT_PEER_STATUS:
|
||||
case RsChatLobbyEventCode::CHAT_LOBBY_EVENT_PEER_STATUS:
|
||||
{
|
||||
|
||||
qsParticipant=gxs_id;
|
||||
|
|
@ -878,7 +878,7 @@ void ChatLobbyDialog::displayLobbyEvent(int event_type, const RsGxsId& gxs_id, c
|
|||
|
||||
}
|
||||
break;
|
||||
case RS_CHAT_LOBBY_EVENT_PEER_CHANGE_NICKNAME:
|
||||
case RsChatLobbyEventCode::CHAT_LOBBY_EVENT_PEER_CHANGE_NICKNAME:
|
||||
{
|
||||
qsParticipant=gxs_id;
|
||||
|
||||
|
|
@ -894,11 +894,11 @@ void ChatLobbyDialog::displayLobbyEvent(int event_type, const RsGxsId& gxs_id, c
|
|||
muteParticipant(RsGxsId(str.toStdString())) ;
|
||||
}
|
||||
break;
|
||||
case RS_CHAT_LOBBY_EVENT_KEEP_ALIVE:
|
||||
case RsChatLobbyEventCode::CHAT_LOBBY_EVENT_KEEP_ALIVE:
|
||||
//std::cerr << "Received keep alive packet from " << nickname.toStdString() << " in chat room " << getPeerId() << std::endl;
|
||||
break;
|
||||
default:
|
||||
std::cerr << "ChatLobbyDialog::displayLobbyEvent() Unhandled chat room event type " << event_type << std::endl;
|
||||
std::cerr << "ChatLobbyDialog::handledLobbyEvent() Unhandled chat room event type " << (int)event_type << std::endl;
|
||||
}
|
||||
|
||||
if (!qsParticipant.isNull())
|
||||
|
|
@ -929,9 +929,9 @@ bool ChatLobbyDialog::canClose()
|
|||
return false;
|
||||
}
|
||||
|
||||
void ChatLobbyDialog::showDialog(uint chatflags)
|
||||
void ChatLobbyDialog::showDialog(RsChatFlags chatflags)
|
||||
{
|
||||
if (chatflags & RS_CHAT_FOCUS)
|
||||
if (!!(chatflags & RsChatFlags::RS_CHAT_FOCUS))
|
||||
{
|
||||
if (isWindowed() && mPCWindow) {
|
||||
mPCWindow->showDialog(this, chatflags);
|
||||
|
|
@ -1019,5 +1019,5 @@ void ChatLobbyDialog::setWindowed(bool windowed)
|
|||
}
|
||||
show();
|
||||
if (chatLobbyPage)// If not defined, we are on autosubscribe loop of lobby widget constructor. So don't recall it.
|
||||
showDialog(RS_CHAT_FOCUS);
|
||||
showDialog(RsChatFlags::RS_CHAT_FOCUS);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,12 +42,12 @@ class ChatLobbyDialog: public ChatDialog
|
|||
friend class ChatDialog;
|
||||
|
||||
public:
|
||||
void displayLobbyEvent(int event_type, const RsGxsId &gxs_id, const QString& str);
|
||||
void handleLobbyEvent(RsChatLobbyEventCode event_type, const RsGxsId& gxs_id, const QString& str);
|
||||
|
||||
virtual void showDialog(uint chatflags);
|
||||
virtual ChatWidget *getChatWidget();
|
||||
virtual bool hasPeerStatus() { return false; }
|
||||
virtual bool notifyBlink();
|
||||
virtual void showDialog(RsChatFlags chatflags) override;
|
||||
virtual ChatWidget *getChatWidget() override;
|
||||
virtual bool hasPeerStatus() override{ return false; }
|
||||
virtual bool notifyBlink() override;
|
||||
void setIdentity(const RsGxsId& gxs_id);
|
||||
bool isParticipantMuted(const RsGxsId &participant);
|
||||
ChatLobbyId id() const { return lobbyId ;}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@
|
|||
|
||||
#include "gui/ChatLobbyWidget.h"
|
||||
#include "gui/MainWindow.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/SoundManager.h"
|
||||
#include "gui/settings/rsharesettings.h"
|
||||
#include "util/DateTime.h"
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@
|
|||
|
||||
#include "ChatStyle.h"
|
||||
#include "gui/settings/rsharesettings.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/RsGUIEventManager.h"
|
||||
#include "util/DateTime.h"
|
||||
#include "util/HandleRichText.h"
|
||||
|
||||
|
|
@ -130,7 +130,7 @@ ChatStyle::ChatStyle() : QObject()
|
|||
{
|
||||
m_styleType = TYPE_UNKNOWN;
|
||||
|
||||
connect(NotifyQt::getInstance(), SIGNAL(chatStyleChanged(int)), SLOT(styleChanged(int)));
|
||||
connect(RsGUIEventManager::getInstance(), SIGNAL(chatStyleChanged(int)), SLOT(styleChanged(int)));
|
||||
}
|
||||
|
||||
/* Destructor. */
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ void ChatTabWidget::tabInfoChanged(ChatDialog *dialog)
|
|||
}
|
||||
} else if (dialog->hasPeerStatus()) {
|
||||
setBlinking(tab, false);
|
||||
setTabIcon(tab, QIcon(StatusDefs::imageIM(dialog->getPeerStatus())));
|
||||
setTabIcon(tab, QIcon(StatusDefs::imageIM((RsStatusValue)dialog->getPeerStatus())));
|
||||
} else {
|
||||
setBlinking(tab, false);
|
||||
setTabIcon(tab, QIcon());
|
||||
|
|
@ -155,7 +155,7 @@ void ChatTabWidget::getInfo(bool &isTyping, bool &hasNewMessage, QIcon *icon)
|
|||
} else {
|
||||
cd = dynamic_cast<ChatDialog*>(currentWidget());
|
||||
if (cd && cd->hasPeerStatus()) {
|
||||
*icon = QIcon(StatusDefs::imageIM(cd->getPeerStatus()));
|
||||
*icon = QIcon(StatusDefs::imageIM((RsStatusValue)cd->getPeerStatus()));
|
||||
} else {
|
||||
*icon = QIcon();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,13 +22,12 @@
|
|||
|
||||
#include "gui/common/FilesDefs.h"
|
||||
#include "ChatUserNotify.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/MainWindow.h"
|
||||
#include "gui/chat/ChatDialog.h"
|
||||
#include "gui/settings/rsharesettings.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <retroshare/rsnotify.h>
|
||||
#include <retroshare/rsmsgs.h>
|
||||
|
||||
static std::map<ChatId, int> waitingChats;
|
||||
|
|
@ -57,8 +56,30 @@ static ChatUserNotify* instance = 0;
|
|||
ChatUserNotify::ChatUserNotify(QObject *parent) :
|
||||
UserNotify(parent)
|
||||
{
|
||||
connect(NotifyQt::getInstance(), SIGNAL(chatMessageReceived(ChatMessage)), this, SLOT(chatMessageReceived(ChatMessage)));
|
||||
instance = this;
|
||||
|
||||
mEventHandlerId = 0;
|
||||
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=]()
|
||||
{
|
||||
auto fe = dynamic_cast<const RsChatServiceEvent*>(e.get()); if(!fe) return;
|
||||
|
||||
if(!fe)
|
||||
return;
|
||||
|
||||
switch(fe->mEventCode)
|
||||
{
|
||||
case RsChatServiceEventCode::CHAT_MESSAGE_RECEIVED: chatMessageReceived(fe->mMsg); break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
, this );
|
||||
}, mEventHandlerId, RsEventType::CHAT_SERVICE );
|
||||
|
||||
}
|
||||
|
||||
ChatUserNotify::~ChatUserNotify()
|
||||
|
|
@ -108,7 +129,7 @@ void ChatUserNotify::iconClicked()
|
|||
{
|
||||
ChatDialog *chatDialog = NULL;
|
||||
// ChatWidget removes the waiting chat from the list with clearWaitingChat()
|
||||
chatDialog = ChatDialog::getChat(waitingChats.begin()->first, RS_CHAT_OPEN | RS_CHAT_FOCUS);
|
||||
chatDialog = ChatDialog::getChat(waitingChats.begin()->first, RsChatFlags::RS_CHAT_OPEN | RsChatFlags::RS_CHAT_FOCUS);
|
||||
|
||||
if (chatDialog == NULL) {
|
||||
MainWindow::showWindow(MainWindow::Friends);
|
||||
|
|
@ -120,7 +141,7 @@ void ChatUserNotify::chatMessageReceived(ChatMessage msg)
|
|||
{
|
||||
if(!msg.chat_id.isBroadcast()
|
||||
&&( ChatDialog::getExistingChat(msg.chat_id)
|
||||
|| (Settings->getChatFlags() & RS_CHAT_OPEN)
|
||||
|| (Settings->getChatFlags() & (uint32_t)RsChatFlags::RS_CHAT_OPEN)
|
||||
|| msg.chat_id.isDistantChatId()))
|
||||
{
|
||||
ChatDialog::chatMessageReceived(msg);
|
||||
|
|
|
|||
|
|
@ -42,11 +42,10 @@ public:
|
|||
|
||||
virtual bool hasSetting(QString *name, QString *group) override;
|
||||
|
||||
private slots:
|
||||
void chatMessageReceived(ChatMessage msg);
|
||||
|
||||
private:
|
||||
virtual QIcon getIcon() override;
|
||||
void chatMessageReceived(ChatMessage msg);
|
||||
|
||||
virtual QIcon getIcon() override;
|
||||
virtual QIcon getMainIcon(bool hasNew) override;
|
||||
virtual unsigned int getNewCount() override;
|
||||
|
||||
|
|
@ -54,6 +53,8 @@ private:
|
|||
virtual QString getNotifyMessage(bool plural) override;
|
||||
|
||||
virtual void iconClicked() override;
|
||||
|
||||
RsEventsHandlerId_t mEventHandlerId;
|
||||
};
|
||||
|
||||
#endif // CHATUSERNOTIFY_H
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@
|
|||
#include "ui_ChatWidget.h"
|
||||
|
||||
#include "gui/MainWindow.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/RetroShareLink.h"
|
||||
#include "gui/settings/rsharesettings.h"
|
||||
#include "gui/settings/rsettingswin.h"
|
||||
|
|
@ -33,11 +32,14 @@
|
|||
#include "gui/common/Emoticons.h"
|
||||
#include "gui/chat/ChatLobbyDialog.h"
|
||||
#include "gui/gxs/GxsIdDetails.h"
|
||||
#include "gui/RsGUIEventManager.h"
|
||||
#include "util/misc.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
#include "util/HandleRichText.h"
|
||||
#include "gui/chat/ChatUserNotify.h"//For BradCast
|
||||
#include "util/DateTime.h"
|
||||
#include "util/imageutil.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
#include "gui/im_history/ImHistoryBrowser.h"
|
||||
|
||||
#include <retroshare/rsstatus.h>
|
||||
|
|
@ -75,7 +77,7 @@
|
|||
|
||||
ChatWidget::ChatWidget(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, completionPosition(0), newMessages(false), typing(false), peerStatus(0)
|
||||
, completionPosition(0), newMessages(false), typing(false), peerStatus(RsStatusValue::RS_STATUS_OFFLINE)
|
||||
, sendingBlocked(false), useCMark(false)
|
||||
, lastStatusSendTime(0)
|
||||
, firstShow(true), inChatCharFormatChanged(false), firstSearch(true)
|
||||
|
|
@ -172,9 +174,32 @@ ChatWidget::ChatWidget(QWidget *parent)
|
|||
|
||||
connect(ui->hashBox, SIGNAL(fileHashingFinished(QList<HashedFile>)), this, SLOT(fileHashingFinished(QList<HashedFile>)));
|
||||
|
||||
connect(NotifyQt::getInstance(), SIGNAL(peerStatusChanged(const QString&, int)), this, SLOT(updateStatus(const QString&, int)));
|
||||
connect(NotifyQt::getInstance(), SIGNAL(peerHasNewCustomStateString(const QString&, const QString&)), this, SLOT(updatePeersCustomStateString(const QString&, const QString&)));
|
||||
connect(NotifyQt::getInstance(), SIGNAL(chatFontChanged()), this, SLOT(resetFonts()));
|
||||
mEventHandlerId_friends = 0;
|
||||
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=](){
|
||||
auto fe = dynamic_cast<const RsFriendListEvent*>(e.get());
|
||||
|
||||
if(!fe)
|
||||
return;
|
||||
|
||||
switch(fe->mEventCode)
|
||||
{
|
||||
case RsFriendListEventCode::NODE_STATUS_CHANGED: updateStatus(ChatId(fe->mSslId),fe->mStatus);
|
||||
break;
|
||||
|
||||
case RsFriendListEventCode::NODE_STATE_STRING_CHANGED: updatePeersCustomStateString(ChatId(fe->mSslId),QString::fromUtf8(fe->mStateString.c_str()));
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}, this );
|
||||
},mEventHandlerId_friends,RsEventType::FRIEND_LIST);
|
||||
|
||||
connect(RsGUIEventManager::getInstance(), SIGNAL(chatFontChanged()), this, SLOT(resetFonts()));
|
||||
|
||||
connect(ui->textBrowser, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextMenuTextBrowser(QPoint)));
|
||||
|
||||
|
|
@ -255,6 +280,7 @@ ChatWidget::ChatWidget(QWidget *parent)
|
|||
ChatWidget::~ChatWidget()
|
||||
{
|
||||
processSettings(false);
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId_friends);
|
||||
|
||||
/* Cleanup plugin functions */
|
||||
foreach (ChatWidgetHolder *chatWidgetHolder, mChatWidgetHolder) {
|
||||
|
|
@ -369,11 +395,11 @@ void ChatWidget::init(const ChatId &chat_id, const QString &title)
|
|||
StatusInfo peerStatusInfo;
|
||||
// No check of return value. Non existing status info is handled as offline.
|
||||
rsStatus->getStatus(chatId.toPeerId(), peerStatusInfo);
|
||||
updateStatus(QString::fromStdString(chatId.toPeerId().toStdString()), peerStatusInfo.status);
|
||||
updateStatus(chatId, peerStatusInfo.status);
|
||||
|
||||
// initialize first custom state string
|
||||
QString customStateString = QString::fromUtf8(rsMsgs->getCustomStateString(chatId.toPeerId()).c_str());
|
||||
updatePeersCustomStateString(QString::fromStdString(chatId.toPeerId().toStdString()), customStateString);
|
||||
updatePeersCustomStateString(chatId, customStateString);
|
||||
} else if (chatType() == CHATTYPE_DISTANT){
|
||||
hist_chat_type = RS_HISTORY_TYPE_DISTANT ;
|
||||
messageCount = Settings->getDistantChatHistoryCount();
|
||||
|
|
@ -1792,108 +1818,106 @@ void ChatWidget::setCurrentFileName(const QString &fileName)
|
|||
setWindowModified(false);
|
||||
}
|
||||
|
||||
void ChatWidget::updateStatus(const QString &peer_id, int status)
|
||||
void ChatWidget::updateStatus(const ChatId& cid, RsStatusValue status)
|
||||
{
|
||||
if (! (chatType() == CHATTYPE_PRIVATE || chatType() == CHATTYPE_DISTANT))
|
||||
{
|
||||
// updateTitle is used
|
||||
return;
|
||||
// updateTitle is used
|
||||
return;
|
||||
}
|
||||
|
||||
// make virtual peer id from gxs id in case of distant chat
|
||||
RsPeerId vpid;
|
||||
// // make virtual peer id from gxs id in case of distant chat
|
||||
// RsPeerId vpid;
|
||||
// if(chatId.isDistantChatId())
|
||||
// vpid = RsPeerId(chatId.toDistantChatId());
|
||||
// else
|
||||
// vpid = chatId.toPeerId();
|
||||
|
||||
/* set font size for status */
|
||||
if (!(cid == chatId))
|
||||
return;
|
||||
|
||||
// the peers status has changed
|
||||
|
||||
QString tooltip_info ;
|
||||
QString peerName ;
|
||||
|
||||
if(chatId.isDistantChatId())
|
||||
vpid = RsPeerId(chatId.toDistantChatId());
|
||||
else
|
||||
vpid = chatId.toPeerId();
|
||||
|
||||
/* set font size for status */
|
||||
if (peer_id.toStdString() == vpid.toStdString())
|
||||
{
|
||||
// the peers status has changed
|
||||
DistantChatPeerInfo dcpinfo ;
|
||||
RsIdentityDetails details ;
|
||||
|
||||
QString tooltip_info ;
|
||||
QString peerName ;
|
||||
if(rsMsgs->getDistantChatStatus(chatId.toDistantChatId(),dcpinfo))
|
||||
{
|
||||
if(rsIdentity->getIdDetails(dcpinfo.to_id,details))
|
||||
peerName = QString::fromUtf8( details.mNickname.c_str() ) ;
|
||||
else
|
||||
peerName = QString::fromStdString(dcpinfo.to_id.toStdString()) ;
|
||||
|
||||
if(chatId.isDistantChatId())
|
||||
{
|
||||
DistantChatPeerInfo dcpinfo ;
|
||||
RsIdentityDetails details ;
|
||||
|
||||
if(rsMsgs->getDistantChatStatus(chatId.toDistantChatId(),dcpinfo))
|
||||
{
|
||||
if(rsIdentity->getIdDetails(dcpinfo.to_id,details))
|
||||
peerName = QString::fromUtf8( details.mNickname.c_str() ) ;
|
||||
else
|
||||
peerName = QString::fromStdString(dcpinfo.to_id.toStdString()) ;
|
||||
|
||||
tooltip_info = QString("Identity Id: ")+QString::fromStdString(dcpinfo.to_id.toStdString());
|
||||
}
|
||||
else
|
||||
{
|
||||
peerName = QString::fromStdString(chatId.toDistantChatId().toStdString()) ;
|
||||
tooltip_info = QString("Identity Id: unknown (bug?)");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
peerName = QString::fromUtf8(rsPeers->getPeerName(chatId.toPeerId()).c_str());
|
||||
tooltip_info = QString("Peer Id: ") + QString::fromStdString(chatId.toPeerId().toStdString());
|
||||
}
|
||||
|
||||
// is scrollbar at the end?
|
||||
QScrollBar *scrollbar = ui->textBrowser->verticalScrollBar();
|
||||
bool atEnd = (scrollbar->value() == scrollbar->maximum());
|
||||
|
||||
switch (status) {
|
||||
case RS_STATUS_OFFLINE:
|
||||
ui->info_Frame->setVisible(true);
|
||||
ui->infoLabel->setText(peerName + " " + tr("appears to be Offline.") +"\n" + tr("Messages you send will be delivered after Friend is again Online."));
|
||||
break;
|
||||
|
||||
case RS_STATUS_INACTIVE:
|
||||
ui->info_Frame->setVisible(true);
|
||||
ui->infoLabel->setText(peerName + " " + tr("is Idle and may not reply"));
|
||||
break;
|
||||
|
||||
case RS_STATUS_ONLINE:
|
||||
ui->info_Frame->setVisible(false);
|
||||
break;
|
||||
|
||||
case RS_STATUS_AWAY:
|
||||
ui->infoLabel->setText(peerName + " " + tr("is Away and may not reply"));
|
||||
ui->info_Frame->setVisible(true);
|
||||
break;
|
||||
|
||||
case RS_STATUS_BUSY:
|
||||
ui->infoLabel->setText(peerName + " " + tr("is Busy and may not reply"));
|
||||
ui->info_Frame->setVisible(true);
|
||||
break;
|
||||
}
|
||||
|
||||
ui->titleLabel->setText(peerName);
|
||||
ui->titleLabel->setToolTip(tooltip_info);
|
||||
ui->statusLabel->setText(QString("(%1)").arg(StatusDefs::name(status)));
|
||||
|
||||
peerStatus = status;
|
||||
|
||||
if (atEnd) {
|
||||
// scroll to the end
|
||||
scrollbar->setValue(scrollbar->maximum());
|
||||
}
|
||||
|
||||
emit infoChanged(this);
|
||||
emit statusChanged(status);
|
||||
|
||||
// Notify all ChatWidgetHolder
|
||||
foreach (ChatWidgetHolder *chatWidgetHolder, mChatWidgetHolder) {
|
||||
chatWidgetHolder->updateStatus(status);
|
||||
}
|
||||
|
||||
return;
|
||||
tooltip_info = QString("Identity Id: ")+QString::fromStdString(dcpinfo.to_id.toStdString());
|
||||
}
|
||||
else
|
||||
{
|
||||
peerName = QString::fromStdString(chatId.toDistantChatId().toStdString()) ;
|
||||
tooltip_info = QString("Identity Id: unknown (bug?)");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
peerName = QString::fromUtf8(rsPeers->getPeerName(chatId.toPeerId()).c_str());
|
||||
tooltip_info = QString("Peer Id: ") + QString::fromStdString(chatId.toPeerId().toStdString());
|
||||
}
|
||||
|
||||
// ignore status change
|
||||
// is scrollbar at the end?
|
||||
QScrollBar *scrollbar = ui->textBrowser->verticalScrollBar();
|
||||
bool atEnd = (scrollbar->value() == scrollbar->maximum());
|
||||
|
||||
switch (status) {
|
||||
default:
|
||||
case RsStatusValue::RS_STATUS_OFFLINE:
|
||||
ui->info_Frame->setVisible(true);
|
||||
ui->infoLabel->setText(peerName + " " + tr("appears to be Offline.") +"\n" + tr("Messages you send will be delivered after Friend is again Online."));
|
||||
break;
|
||||
|
||||
case RsStatusValue::RS_STATUS_INACTIVE:
|
||||
ui->info_Frame->setVisible(true);
|
||||
ui->infoLabel->setText(peerName + " " + tr("is Idle and may not reply"));
|
||||
break;
|
||||
|
||||
case RsStatusValue::RS_STATUS_ONLINE:
|
||||
ui->info_Frame->setVisible(false);
|
||||
break;
|
||||
|
||||
case RsStatusValue::RS_STATUS_AWAY:
|
||||
ui->infoLabel->setText(peerName + " " + tr("is Away and may not reply"));
|
||||
ui->info_Frame->setVisible(true);
|
||||
break;
|
||||
|
||||
case RsStatusValue::RS_STATUS_BUSY:
|
||||
ui->infoLabel->setText(peerName + " " + tr("is Busy and may not reply"));
|
||||
ui->info_Frame->setVisible(true);
|
||||
break;
|
||||
}
|
||||
|
||||
ui->titleLabel->setText(peerName);
|
||||
ui->titleLabel->setToolTip(tooltip_info);
|
||||
#warning inconsistent conversion here
|
||||
ui->statusLabel->setText(QString("(%1)").arg(StatusDefs::name((RsStatusValue)status)));
|
||||
|
||||
peerStatus = status;
|
||||
|
||||
if (atEnd) {
|
||||
// scroll to the end
|
||||
scrollbar->setValue(scrollbar->maximum());
|
||||
}
|
||||
|
||||
emit infoChanged(this);
|
||||
emit statusChanged(status);
|
||||
|
||||
// Notify all ChatWidgetHolder
|
||||
foreach (ChatWidgetHolder *chatWidgetHolder, mChatWidgetHolder) {
|
||||
chatWidgetHolder->updateStatus(status);
|
||||
}
|
||||
}
|
||||
|
||||
void ChatWidget::updateTitle()
|
||||
|
|
@ -1906,7 +1930,7 @@ void ChatWidget::updateTitle()
|
|||
ui->titleLabel->setText(RsHtml::plainText(name) + "@" + RsHtml::plainText(title));
|
||||
}
|
||||
|
||||
void ChatWidget::updatePeersCustomStateString(const QString& peer_id, const QString& status_string)
|
||||
void ChatWidget::updatePeersCustomStateString(const ChatId& id, const QString& status_string)
|
||||
{
|
||||
if (chatType() != CHATTYPE_PRIVATE )
|
||||
{
|
||||
|
|
@ -1915,7 +1939,7 @@ void ChatWidget::updatePeersCustomStateString(const QString& peer_id, const QStr
|
|||
|
||||
QString status_text;
|
||||
|
||||
if (RsPeerId(peer_id.toStdString()) == chatId.toPeerId()) {
|
||||
if (id.toPeerId() == chatId.toPeerId()) {
|
||||
// the peers status string has changed
|
||||
if (status_string.isEmpty()) {
|
||||
ui->statusMessageLabel->hide();
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
|
||||
#include <retroshare/rsmsgs.h>
|
||||
#include <retroshare/rsfiles.h>
|
||||
#include <retroshare/rsstatus.h>
|
||||
|
||||
#include <QCompleter>
|
||||
#include <QTextCharFormat>
|
||||
|
|
@ -52,6 +53,17 @@ namespace Ui {
|
|||
class ChatWidget;
|
||||
}
|
||||
|
||||
enum class RsChatFlags: uint32_t {
|
||||
RS_CHAT_NONE = 0x0000,
|
||||
RS_CHAT_OPEN = 0x0001,
|
||||
RS_CHAT_FOCUS = 0x0004,
|
||||
RS_CHAT_TABBED_WINDOW = 0x0008,
|
||||
RS_CHAT_BLINK = 0x0010,
|
||||
};
|
||||
|
||||
RS_REGISTER_ENUM_FLAGS_TYPE(RsChatFlags);
|
||||
|
||||
|
||||
// a Container for the logic behind buttons in a PopupChatDialog
|
||||
// Plugins can implement this interface to provide their own buttons
|
||||
class ChatWidgetHolder
|
||||
|
|
@ -62,7 +74,7 @@ public:
|
|||
|
||||
// status comes from notifyPeerStatusChanged
|
||||
// see rststaus.h for possible values
|
||||
virtual void updateStatus(int /*status*/) {}
|
||||
virtual void updateStatus(RsStatusValue /*status*/) {}
|
||||
|
||||
protected:
|
||||
ChatWidget *mChatWidget;
|
||||
|
|
@ -105,7 +117,7 @@ public:
|
|||
void addToolsAction(QAction *action);
|
||||
|
||||
QString getTitle() { return title; }
|
||||
int getPeerStatus() { return peerStatus; }
|
||||
RsStatusValue getPeerStatus() { return peerStatus; }
|
||||
void setName(const QString &name);
|
||||
|
||||
bool setStyle();
|
||||
|
|
@ -130,7 +142,7 @@ public:
|
|||
const QList<ChatWidgetHolder*> &chatWidgetHolderList() { return mChatWidgetHolder; }
|
||||
|
||||
public slots:
|
||||
void updateStatus(const QString &peer_id, int status);
|
||||
void updateStatus(const ChatId &cid, RsStatusValue status);
|
||||
void setUseCMark(const bool bUseCMark);
|
||||
void updateCMPreview();
|
||||
|
||||
|
|
@ -144,7 +156,7 @@ private slots:
|
|||
signals:
|
||||
void infoChanged(ChatWidget*);
|
||||
void newMessage(ChatWidget*);
|
||||
void statusChanged(int);
|
||||
void statusChanged(RsStatusValue);
|
||||
void textBrowserAskContextMenu(QMenu* contextMnu, QString anchorForPosition, const QPoint point);
|
||||
|
||||
protected:
|
||||
|
|
@ -189,7 +201,7 @@ private slots:
|
|||
void updateLenOfChatTextEdit();
|
||||
void sendChat();
|
||||
|
||||
void updatePeersCustomStateString(const QString& peer_id, const QString& status_string) ;
|
||||
void updatePeersCustomStateString(const ChatId& id, const QString& status_string) ;
|
||||
|
||||
bool fileSave();
|
||||
bool fileSaveAs();
|
||||
|
|
@ -229,7 +241,7 @@ private:
|
|||
|
||||
bool newMessages;
|
||||
bool typing;
|
||||
int peerStatus;
|
||||
RsStatusValue peerStatus;
|
||||
|
||||
bool sendingBlocked;
|
||||
bool useCMark;
|
||||
|
|
@ -272,6 +284,9 @@ private:
|
|||
ChatLobbyUserNotify* notify;
|
||||
|
||||
Ui::ChatWidget *ui;
|
||||
|
||||
// RsEventsHandlerId_t mEventHandlerId_chat ;
|
||||
RsEventsHandlerId_t mEventHandlerId_friends ;
|
||||
};
|
||||
|
||||
#endif // CHATWIDGET_H
|
||||
|
|
|
|||
|
|
@ -26,12 +26,11 @@
|
|||
#include "gui/common/FilesDefs.h"
|
||||
#include "gui/settings/rsharesettings.h"
|
||||
#include "gui/settings/RsharePeerSettings.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "util/DateTime.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
|
||||
#include <retroshare/rspeers.h>
|
||||
#include <retroshare/rsiface.h>
|
||||
#include <retroshare/rsnotify.h>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
|
|
@ -50,7 +49,25 @@ PopupChatDialog::PopupChatDialog(QWidget *parent, Qt::WindowFlags flags)
|
|||
|
||||
connect(ui.avatarFrameButton, SIGNAL(toggled(bool)), this, SLOT(showAvatarFrame(bool)));
|
||||
connect(ui.actionClearOfflineMessages, SIGNAL(triggered()), this, SLOT(clearOfflineMessages()));
|
||||
connect(NotifyQt::getInstance(), SIGNAL(chatStatusChanged(ChatId,QString)), this, SLOT(chatStatusChanged(ChatId,QString)));
|
||||
|
||||
mEventHandlerId_chat =0;
|
||||
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=]()
|
||||
{
|
||||
auto fe = dynamic_cast<const RsChatServiceEvent*>(e.get()); if(!fe) return;
|
||||
|
||||
switch(fe->mEventCode)
|
||||
{
|
||||
case RsChatServiceEventCode::CHAT_STATUS_CHANGED: chatStatusChanged(fe->mCid,QString::fromUtf8(fe->mStr.c_str())); break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
, this );
|
||||
}, mEventHandlerId_chat, RsEventType::CHAT_SERVICE );
|
||||
}
|
||||
|
||||
void PopupChatDialog::init(const ChatId &chat_id, const QString &title)
|
||||
|
|
@ -81,6 +98,7 @@ void PopupChatDialog::init(const ChatId &chat_id, const QString &title)
|
|||
/** Destructor. */
|
||||
PopupChatDialog::~PopupChatDialog()
|
||||
{
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId_chat);
|
||||
// save settings
|
||||
processSettings(false);
|
||||
}
|
||||
|
|
@ -92,7 +110,7 @@ ChatWidget *PopupChatDialog::getChatWidget()
|
|||
|
||||
bool PopupChatDialog::notifyBlink()
|
||||
{
|
||||
return (Settings->getChatFlags() & RS_CHAT_BLINK);
|
||||
return (Settings->getChatFlags() & (uint32_t)RsChatFlags::RS_CHAT_BLINK);
|
||||
}
|
||||
|
||||
void PopupChatDialog::processSettings(bool load)
|
||||
|
|
@ -108,7 +126,7 @@ void PopupChatDialog::processSettings(bool load)
|
|||
Settings->endGroup();
|
||||
}
|
||||
|
||||
void PopupChatDialog::showDialog(uint chatflags)
|
||||
void PopupChatDialog::showDialog(RsChatFlags chatflags)
|
||||
{
|
||||
PopupChatWindow *window = WINDOW(this);
|
||||
if (window) {
|
||||
|
|
|
|||
|
|
@ -46,11 +46,11 @@ protected:
|
|||
/** Default destructor */
|
||||
virtual ~PopupChatDialog();
|
||||
|
||||
virtual void init(const ChatId &chat_id, const QString &title);
|
||||
virtual void showDialog(uint chatflags);
|
||||
virtual ChatWidget *getChatWidget();
|
||||
virtual bool hasPeerStatus() { return true; }
|
||||
virtual bool notifyBlink();
|
||||
virtual void init(const ChatId &chat_id, const QString &title) override;
|
||||
virtual void showDialog(RsChatFlags chatflags) override;
|
||||
virtual ChatWidget *getChatWidget() override;
|
||||
virtual bool hasPeerStatus() override{ return true; }
|
||||
virtual bool notifyBlink() override;
|
||||
|
||||
virtual void updateStatus(int /*status*/) {}
|
||||
|
||||
|
|
@ -65,6 +65,8 @@ protected:
|
|||
|
||||
/** Qt Designer generated object */
|
||||
Ui::PopupChatDialog ui;
|
||||
|
||||
RsEventsHandlerId_t mEventHandlerId_chat;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@
|
|||
|
||||
#include <retroshare/rsidentity.h>
|
||||
#include <retroshare/rsmsgs.h>
|
||||
#include <retroshare/rsnotify.h>
|
||||
|
||||
|
||||
#define IMAGE_TYPING ":/images/white-bubble-64.png"
|
||||
|
|
@ -49,7 +48,7 @@ static PopupChatWindow *instance = NULL;
|
|||
|
||||
/*static*/ PopupChatWindow *PopupChatWindow::getWindow(bool needSingleWindow)
|
||||
{
|
||||
if (needSingleWindow == false && (Settings->getChatFlags() & RS_CHAT_TABBED_WINDOW)) {
|
||||
if (needSingleWindow == false && (Settings->getChatFlags() & (uint32_t)RsChatFlags::RS_CHAT_TABBED_WINDOW)) {
|
||||
if (instance == NULL) {
|
||||
instance = new PopupChatWindow(true);
|
||||
}
|
||||
|
|
@ -162,7 +161,7 @@ void PopupChatWindow::showContextMenu(QPoint)
|
|||
}
|
||||
}
|
||||
|
||||
if (Settings->getChatFlags() & RS_CHAT_TABBED_WINDOW)
|
||||
if (Settings->getChatFlags() & (uint32_t)RsChatFlags::RS_CHAT_TABBED_WINDOW)
|
||||
{
|
||||
if(tabbedWindow)
|
||||
contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(":/images/tab-dock.png"),tr("Dock window"),this,SLOT(docTab()));
|
||||
|
|
@ -300,9 +299,9 @@ void PopupChatWindow::removeDialog(ChatDialog *dialog)
|
|||
}
|
||||
}
|
||||
|
||||
void PopupChatWindow::showDialog(ChatDialog *dialog, uint chatflags)
|
||||
void PopupChatWindow::showDialog(ChatDialog *dialog, RsChatFlags chatflags)
|
||||
{
|
||||
if (chatflags & RS_CHAT_FOCUS) {
|
||||
if (!!(chatflags & RsChatFlags::RS_CHAT_FOCUS)) {
|
||||
if (tabbedWindow) {
|
||||
ui.tabWidget->setCurrentWidget(dialog);
|
||||
}
|
||||
|
|
@ -352,7 +351,7 @@ void PopupChatWindow::calculateTitle(ChatDialog *dialog)
|
|||
icon = FilesDefs::getIconFromQtResourcePath(IMAGE_TYPING);
|
||||
} else if (hasNewMessages) {
|
||||
icon = FilesDefs::getIconFromQtResourcePath(IMAGE_CHAT);
|
||||
if (Settings->getChatFlags() & RS_CHAT_BLINK) {
|
||||
if (Settings->getChatFlags() & (uint32_t)RsChatFlags::RS_CHAT_BLINK) {
|
||||
mBlinkIcon = icon;
|
||||
} else {
|
||||
mBlinkIcon = QIcon();
|
||||
|
|
@ -360,7 +359,7 @@ void PopupChatWindow::calculateTitle(ChatDialog *dialog)
|
|||
} else {
|
||||
mBlinkIcon = QIcon();
|
||||
if (cd && cd->hasPeerStatus()) {
|
||||
icon = QIcon(StatusDefs::imageIM(cd->getPeerStatus()));
|
||||
icon = QIcon(StatusDefs::imageIM((RsStatusValue)cd->getPeerStatus()));
|
||||
} else {
|
||||
icon = qApp->windowIcon();
|
||||
}
|
||||
|
|
@ -371,7 +370,7 @@ void PopupChatWindow::calculateTitle(ChatDialog *dialog)
|
|||
if (cd) {
|
||||
QString title = cd->getTitle();
|
||||
if (cd->hasPeerStatus()) {
|
||||
title += " (" + StatusDefs::name(cd->getPeerStatus()) + ")";
|
||||
title += " (" + StatusDefs::name((RsStatusValue)cd->getPeerStatus()) + ")";
|
||||
}
|
||||
setWindowTitle(title);
|
||||
} else {
|
||||
|
|
@ -423,7 +422,7 @@ void PopupChatWindow::tabNewMessage(ChatDialog *dialog)
|
|||
|
||||
void PopupChatWindow::dockTab()
|
||||
{
|
||||
if ((Settings->getChatFlags() & RS_CHAT_TABBED_WINDOW) && chatDialog) {
|
||||
if ((Settings->getChatFlags() & (uint32_t)RsChatFlags::RS_CHAT_TABBED_WINDOW) && chatDialog) {
|
||||
PopupChatWindow *pcw = getWindow(false);
|
||||
if (pcw) {
|
||||
ChatDialog *pcd = chatDialog;
|
||||
|
|
|
|||
|
|
@ -27,6 +27,9 @@
|
|||
#include "ui_PopupChatWindow.h"
|
||||
#include <retroshare/rstypes.h>
|
||||
#include <retroshare/rsmsgs.h>
|
||||
|
||||
#include "gui/chat/ChatWidget.h"
|
||||
|
||||
Q_DECLARE_METATYPE(RsGxsId)
|
||||
Q_DECLARE_METATYPE(QList<RsGxsId>)
|
||||
|
||||
|
|
@ -43,7 +46,7 @@ public:
|
|||
public:
|
||||
void addDialog(ChatDialog *dialog);
|
||||
void removeDialog(ChatDialog *dialog);
|
||||
void showDialog(ChatDialog *dialog, uint chatflags);
|
||||
void showDialog(ChatDialog *dialog, RsChatFlags chatflags);
|
||||
void alertDialog(ChatDialog *dialog);
|
||||
void calculateTitle(ChatDialog *dialog);
|
||||
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@
|
|||
</action>
|
||||
<action name="actionDockTab">
|
||||
<property name="icon">
|
||||
<iconset resource="../images.qrc">
|
||||
<iconset>
|
||||
<normaloff>:/images/tab-dock.png</normaloff>:/images/tab-dock.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
|
|
@ -97,7 +97,7 @@
|
|||
</action>
|
||||
<action name="actionUndockTab">
|
||||
<property name="icon">
|
||||
<iconset resource="../images.qrc">
|
||||
<iconset>
|
||||
<normaloff>:/images/tab-undock.png</normaloff>:/images/tab-undock.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ void PopupDistantChatDialog::updateDisplay()
|
|||
getChatWidget()->blockSending(tr( "Can't send message immediately, "
|
||||
"because there is no tunnel "
|
||||
"available." ));
|
||||
setPeerStatus(RS_STATUS_OFFLINE);
|
||||
setPeerStatus(RsStatusValue::RS_STATUS_OFFLINE);
|
||||
break ;
|
||||
case RS_DISTANT_CHAT_STATUS_REMOTELY_CLOSED:
|
||||
std::cerr << "Chat remotely closed. " << std::endl;
|
||||
|
|
@ -131,7 +131,7 @@ void PopupDistantChatDialog::updateDisplay()
|
|||
getChatWidget()->updateStatusString("%1", tr( "Your partner closed the conversation." ), true );
|
||||
getChatWidget()->blockSending(tr( "Your partner closed the conversation."));
|
||||
|
||||
setPeerStatus(RS_STATUS_OFFLINE) ;
|
||||
setPeerStatus(RsStatusValue::RS_STATUS_OFFLINE) ;
|
||||
break ;
|
||||
|
||||
case RS_DISTANT_CHAT_STATUS_TUNNEL_DN:
|
||||
|
|
@ -145,7 +145,7 @@ void PopupDistantChatDialog::updateDisplay()
|
|||
_status_label->setToolTip(msg);
|
||||
getChatWidget()->updateStatusString("%1", msg, true);
|
||||
getChatWidget()->blockSending(msg);
|
||||
setPeerStatus(RS_STATUS_OFFLINE);
|
||||
setPeerStatus(RsStatusValue::RS_STATUS_OFFLINE);
|
||||
break;
|
||||
case RS_DISTANT_CHAT_STATUS_CAN_TALK:
|
||||
|
||||
|
|
@ -153,7 +153,7 @@ void PopupDistantChatDialog::updateDisplay()
|
|||
msg = QObject::tr( "End-to-end encrypted conversation established");
|
||||
_status_label->setToolTip(msg);
|
||||
getChatWidget()->unblockSending();
|
||||
setPeerStatus(RS_STATUS_ONLINE);
|
||||
setPeerStatus(RsStatusValue::RS_STATUS_ONLINE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,8 +25,8 @@
|
|||
#include <retroshare/rspeers.h>
|
||||
#include <retroshare/rsmsgs.h>
|
||||
|
||||
#include "gui/notifyqt.h"
|
||||
#include "util/misc.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
#include "gui/common/AvatarDefs.h"
|
||||
#include "gui/common/AvatarDialog.h"
|
||||
|
||||
|
|
@ -39,21 +39,44 @@
|
|||
|
||||
AvatarWidget::AvatarWidget(QWidget *parent) : QLabel(parent), ui(new Ui::AvatarWidget)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->setupUi(this);
|
||||
|
||||
mFlag.isOwnId = false;
|
||||
defaultAvatar = ":/images/no_avatar_background.png";
|
||||
mPeerState = RS_STATUS_OFFLINE ;
|
||||
mFlag.isOwnId = false;
|
||||
defaultAvatar = ":/images/no_avatar_background.png";
|
||||
mPeerState = RsStatusValue::RS_STATUS_OFFLINE ;
|
||||
|
||||
setFrameType(NO_FRAME);
|
||||
setFrameType(NO_FRAME);
|
||||
|
||||
mEventHandlerId = 0;
|
||||
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> event)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=](){
|
||||
|
||||
const RsFriendListEvent *e = dynamic_cast<const RsFriendListEvent*>(event.get());
|
||||
if(!e)
|
||||
return;
|
||||
|
||||
switch(e->mEventCode)
|
||||
{
|
||||
case RsFriendListEventCode::OWN_AVATAR_CHANGED:
|
||||
case RsFriendListEventCode::NODE_AVATAR_CHANGED: updateAvatar(QString::fromStdString(e->mSslId.toStdString()));
|
||||
break;
|
||||
case RsFriendListEventCode::OWN_STATUS_CHANGED:
|
||||
case RsFriendListEventCode::NODE_STATUS_CHANGED: updateStatus(QString::fromStdString(e->mSslId.toStdString()),e->mStatus);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}, this );
|
||||
}, mEventHandlerId, RsEventType::FRIEND_LIST );
|
||||
|
||||
/* connect signals */
|
||||
connect(NotifyQt::getInstance(), SIGNAL(peerHasNewAvatar(const QString&)), this, SLOT(updateAvatar(const QString&)));
|
||||
connect(NotifyQt::getInstance(), SIGNAL(ownAvatarChanged()), this, SLOT(updateOwnAvatar()));
|
||||
}
|
||||
|
||||
AvatarWidget::~AvatarWidget()
|
||||
{
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId);
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
|
@ -68,16 +91,18 @@ QString AvatarWidget::frameState()
|
|||
case STATUS_FRAME:
|
||||
switch (mPeerState)
|
||||
{
|
||||
case RS_STATUS_OFFLINE:
|
||||
case RsStatusValue::RS_STATUS_OFFLINE:
|
||||
return "OFFLINE";
|
||||
case RS_STATUS_INACTIVE:
|
||||
case RsStatusValue::RS_STATUS_INACTIVE:
|
||||
return "INACTIVE";
|
||||
case RS_STATUS_ONLINE:
|
||||
case RsStatusValue::RS_STATUS_ONLINE:
|
||||
return "ONLINE";
|
||||
case RS_STATUS_AWAY:
|
||||
case RsStatusValue::RS_STATUS_AWAY:
|
||||
return "AWAY";
|
||||
case RS_STATUS_BUSY:
|
||||
case RsStatusValue::RS_STATUS_BUSY:
|
||||
return "BUSY";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return "NOTHING";
|
||||
|
|
@ -107,18 +132,6 @@ void AvatarWidget::setFrameType(FrameType type)
|
|||
{
|
||||
mFrameType = type;
|
||||
|
||||
switch (mFrameType) {
|
||||
case NO_FRAME:
|
||||
disconnect(NotifyQt::getInstance(), SIGNAL(peerStatusChanged(QString,int)), this, SLOT(updateStatus(const QString&, int)));
|
||||
break;
|
||||
case NORMAL_FRAME:
|
||||
disconnect(NotifyQt::getInstance(), SIGNAL(peerStatusChanged(QString,int)), this, SLOT(updateStatus(const QString&, int)));
|
||||
break;
|
||||
case STATUS_FRAME:
|
||||
connect(NotifyQt::getInstance(), SIGNAL(peerStatusChanged(QString,int)), this, SLOT(updateStatus(const QString&, int)));
|
||||
break;
|
||||
}
|
||||
|
||||
//refreshAvatarImage();
|
||||
refreshStatus();
|
||||
RsApplication::refreshStyleSheet(this, false);
|
||||
|
|
@ -179,7 +192,7 @@ void AvatarWidget::refreshStatus()
|
|||
}
|
||||
case STATUS_FRAME:
|
||||
{
|
||||
uint32_t status = 0;
|
||||
RsStatusValue status = RsStatusValue::RS_STATUS_OFFLINE;
|
||||
|
||||
if (mId.isNotSet())
|
||||
return;
|
||||
|
|
@ -193,7 +206,7 @@ void AvatarWidget::refreshStatus()
|
|||
status = statusInfo.status ;
|
||||
}
|
||||
else if(mId.isDistantChatId())
|
||||
status = RS_STATUS_ONLINE ;
|
||||
status = RsStatusValue::RS_STATUS_ONLINE ;
|
||||
else
|
||||
{
|
||||
std::cerr << "Unhandled chat id type in AvatarWidget::refreshStatus()" << std::endl;
|
||||
|
|
@ -217,10 +230,10 @@ void AvatarWidget::refreshStatus()
|
|||
{
|
||||
switch (dcpinfo.status)
|
||||
{
|
||||
case RS_DISTANT_CHAT_STATUS_CAN_TALK : status = RS_STATUS_ONLINE ; break;
|
||||
case RS_DISTANT_CHAT_STATUS_CAN_TALK : status = RsStatusValue::RS_STATUS_ONLINE ; break;
|
||||
case RS_DISTANT_CHAT_STATUS_UNKNOWN : // Fall-through
|
||||
case RS_DISTANT_CHAT_STATUS_TUNNEL_DN : // Fall-through
|
||||
case RS_DISTANT_CHAT_STATUS_REMOTELY_CLOSED : status = RS_STATUS_OFFLINE;
|
||||
case RS_DISTANT_CHAT_STATUS_REMOTELY_CLOSED : status = RsStatusValue::RS_STATUS_OFFLINE;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -238,20 +251,20 @@ void AvatarWidget::refreshStatus()
|
|||
}
|
||||
}
|
||||
|
||||
void AvatarWidget::updateStatus(const QString& peerId, int status)
|
||||
void AvatarWidget::updateStatus(const QString& peerId, RsStatusValue status)
|
||||
{
|
||||
if (mId.isPeerId() && mId.toPeerId() == RsPeerId(peerId.toStdString()))
|
||||
updateStatus(status) ;
|
||||
}
|
||||
|
||||
void AvatarWidget::updateStatus(int status)
|
||||
void AvatarWidget::updateStatus(RsStatusValue status)
|
||||
{
|
||||
if (mFrameType != STATUS_FRAME)
|
||||
return;
|
||||
|
||||
mPeerState = status;
|
||||
|
||||
setEnabled(((uint32_t) status == RS_STATUS_OFFLINE) ? false : true);
|
||||
setEnabled((status == RsStatusValue::RS_STATUS_OFFLINE) ? false : true);
|
||||
RsApplication::refreshStyleSheet(this, false);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,9 @@
|
|||
#include <QLabel>
|
||||
#include <stdint.h>
|
||||
#include <retroshare/rstypes.h>
|
||||
#include <retroshare/rsevents.h>
|
||||
#include <retroshare/rsmsgs.h>
|
||||
#include <retroshare/rsstatus.h>
|
||||
|
||||
namespace Ui {
|
||||
class AvatarWidget;
|
||||
|
|
@ -57,14 +59,14 @@ protected:
|
|||
void mouseReleaseEvent(QMouseEvent *event);
|
||||
|
||||
private slots:
|
||||
void updateStatus(const QString& peerId, int status);
|
||||
void updateStatus(const QString& peerId, RsStatusValue status);
|
||||
void updateAvatar(const QString& peerId);
|
||||
void updateOwnAvatar();
|
||||
|
||||
private:
|
||||
void refreshAvatarImage() ;
|
||||
void refreshStatus();
|
||||
void updateStatus(int status);
|
||||
void updateStatus(RsStatusValue status);
|
||||
|
||||
QString defaultAvatar;
|
||||
Ui::AvatarWidget *ui;
|
||||
|
|
@ -77,7 +79,9 @@ private:
|
|||
// bool isGpg : 1;
|
||||
} mFlag;
|
||||
FrameType mFrameType;
|
||||
uint32_t mPeerState;
|
||||
RsStatusValue mPeerState;
|
||||
|
||||
RsEventsHandlerId_t mEventHandlerId;
|
||||
};
|
||||
|
||||
#endif // AVATARWIDGET_H
|
||||
|
|
|
|||
|
|
@ -458,7 +458,7 @@ QVariant RsFriendListModel::statusRole(const EntryIndex& fmpe,int /*column*/) co
|
|||
StatusInfo status;
|
||||
rsStatus->getStatus(node->node_info.id, status);
|
||||
|
||||
return QVariant(status.status);
|
||||
return QVariant((int)status.status);
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
|
|
@ -603,7 +603,7 @@ QVariant RsFriendListModel::onlineRole(const EntryIndex& e, int /*col*/) const
|
|||
|
||||
for(uint32_t i=0;i<prof.child_node_indices.size();++i)
|
||||
if(mLocations[prof.child_node_indices[i]].node_info.state & RS_PEER_STATE_CONNECTED)
|
||||
return QVariant(RS_STATUS_ONLINE);
|
||||
return QVariant((int)RsStatusValue::RS_STATUS_ONLINE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -616,7 +616,7 @@ QVariant RsFriendListModel::onlineRole(const EntryIndex& e, int /*col*/) const
|
|||
{
|
||||
for(uint32_t i=0;i<prof->child_node_indices.size();++i)
|
||||
if(mLocations[prof->child_node_indices[i]].node_info.state & RS_PEER_STATE_CONNECTED)
|
||||
return QVariant(RS_STATUS_ONLINE);
|
||||
return QVariant((int)RsStatusValue::RS_STATUS_ONLINE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
@ -626,12 +626,12 @@ QVariant RsFriendListModel::onlineRole(const EntryIndex& e, int /*col*/) const
|
|||
const HierarchicalNodeInformation *node = getNodeInfo(e);
|
||||
|
||||
if(node && bool(node->node_info.state & RS_PEER_STATE_CONNECTED))
|
||||
return QVariant(RS_STATUS_ONLINE);
|
||||
return QVariant((int)RsStatusValue::RS_STATUS_ONLINE);
|
||||
else
|
||||
return QVariant(RS_STATUS_OFFLINE);
|
||||
return QVariant((int)RsStatusValue::RS_STATUS_OFFLINE);
|
||||
}
|
||||
}
|
||||
return QVariant(RS_STATUS_OFFLINE);
|
||||
return QVariant((int)RsStatusValue::RS_STATUS_OFFLINE);
|
||||
}
|
||||
|
||||
QVariant RsFriendListModel::fontRole(const EntryIndex& e, int col) const
|
||||
|
|
@ -640,14 +640,14 @@ QVariant RsFriendListModel::fontRole(const EntryIndex& e, int col) const
|
|||
std::cerr << " font role " << e.type << ", (" << (int)e.group_index << ","<< (int)e.profile_index << ","<< (int)e.node_index << ") col="<< col<<": " << std::endl;
|
||||
#endif
|
||||
|
||||
int status = onlineRole(e,col).toInt();
|
||||
auto status = RsStatusValue(onlineRole(e,col).toInt());
|
||||
|
||||
switch (status)
|
||||
{
|
||||
case RS_STATUS_AWAY:
|
||||
case RS_STATUS_BUSY:
|
||||
case RS_STATUS_ONLINE:
|
||||
case RS_STATUS_INACTIVE:
|
||||
case RsStatusValue::RS_STATUS_AWAY:
|
||||
case RsStatusValue::RS_STATUS_BUSY:
|
||||
case RsStatusValue::RS_STATUS_ONLINE:
|
||||
case RsStatusValue::RS_STATUS_INACTIVE:
|
||||
{
|
||||
QFont font ;
|
||||
QTreeView* myParent = dynamic_cast<QTreeView*>(QAbstractItemModel::parent());
|
||||
|
|
@ -781,7 +781,7 @@ QVariant RsFriendListModel::displayRole(const EntryIndex& e, int col) const
|
|||
else
|
||||
{
|
||||
return QVariant(QString::fromUtf8(node->node_info.location.c_str())+"\n"
|
||||
+ "(" + StatusDefs::name(statusRole(e,col).toInt()) + ")");
|
||||
+ "(" + StatusDefs::name(RsStatusValue(statusRole(e,col).toInt())) + ")");
|
||||
}
|
||||
else
|
||||
return QVariant(QString::fromUtf8(node->node_info.location.c_str()));
|
||||
|
|
@ -900,10 +900,10 @@ bool RsFriendListModel::getPeerOnlineStatus(const EntryIndex& e) const
|
|||
return (noded && (noded->node_info.state & RS_PEER_STATE_CONNECTED));
|
||||
}
|
||||
|
||||
const RsFriendListModel::HierarchicalNodeInformation *RsFriendListModel::getBestNodeInformation(const HierarchicalProfileInformation *profileInfo, uint32_t *status) const
|
||||
const RsFriendListModel::HierarchicalNodeInformation *RsFriendListModel::getBestNodeInformation(const HierarchicalProfileInformation *profileInfo, RsStatusValue *status) const
|
||||
{
|
||||
if (status) {
|
||||
*status = RS_STATUS_OFFLINE;
|
||||
*status = RsStatusValue::RS_STATUS_OFFLINE;
|
||||
}
|
||||
|
||||
if (!profileInfo) {
|
||||
|
|
@ -921,28 +921,28 @@ const RsFriendListModel::HierarchicalNodeInformation *RsFriendListModel::getBest
|
|||
|
||||
int statusIndex = 0;
|
||||
switch (statusInfo.status) {
|
||||
case RS_STATUS_OFFLINE:
|
||||
case RsStatusValue::RS_STATUS_OFFLINE:
|
||||
statusIndex = 1;
|
||||
break;
|
||||
|
||||
case RS_STATUS_INACTIVE:
|
||||
case RsStatusValue::RS_STATUS_INACTIVE:
|
||||
statusIndex = 2;
|
||||
break;
|
||||
|
||||
case RS_STATUS_AWAY:
|
||||
case RsStatusValue::RS_STATUS_AWAY:
|
||||
statusIndex = 3;
|
||||
break;
|
||||
|
||||
case RS_STATUS_BUSY:
|
||||
case RsStatusValue::RS_STATUS_BUSY:
|
||||
statusIndex = 4;
|
||||
break;
|
||||
|
||||
case RS_STATUS_ONLINE:
|
||||
case RsStatusValue::RS_STATUS_ONLINE:
|
||||
statusIndex = 5;
|
||||
break;
|
||||
|
||||
default:
|
||||
std::cerr << "FriendListModel: Unknown status " << statusInfo.status << std::endl;
|
||||
std::cerr << "FriendListModel: Unknown status " << (int)statusInfo.status << std::endl;
|
||||
}
|
||||
|
||||
if (bestStatusIndex == 0 || statusIndex > bestStatusIndex) {
|
||||
|
|
@ -999,7 +999,7 @@ QVariant RsFriendListModel::decorationRole(const EntryIndex& entry,int col) cons
|
|||
QPixmap sslAvatar;
|
||||
bool foundAvatar = false;
|
||||
const HierarchicalProfileInformation *hn = getProfileInfo(entry);
|
||||
uint32_t status = RS_STATUS_OFFLINE;
|
||||
RsStatusValue status = RsStatusValue::RS_STATUS_OFFLINE;
|
||||
const HierarchicalNodeInformation *bestNodeInformation = NULL;
|
||||
|
||||
if (mDisplayStatusIcon) {
|
||||
|
|
@ -1049,7 +1049,7 @@ QVariant RsFriendListModel::decorationRole(const EntryIndex& entry,int col) cons
|
|||
QPixmap sslAvatar;
|
||||
AvatarDefs::getAvatarFromSslId(RsPeerId(hn->node_info.id.toStdString()), sslAvatar);
|
||||
if (mDisplayStatusIcon) {
|
||||
QPixmap sslOverlayIcon = FilesDefs::getPixmapFromQtResourcePath(StatusDefs::imageStatus(statusRole(entry, col).toInt()));
|
||||
QPixmap sslOverlayIcon = FilesDefs::getPixmapFromQtResourcePath(StatusDefs::imageStatus(RsStatusValue(statusRole(entry, col).toInt())));
|
||||
return QVariant(QIcon(createAvatar(sslAvatar, sslOverlayIcon)));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ public:
|
|||
|
||||
/* Color definitions (for standard see default.qss) */
|
||||
QColor mTextColorGroup;
|
||||
QColor mTextColorStatus[RS_STATUS_COUNT];
|
||||
QColor mTextColorStatus[(int)RsStatusValue::RS_STATUS_COUNT];
|
||||
|
||||
private:
|
||||
const HierarchicalGroupInformation *getGroupInfo (const EntryIndex&) const;
|
||||
|
|
@ -223,7 +223,7 @@ private:
|
|||
|
||||
uint32_t updateFilterStatus(ForumModelIndex i,int column,const QStringList& strings);
|
||||
|
||||
const HierarchicalNodeInformation *getBestNodeInformation(const HierarchicalProfileInformation *profileInfo, uint32_t *status = NULL) const;
|
||||
const HierarchicalNodeInformation *getBestNodeInformation(const HierarchicalProfileInformation *profileInfo, RsStatusValue *status = NULL) const;
|
||||
|
||||
QStringList mFilterStrings;
|
||||
FilterType mFilterType;
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
#include "ui_FriendSelectionWidget.h"
|
||||
#include "gui/gxs/GxsIdDetails.h"
|
||||
#include <retroshare-gui/RsAutoUpdatePage.h>
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/common/RSTreeWidgetItem.h"
|
||||
#include "gui/common/StatusDefs.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
|
|
@ -101,9 +100,6 @@ FriendSelectionWidget::FriendSelectionWidget(QWidget *parent)
|
|||
connect(ui->friendList, SIGNAL(itemSelectionChanged()), this, SIGNAL(itemSelectionChanged()));
|
||||
connect(ui->filterLineEdit, SIGNAL(textChanged(QString)), this, SLOT(filterItems(QString)));
|
||||
|
||||
connect(NotifyQt::getInstance(), SIGNAL(groupsChanged(int)), this, SLOT(groupsChanged(int)));
|
||||
connect(NotifyQt::getInstance(), SIGNAL(peerStatusChanged(const QString&,int)), this, SLOT(peerStatusChanged(const QString&,int)));
|
||||
|
||||
mCompareRole = new RSTreeWidgetItemCompareRole;
|
||||
mActionSortByState = new QAction(tr("Sort by state"), this);
|
||||
mActionSortByState->setCheckable(true);
|
||||
|
|
@ -134,7 +130,7 @@ FriendSelectionWidget::FriendSelectionWidget(QWidget *parent)
|
|||
RsQThreadUtils::postToObject( [this,event]() { handleEvent_main_thread(event); }) ;}, mEventHandlerId_identities, RsEventType::GXS_IDENTITY );
|
||||
mEventHandlerId_peers = 0;
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> event) {
|
||||
RsQThreadUtils::postToObject( [this,event]() { handleEvent_main_thread(event); }) ;}, mEventHandlerId_peers, RsEventType::PEER_CONNECTION );
|
||||
RsQThreadUtils::postToObject( [this,event]() { handleEvent_main_thread(event); }) ;}, mEventHandlerId_peers, RsEventType::FRIEND_LIST );
|
||||
|
||||
mFontSizeHandler.registerFontSize(ui->friendList);
|
||||
}
|
||||
|
|
@ -149,17 +145,31 @@ void FriendSelectionWidget::handleEvent_main_thread(std::shared_ptr<const RsEven
|
|||
update(); // Qt flush
|
||||
return;
|
||||
}
|
||||
const RsConnectionEvent *fp = dynamic_cast<const RsConnectionEvent*>(event.get());
|
||||
const RsFriendListEvent *fp = dynamic_cast<const RsFriendListEvent*>(event.get());
|
||||
|
||||
if(fp)
|
||||
switch(fp->mConnectionInfoCode)
|
||||
switch(fp->mEventCode)
|
||||
{
|
||||
case RsConnectionEventCode::PEER_REMOVED:
|
||||
case RsConnectionEventCode::PEER_ADDED:
|
||||
case RsFriendListEventCode::NODE_REMOVED:
|
||||
case RsFriendListEventCode::NODE_ADDED:
|
||||
updateDisplay(true);
|
||||
update(); // Qt flush
|
||||
break;
|
||||
default: break ;
|
||||
case RsFriendListEventCode::GROUP_ADDED:
|
||||
case RsFriendListEventCode::GROUP_REMOVED:
|
||||
case RsFriendListEventCode::GROUP_CHANGED:
|
||||
groupsChanged();
|
||||
break;
|
||||
|
||||
case RsFriendListEventCode::NODE_STATUS_CHANGED:
|
||||
{
|
||||
StatusInfo i;
|
||||
rsStatus->getStatus(fp->mSslId,i);
|
||||
|
||||
peerStatusChanged(fp->mSslId,i.status);
|
||||
}
|
||||
default:
|
||||
break ;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -241,7 +251,7 @@ static void initSslItem(QTreeWidgetItem *item, const RsPeerDetails &detail, cons
|
|||
QString name = PeerDefs::nameWithLocation(detail);
|
||||
item->setText(COLUMN_NAME, name);
|
||||
|
||||
int state = RS_STATUS_OFFLINE;
|
||||
RsStatusValue state = RsStatusValue::RS_STATUS_OFFLINE;
|
||||
if (detail.state & RS_PEER_STATE_CONNECTED) {
|
||||
std::list<StatusInfo>::const_iterator it;
|
||||
for (it = statusInfo.begin(); it != statusInfo.end() ; ++it) {
|
||||
|
|
@ -252,7 +262,7 @@ static void initSslItem(QTreeWidgetItem *item, const RsPeerDetails &detail, cons
|
|||
}
|
||||
}
|
||||
|
||||
if (state != (int) RS_STATUS_OFFLINE) {
|
||||
if (state != RsStatusValue::RS_STATUS_OFFLINE) {
|
||||
item->setData(COLUMN_NAME, Qt::ForegroundRole, textColorOnline);
|
||||
}
|
||||
|
||||
|
|
@ -262,7 +272,7 @@ static void initSslItem(QTreeWidgetItem *item, const RsPeerDetails &detail, cons
|
|||
item->setData(COLUMN_NAME, ROLE_SORT_GROUP, 1);
|
||||
item->setData(COLUMN_NAME, ROLE_SORT_STANDARD_GROUP, 0);
|
||||
item->setData(COLUMN_NAME, ROLE_SORT_NAME, name);
|
||||
item->setData(COLUMN_NAME, ROLE_SORT_STATE, state);
|
||||
item->setData(COLUMN_NAME, ROLE_SORT_STATE, (int)state);
|
||||
}
|
||||
|
||||
void FriendSelectionWidget::fillList()
|
||||
|
|
@ -501,17 +511,17 @@ void FriendSelectionWidget::secured_fillList()
|
|||
sslIds.clear();
|
||||
rsPeers->getAssociatedSSLIds(*gpgIt, sslIds);
|
||||
|
||||
int state = RS_STATUS_OFFLINE;
|
||||
RsStatusValue state = RsStatusValue::RS_STATUS_OFFLINE;
|
||||
for (statusIt = statusInfo.begin(); statusIt != statusInfo.end() ; ++statusIt) {
|
||||
if (std::find(sslIds.begin(), sslIds.end(), statusIt->id) != sslIds.end()) {
|
||||
if (statusIt->status != RS_STATUS_OFFLINE) {
|
||||
state = RS_STATUS_ONLINE;
|
||||
if (statusIt->status != RsStatusValue::RS_STATUS_OFFLINE) {
|
||||
state = RsStatusValue::RS_STATUS_ONLINE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (state != (int) RS_STATUS_OFFLINE) {
|
||||
if (state != RsStatusValue::RS_STATUS_OFFLINE) {
|
||||
gpgItem->setData(COLUMN_NAME, Qt::ForegroundRole, textColorOnline());
|
||||
}
|
||||
|
||||
|
|
@ -522,7 +532,7 @@ void FriendSelectionWidget::secured_fillList()
|
|||
gpgItem->setData(COLUMN_NAME, ROLE_SORT_GROUP, 1);
|
||||
gpgItem->setData(COLUMN_NAME, ROLE_SORT_STANDARD_GROUP, 0);
|
||||
gpgItem->setData(COLUMN_NAME, ROLE_SORT_NAME, name);
|
||||
gpgItem->setData(COLUMN_NAME, ROLE_SORT_STATE, state);
|
||||
gpgItem->setData(COLUMN_NAME, ROLE_SORT_STATE, (int)state);
|
||||
|
||||
if (mListModus == MODUS_CHECK) {
|
||||
gpgItem->setCheckState(0, Qt::Unchecked);
|
||||
|
|
@ -770,23 +780,20 @@ template<> inline void FriendSelectionWidget::setSelectedIds<RsGxsId,FriendSelec
|
|||
loadIdentities();
|
||||
}
|
||||
|
||||
void FriendSelectionWidget::groupsChanged(int /*type*/)
|
||||
void FriendSelectionWidget::groupsChanged()
|
||||
{
|
||||
if (mShowTypes & SHOW_GROUP) {
|
||||
fillList();
|
||||
}
|
||||
}
|
||||
|
||||
void FriendSelectionWidget::peerStatusChanged(const QString& peerId, int status)
|
||||
void FriendSelectionWidget::peerStatusChanged(const RsPeerId& peerid, RsStatusValue status)
|
||||
{
|
||||
if(!isVisible())
|
||||
return ;
|
||||
if(RsAutoUpdatePage::eventsLocked())
|
||||
return ;
|
||||
|
||||
RsPeerId peerid(peerId.toStdString()) ;
|
||||
QString gpgId;
|
||||
int gpgStatus = RS_STATUS_OFFLINE;
|
||||
RsStatusValue gpgStatus = RsStatusValue::RS_STATUS_OFFLINE;
|
||||
|
||||
if (mShowTypes & (SHOW_GPG | SHOW_NON_FRIEND_GPG)) {
|
||||
/* need gpg id and online state */
|
||||
|
|
@ -795,7 +802,7 @@ void FriendSelectionWidget::peerStatusChanged(const QString& peerId, int status)
|
|||
{
|
||||
gpgId = QString::fromStdString(detail.gpg_id.toStdString());
|
||||
|
||||
if (status == (int) RS_STATUS_OFFLINE) {
|
||||
if (status == RsStatusValue::RS_STATUS_OFFLINE) {
|
||||
/* try other nodes */
|
||||
std::list<RsPeerId> sslIds;
|
||||
rsPeers->getAssociatedSSLIds(detail.gpg_id, sslIds);
|
||||
|
|
@ -806,15 +813,15 @@ void FriendSelectionWidget::peerStatusChanged(const QString& peerId, int status)
|
|||
|
||||
for (statusIt = statusInfo.begin(); statusIt != statusInfo.end() ; ++statusIt) {
|
||||
if (std::find(sslIds.begin(), sslIds.end(), statusIt->id) != sslIds.end()) {
|
||||
if (statusIt->status != RS_STATUS_OFFLINE) {
|
||||
gpgStatus = RS_STATUS_ONLINE;
|
||||
if (statusIt->status != RsStatusValue::RS_STATUS_OFFLINE) {
|
||||
gpgStatus = RsStatusValue::RS_STATUS_ONLINE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* one node is online */
|
||||
gpgStatus = RS_STATUS_ONLINE;
|
||||
gpgStatus = RsStatusValue::RS_STATUS_ONLINE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -834,7 +841,7 @@ void FriendSelectionWidget::peerStatusChanged(const QString& peerId, int status)
|
|||
case IDTYPE_GPG:
|
||||
{
|
||||
if (item->data(COLUMN_DATA, ROLE_ID).toString() == gpgId) {
|
||||
if (status != (int) RS_STATUS_OFFLINE) {
|
||||
if (status != RsStatusValue::RS_STATUS_OFFLINE) {
|
||||
item->setData(COLUMN_NAME, Qt::ForegroundRole, textColorOnline());
|
||||
} else {
|
||||
item->setData(COLUMN_NAME, Qt::ForegroundRole, QVariant());
|
||||
|
|
@ -842,7 +849,7 @@ void FriendSelectionWidget::peerStatusChanged(const QString& peerId, int status)
|
|||
|
||||
item->setIcon(COLUMN_NAME, FilesDefs::getIconFromQtResourcePath(StatusDefs::imageUser(gpgStatus)));
|
||||
|
||||
item->setData(COLUMN_NAME, ROLE_SORT_STATE, gpgStatus);
|
||||
item->setData(COLUMN_NAME, ROLE_SORT_STATE, (int)gpgStatus);
|
||||
|
||||
bFoundGPG = true;
|
||||
}
|
||||
|
|
@ -850,8 +857,9 @@ void FriendSelectionWidget::peerStatusChanged(const QString& peerId, int status)
|
|||
break;
|
||||
case IDTYPE_SSL:
|
||||
{
|
||||
if (item->data(COLUMN_DATA, ROLE_ID).toString() == peerId) {
|
||||
if (status != (int) RS_STATUS_OFFLINE) {
|
||||
if (RsPeerId(item->data(COLUMN_DATA, ROLE_ID).toString().toStdString()) == peerid)
|
||||
{
|
||||
if (status != RsStatusValue::RS_STATUS_OFFLINE) {
|
||||
item->setData(COLUMN_NAME, Qt::ForegroundRole, textColorOnline());
|
||||
} else {
|
||||
item->setData(COLUMN_NAME, Qt::ForegroundRole, QVariant());
|
||||
|
|
@ -859,7 +867,7 @@ void FriendSelectionWidget::peerStatusChanged(const QString& peerId, int status)
|
|||
|
||||
item->setIcon(COLUMN_NAME, FilesDefs::getIconFromQtResourcePath(StatusDefs::imageUser(status)));
|
||||
|
||||
item->setData(COLUMN_NAME, ROLE_SORT_STATE, status);
|
||||
item->setData(COLUMN_NAME, ROLE_SORT_STATE, (int)status);
|
||||
|
||||
bFoundSSL = true;
|
||||
}
|
||||
|
|
@ -1262,7 +1270,7 @@ bool FriendSelectionWidget::isSortByState()
|
|||
|
||||
void FriendSelectionWidget::filterConnected(bool filter)
|
||||
{
|
||||
ui->friendList->filterMinValItems(COLUMN_NAME, filter ? RS_STATUS_AWAY : RS_STATUS_OFFLINE, ROLE_SORT_STATE);
|
||||
ui->friendList->filterMinValItems(COLUMN_NAME, filter ? double(RsStatusValue::RS_STATUS_AWAY) : double(RsStatusValue::RS_STATUS_OFFLINE), ROLE_SORT_STATE);
|
||||
|
||||
mActionFilterConnected->setChecked(filter);
|
||||
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
#include <QDialog>
|
||||
|
||||
#include "retroshare/rsevents.h"
|
||||
#include "retroshare/rsstatus.h"
|
||||
#include <gui/gxs/RsGxsUpdateBroadcastPage.h>
|
||||
#include "util/FontSizeHandler.h"
|
||||
|
||||
|
|
@ -137,8 +138,7 @@ public slots:
|
|||
void filterConnected(bool filter);
|
||||
|
||||
private slots:
|
||||
void groupsChanged(int type);
|
||||
void peerStatusChanged(const QString& peerId, int status);
|
||||
void peerStatusChanged(const RsPeerId &peerid, RsStatusValue status);
|
||||
void filterItems(const QString &text);
|
||||
void contextMenuRequested(const QPoint &pos);
|
||||
void itemDoubleClicked(QTreeWidgetItem *item, int column);
|
||||
|
|
@ -147,7 +147,8 @@ private slots:
|
|||
void deselectAll() ;
|
||||
|
||||
private:
|
||||
void fillList();
|
||||
void groupsChanged();
|
||||
void fillList();
|
||||
void secured_fillList();
|
||||
|
||||
void selectedIds_internal(IdType idType, std::set<std::string> &ids, bool onlyDirectSelected);
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
#include <retroshare/rspeers.h>
|
||||
#include "GroupSelectionBox.h"
|
||||
#include "GroupDefs.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
|
|
@ -34,11 +34,38 @@ GroupSelectionBox::GroupSelectionBox(QWidget *parent)
|
|||
{
|
||||
setSelectionMode(QAbstractItemView::SingleSelection);
|
||||
|
||||
connect(NotifyQt::getInstance(), SIGNAL(groupsChanged(int)), this, SLOT(fillGroups()));
|
||||
mEventHandlerId = 0;
|
||||
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=]()
|
||||
{
|
||||
auto fe = dynamic_cast<const RsFriendListEvent*>(e.get());
|
||||
|
||||
if(!fe)
|
||||
return;
|
||||
|
||||
switch(fe->mEventCode)
|
||||
{
|
||||
case RsFriendListEventCode::GROUP_ADDED:
|
||||
case RsFriendListEventCode::GROUP_REMOVED:
|
||||
case RsFriendListEventCode::GROUP_CHANGED: fillGroups();
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
, this );
|
||||
}, mEventHandlerId, RsEventType::FRIEND_LIST );
|
||||
|
||||
// Fill with available groups
|
||||
fillGroups();
|
||||
}
|
||||
|
||||
GroupSelectionBox::~GroupSelectionBox()
|
||||
{
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId);
|
||||
}
|
||||
void GroupSelectionBox::fillGroups()
|
||||
{
|
||||
std::list<RsNodeGroupId> selectedIds;
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
#include <QListWidget>
|
||||
#include <QDialog>
|
||||
#include <retroshare/rsids.h>
|
||||
#include <retroshare/rsevents.h>
|
||||
|
||||
class GroupSelectionBox: public QListWidget
|
||||
{
|
||||
|
|
@ -28,6 +29,7 @@ class GroupSelectionBox: public QListWidget
|
|||
|
||||
public:
|
||||
GroupSelectionBox(QWidget *parent);
|
||||
virtual ~GroupSelectionBox();
|
||||
|
||||
static void selectGroups(const std::list<RsNodeGroupId>& default_groups) ;
|
||||
|
||||
|
|
@ -38,6 +40,9 @@ public:
|
|||
|
||||
private slots:
|
||||
void fillGroups();
|
||||
|
||||
private:
|
||||
RsEventsHandlerId_t mEventHandlerId ;
|
||||
};
|
||||
|
||||
class GroupSelectionDialog: public QDialog
|
||||
|
|
|
|||
|
|
@ -259,7 +259,7 @@ void HashBox::checkAttachmentReady()
|
|||
emit fileHashingFinished(hashedFiles);
|
||||
|
||||
auto ev = std::make_shared<RsSharedDirectoriesEvent>();
|
||||
ev->mEventCode = RsSharedDirectoriesEventCode::DIRECTORY_SWEEP_ENDED;
|
||||
ev->mEventCode = RsSharedDirectoriesEventCode::HASHING_PROCESS_FINISHED;
|
||||
if(rsEvents)
|
||||
rsEvents->postEvent(ev);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,7 +54,6 @@
|
|||
#include "gui/chat/ChatUserNotify.h"
|
||||
#include "gui/connect/ConnectProgressDialog.h"
|
||||
#include "gui/common/ElidedLabel.h"
|
||||
#include "gui/notifyqt.h"
|
||||
|
||||
#include "NewFriendList.h"
|
||||
#include "ui_NewFriendList.h"
|
||||
|
|
@ -132,8 +131,8 @@ public:
|
|||
if(is_group_1 ^ is_group_2) // if the two are different, put the group first.
|
||||
return is_group_1 ;
|
||||
|
||||
bool online1 = (left .data(RsFriendListModel::OnlineRole).toInt() != RS_STATUS_OFFLINE);
|
||||
bool online2 = (right.data(RsFriendListModel::OnlineRole).toInt() != RS_STATUS_OFFLINE);
|
||||
bool online1 = (left .data(RsFriendListModel::OnlineRole).toInt() != (int)RsStatusValue::RS_STATUS_OFFLINE);
|
||||
bool online2 = (right.data(RsFriendListModel::OnlineRole).toInt() != (int)RsStatusValue::RS_STATUS_OFFLINE);
|
||||
|
||||
if((online1 != online2) && m_sortByState)
|
||||
return (m_header->sortIndicatorOrder()==Qt::AscendingOrder)?online1:online2 ; // always put online nodes first
|
||||
|
|
@ -155,7 +154,7 @@ public:
|
|||
|
||||
// Filter offline friends
|
||||
|
||||
if(!m_showOfflineNodes && (index.data(RsFriendListModel::OnlineRole).toInt() == RS_STATUS_OFFLINE))
|
||||
if(!m_showOfflineNodes && (RsStatusValue(index.data(RsFriendListModel::OnlineRole).toInt()) == RsStatusValue::RS_STATUS_OFFLINE))
|
||||
return false;
|
||||
|
||||
return index.data(RsFriendListModel::FilterRole).toString() == RsFriendListModel::FilterString ;
|
||||
|
|
@ -195,17 +194,14 @@ NewFriendList::NewFriendList(QWidget */*parent*/) : /* RsAutoUpdatePage(5000,par
|
|||
ui->filterLineEdit->setPlaceholderText(tr("Search")) ;
|
||||
ui->filterLineEdit->showFilterIcon();
|
||||
|
||||
// mEventHandlerId_pssc=0; // forces initialization
|
||||
mEventHandlerId_peer=0; // forces initialization
|
||||
mEventHandlerId_gssp=0; // forces initialization
|
||||
mEventHandlerId_pssc=0; // forces initialization
|
||||
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e) { handleEvent(e); }, mEventHandlerId_pssc, RsEventType::PEER_STATE_CHANGED );
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e) { handleEvent(e); }, mEventHandlerId_peer, RsEventType::PEER_CONNECTION );
|
||||
// rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e) { handleEvent(e); }, mEventHandlerId_pssc, RsEventType::PEER_STATE_CHANGED );
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e) { handleEvent(e); }, mEventHandlerId_peer, RsEventType::FRIEND_LIST );
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e) { handleEvent(e); }, mEventHandlerId_gssp, RsEventType::GOSSIP_DISCOVERY );
|
||||
|
||||
connect(NotifyQt::getInstance(), SIGNAL(peerHasNewAvatar(QString)), this, SLOT(forceUpdateDisplay()));
|
||||
connect(NotifyQt::getInstance(), SIGNAL(peerStatusChanged(QString,int)), this, SLOT(forceUpdateDisplay()));
|
||||
|
||||
mModel = new RsFriendListModel(ui->peerTreeWidget);
|
||||
mProxyModel = new FriendListSortFilterProxyModel(ui->peerTreeWidget->header(),this);
|
||||
|
||||
|
|
@ -293,7 +289,7 @@ NewFriendList::~NewFriendList()
|
|||
{
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId_peer);
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId_gssp);
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId_pssc);
|
||||
// rsEvents->unregisterEventsHandler(mEventHandlerId_pssc);
|
||||
|
||||
delete mModel;
|
||||
delete mProxyModel;
|
||||
|
|
|
|||
|
|
@ -66,18 +66,18 @@ public:
|
|||
//void updateDisplay() override;
|
||||
|
||||
QColor textColorGroup() const { return mModel->mTextColorGroup; }
|
||||
QColor textColorStatusOffline() const { return mModel->mTextColorStatus[RS_STATUS_OFFLINE ]; }
|
||||
QColor textColorStatusAway() const { return mModel->mTextColorStatus[RS_STATUS_AWAY ]; }
|
||||
QColor textColorStatusBusy() const { return mModel->mTextColorStatus[RS_STATUS_BUSY ]; }
|
||||
QColor textColorStatusOnline() const { return mModel->mTextColorStatus[RS_STATUS_ONLINE ]; }
|
||||
QColor textColorStatusInactive() const { return mModel->mTextColorStatus[RS_STATUS_INACTIVE]; }
|
||||
QColor textColorStatusOffline() const { return mModel->mTextColorStatus[(uint8_t)RsStatusValue::RS_STATUS_OFFLINE ]; }
|
||||
QColor textColorStatusAway() const { return mModel->mTextColorStatus[(uint8_t)RsStatusValue::RS_STATUS_AWAY ]; }
|
||||
QColor textColorStatusBusy() const { return mModel->mTextColorStatus[(uint8_t)RsStatusValue::RS_STATUS_BUSY ]; }
|
||||
QColor textColorStatusOnline() const { return mModel->mTextColorStatus[(uint8_t)RsStatusValue::RS_STATUS_ONLINE ]; }
|
||||
QColor textColorStatusInactive() const { return mModel->mTextColorStatus[(uint8_t)RsStatusValue::RS_STATUS_INACTIVE]; }
|
||||
|
||||
void setTextColorGroup(QColor color) { mModel->mTextColorGroup = color; }
|
||||
void setTextColorStatusOffline(QColor color) { mModel->mTextColorStatus[RS_STATUS_OFFLINE ] = color; }
|
||||
void setTextColorStatusAway(QColor color) { mModel->mTextColorStatus[RS_STATUS_AWAY ] = color; }
|
||||
void setTextColorStatusBusy(QColor color) { mModel->mTextColorStatus[RS_STATUS_BUSY ] = color; }
|
||||
void setTextColorStatusOnline(QColor color) { mModel->mTextColorStatus[RS_STATUS_ONLINE ] = color; }
|
||||
void setTextColorStatusInactive(QColor color) { mModel->mTextColorStatus[RS_STATUS_INACTIVE] = color; }
|
||||
void setTextColorStatusOffline(QColor color) { mModel->mTextColorStatus[(uint8_t)RsStatusValue::RS_STATUS_OFFLINE ] = color; }
|
||||
void setTextColorStatusAway(QColor color) { mModel->mTextColorStatus[(uint8_t)RsStatusValue::RS_STATUS_AWAY ] = color; }
|
||||
void setTextColorStatusBusy(QColor color) { mModel->mTextColorStatus[(uint8_t)RsStatusValue::RS_STATUS_BUSY ] = color; }
|
||||
void setTextColorStatusOnline(QColor color) { mModel->mTextColorStatus[(uint8_t)RsStatusValue::RS_STATUS_ONLINE ] = color; }
|
||||
void setTextColorStatusInactive(QColor color) { mModel->mTextColorStatus[(uint8_t)RsStatusValue::RS_STATUS_INACTIVE] = color; }
|
||||
|
||||
public slots:
|
||||
void filterItems(const QString &text);
|
||||
|
|
@ -127,7 +127,7 @@ private:
|
|||
bool mShowState;
|
||||
RsEventsHandlerId_t mEventHandlerId_peer;
|
||||
RsEventsHandlerId_t mEventHandlerId_gssp;
|
||||
RsEventsHandlerId_t mEventHandlerId_pssc;
|
||||
// RsEventsHandlerId_t mEventHandlerId_pssc;
|
||||
|
||||
std::set<RsNodeGroupId> openGroups;
|
||||
std::set<RsPgpId> openPeers;
|
||||
|
|
|
|||
|
|
@ -24,118 +24,124 @@
|
|||
|
||||
#include "StatusDefs.h"
|
||||
|
||||
QString StatusDefs::name(unsigned int status)
|
||||
QString StatusDefs::name(RsStatusValue status)
|
||||
{
|
||||
switch (status) {
|
||||
case RS_STATUS_OFFLINE:
|
||||
default:
|
||||
case RsStatusValue::RS_STATUS_OFFLINE:
|
||||
return qApp->translate("StatusDefs", "Offline");
|
||||
case RS_STATUS_AWAY:
|
||||
case RsStatusValue::RS_STATUS_AWAY:
|
||||
return qApp->translate("StatusDefs", "Away");
|
||||
case RS_STATUS_BUSY:
|
||||
case RsStatusValue::RS_STATUS_BUSY:
|
||||
return qApp->translate("StatusDefs", "Busy");
|
||||
case RS_STATUS_ONLINE:
|
||||
case RsStatusValue::RS_STATUS_ONLINE:
|
||||
return qApp->translate("StatusDefs", "Online");
|
||||
case RS_STATUS_INACTIVE:
|
||||
case RsStatusValue::RS_STATUS_INACTIVE:
|
||||
return qApp->translate("StatusDefs", "Idle");
|
||||
}
|
||||
|
||||
std::cerr << "StatusDefs::name: Unknown status requested " << status;
|
||||
RsErr() << "StatusDefs::name: Unknown status requested " << (int)status;
|
||||
return "";
|
||||
}
|
||||
|
||||
const char *StatusDefs::imageIM(unsigned int status)
|
||||
const char *StatusDefs::imageIM(RsStatusValue status)
|
||||
{
|
||||
switch (status) {
|
||||
case RS_STATUS_OFFLINE:
|
||||
default:
|
||||
case RsStatusValue::RS_STATUS_OFFLINE:
|
||||
return ":/images/im-user-offline.png";
|
||||
case RS_STATUS_AWAY:
|
||||
case RsStatusValue::RS_STATUS_AWAY:
|
||||
return ":/images/im-user-away.png";
|
||||
case RS_STATUS_BUSY:
|
||||
case RsStatusValue::RS_STATUS_BUSY:
|
||||
return ":/images/im-user-busy.png";
|
||||
case RS_STATUS_ONLINE:
|
||||
case RsStatusValue::RS_STATUS_ONLINE:
|
||||
return ":/images/im-user.png";
|
||||
case RS_STATUS_INACTIVE:
|
||||
case RsStatusValue::RS_STATUS_INACTIVE:
|
||||
return ":/images/im-user-inactive.png";
|
||||
}
|
||||
|
||||
std::cerr << "StatusDefs::imageIM: Unknown status requested " << status;
|
||||
RsErr() << "StatusDefs::imageIM: Unknown status requested " << (int)status;
|
||||
return "";
|
||||
}
|
||||
|
||||
const char *StatusDefs::imageUser(unsigned int status)
|
||||
const char *StatusDefs::imageUser(RsStatusValue status)
|
||||
{
|
||||
switch (status) {
|
||||
case RS_STATUS_OFFLINE:
|
||||
default:
|
||||
case RsStatusValue::RS_STATUS_OFFLINE:
|
||||
return ":/images/user/identityoffline24.png";
|
||||
case RS_STATUS_AWAY:
|
||||
case RsStatusValue::RS_STATUS_AWAY:
|
||||
return ":/images/user/identity24away.png";
|
||||
case RS_STATUS_BUSY:
|
||||
case RsStatusValue::RS_STATUS_BUSY:
|
||||
return ":/images/user/identity24busy.png";
|
||||
case RS_STATUS_ONLINE:
|
||||
case RsStatusValue::RS_STATUS_ONLINE:
|
||||
return ":/images/user/identity24.png";
|
||||
case RS_STATUS_INACTIVE:
|
||||
case RsStatusValue::RS_STATUS_INACTIVE:
|
||||
return ":/images/user/identity24idle.png";
|
||||
}
|
||||
|
||||
std::cerr << "StatusDefs::imageUser: Unknown status requested " << status;
|
||||
RsErr() << "StatusDefs::imageUser: Unknown status requested " << (int)status;
|
||||
return "";
|
||||
}
|
||||
|
||||
const char *StatusDefs::imageStatus(unsigned int status)
|
||||
const char *StatusDefs::imageStatus(RsStatusValue status)
|
||||
{
|
||||
switch (status) {
|
||||
case RS_STATUS_OFFLINE:
|
||||
default:
|
||||
case RsStatusValue::RS_STATUS_OFFLINE:
|
||||
return ":/icons/user-offline_64.png";
|
||||
case RS_STATUS_AWAY:
|
||||
case RsStatusValue::RS_STATUS_AWAY:
|
||||
return ":/icons/user-away_64.png";
|
||||
case RS_STATUS_BUSY:
|
||||
case RsStatusValue::RS_STATUS_BUSY:
|
||||
return ":/icons/user-busy_64.png";
|
||||
case RS_STATUS_ONLINE:
|
||||
case RsStatusValue::RS_STATUS_ONLINE:
|
||||
return ":/icons/user-online_64.png";
|
||||
case RS_STATUS_INACTIVE:
|
||||
case RsStatusValue::RS_STATUS_INACTIVE:
|
||||
return ":/icons/user-away-extended_64.png";
|
||||
}
|
||||
|
||||
std::cerr << "StatusDefs::imageUser: Unknown status requested " << status;
|
||||
RsErr() << "StatusDefs::imageUser: Unknown status requested " << (int)status;
|
||||
return "";
|
||||
}
|
||||
|
||||
QString StatusDefs::tooltip(unsigned int status)
|
||||
QString StatusDefs::tooltip(RsStatusValue status)
|
||||
{
|
||||
switch (status) {
|
||||
case RS_STATUS_OFFLINE:
|
||||
default:
|
||||
case RsStatusValue::RS_STATUS_OFFLINE:
|
||||
return qApp->translate("StatusDefs", "Friend is offline");
|
||||
case RS_STATUS_AWAY:
|
||||
case RsStatusValue::RS_STATUS_AWAY:
|
||||
return qApp->translate("StatusDefs", "Friend is away");
|
||||
case RS_STATUS_BUSY:
|
||||
case RsStatusValue::RS_STATUS_BUSY:
|
||||
return qApp->translate("StatusDefs", "Friend is busy");
|
||||
case RS_STATUS_ONLINE:
|
||||
case RsStatusValue::RS_STATUS_ONLINE:
|
||||
return qApp->translate("StatusDefs", "Friend is online");
|
||||
case RS_STATUS_INACTIVE:
|
||||
case RsStatusValue::RS_STATUS_INACTIVE:
|
||||
return qApp->translate("StatusDefs", "Friend is idle");
|
||||
}
|
||||
|
||||
std::cerr << "StatusDefs::tooltip: Unknown status requested " << status;
|
||||
RsErr() << "StatusDefs::tooltip: Unknown status requested " << (int)status;
|
||||
return "";
|
||||
}
|
||||
|
||||
QFont StatusDefs::font(unsigned int status)
|
||||
QFont StatusDefs::font(RsStatusValue status)
|
||||
{
|
||||
QFont font;
|
||||
|
||||
switch (status) {
|
||||
case RS_STATUS_AWAY:
|
||||
case RS_STATUS_BUSY:
|
||||
case RS_STATUS_ONLINE:
|
||||
case RS_STATUS_INACTIVE:
|
||||
default:
|
||||
case RsStatusValue::RS_STATUS_AWAY:
|
||||
case RsStatusValue::RS_STATUS_BUSY:
|
||||
case RsStatusValue::RS_STATUS_ONLINE:
|
||||
case RsStatusValue::RS_STATUS_INACTIVE:
|
||||
font.setBold(true);
|
||||
return font;
|
||||
case RS_STATUS_OFFLINE:
|
||||
case RsStatusValue::RS_STATUS_OFFLINE:
|
||||
font.setBold(false);
|
||||
return font;
|
||||
}
|
||||
|
||||
std::cerr << "StatusDefs::font: Unknown status requested " << status;
|
||||
RsErr() << "StatusDefs::font: Unknown status requested " << (int)status;
|
||||
return font;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,18 +24,20 @@
|
|||
#include <QColor>
|
||||
#include <QFont>
|
||||
|
||||
#include "retroshare/rsstatus.h"
|
||||
|
||||
struct RsPeerDetails;
|
||||
|
||||
class StatusDefs
|
||||
{
|
||||
public:
|
||||
static QString name(unsigned int status);
|
||||
static const char* imageIM(unsigned int status);
|
||||
static const char* imageUser(unsigned int status);
|
||||
static const char* imageStatus(unsigned int status);
|
||||
static QString tooltip(unsigned int status);
|
||||
static QString name(RsStatusValue status);
|
||||
static const char* imageIM(RsStatusValue status);
|
||||
static const char* imageUser(RsStatusValue status);
|
||||
static const char* imageStatus(RsStatusValue status);
|
||||
static QString tooltip(RsStatusValue status);
|
||||
|
||||
static QFont font(unsigned int status);
|
||||
static QFont font(RsStatusValue status);
|
||||
|
||||
static QString peerStateString(int peerState);
|
||||
static QString connectStateString(RsPeerDetails &details);
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
#include <retroshare/rspeers.h>
|
||||
#include <retroshare/rsdisc.h>
|
||||
#include <retroshare/rsmsgs.h>
|
||||
#include <retroshare/rsiface.h>
|
||||
|
||||
#include <retroshare-gui/mainpage.h>
|
||||
|
||||
|
|
@ -38,7 +39,6 @@
|
|||
#include "gui/common/PeerDefs.h"
|
||||
#include "gui/common/StatusDefs.h"
|
||||
#include "gui/RetroShareLink.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/common/AvatarDefs.h"
|
||||
#include "gui/common/FilesDefs.h"
|
||||
#include "gui/MainWindow.h"
|
||||
|
|
|
|||
|
|
@ -41,11 +41,11 @@
|
|||
#include "ui_ConnectFriendWizard.h"
|
||||
#include "gui/common/PeerDefs.h"
|
||||
#include "gui/connect/ConfCertDialog.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/common/GroupDefs.h"
|
||||
#include "gui/msgs/MessageComposer.h"
|
||||
|
||||
#include <retroshare/rsiface.h>
|
||||
#include <retroshare/rsinit.h>
|
||||
#include <retroshare/rsbanlist.h>
|
||||
#include <retroshare/rsconfig.h>
|
||||
|
||||
|
|
@ -767,7 +767,7 @@ void ConnectFriendWizard::accept()
|
|||
bool cancelled;
|
||||
std::string pgp_password;
|
||||
|
||||
if(!NotifyQt::getInstance()->askForPassword(tr("Profile password needed.").toStdString(), pgp_name + " (" + rsPeers->getOwnId().toStdString() + ")", prev_is_bad, pgp_password,cancelled))
|
||||
if(!RsLoginHelper::askForPassword(tr("Profile password needed.").toStdString(), pgp_name + " (" + rsPeers->getOwnId().toStdString() + ")", prev_is_bad, pgp_password,cancelled))
|
||||
{
|
||||
QMessageBox::critical(NULL,tr("Identity creation failed"),tr("Cannot create an identity linked to your profile without your profile password."));
|
||||
return;
|
||||
|
|
@ -855,7 +855,12 @@ void ConnectFriendWizard::accept()
|
|||
ConnectProgressDialog::showProgress(ssl_id);
|
||||
}
|
||||
|
||||
NotifyQt::getInstance()->notifyListChange(NOTIFY_LIST_NEIGHBOURS,1) ;
|
||||
auto ev = std::make_shared<RsFriendListEvent>();
|
||||
ev->mEventCode = RsFriendListEventCode::NODE_ADDED;
|
||||
ev->mSslId = peerDetails.id;
|
||||
ev->mPgpId = peerDetails.gpg_id;
|
||||
rsEvents->postEvent(ev);
|
||||
|
||||
QDialog::accept();
|
||||
}
|
||||
|
||||
|
|
@ -968,190 +973,6 @@ void ConnectFriendWizard::openCert()
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef TO_BE_REMOVED
|
||||
//========================== CertificatePage =================================
|
||||
|
||||
void ConnectFriendWizard::loadFriendCert()
|
||||
{
|
||||
QString fileName ;
|
||||
if(!misc::getOpenFileName(this, RshareSettings::LASTDIR_CERT, tr("Select Certificate"), tr("RetroShare Certificate (*.rsc );;All Files (*)"),fileName))
|
||||
return ;
|
||||
|
||||
if (!fileName.isNull()) {
|
||||
ui->friendFileNameEdit->setText(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
void ConnectFriendWizard::generateCertificateCalled()
|
||||
{
|
||||
#ifdef FRIEND_WIZARD_DEBUG
|
||||
std::cerr << " generateCertificateCalled" << std::endl;
|
||||
#endif
|
||||
|
||||
std::string cert = rsPeers->GetRetroshareInvite();
|
||||
if (cert.empty()) {
|
||||
QMessageBox::information(this, "RetroShare", tr("Sorry, create certificate failed"), QMessageBox::Ok, QMessageBox::Ok);
|
||||
return;
|
||||
}
|
||||
|
||||
QString qdir = QFileDialog::getSaveFileName(this, tr("Please choose a filename"), QDir::homePath(), tr("RetroShare Certificate (*.rsc );;All Files (*)"));
|
||||
|
||||
//Todo: move save to file to p3Peers::SaveCertificateToFile
|
||||
|
||||
if (qdir.isEmpty() == false) {
|
||||
QFile CertFile(qdir);
|
||||
if (CertFile.open(QIODevice::WriteOnly/* | QIODevice::Text*/)) {
|
||||
if (CertFile.write(QByteArray(cert.c_str())) > 0) {
|
||||
QMessageBox::information(this, "RetroShare", tr("Certificate file successfully created"), QMessageBox::Ok, QMessageBox::Ok);
|
||||
} else {
|
||||
QMessageBox::information(this, "RetroShare", tr("Sorry, certificate file creation failed"), QMessageBox::Ok, QMessageBox::Ok);
|
||||
}
|
||||
CertFile.close();
|
||||
} else {
|
||||
QMessageBox::information(this, "RetroShare", tr("Sorry, certificate file creation failed"), QMessageBox::Ok, QMessageBox::Ok);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//============================= FofPage ======================================
|
||||
|
||||
void ConnectFriendWizard::updatePeersList(int index)
|
||||
{
|
||||
|
||||
ui->selectedPeersTW->clearContents();
|
||||
ui->selectedPeersTW->setRowCount(0);
|
||||
|
||||
RsPgpId ownId = rsPeers->getGPGOwnId();
|
||||
|
||||
int row = 0;
|
||||
|
||||
_id_boxes.clear();
|
||||
|
||||
// We have to use this trick because signers are given by their names instead of their ids. That's a cause
|
||||
// for some confusion when two peers have the same name.
|
||||
//
|
||||
std::list<RsPgpId> gpg_ids;
|
||||
rsPeers->getGPGAllList(gpg_ids);
|
||||
for (std::list<RsPgpId>::const_iterator it(gpg_ids.begin()); it != gpg_ids.end(); ++it) {
|
||||
if (*it == ownId) {
|
||||
// its me
|
||||
continue;
|
||||
}
|
||||
|
||||
#ifdef FRIEND_WIZARD_DEBUG
|
||||
std::cerr << "examining peer " << *it << " (name=" << rsPeers->getPeerName(*it);
|
||||
#endif
|
||||
|
||||
RsPeerDetails details ;
|
||||
if (!rsPeers->getGPGDetails(*it,details)) {
|
||||
#ifdef FRIEND_WIZARD_DEBUG
|
||||
std::cerr << " no details." << std::endl ;
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
|
||||
// determine common friends
|
||||
|
||||
std::list<RsPgpId> common_friends;
|
||||
|
||||
for (std::list<RsPgpId>::const_iterator it2(details.gpgSigners.begin()); it2 != details.gpgSigners.end(); ++it2) {
|
||||
if(rsPeers->isGPGAccepted(*it2)) {
|
||||
common_friends.push_back(*it2);
|
||||
}
|
||||
}
|
||||
bool show = false;
|
||||
|
||||
switch(index) {
|
||||
case 0: // "All unsigned friends of my friends"
|
||||
show = !details.ownsign;
|
||||
#ifdef FRIEND_WIZARD_DEBUG
|
||||
std::cerr << "case 0: ownsign=" << details.ownsign << ", show=" << show << std::endl;
|
||||
#endif
|
||||
break ;
|
||||
case 1: // "Unsigned peers who already signed my certificate"
|
||||
show = details.hasSignedMe && !(details.state & RS_PEER_STATE_FRIEND);
|
||||
#ifdef FRIEND_WIZARD_DEBUG
|
||||
std::cerr << "case 1, ownsign=" << details.ownsign << ", is_authed_me=" << details.hasSignedMe << ", show=" << show << std::endl;
|
||||
#endif
|
||||
break ;
|
||||
case 2: // "Peers shown as denied"
|
||||
show = details.ownsign && !(details.state & RS_PEER_STATE_FRIEND);
|
||||
#ifdef FRIEND_WIZARD_DEBUG
|
||||
std::cerr << "case 2, ownsign=" << details.ownsign << ", state_friend=" << (details.state & RS_PEER_STATE_FRIEND) << ", show=" << show << std::endl;
|
||||
#endif
|
||||
break ;
|
||||
}
|
||||
|
||||
if (show) {
|
||||
ui->selectedPeersTW->insertRow(row);
|
||||
|
||||
QCheckBox *cb = new QCheckBox;
|
||||
cb->setChecked(true);
|
||||
_id_boxes[cb] = details.id;
|
||||
_gpg_id_boxes[cb] = details.gpg_id;
|
||||
|
||||
ui->selectedPeersTW->setCellWidget(row, 0, cb);
|
||||
ui->selectedPeersTW->setItem(row, 1, new QTableWidgetItem(QString::fromUtf8(details.name.c_str())));
|
||||
|
||||
QComboBox *qcb = new QComboBox;
|
||||
|
||||
if (common_friends.empty()) {
|
||||
qcb->addItem(tr("*** None ***"));
|
||||
} else {
|
||||
for (std::list<RsPgpId>::const_iterator it2(common_friends.begin()); it2 != common_friends.end(); ++it2) {
|
||||
qcb->addItem(QString::fromStdString( (*it2).toStdString()));
|
||||
}
|
||||
}
|
||||
|
||||
ui->selectedPeersTW->setCellWidget(row, 2, qcb);
|
||||
ui->selectedPeersTW->setItem(row, 3, new QTableWidgetItem(QString::fromStdString(details.id.toStdString())));
|
||||
++row;
|
||||
}
|
||||
}
|
||||
#ifdef FRIEND_WIZARD_DEBUG
|
||||
std::cerr << "FofPage::updatePeersList() finished iterating over peers" << std::endl;
|
||||
#endif
|
||||
|
||||
if (row>0) {
|
||||
ui->selectedPeersTW->resizeColumnsToContents();
|
||||
ui->makeFriendButton->setEnabled(true);
|
||||
} else {
|
||||
ui->makeFriendButton->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
void ConnectFriendWizard::signAllSelectedUsers()
|
||||
{
|
||||
#ifdef FRIEND_WIZARD_DEBUG
|
||||
std::cerr << "making lots of friends !!" << std::endl;
|
||||
#endif
|
||||
|
||||
for (std::map<QCheckBox*, RsPeerId>::const_iterator it(_id_boxes.begin()); it != _id_boxes.end(); ++it) {
|
||||
if (it->first->isChecked()) {
|
||||
#ifdef FRIEND_WIZARD_DEBUG
|
||||
std::cerr << "Making friend with " << it->second << std::endl ;
|
||||
#endif
|
||||
//rsPeers->AuthCertificate(it->second, "");
|
||||
rsPeers->addFriend(it->second, _gpg_id_boxes[it->first]);
|
||||
}
|
||||
}
|
||||
|
||||
ui->FofPage->setComplete(true);
|
||||
|
||||
ui->userSelectionCB->setEnabled(false);
|
||||
ui->selectedPeersTW->setEnabled(false);
|
||||
ui->makeFriendButton->setEnabled(false);
|
||||
|
||||
NotifyQt::getInstance()->notifyListChange(NOTIFY_LIST_NEIGHBOURS,0);
|
||||
NotifyQt::getInstance()->notifyListChange(NOTIFY_LIST_FRIENDS,0);
|
||||
}
|
||||
|
||||
//============================= RsidPage =====================================
|
||||
|
||||
|
||||
//============================ Emailpage =====================================
|
||||
#endif
|
||||
|
||||
//========================= ErrorMessagePage =================================
|
||||
|
||||
//========================== ConclusionPage ==================================
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@
|
|||
#include <retroshare/rspeers.h>
|
||||
#include <retroshare/rsdisc.h>
|
||||
#include <retroshare/rsmsgs.h>
|
||||
#include <retroshare/rsinit.h>
|
||||
|
||||
#include <retroshare-gui/mainpage.h>
|
||||
|
||||
|
|
@ -39,7 +40,6 @@
|
|||
#include "gui/common/PeerDefs.h"
|
||||
#include "gui/common/StatusDefs.h"
|
||||
#include "gui/RetroShareLink.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/common/AvatarDefs.h"
|
||||
#include "gui/MainWindow.h"
|
||||
#include "util/DateTime.h"
|
||||
|
|
@ -364,13 +364,13 @@ void PGPKeyDialog::signGPGKey()
|
|||
bool cancelled;
|
||||
std::string gpg_password;
|
||||
|
||||
if(!NotifyQt::getInstance()->askForPassword(tr("Profile password needed.").toStdString(), gpg_name + " (" + rsPeers->getOwnId().toStdString() + ")", false, gpg_password,cancelled))
|
||||
if(!RsLoginHelper::askForPassword(tr("Profile password needed.").toStdString(), gpg_name + " (" + rsPeers->getOwnId().toStdString() + ")", false, gpg_password,cancelled))
|
||||
{
|
||||
QMessageBox::critical(NULL,tr("Identity creation failed"),tr("Cannot create an identity linked to your profile without your profile password."));
|
||||
return;
|
||||
}
|
||||
|
||||
rsNotify->clearPgpPassphrase(); // just in case
|
||||
RsLoginHelper::clearPgpPassphrase(); // just in case
|
||||
|
||||
if(!rsPeers->signGPGCertificate(pgpId,gpg_password))
|
||||
QMessageBox::warning ( NULL, tr("Signature Failure"), tr("Check the password!"), QMessageBox::Ok);
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
#include "gui/common/AvatarDefs.h"
|
||||
#include "gui/settings/rsharesettings.h"
|
||||
|
||||
#include "gui/notifyqt.h"
|
||||
|
||||
#include <retroshare/rsmsgs.h>
|
||||
#include <retroshare/rspeers.h>
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ uint64_t FeedItem::hash_64bits(const std::string& s) const
|
|||
if(mHash == 0)
|
||||
mHash = hash64(s);
|
||||
|
||||
return mHash;
|
||||
return mHash;
|
||||
}
|
||||
|
||||
uint64_t FeedItem::hash64(const std::string& s)
|
||||
|
|
|
|||
|
|
@ -21,10 +21,70 @@
|
|||
#ifndef _FEED_ITEM_H
|
||||
#define _FEED_ITEM_H
|
||||
|
||||
#include <retroshare/rsflags.h>
|
||||
#include <QWidget>
|
||||
|
||||
class FeedHolder;
|
||||
|
||||
enum class RsFeedTypeFlags: uint32_t {
|
||||
RS_FEED_TYPE_NONE = 0x0000,
|
||||
RS_FEED_TYPE_PEER = 0x0010,
|
||||
RS_FEED_TYPE_CHANNEL = 0x0020,
|
||||
RS_FEED_TYPE_FORUM = 0x0040,
|
||||
RS_FEED_TYPE_CHAT = 0x0100,
|
||||
RS_FEED_TYPE_MSG = 0x0200,
|
||||
RS_FEED_TYPE_FILES = 0x0400,
|
||||
RS_FEED_TYPE_SECURITY = 0x0800,
|
||||
RS_FEED_TYPE_POSTED = 0x1000,
|
||||
RS_FEED_TYPE_SECURITY_IP = 0x2000,
|
||||
RS_FEED_TYPE_CIRCLE = 0x4000,
|
||||
|
||||
RS_FEED_ITEM_PEER_CONNECT = RS_FEED_TYPE_PEER | 0x0001,
|
||||
RS_FEED_ITEM_PEER_DISCONNECT = RS_FEED_TYPE_PEER | 0x0002,
|
||||
RS_FEED_ITEM_PEER_HELLO = RS_FEED_TYPE_PEER | 0x0003,
|
||||
RS_FEED_ITEM_PEER_NEW = RS_FEED_TYPE_PEER | 0x0004,
|
||||
RS_FEED_ITEM_PEER_OFFSET = RS_FEED_TYPE_PEER | 0x0005,
|
||||
RS_FEED_ITEM_PEER_DENIES_CONNEXION = RS_FEED_TYPE_PEER | 0x0006,
|
||||
|
||||
RS_FEED_ITEM_SEC_CONNECT_ATTEMPT = RS_FEED_TYPE_SECURITY | 0x0001,
|
||||
RS_FEED_ITEM_SEC_AUTH_DENIED = RS_FEED_TYPE_SECURITY | 0x0002, // locally denied connection
|
||||
RS_FEED_ITEM_SEC_UNKNOWN_IN = RS_FEED_TYPE_SECURITY | 0x0003,
|
||||
RS_FEED_ITEM_SEC_UNKNOWN_OUT = RS_FEED_TYPE_SECURITY | 0x0004,
|
||||
RS_FEED_ITEM_SEC_WRONG_SIGNATURE = RS_FEED_TYPE_SECURITY | 0x0005,
|
||||
RS_FEED_ITEM_SEC_BAD_CERTIFICATE = RS_FEED_TYPE_SECURITY | 0x0006,
|
||||
RS_FEED_ITEM_SEC_INTERNAL_ERROR = RS_FEED_TYPE_SECURITY | 0x0007,
|
||||
RS_FEED_ITEM_SEC_MISSING_CERTIFICATE = RS_FEED_TYPE_SECURITY | 0x0008,
|
||||
|
||||
RS_FEED_ITEM_SEC_IP_BLACKLISTED = RS_FEED_TYPE_SECURITY_IP | 0x0001,
|
||||
RS_FEED_ITEM_SEC_IP_WRONG_EXTERNAL_IP_REPORTED = RS_FEED_TYPE_SECURITY_IP | 0x0002,
|
||||
|
||||
RS_FEED_ITEM_CHANNEL_NEW = RS_FEED_TYPE_CHANNEL | 0x0002,
|
||||
RS_FEED_ITEM_CHANNEL_MSG = RS_FEED_TYPE_CHANNEL | 0x0003,
|
||||
RS_FEED_ITEM_CHANNEL_PUBLISHKEY = RS_FEED_TYPE_CHANNEL| 0x0004,
|
||||
|
||||
RS_FEED_ITEM_FORUM_NEW = RS_FEED_TYPE_FORUM | 0x0001,
|
||||
RS_FEED_ITEM_FORUM_MSG = RS_FEED_TYPE_FORUM | 0x0003,
|
||||
RS_FEED_ITEM_FORUM_PUBLISHKEY = RS_FEED_TYPE_FORUM | 0x0004,
|
||||
|
||||
RS_FEED_ITEM_POSTED_NEW = RS_FEED_TYPE_POSTED | 0x0001,
|
||||
RS_FEED_ITEM_POSTED_MSG = RS_FEED_TYPE_POSTED | 0x0003,
|
||||
|
||||
RS_FEED_ITEM_CHAT_NEW = RS_FEED_TYPE_CHAT | 0x0001,
|
||||
RS_FEED_ITEM_MESSAGE = RS_FEED_TYPE_MSG | 0x0001,
|
||||
RS_FEED_ITEM_FILES_NEW = RS_FEED_TYPE_FILES | 0x0001,
|
||||
|
||||
RS_FEED_ITEM_CIRCLE_MEMB_REQ = RS_FEED_TYPE_CIRCLE | 0x0001,
|
||||
RS_FEED_ITEM_CIRCLE_INVITE_REC = RS_FEED_TYPE_CIRCLE | 0x0002,
|
||||
RS_FEED_ITEM_CIRCLE_MEMB_LEAVE = RS_FEED_TYPE_CIRCLE | 0x0003,
|
||||
RS_FEED_ITEM_CIRCLE_MEMB_JOIN = RS_FEED_TYPE_CIRCLE | 0x0004,
|
||||
RS_FEED_ITEM_CIRCLE_MEMB_ACCEPTED = RS_FEED_TYPE_CIRCLE | 0x0005,
|
||||
RS_FEED_ITEM_CIRCLE_MEMB_REVOKED = RS_FEED_TYPE_CIRCLE | 0x0006,
|
||||
RS_FEED_ITEM_CIRCLE_INVITE_CANCELLED= RS_FEED_TYPE_CIRCLE | 0x0007,
|
||||
};
|
||||
|
||||
|
||||
RS_REGISTER_ENUM_FLAGS_TYPE(RsFeedTypeFlags);
|
||||
|
||||
class FeedItem : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@
|
|||
#include "ui_GxsCircleItem.h"
|
||||
|
||||
#include "FeedHolder.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/Circles/CreateCircleDialog.h"
|
||||
#include "gui/gxs/GxsIdDetails.h"
|
||||
#include "gui/common/FilesDefs.h"
|
||||
|
|
@ -40,7 +39,7 @@
|
|||
#define CIRCLESDIALOG_GROUPUPDATE 3
|
||||
|
||||
|
||||
GxsCircleItem::GxsCircleItem(FeedHolder *feedHolder, uint32_t feedId, const RsGxsCircleId &circleId, const RsGxsId &gxsId, const uint32_t type)
|
||||
GxsCircleItem::GxsCircleItem(FeedHolder *feedHolder, uint32_t feedId, const RsGxsCircleId &circleId, const RsGxsId &gxsId, RsFeedTypeFlags type)
|
||||
:FeedItem(feedHolder,feedId,NULL), mType(type), mCircleId(circleId), mGxsId(gxsId)
|
||||
{
|
||||
setup();
|
||||
|
|
@ -92,7 +91,7 @@ void GxsCircleItem::setup()
|
|||
|
||||
// from here we can figure out if we already have requested membership or not
|
||||
|
||||
if (mType == RS_FEED_ITEM_CIRCLE_MEMB_REQ)
|
||||
if (mType == RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_MEMB_REQ)
|
||||
{
|
||||
ui->titleLabel->setText(tr("You received a membership request a circle you're administrating:"));
|
||||
ui->iconLabel->setPixmap(pixmap);
|
||||
|
|
@ -105,7 +104,7 @@ void GxsCircleItem::setup()
|
|||
|
||||
ui->membershipButton->setHidden(true);
|
||||
}
|
||||
else if (mType == RS_FEED_ITEM_CIRCLE_INVITE_REC)
|
||||
else if (mType == RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_INVITE_REC)
|
||||
{
|
||||
ui->titleLabel->setText(tr("You received an invitation to join this circle:"));
|
||||
ui->iconLabel->setPixmap(pixmap);
|
||||
|
|
@ -118,7 +117,7 @@ void GxsCircleItem::setup()
|
|||
connect(ui->membershipButton, SIGNAL(clicked()), this, SLOT(requestCircleSubscription()));
|
||||
ui->inviteeButton->setHidden(true);
|
||||
}
|
||||
else if (mType == RS_FEED_ITEM_CIRCLE_MEMB_LEAVE)
|
||||
else if (mType == RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_MEMB_LEAVE)
|
||||
{
|
||||
ui->titleLabel->setText(idName + tr(" has left this circle."));
|
||||
ui->iconLabel->setPixmap(pixmap);
|
||||
|
|
@ -127,7 +126,7 @@ void GxsCircleItem::setup()
|
|||
ui->membershipButton->setHidden(true);
|
||||
ui->inviteeButton->setHidden(true);
|
||||
}
|
||||
else if (mType == RS_FEED_ITEM_CIRCLE_MEMB_JOIN)
|
||||
else if (mType == RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_MEMB_JOIN)
|
||||
{
|
||||
if(circleDetails.mAmIAdmin)
|
||||
{
|
||||
|
|
@ -148,7 +147,7 @@ void GxsCircleItem::setup()
|
|||
|
||||
ui->membershipButton->setHidden(true);
|
||||
}
|
||||
else if (mType == RS_FEED_ITEM_CIRCLE_MEMB_REVOKED)
|
||||
else if (mType == RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_MEMB_REVOKED)
|
||||
{
|
||||
ui->titleLabel->setText(tr("Your identity %1 has been revoked from this circle.").arg(idName));
|
||||
|
||||
|
|
@ -162,7 +161,7 @@ void GxsCircleItem::setup()
|
|||
|
||||
ui->inviteeButton->setHidden(true);
|
||||
}
|
||||
else if (mType == RS_FEED_ITEM_CIRCLE_MEMB_ACCEPTED)
|
||||
else if (mType == RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_MEMB_ACCEPTED)
|
||||
{
|
||||
ui->titleLabel->setText(tr("Your identity %1 as been accepted in this circle.").arg(idName));
|
||||
|
||||
|
|
@ -198,7 +197,7 @@ void GxsCircleItem::showCircleDetails()
|
|||
{
|
||||
CreateCircleDialog dlg;
|
||||
|
||||
dlg.editExistingId(RsGxsGroupId(mCircleId), true, mType != RS_FEED_ITEM_CIRCLE_MEMB_REQ) ;
|
||||
dlg.editExistingId(RsGxsGroupId(mCircleId), true, mType != RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_MEMB_REQ) ;
|
||||
dlg.exec();
|
||||
}
|
||||
|
||||
|
|
@ -215,9 +214,9 @@ void GxsCircleItem::toggleCircleMembership()
|
|||
return;
|
||||
}
|
||||
|
||||
if(mType == RS_FEED_ITEM_CIRCLE_INVITE_REC)
|
||||
if(mType == RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_INVITE_REC)
|
||||
rsGxsCircles->requestCircleMembership(mGxsId,mCircleId);
|
||||
else if(mType == RS_FEED_ITEM_CIRCLE_MEMB_REVOKED)
|
||||
else if(mType == RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_MEMB_REVOKED)
|
||||
rsGxsCircles->cancelCircleMembership(mGxsId,mCircleId);
|
||||
else
|
||||
RsErr() << __PRETTY_FUNCTION__ << ": inconsistent call. mType is " << mType << std::endl;
|
||||
|
|
@ -225,12 +224,12 @@ void GxsCircleItem::toggleCircleMembership()
|
|||
|
||||
void GxsCircleItem::toggleCircleInvite()
|
||||
{
|
||||
if(mType == RS_FEED_ITEM_CIRCLE_MEMB_JOIN)
|
||||
if(mType == RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_MEMB_JOIN)
|
||||
RsThread::async([this]()
|
||||
{
|
||||
rsGxsCircles->revokeIdsFromCircle(std::set<RsGxsId>( { mGxsId } ),mCircleId);
|
||||
});
|
||||
else if(mType == RS_FEED_ITEM_CIRCLE_MEMB_REQ)
|
||||
else if(mType == RsFeedTypeFlags::RS_FEED_ITEM_CIRCLE_MEMB_REQ)
|
||||
RsThread::async([this]()
|
||||
{
|
||||
rsGxsCircles->inviteIdsToCircle(std::set<RsGxsId>( { mGxsId } ),mCircleId);
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ class GxsCircleItem : public FeedItem
|
|||
public:
|
||||
|
||||
/** Default Constructor */
|
||||
GxsCircleItem(FeedHolder *feedHolder, uint32_t feedId, const RsGxsCircleId &circleId, const RsGxsId &gxsId, const uint32_t type);
|
||||
GxsCircleItem(FeedHolder *feedHolder, uint32_t feedId, const RsGxsCircleId &circleId, const RsGxsId &gxsId, RsFeedTypeFlags type);
|
||||
virtual ~GxsCircleItem();
|
||||
|
||||
uint64_t uniqueIdentifier() const override;
|
||||
|
|
@ -60,7 +60,7 @@ private slots:
|
|||
private:
|
||||
void setup();
|
||||
|
||||
uint32_t mType;
|
||||
RsFeedTypeFlags mType;
|
||||
|
||||
RsGxsCircleId mCircleId;
|
||||
RsGxsId mGxsId;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
#include "util/DateTime.h"
|
||||
#include "gui/common/AvatarDefs.h"
|
||||
#include "gui/common/FilesDefs.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
|
||||
#include <retroshare/rsmsgs.h>
|
||||
|
|
|
|||
|
|
@ -28,10 +28,9 @@
|
|||
#include "gui/common/StatusDefs.h"
|
||||
#include "gui/common/FilesDefs.h"
|
||||
#include "gui/common/AvatarDefs.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
#include "util/DateTime.h"
|
||||
|
||||
#include "gui/notifyqt.h"
|
||||
|
||||
#include <retroshare/rsmsgs.h>
|
||||
#include <retroshare/rspeers.h>
|
||||
#include <retroshare/rsrtt.h>
|
||||
|
|
@ -58,7 +57,21 @@ PeerItem::PeerItem(FeedHolder *parent, uint32_t feedId, const RsPeerId &peerId,
|
|||
connect( chatButton, SIGNAL( clicked() ), this, SLOT( openChat() ) );
|
||||
connect( sendmsgButton, SIGNAL( clicked() ), this, SLOT( sendMsg() ) );
|
||||
|
||||
connect(NotifyQt::getInstance(), SIGNAL(friendsChanged()), this, SLOT(updateItem()));
|
||||
mEventHandlerId = 0;
|
||||
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=]()
|
||||
{
|
||||
auto fe = dynamic_cast<const RsFriendListEvent*>(e.get());
|
||||
|
||||
if(!fe)
|
||||
return;
|
||||
|
||||
updateItem();
|
||||
}
|
||||
, this );
|
||||
}, mEventHandlerId, RsEventType::FRIEND_LIST );
|
||||
|
||||
avatar->setId(ChatId(mPeerId));// TODO: remove unnecesary converstation
|
||||
|
||||
|
|
@ -68,6 +81,10 @@ PeerItem::PeerItem(FeedHolder *parent, uint32_t feedId, const RsPeerId &peerId,
|
|||
updateItem();
|
||||
}
|
||||
|
||||
PeerItem::~PeerItem()
|
||||
{
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId);
|
||||
}
|
||||
uint64_t PeerItem::uniqueIdentifier() const
|
||||
{
|
||||
return hash_64bits("PeerItem " + mPeerId.toStdString() + " " + QString::number(mType).toStdString()) ;
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ class PeerItem : public FeedItem, private Ui::PeerItem
|
|||
public:
|
||||
/** Default Constructor */
|
||||
PeerItem(FeedHolder *parent, uint32_t feedId, const RsPeerId &peerId, uint32_t type, bool isHome);
|
||||
virtual ~PeerItem();
|
||||
|
||||
void updateItemStatic();
|
||||
|
||||
|
|
@ -66,6 +67,7 @@ private:
|
|||
RsPeerId mPeerId;
|
||||
uint32_t mType;
|
||||
bool mIsHome;
|
||||
RsEventsHandlerId_t mEventHandlerId ;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -33,21 +33,20 @@
|
|||
|
||||
#include <retroshare/rspeers.h>
|
||||
#include <retroshare/rsbanlist.h>
|
||||
#include <retroshare/rsnotify.h>
|
||||
|
||||
/*****
|
||||
* #define DEBUG_ITEM 1
|
||||
****/
|
||||
|
||||
/** Constructor */
|
||||
SecurityIpItem::SecurityIpItem(FeedHolder *parent, const RsPeerId &sslId, const std::string &ipAddr, uint32_t result, uint32_t type, bool isTest) :
|
||||
SecurityIpItem::SecurityIpItem(FeedHolder *parent, const RsPeerId &sslId, const std::string &ipAddr, uint32_t result, RsFeedTypeFlags type, bool isTest) :
|
||||
FeedItem(parent,0,NULL), mType(type), mSslId(sslId), mIpAddr(ipAddr), mResult(result), mIsTest(isTest),
|
||||
ui(new(Ui::SecurityIpItem))
|
||||
{
|
||||
setup();
|
||||
}
|
||||
|
||||
SecurityIpItem::SecurityIpItem(FeedHolder *parent, const RsPeerId &sslId, const std::string& ipAddr, const std::string& ipAddrReported, uint32_t type, bool isTest) :
|
||||
SecurityIpItem::SecurityIpItem(FeedHolder *parent, const RsPeerId &sslId, const std::string& ipAddr, const std::string& ipAddrReported, RsFeedTypeFlags type, bool isTest) :
|
||||
FeedItem(parent,0,NULL), mType(type), mSslId(sslId), mIpAddr(ipAddr), mIpAddrReported(ipAddrReported), mResult(0), mIsTest(isTest),
|
||||
ui(new(Ui::SecurityIpItem))
|
||||
{
|
||||
|
|
@ -81,7 +80,7 @@ void SecurityIpItem::setup()
|
|||
|
||||
uint64_t SecurityIpItem::uniqueIdentifier() const
|
||||
{
|
||||
return hash_64bits("SecurityItem " + QString::number(mType).toStdString() + " " + mSslId.toStdString() + " " + mIpAddr + " " + mIpAddrReported) ;
|
||||
return hash_64bits("SecurityItem " + QString::number((int)mType).toStdString() + " " + mSslId.toStdString() + " " + mIpAddr + " " + mIpAddrReported) ;
|
||||
}
|
||||
|
||||
void SecurityIpItem::updateItemStatic()
|
||||
|
|
@ -97,12 +96,12 @@ void SecurityIpItem::updateItemStatic()
|
|||
|
||||
/* Specific type */
|
||||
switch (mType) {
|
||||
case RS_FEED_ITEM_SEC_IP_BLACKLISTED:
|
||||
case RsFeedTypeFlags::RS_FEED_ITEM_SEC_IP_BLACKLISTED:
|
||||
ui->rsBanListButton->setDisabled(mIsTest);
|
||||
ui->ipAddrReported->hide();
|
||||
ui->ipAddrReportedLabel->hide();
|
||||
break;
|
||||
case RS_FEED_ITEM_SEC_IP_WRONG_EXTERNAL_IP_REPORTED:
|
||||
case RsFeedTypeFlags::RS_FEED_ITEM_SEC_IP_WRONG_EXTERNAL_IP_REPORTED:
|
||||
ui->rsBanListButton->hide();
|
||||
break;
|
||||
default:
|
||||
|
|
@ -126,7 +125,7 @@ void SecurityIpItem::updateItem()
|
|||
|
||||
if(!RsAutoUpdatePage::eventsLocked()) {
|
||||
switch (mType) {
|
||||
case RS_FEED_ITEM_SEC_IP_BLACKLISTED:
|
||||
case RsFeedTypeFlags::RS_FEED_ITEM_SEC_IP_BLACKLISTED:
|
||||
ui->titleLabel->setText(RsBanListDefs::resultString(mResult));
|
||||
ui->ipAddr->setText(QString::fromStdString(mIpAddr));
|
||||
|
||||
|
|
@ -145,7 +144,7 @@ void SecurityIpItem::updateItem()
|
|||
}
|
||||
}
|
||||
break;
|
||||
case RS_FEED_ITEM_SEC_IP_WRONG_EXTERNAL_IP_REPORTED:
|
||||
case RsFeedTypeFlags::RS_FEED_ITEM_SEC_IP_WRONG_EXTERNAL_IP_REPORTED:
|
||||
ui->titleLabel->setText(tr("Wrong external ip address reported"));
|
||||
ui->ipAddr->setText(QString::fromStdString(mIpAddr));
|
||||
ui->ipAddr->setToolTip(tr("<p>This is the external IP your Retroshare node thinks it is using.</p>")) ;
|
||||
|
|
|
|||
|
|
@ -38,8 +38,8 @@ class SecurityIpItem : public FeedItem
|
|||
|
||||
public:
|
||||
/** Default Constructor */
|
||||
SecurityIpItem(FeedHolder *parent, const RsPeerId &sslId, const std::string& ipAddr, uint32_t result, uint32_t type, bool isTest);
|
||||
SecurityIpItem(FeedHolder *parent, const RsPeerId &sslId, const std::string& ipAddr, const std::string& ipAddrReported, uint32_t type, bool isTest);
|
||||
SecurityIpItem(FeedHolder *parent, const RsPeerId &sslId, const std::string& ipAddr, uint32_t result, RsFeedTypeFlags type, bool isTest);
|
||||
SecurityIpItem(FeedHolder *parent, const RsPeerId &sslId, const std::string& ipAddr, const std::string& ipAddrReported, RsFeedTypeFlags type, bool isTest);
|
||||
|
||||
void updateItemStatic();
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ private slots:
|
|||
void banIpListChanged(const QString &ipAddress);
|
||||
|
||||
private:
|
||||
uint32_t mType;
|
||||
RsFeedTypeFlags mType;
|
||||
RsPeerId mSslId;
|
||||
std::string mIpAddr;
|
||||
std::string mIpAddrReported;
|
||||
|
|
|
|||
|
|
@ -33,8 +33,7 @@
|
|||
#include "gui/connect/ConnectFriendWizard.h"
|
||||
#include "gui/common/AvatarDefs.h"
|
||||
#include "util/DateTime.h"
|
||||
|
||||
#include "gui/notifyqt.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
|
||||
#include <retroshare/rsmsgs.h>
|
||||
#include <retroshare/rspeers.h>
|
||||
|
|
@ -44,7 +43,7 @@
|
|||
****/
|
||||
|
||||
/** Constructor */
|
||||
SecurityItem::SecurityItem(FeedHolder *parent, uint32_t feedId, const RsPgpId &gpgId, const RsPeerId &sslId, const std::string &sslCn, const std::string& ip_address,uint32_t type, bool isHome) :
|
||||
SecurityItem::SecurityItem(FeedHolder *parent, uint32_t feedId, const RsPgpId &gpgId, const RsPeerId &sslId, const std::string &sslCn, const std::string& ip_address,RsFeedTypeFlags type, bool isHome) :
|
||||
FeedItem(parent,feedId,NULL),
|
||||
mGpgId(gpgId), mSslId(sslId), mSslCn(sslCn), mIP(ip_address), mType(type), mIsHome(isHome)
|
||||
{
|
||||
|
|
@ -72,7 +71,21 @@ SecurityItem::SecurityItem(FeedHolder *parent, uint32_t feedId, const RsPgpId &g
|
|||
connect( peerDetailsButton, SIGNAL(clicked()), this, SLOT(peerDetails()));
|
||||
connect( friendRequesttoolButton, SIGNAL(clicked()), this, SLOT(friendRequest()));
|
||||
|
||||
connect(NotifyQt::getInstance(), SIGNAL(friendsChanged()), this, SLOT(updateItem()));
|
||||
mEventHandlerId = 0;
|
||||
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=]()
|
||||
{
|
||||
auto fe = dynamic_cast<const RsFriendListEvent*>(e.get());
|
||||
|
||||
if(!fe)
|
||||
return;
|
||||
|
||||
updateItem();
|
||||
}
|
||||
, this );
|
||||
}, mEventHandlerId, RsEventType::FRIEND_LIST );
|
||||
|
||||
avatar->setId(ChatId(mSslId));
|
||||
|
||||
|
|
@ -82,9 +95,13 @@ SecurityItem::SecurityItem(FeedHolder *parent, uint32_t feedId, const RsPgpId &g
|
|||
updateItem();
|
||||
}
|
||||
|
||||
SecurityItem::~SecurityItem()
|
||||
{
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId);
|
||||
}
|
||||
uint64_t SecurityItem::uniqueIdentifier() const
|
||||
{
|
||||
return hash_64bits("SecurityItem " + QString::number(mType).toStdString() + " " + mSslId.toStdString());
|
||||
return hash_64bits("SecurityItem " + QString::number((uint)mType).toStdString() + " " + mSslId.toStdString());
|
||||
}
|
||||
|
||||
void SecurityItem::updateItemStatic()
|
||||
|
|
@ -101,35 +118,35 @@ void SecurityItem::updateItemStatic()
|
|||
|
||||
switch(mType)
|
||||
{
|
||||
case RS_FEED_ITEM_SEC_CONNECT_ATTEMPT:
|
||||
case RsFeedTypeFlags::RS_FEED_ITEM_SEC_CONNECT_ATTEMPT:
|
||||
title = tr("Connect Attempt");
|
||||
requestLabel->show();
|
||||
avatar->setDefaultAvatar(":images/avatar_request.png");
|
||||
break;
|
||||
case RS_FEED_ITEM_SEC_AUTH_DENIED:
|
||||
case RsFeedTypeFlags::RS_FEED_ITEM_SEC_AUTH_DENIED:
|
||||
title = tr("Connection refused by remote peer");
|
||||
requestLabel->hide();
|
||||
avatar->setDefaultAvatar(":images/avatar_refused.png");
|
||||
break;
|
||||
case RS_FEED_ITEM_SEC_UNKNOWN_IN:
|
||||
case RsFeedTypeFlags::RS_FEED_ITEM_SEC_UNKNOWN_IN:
|
||||
title = tr("Unknown (Incoming) Connect Attempt");
|
||||
requestLabel->hide();
|
||||
avatar->setDefaultAvatar(":images/avatar_request_unknown.png");
|
||||
break;
|
||||
case RS_FEED_ITEM_SEC_UNKNOWN_OUT:
|
||||
case RsFeedTypeFlags::RS_FEED_ITEM_SEC_UNKNOWN_OUT:
|
||||
title = tr("Unknown (Outgoing) Connect Attempt");
|
||||
requestLabel->hide();
|
||||
break;
|
||||
case RS_FEED_ITEM_SEC_WRONG_SIGNATURE:
|
||||
case RsFeedTypeFlags::RS_FEED_ITEM_SEC_WRONG_SIGNATURE:
|
||||
title = tr("Certificate has wrong signature!! This peer is not who he claims to be.");
|
||||
requestLabel->hide();
|
||||
break;
|
||||
case RS_FEED_ITEM_SEC_MISSING_CERTIFICATE:
|
||||
case RsFeedTypeFlags::RS_FEED_ITEM_SEC_MISSING_CERTIFICATE:
|
||||
title = tr("Peer/node not in friendlist (PGP id=")+QString::fromStdString(mGpgId.toStdString())+")";
|
||||
avatar->setDefaultAvatar(":images/avatar_request_unknown.png");
|
||||
requestLabel->show();
|
||||
break;
|
||||
case RS_FEED_ITEM_SEC_BAD_CERTIFICATE:
|
||||
case RsFeedTypeFlags::RS_FEED_ITEM_SEC_BAD_CERTIFICATE:
|
||||
{
|
||||
RsPeerDetails details ;
|
||||
if(rsPeers->getGPGDetails(mGpgId, details))
|
||||
|
|
@ -140,7 +157,7 @@ void SecurityItem::updateItemStatic()
|
|||
}
|
||||
avatar->setDefaultAvatar(":icons/ssl.png");
|
||||
break;
|
||||
case RS_FEED_ITEM_SEC_INTERNAL_ERROR:
|
||||
case RsFeedTypeFlags::RS_FEED_ITEM_SEC_INTERNAL_ERROR:
|
||||
title = tr("Certificate caused an internal error.");
|
||||
requestLabel->hide();
|
||||
break;
|
||||
|
|
@ -211,7 +228,7 @@ void SecurityItem::updateItem()
|
|||
removeFriendButton->hide();
|
||||
peerDetailsButton->setEnabled(false);
|
||||
|
||||
if(mType == RS_FEED_ITEM_SEC_BAD_CERTIFICATE)
|
||||
if(mType == RsFeedTypeFlags::RS_FEED_ITEM_SEC_BAD_CERTIFICATE)
|
||||
{
|
||||
peerNameLabel->setText(tr("SSL request"));
|
||||
friendRequesttoolButton->hide();
|
||||
|
|
|
|||
|
|
@ -38,7 +38,8 @@ class SecurityItem : public FeedItem, private Ui::SecurityItem
|
|||
|
||||
public:
|
||||
/** Default Constructor */
|
||||
SecurityItem(FeedHolder *parent, uint32_t feedId, const RsPgpId &gpgId, const RsPeerId &sslId, const std::string &sslCn, const std::string& ip_addr,uint32_t type, bool isHome);
|
||||
SecurityItem(FeedHolder *parent, uint32_t feedId, const RsPgpId &gpgId, const RsPeerId &sslId, const std::string &sslCn, const std::string& ip_addr,RsFeedTypeFlags type, bool isHome);
|
||||
~SecurityItem();
|
||||
|
||||
void updateItemStatic();
|
||||
|
||||
|
|
@ -65,8 +66,10 @@ private:
|
|||
RsPeerId mSslId;
|
||||
std::string mSslCn;
|
||||
std::string mIP;
|
||||
uint32_t mType;
|
||||
RsFeedTypeFlags mType;
|
||||
bool mIsHome;
|
||||
|
||||
RsEventsHandlerId_t mEventHandlerId;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -31,9 +31,9 @@
|
|||
#include "gui/gxs/GxsGroupShareKey.h"
|
||||
#include "gui/common/GroupTreeWidget.h"
|
||||
#include "gui/common/RSTreeWidget.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/common/UIStateHelper.h"
|
||||
#include "gui/common/UserNotify.h"
|
||||
#include "gui/RsGUIEventManager.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
#include "retroshare/rsgxsifacetypes.h"
|
||||
#include "GxsCommentDialog.h"
|
||||
|
|
@ -173,7 +173,7 @@ void GxsGroupFrameDialog::initUi()
|
|||
processSettings(true);
|
||||
|
||||
if (groupFrameSettingsType() != GroupFrameSettings::Nothing) {
|
||||
connect(NotifyQt::getInstance(), SIGNAL(settingsChanged()), this, SLOT(settingsChanged()));
|
||||
connect(RsGUIEventManager::getInstance(), SIGNAL(settingsChanged()), this, SLOT(settingsChanged()));
|
||||
settingsChanged();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@
|
|||
#include "gui/gxs/GxsGroupShareKey.h"
|
||||
#include "gui/feeds/GxsChannelPostItem.h"
|
||||
#include "gui/settings/rsharesettings.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/common/GroupTreeWidget.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
#include "util/misc.h"
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ RsGxsChannelPostsModel::RsGxsChannelPostsModel(QObject *parent)
|
|||
|
||||
RsGxsChannelPostsModel::~RsGxsChannelPostsModel()
|
||||
{
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId);
|
||||
// rsEvents->unregisterEventsHandler(mEventHandlerId);
|
||||
}
|
||||
|
||||
void RsGxsChannelPostsModel::setMode(TreeMode mode)
|
||||
|
|
|
|||
|
|
@ -256,6 +256,6 @@ private:
|
|||
QColor mTextColorNotSubscribed ;
|
||||
QColor mTextColorMissing ;
|
||||
|
||||
RsEventsHandlerId_t mEventHandlerId ;
|
||||
//RsEventsHandlerId_t mEventHandlerId ;
|
||||
friend class const_iterator;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -30,12 +30,12 @@
|
|||
#include "gui/feeds/GxsChannelPostItem.h"
|
||||
#include "gui/gxs/GxsIdDetails.h"
|
||||
#include "gui/gxs/GxsGroupFrameDialog.h"
|
||||
#include "gui/RsGUIEventManager.h"
|
||||
#include "util/misc.h"
|
||||
#include "gui/gxschannels/CreateGxsChannelMsg.h"
|
||||
#include "gui/common/UIStateHelper.h"
|
||||
#include "gui/settings/rsharesettings.h"
|
||||
#include "gui/feeds/SubFileItem.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/RetroShareLink.h"
|
||||
#include "util/HandleRichText.h"
|
||||
#include "util/DateTime.h"
|
||||
|
|
@ -446,7 +446,7 @@ GxsChannelPostsWidgetWithModel::GxsChannelPostsWidgetWithModel(const RsGxsGroupI
|
|||
/* Connect signals */
|
||||
connect(ui->postButton, SIGNAL(clicked()), this, SLOT(createMsg()));
|
||||
connect(ui->subscribeToolButton, SIGNAL(subscribe(bool)), this, SLOT(subscribeGroup(bool)));
|
||||
connect(NotifyQt::getInstance(), SIGNAL(settingsChanged()), this, SLOT(settingsChanged()));
|
||||
connect(RsGUIEventManager::getInstance(), SIGNAL(settingsChanged()), this, SLOT(settingsChanged()));
|
||||
|
||||
ui->postButton->setText(tr("Add new post"));
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@
|
|||
#include "GxsForumThreadWidget.h"
|
||||
#include "CreateGxsForumMsg.h"
|
||||
#include "GxsForumUserNotify.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/common/GroupTreeWidget.h"
|
||||
#include "gui/gxs/GxsGroupShareKey.h"
|
||||
#include "util/misc.h"
|
||||
|
|
|
|||
|
|
@ -32,13 +32,13 @@
|
|||
#include "IMHistoryItemDelegate.h"
|
||||
#include "IMHistoryItemPainter.h"
|
||||
#include "util/HandleRichText.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
#include "gui/common/FilesDefs.h"
|
||||
|
||||
#include "rshare.h"
|
||||
#include <retroshare/rshistory.h>
|
||||
#include <retroshare/rsidentity.h>
|
||||
#include "gui/settings/rsharesettings.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "util/DateTime.h"
|
||||
|
||||
#define ROLE_MSGID Qt::UserRole
|
||||
|
|
@ -101,8 +101,6 @@ ImHistoryBrowser::ImHistoryBrowser(const ChatId &chatId, QTextEdit *edit,const Q
|
|||
m_chatId = chatId;
|
||||
textEdit = edit;
|
||||
|
||||
connect(NotifyQt::getInstance(), SIGNAL(historyChanged(uint, int)), this, SLOT(historyChanged(uint, int)));
|
||||
|
||||
connect(ui.filterLineEdit, SIGNAL(textChanged(QString)), this, SLOT(filterChanged(QString)));
|
||||
|
||||
connect(ui.copyButton, SIGNAL(clicked()), SLOT(copyMessage()));
|
||||
|
|
@ -138,6 +136,22 @@ ImHistoryBrowser::ImHistoryBrowser(const ChatId &chatId, QTextEdit *edit,const Q
|
|||
connect(m_createThread, SIGNAL(finished()), this, SLOT(createThreadFinished()));
|
||||
connect(m_createThread, SIGNAL(progress(int,int)), this, SLOT(createThreadProgress(int,int)));
|
||||
m_createThread->start();
|
||||
|
||||
mEventHandlerId = 0;
|
||||
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> event)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=](){
|
||||
|
||||
auto ev = dynamic_cast<const RsChatServiceEvent*>(event.get());
|
||||
|
||||
if(!ev)
|
||||
return;
|
||||
|
||||
if(ev->mEventCode == RsChatServiceEventCode::CHAT_HISTORY_CHANGED)
|
||||
historyChanged(ev->mMsgHistoryId,ev->mHistoryChangeType);
|
||||
}, this );
|
||||
}, mEventHandlerId, RsEventType::CHAT_SERVICE );
|
||||
}
|
||||
|
||||
ImHistoryBrowser::~ImHistoryBrowser()
|
||||
|
|
@ -221,9 +235,9 @@ void ImHistoryBrowser::historyAdd(HistoryMsg& msg)
|
|||
}
|
||||
}
|
||||
|
||||
void ImHistoryBrowser::historyChanged(uint msgId, int type)
|
||||
void ImHistoryBrowser::historyChanged(uint msgId, RsChatHistoryChangeFlags type)
|
||||
{
|
||||
if (type == NOTIFY_TYPE_ADD) {
|
||||
if (type == RsChatHistoryChangeFlags::ADD) {
|
||||
/* history message added */
|
||||
HistoryMsg msg;
|
||||
if (rsHistory->getMessage(msgId, msg) == false) {
|
||||
|
|
@ -237,7 +251,7 @@ void ImHistoryBrowser::historyChanged(uint msgId, int type)
|
|||
return;
|
||||
}
|
||||
|
||||
if (type == NOTIFY_TYPE_DEL) {
|
||||
if (type == RsChatHistoryChangeFlags::DEL) {
|
||||
/* history message removed */
|
||||
int count = ui.listWidget->count();
|
||||
for (int i = 0; i < count; ++i) {
|
||||
|
|
@ -250,7 +264,7 @@ void ImHistoryBrowser::historyChanged(uint msgId, int type)
|
|||
return;
|
||||
}
|
||||
|
||||
if (type == NOTIFY_TYPE_MOD) {
|
||||
if (type == RsChatHistoryChangeFlags::MOD) {
|
||||
/* clear history */
|
||||
// As no ChatId nor msgId are send via Notify,
|
||||
// only check if history of this chat is empty before clear our list.
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ private slots:
|
|||
void createThreadFinished();
|
||||
void createThreadProgress(int current, int count);
|
||||
|
||||
void historyChanged(uint msgId, int type);
|
||||
void historyChanged(uint msgId, RsChatHistoryChangeFlags type);
|
||||
|
||||
void filterChanged(const QString& text);
|
||||
|
||||
|
|
@ -86,6 +86,7 @@ private:
|
|||
|
||||
/** Qt Designer generated object */
|
||||
Ui::ImHistoryBrowser ui;
|
||||
RsEventsHandlerId_t mEventHandlerId;
|
||||
};
|
||||
|
||||
class ImHistoryBrowserCreateItemsThread : public QThread
|
||||
|
|
|
|||
|
|
@ -51,7 +51,6 @@
|
|||
#include <retroshare/rsgxschannels.h>
|
||||
#include <retroshare/rsgxsforums.h>
|
||||
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/common/RSTreeWidgetItem.h"
|
||||
#include "gui/common/GroupDefs.h"
|
||||
#include "gui/common/StatusDefs.h"
|
||||
|
|
@ -66,6 +65,7 @@
|
|||
#include "util/misc.h"
|
||||
#include "util/DateTime.h"
|
||||
#include "util/HandleRichText.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
#include "util/RsQtVersion.h"
|
||||
#include "textformat.h"
|
||||
#include "TagsMenu.h"
|
||||
|
|
@ -215,7 +215,19 @@ MessageComposer::MessageComposer(QWidget *parent, Qt::WindowFlags flags)
|
|||
connect(ui.addBccButton, SIGNAL(clicked()), this, SLOT(addBcc()));
|
||||
connect(ui.addRecommendButton, SIGNAL(clicked()), this, SLOT(addRecommend()));
|
||||
|
||||
connect(NotifyQt::getInstance(), SIGNAL(peerStatusChanged(QString,int)), this, SLOT(peerStatusChanged(QString,int)));
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> e)
|
||||
{
|
||||
RsQThreadUtils::postToObject([=](){
|
||||
auto fe = dynamic_cast<const RsFriendListEvent*>(e.get());
|
||||
|
||||
if(!fe || fe->mEventCode != RsFriendListEventCode::NODE_STATUS_CHANGED)
|
||||
return;
|
||||
|
||||
peerStatusChanged(QString::fromStdString(fe->mSslId.toStdString()),fe->mStatus);
|
||||
|
||||
}, this );
|
||||
},mEventHandlerId,RsEventType::FRIEND_LIST);
|
||||
|
||||
connect(ui.friendSelectionWidget, SIGNAL(contentChanged()), this, SLOT(buildCompleter()));
|
||||
connect(ui.friendSelectionWidget, SIGNAL(doubleClicked(int,QString)), this, SLOT(addTo()));
|
||||
connect(ui.friendSelectionWidget, SIGNAL(itemSelectionChanged()), this, SLOT(friendSelectionChanged()));
|
||||
|
|
@ -421,6 +433,7 @@ MessageComposer::MessageComposer(QWidget *parent, Qt::WindowFlags flags)
|
|||
|
||||
MessageComposer::~MessageComposer()
|
||||
{
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId);
|
||||
delete(m_compareRole);
|
||||
}
|
||||
|
||||
|
|
@ -812,7 +825,7 @@ void MessageComposer::buildCompleter()
|
|||
setNewCompleter(ui.recipientWidget, m_completer);
|
||||
}
|
||||
|
||||
void MessageComposer::peerStatusChanged(const QString& peer_id, int status)
|
||||
void MessageComposer::peerStatusChanged(const QString& peer_id, RsStatusValue status)
|
||||
{
|
||||
int rowCount = ui.recipientWidget->rowCount();
|
||||
int row;
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ private slots:
|
|||
void editingRecipientFinished();
|
||||
void contactDetails();
|
||||
|
||||
void peerStatusChanged(const QString& peer_id, int status);
|
||||
void peerStatusChanged(const QString& peer_id, RsStatusValue status);
|
||||
void friendSelectionChanged();
|
||||
|
||||
void tagAboutToShow();
|
||||
|
|
@ -274,6 +274,7 @@ private:
|
|||
Ui::MessageComposer ui;
|
||||
|
||||
std::list<FileInfo> _recList ;
|
||||
RsEventsHandlerId_t mEventHandlerId;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@
|
|||
|
||||
#include "gui/common/FilesDefs.h"
|
||||
#include "MessageUserNotify.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/MainWindow.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
#include "gui/settings/rsharesettings.h"
|
||||
|
|
@ -97,12 +96,7 @@ void MessageUserNotify::handleEvent_main_thread(std::shared_ptr<const RsEvent> e
|
|||
switch (fe->mMailStatusEventCode)
|
||||
{
|
||||
case RsMailStatusEventCode::NEW_MESSAGE:
|
||||
for (it = fe->mChangedMsgIds.begin(); it != fe->mChangedMsgIds.end(); ++it) {
|
||||
MessageInfo msgInfo;
|
||||
if (rsMail->getMessage(*it, msgInfo)) {
|
||||
NotifyQt::getInstance()->addToaster(RS_POPUP_MSG, msgInfo.msgId.c_str(), msgInfo.title.c_str(), msgInfo.msg.c_str() );
|
||||
}
|
||||
}
|
||||
|
||||
updateIcon();
|
||||
break;
|
||||
case RsMailStatusEventCode::MESSAGE_CHANGED:
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
#include <QPlainTextEdit>
|
||||
#include <QDialog>
|
||||
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/RetroShareLink.h"
|
||||
#include "gui/common/TagDefs.h"
|
||||
#include "gui/common/PeerDefs.h"
|
||||
|
|
@ -261,7 +260,9 @@ void MessageWidget::handleEvent_main_thread(std::shared_ptr<const RsEvent> event
|
|||
case RsMailStatusEventCode::MESSAGE_RECEIVED_ACK:
|
||||
case RsMailStatusEventCode::SIGNATURE_FAILED:
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MessageWidget::connectAction(enumActionType actionType, QToolButton* button)
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@
|
|||
|
||||
#include "MessagesDialog.h"
|
||||
|
||||
#include "gui/notifyqt.h"
|
||||
#include "gui/common/TagDefs.h"
|
||||
#include "gui/common/PeerDefs.h"
|
||||
#include "gui/common/RSElidedItemDelegate.h"
|
||||
|
|
@ -309,7 +308,7 @@ MessagesDialog::MessagesDialog(QWidget *parent)
|
|||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> event) { RsQThreadUtils::postToObject( [this,event]() { handleEvent_main_thread(event); }); }, mEventHandlerId, RsEventType::MAIL_STATUS );
|
||||
|
||||
mTagEventHandlerId = 0;
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> event) { RsQThreadUtils::postToObject( [this,event]() { handleTagEvent_main_thread(event); }); }, mEventHandlerId, RsEventType::MAIL_TAG );
|
||||
rsEvents->registerEventsHandler( [this](std::shared_ptr<const RsEvent> event) { RsQThreadUtils::postToObject( [this,event]() { handleTagEvent_main_thread(event); }); }, mTagEventHandlerId, RsEventType::MAIL_TAG );
|
||||
|
||||
mFontSizeHandler.registerFontSize(ui.listWidget, 1.5f, [this] (QAbstractItemView*, int fontSize) {
|
||||
// Set new font size on all items
|
||||
|
|
@ -351,6 +350,8 @@ void MessagesDialog::handleEvent_main_thread(std::shared_ptr<const RsEvent> even
|
|||
case RsMailStatusEventCode::MESSAGE_RECEIVED_ACK:
|
||||
case RsMailStatusEventCode::SIGNATURE_FAILED:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1088,11 +1089,13 @@ void MessagesDialog::doubleClicked(const QModelIndex& proxy_index)
|
|||
}
|
||||
|
||||
/* edit message */
|
||||
switch (Settings->getMsgOpen()) {
|
||||
case RshareSettings::MSG_OPEN_TAB:
|
||||
switch (Settings->getMsgOpen())
|
||||
{
|
||||
default:
|
||||
case RsSettingsMsgOptions::MSG_OPEN_TAB:
|
||||
openAsTab();
|
||||
break;
|
||||
case RshareSettings::MSG_OPEN_WINDOW:
|
||||
case RsSettingsMsgOptions::MSG_OPEN_WINDOW:
|
||||
openAsWindow();
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@
|
|||
#include "TagsMenu.h"
|
||||
#include "gui/common/TagDefs.h"
|
||||
#include "gui/settings/NewTag.h"
|
||||
#include "gui/notifyqt.h"
|
||||
#include "util/qtthreadsutils.h"
|
||||
|
||||
#include "gui/msgs/MessageInterface.h"
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue