feat: fire FRIENDLIST_UPDATE and IGNORELIST_UPDATE events

Fire FRIENDLIST_UPDATE from all three friend list packet handlers:
- SMSG_FRIEND_LIST (Classic format)
- SMSG_CONTACT_LIST (WotLK format)
- SMSG_FRIEND_STATUS (add/remove/online/offline updates)

Fire IGNORELIST_UPDATE when SMSG_CONTACT_LIST includes ignore entries.

These events are used by social addons to refresh their UI when the
friend/ignore list changes.
This commit is contained in:
Kelsi 2026-03-21 03:01:55 -07:00
parent 8f2a2dfbb4
commit b8d92b5ff2

View file

@ -24215,6 +24215,7 @@ void GameHandler::handleFriendList(network::Packet& packet) {
entry.classId = classId; entry.classId = classId;
contacts_.push_back(std::move(entry)); contacts_.push_back(std::move(entry));
} }
if (addonEventCallback_) addonEventCallback_("FRIENDLIST_UPDATE", {});
} }
void GameHandler::handleContactList(network::Packet& packet) { void GameHandler::handleContactList(network::Packet& packet) {
@ -24278,6 +24279,11 @@ void GameHandler::handleContactList(network::Packet& packet) {
} }
LOG_INFO("SMSG_CONTACT_LIST: mask=", lastContactListMask_, LOG_INFO("SMSG_CONTACT_LIST: mask=", lastContactListMask_,
" count=", lastContactListCount_); " count=", lastContactListCount_);
if (addonEventCallback_) {
addonEventCallback_("FRIENDLIST_UPDATE", {});
if (lastContactListMask_ & 0x2) // ignore list
addonEventCallback_("IGNORELIST_UPDATE", {});
}
} }
void GameHandler::handleFriendStatus(network::Packet& packet) { void GameHandler::handleFriendStatus(network::Packet& packet) {
@ -24361,6 +24367,7 @@ void GameHandler::handleFriendStatus(network::Packet& packet) {
} }
LOG_INFO("Friend status update: ", playerName, " status=", (int)data.status); LOG_INFO("Friend status update: ", playerName, " status=", (int)data.status);
if (addonEventCallback_) addonEventCallback_("FRIENDLIST_UPDATE", {});
} }
void GameHandler::handleRandomRoll(network::Packet& packet) { void GameHandler::handleRandomRoll(network::Packet& packet) {