Browse Source

fix(offlingmsg): only dipatch offline messages on friend online change

Before if the new status was online, we would dipsatch, which could cause
double sends in the case of a friend going from e.g. busy -> away
reviewable/pr5930/r1
Anthony Bilinski 6 years ago
parent
commit
479b39f536
No known key found for this signature in database
GPG Key ID: 2AA8E0DA1B31FB3C
  1. 7
      src/model/friend.cpp
  2. 1
      src/model/friend.h
  3. 6
      src/model/friendmessagedispatcher.cpp
  4. 2
      src/model/friendmessagedispatcher.h

7
src/model/friend.cpp

@ -152,8 +152,15 @@ bool Friend::getEventFlag() const @@ -152,8 +152,15 @@ bool Friend::getEventFlag() const
void Friend::setStatus(Status::Status s)
{
if (friendStatus != s) {
auto oldStatus = friendStatus;
friendStatus = s;
emit statusChanged(friendPk, friendStatus);
if (!Status::isOnline(oldStatus) && Status::isOnline(friendStatus)) {
emit onlineOfflineChanged(friendPk, true);
} else if (Status::isOnline(oldStatus) && !Status::isOnline(friendStatus)) {
emit onlineOfflineChanged(friendPk, false);
}
}
}

1
src/model/friend.h

@ -59,6 +59,7 @@ signals: @@ -59,6 +59,7 @@ signals:
void nameChanged(const ToxPk& friendId, const QString& name);
void aliasChanged(const ToxPk& friendId, QString alias);
void statusChanged(const ToxPk& friendId, Status::Status status);
void onlineOfflineChanged(const ToxPk& friendId, bool isOnline);
void statusMessageChanged(const ToxPk& friendId, const QString& message);
void loadChatHistory();

6
src/model/friendmessagedispatcher.cpp

@ -50,7 +50,7 @@ FriendMessageDispatcher::FriendMessageDispatcher(Friend& f_, MessageProcessor pr @@ -50,7 +50,7 @@ FriendMessageDispatcher::FriendMessageDispatcher(Friend& f_, MessageProcessor pr
, offlineMsgEngine(&f_, &messageSender_)
, processor(std::move(processor_))
{
connect(&f, &Friend::statusChanged, this, &FriendMessageDispatcher::onFriendStatusChange);
connect(&f, &Friend::onlineOfflineChanged, this, &FriendMessageDispatcher::onFriendOnlineOfflineChanged);
}
/**
@ -108,9 +108,9 @@ void FriendMessageDispatcher::onReceiptReceived(ReceiptNum receipt) @@ -108,9 +108,9 @@ void FriendMessageDispatcher::onReceiptReceived(ReceiptNum receipt)
* @brief Handles status change for friend
* @note Parameters just to fit slot api
*/
void FriendMessageDispatcher::onFriendStatusChange(const ToxPk&, Status::Status)
void FriendMessageDispatcher::onFriendOnlineOfflineChanged(const ToxPk&, bool isOnline)
{
if (Status::isOnline(f.getStatus())) {
if (isOnline) {
offlineMsgEngine.deliverOfflineMsgs();
}
}

2
src/model/friendmessagedispatcher.h

@ -44,7 +44,7 @@ public: @@ -44,7 +44,7 @@ public:
void onReceiptReceived(ReceiptNum receipt);
void clearOutgoingMessages();
private slots:
void onFriendStatusChange(const ToxPk& key, Status::Status status);
void onFriendOnlineOfflineChanged(const ToxPk& key, bool isOnline);
private:
Friend& f;

Loading…
Cancel
Save