Skip to content
This repository has been archived by the owner on Feb 12, 2023. It is now read-only.

Commit

Permalink
fix(offlingmsg): only dipatch offline messages on friend online change
Browse files Browse the repository at this point in the history
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
  • Loading branch information
anthonybilinski committed Nov 26, 2019
1 parent 239dfdc commit 479b39f
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 4 deletions.
7 changes: 7 additions & 0 deletions src/model/friend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

}
}

Expand Down
1 change: 1 addition & 0 deletions src/model/friend.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class Friend : public Contact
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();

Expand Down
6 changes: 3 additions & 3 deletions src/model/friendmessagedispatcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

/**
Expand Down Expand Up @@ -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();
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/model/friendmessagedispatcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class FriendMessageDispatcher : public IMessageDispatcher
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;
Expand Down

0 comments on commit 479b39f

Please sign in to comment.