diff --git a/src/net/avatarbroadcaster.cpp b/src/net/avatarbroadcaster.cpp index 1e9542f1a..74242a626 100644 --- a/src/net/avatarbroadcaster.cpp +++ b/src/net/avatarbroadcaster.cpp @@ -24,6 +24,7 @@ #include QByteArray AvatarBroadcaster::avatarData; +QMap AvatarBroadcaster::friendsSentTo; static QMetaObject::Connection autoBroadcastConn; static auto autoBroadcast = [](uint32_t friendId, Status) @@ -34,6 +35,7 @@ static auto autoBroadcast = [](uint32_t friendId, Status) void AvatarBroadcaster::setAvatar(QByteArray data) { avatarData = data; + friendsSentTo.clear(); QVector friends = Core::getInstance()->getFriendList(); for (uint32_t friendId : friends) @@ -42,9 +44,12 @@ void AvatarBroadcaster::setAvatar(QByteArray data) void AvatarBroadcaster::sendAvatarTo(uint32_t friendId) { + if (friendsSentTo.contains(friendId) && friendsSentTo[friendId]) + return; if (!Core::getInstance()->isFriendOnline(friendId)) return; Core::getInstance()->sendAvatarFile(friendId, avatarData); + friendsSentTo[friendId] = true; } void AvatarBroadcaster::enableAutoBroadcast(bool state) diff --git a/src/net/avatarbroadcaster.h b/src/net/avatarbroadcaster.h index 27aecaa2d..529beba01 100644 --- a/src/net/avatarbroadcaster.h +++ b/src/net/avatarbroadcaster.h @@ -24,7 +24,9 @@ #include #include -/// Takes care of broadcasting avatar changes to our friends +/// Takes care of broadcasting avatar changes to our friends in a smart way +/// Cache a copy of our current avatar and friends who have received it +/// so we don't spam avatar transfers to a friend who already has it. class AvatarBroadcaster { private: @@ -40,6 +42,7 @@ public: private: static QByteArray avatarData; + static QMap friendsSentTo; }; #endif // AVATARBROADCASTER_H