[Friends] Show playing iw4x state

This commit is contained in:
momo5502 2017-01-29 18:06:48 +01:00
parent 1e72fe51be
commit bb18fcc034
3 changed files with 46 additions and 11 deletions

View File

@ -24,6 +24,7 @@ namespace Components
{
std::lock_guard<std::recursive_mutex> _(Friends::Mutex);
std::vector<Friends::Friend> connectedList;
std::vector<Friends::Friend> playingList;
std::vector<Friends::Friend> onlineList;
std::vector<Friends::Friend> offlineList;
@ -33,13 +34,20 @@ namespace Components
{
if(entry.online)
{
if(entry.server.getType() == Game::NA_BAD)
if (entry.playing)
{
onlineList.push_back(entry);
if (entry.server.getType() == Game::NA_BAD)
{
playingList.push_back(entry);
}
else
{
playingList.push_back(entry);
connectedList.push_back(entry);
}
}
else
{
onlineList.push_back(entry);
}
}
else
@ -48,12 +56,14 @@ namespace Components
}
}
Friends::SortIndividualList(&connectedList);
Friends::SortIndividualList(&playingList);
Friends::SortIndividualList(&onlineList);
Friends::SortIndividualList(&offlineList);
Friends::FriendsList.clear();
Utils::Merge(&Friends::FriendsList, connectedList);
Utils::Merge(&Friends::FriendsList, playingList);
Utils::Merge(&Friends::FriendsList, onlineList);
Utils::Merge(&Friends::FriendsList, offlineList);
@ -72,6 +82,7 @@ namespace Components
*function.add_params() = "iw4x_status";
*function.add_params() = "iw4x_rank";
*function.add_params() = "iw4x_server";
*function.add_params() = "iw4x_playing";
IPCHandler::SendWorker("friends", function.SerializeAsString());
}
@ -196,9 +207,13 @@ namespace Components
case 2:
{
if(user.online && user.server.getType() != Game::NA_BAD)
if(user.online)
{
if(user.serverName.empty())
if (user.playing)
{
if (user.server.getType() != Game::NA_BAD)
{
if (user.serverName.empty())
{
return Utils::String::VA("Playing on %s", user.server.getCString());
}
@ -207,10 +222,16 @@ namespace Components
return Utils::String::VA("Playing on %s", user.serverName.data());
}
}
else if(user.online)
else
{
return "Playing IW4x";
}
}
else
{
return "Online";
}
}
else
{
return "Offline";
@ -274,6 +295,10 @@ namespace Components
{
entry->playerName = value;
}
else if (key == "iw4x_playing")
{
entry->playing = atoi(value.data()) == 1;
}
else if (key == "iw4x_server")
{
Network::Address oldAddress = entry->server;
@ -370,6 +395,7 @@ namespace Components
Friends::Friend entry;
entry.userId = id;
entry.online = false;
entry.playing = false;
entry.prestige = 0;
entry.experience = 0;
entry.server.setType(Game::NA_BAD);
@ -476,6 +502,13 @@ namespace Components
fInterface->map("nameResponse", Friends::NameResponse);
fInterface->map("presenceResponse", Friends::PresenceResponse);
fInterface->map("infoResponse", Friends::InfoResponse);
Proto::IPC::Function function;
function.set_name("setPresence");
*function.add_params() = "iw4x_playing";
*function.add_params() = "1";
IPCHandler::SendWorker("friends", function.SerializeAsString());
}
Friends::~Friends()

View File

@ -40,6 +40,7 @@ namespace Components
Network::Address server;
std::string serverName;
bool online;
bool playing;
int experience;
int prestige;
};

View File

@ -173,6 +173,7 @@ namespace Handlers
if(Steam::Proxy::SteamFriends)
{
Steam::Proxy::SteamFriends->SetRichPresence("iw4x_server", nullptr);
Steam::Proxy::SteamFriends->SetRichPresence("iw4x_playing", nullptr);
}
if(Steam::Proxy::SteamLegacyFriends)