Show friends currently joined servers when polling user profile

This commit is contained in:
Benau 2018-09-04 14:36:48 +08:00
parent 83d49389d6
commit c8a42fd355
2 changed files with 47 additions and 2 deletions

View File

@ -459,6 +459,48 @@ namespace Online
OnlineProfileFriends::getInstance()->refreshFriendsList();
}
}
std::map<uint32_t, core::stringw> friend_server_map;
for (unsigned int i = 0; i < getXMLData()->getNumNodes(); i++)
{
const XMLNode * node = getXMLData()->getNode(i);
if (node->getName() == "friend-in-server")
{
uint32_t id = 0;
core::stringw server_name;
node->get("id", &id);
node->get("name", &server_name);
friend_server_map[id] = server_name;
}
}
std::vector<std::pair<core::stringw, core::stringw> >
friend_server_notify;
std::map<uint32_t, core::stringw>& cur_friend_server_map =
PlayerManager::getCurrentPlayer()->getProfile()
->getFriendServerMap();
for (auto& p : friend_server_map)
{
if (friend_server_notify.size() > 3)
break;
uint32_t uid = p.first;
const core::stringw& server_name = p.second;
if (cur_friend_server_map.find(uid) ==
cur_friend_server_map.end() ||
cur_friend_server_map.at(uid) != server_name)
{
friend_server_notify.emplace_back(ProfileManager::get()
->getProfileByID(uid)->getUserName(), server_name);
}
}
for (auto& p : friend_server_notify)
{
// I18N: Show in game to tell your friend if your friend is on
// any server
core::stringw message = _("%s is now on server \"%s\"",
p.first, p.second);
MessageQueue::add(MessageQueue::MT_FRIEND, message);
}
std::swap(cur_friend_server_map, friend_server_map);
}
else
{

View File

@ -26,6 +26,7 @@
#include <atomic>
#include <irrString.h>
#include <map>
#include <string>
namespace Online
@ -101,7 +102,7 @@ private:
bool m_has_fetched_achievements;
std::vector<uint32_t> m_achievements;
std::map<uint32_t, core::stringw> m_friend_server_map;
bool m_cache_bit;
void storeFriends(const XMLNode * input);
@ -121,7 +122,9 @@ public:
void deleteRelationalInfo();
const IDList& getAchievements();
void merge(OnlineProfile * profile);
// ------------------------------------------------------------------------
std::map<uint32_t, core::stringw>& getFriendServerMap()
{ return m_friend_server_map; }
// ------------------------------------------------------------------------
/** Returns true if the achievements for this profile have been fetched. */
bool hasFetchedAchievements() const { return m_has_fetched_achievements; }