Merge pull request #2951 from csoler/v0.6-Notify2

Getting rid of old notify system
This commit is contained in:
csoler 2025-11-30 18:13:32 +01:00 committed by GitHub
commit 553d2e8f50
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
124 changed files with 2160 additions and 2476 deletions

@ -1 +1 @@
Subproject commit a82f87cc935694e903bc5b99768d4390d421fb14
Subproject commit 96e249a06d8f30c2aace38beecc8fb7271159a88

View file

@ -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) {

View file

@ -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();

View file

@ -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;
}

View file

@ -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);

View file

@ -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 */

View file

@ -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();
}
}

View file

@ -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()) {

View file

@ -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);
}
}

View file

@ -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

View file

@ -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)

View file

@ -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);
}
}

View file

@ -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;
};

View file

@ -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;

View file

@ -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

View file

@ -20,7 +20,6 @@
#include "retroshare/rsfiles.h"
#include "TransferUserNotify.h"
#include "gui/notifyqt.h"
#include "gui/MainWindow.h"
TransferUserNotify::TransferUserNotify(QObject *parent) :

View file

@ -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)) {

View file

@ -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);

View file

@ -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();

View file

@ -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()

View file

@ -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

View file

@ -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,

View file

@ -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"

View file

@ -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))

View file

@ -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);

View file

@ -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*/

View file

@ -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

View file

@ -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()))

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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();

View file

@ -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

View file

@ -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"));

View file

@ -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 {

View 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.")) ;
}

View file

@ -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

View file

@ -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);
}

View file

@ -77,6 +77,7 @@ private:
Ui::ShareManager ui;
std::vector<SharedDirInfo> mDirInfos ;
RsEventsHandlerId_t mEventHandlerId;
};
#endif

View file

@ -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();

View file

@ -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()

View file

@ -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();

View file

@ -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);
}

View file

@ -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 ;}

View file

@ -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"

View file

@ -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. */

View file

@ -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();
}

View file

@ -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);

View file

@ -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

View file

@ -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();

View file

@ -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

View file

@ -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) {

View file

@ -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

View file

@ -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;

View file

@ -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);

View file

@ -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">

View file

@ -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;
}
}

View file

@ -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);
}

View file

@ -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

View file

@ -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)));
}

View file

@ -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;

View file

@ -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);

View file

@ -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);

View file

@ -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;

View file

@ -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

View file

@ -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);
}

View file

@ -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;

View file

@ -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;

View file

@ -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;
}

View file

@ -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);

View file

@ -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"

View file

@ -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 ==================================

View file

@ -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);

View file

@ -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>

View file

@ -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)

View file

@ -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

View file

@ -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);

View file

@ -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;

View file

@ -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>

View file

@ -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()) ;

View file

@ -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

View file

@ -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>")) ;

View file

@ -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;

View file

@ -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();

View file

@ -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

View file

@ -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();
}

View file

@ -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"

View file

@ -53,7 +53,7 @@ RsGxsChannelPostsModel::RsGxsChannelPostsModel(QObject *parent)
RsGxsChannelPostsModel::~RsGxsChannelPostsModel()
{
rsEvents->unregisterEventsHandler(mEventHandlerId);
// rsEvents->unregisterEventsHandler(mEventHandlerId);
}
void RsGxsChannelPostsModel::setMode(TreeMode mode)

View file

@ -256,6 +256,6 @@ private:
QColor mTextColorNotSubscribed ;
QColor mTextColorMissing ;
RsEventsHandlerId_t mEventHandlerId ;
//RsEventsHandlerId_t mEventHandlerId ;
friend class const_iterator;
};

View file

@ -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"));

View file

@ -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"

View file

@ -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.

View file

@ -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

View file

@ -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;

View file

@ -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

View file

@ -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:

View file

@ -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)

View file

@ -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;
}

View file

@ -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