diff options
author | eionrobb <eionrobb@8ca6c67d-4297-256d-f884-781da6d5760b> | 2013-12-13 10:06:44 +0400 |
---|---|---|
committer | eionrobb <eionrobb@8ca6c67d-4297-256d-f884-781da6d5760b> | 2013-12-13 10:06:44 +0400 |
commit | 763a21853c4882ab918650c896cdae3df75f5595 (patch) | |
tree | fc79dd329125e63e409cb08ae9e05b68736c9a68 | |
parent | a94799d577db4df64c1f97d49233ec0b642df0a3 (diff) |
Fix for handling server-stored nicknames coming down as a 32-bit int accountid rather than a 64-bit string steamid (caused all users to have the same alias in Pidgin)
-rw-r--r-- | steam-mobile/libsteam.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/steam-mobile/libsteam.c b/steam-mobile/libsteam.c index 35691a1..c86613b 100644 --- a/steam-mobile/libsteam.c +++ b/steam-mobile/libsteam.c @@ -136,6 +136,16 @@ steam_personastate_to_statustype(gint64 state) return status_id;
}
+static const gchar *
+steam_accountid_to_steamid(gint64 accountid)
+{
+ static gchar steamid[20];
+
+ sprintf(steamid, "%" G_GINT64_FORMAT, accountid + G_GINT64_CONSTANT(76561197960265728));
+
+ return steamid;
+}
+
static void steam_fetch_new_sessionid(SteamAccount *sa);
static void steam_get_friend_summaries(SteamAccount *sa, const gchar *who);
@@ -633,13 +643,13 @@ steam_got_friend_summaries(SteamAccount *sa, JsonObject *obj, gpointer user_data g_free(sbuddy->realname); sbuddy->realname = g_strdup(json_object_get_string_member(player, "realname"));
g_free(sbuddy->profileurl); sbuddy->profileurl = g_strdup(json_object_get_string_member(player, "profileurl"));
g_free(sbuddy->avatar); sbuddy->avatar = g_strdup(json_object_get_string_member(player, "avatarfull"));
- sbuddy->personastateflags = json_object_get_int_member(player, "personastateflags");
+ sbuddy->personastateflags = (guint) json_object_get_int_member(player, "personastateflags");
// Optional :
- g_free(sbuddy->gameid); sbuddy->gameid = g_strdup(json_object_get_string_member(player, "gameid"));
- g_free(sbuddy->gameextrainfo); sbuddy->gameextrainfo = g_strdup(json_object_get_string_member(player, "gameextrainfo"));
- g_free(sbuddy->gameserversteamid); sbuddy->gameserversteamid = g_strdup(json_object_get_string_member(player, "gameserversteamid"));
- g_free(sbuddy->lobbysteamid); sbuddy->lobbysteamid = g_strdup(json_object_get_string_member(player, "lobbysteamid"));
+ g_free(sbuddy->gameid); sbuddy->gameid = json_object_has_member(player, "gameid") ? g_strdup(json_object_get_string_member(player, "gameid")) : NULL;
+ g_free(sbuddy->gameextrainfo); sbuddy->gameextrainfo = json_object_has_member(player, "gameextrainfo") ? g_strdup(json_object_get_string_member(player, "gameextrainfo")) : NULL;
+ g_free(sbuddy->gameserversteamid); sbuddy->gameserversteamid = json_object_has_member(player, "gameserversteamid") ? g_strdup(json_object_get_string_member(player, "gameserversteamid")) : NULL;
+ g_free(sbuddy->lobbysteamid); sbuddy->lobbysteamid = json_object_has_member(player, "lobbysteamid") ? g_strdup(json_object_get_string_member(player, "lobbysteamid")) : NULL;
sbuddy->lastlogoff = (guint) json_object_get_int_member(player, "lastlogoff");
@@ -690,10 +700,10 @@ steam_get_nickname_list_cb(SteamAccount *sa, JsonObject *obj, gpointer user_data for(index = 0; index < json_array_get_length(nicknames); index++)
{
JsonObject *friend = json_array_get_object_element(nicknames, index);
- const gchar *accountid = json_object_get_string_member(friend, "accountid");
+ gint64 accountid = json_object_get_int_member(friend, "accountid");
const gchar *nickname = json_object_get_string_member(friend, "nickname");
-
- purple_serv_got_private_alias(sa->pc, accountid, nickname);
+
+ purple_serv_got_private_alias(sa->pc, steam_accountid_to_steamid(accountid), nickname);
}
}
@@ -803,9 +813,9 @@ steam_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, gboolean {
if (sbuddy->gameid)
{
- purple_notify_user_info_add_pair_html(user_info, "In game %s", sbuddy->gameextrainfo);
+ purple_notify_user_info_add_pair_html(user_info, "In game", sbuddy->gameextrainfo);
} else {
- purple_notify_user_info_add_pair_html(user_info, "In non-Steam game %s", sbuddy->gameextrainfo);
+ purple_notify_user_info_add_pair_html(user_info, "In non-Steam game", sbuddy->gameextrainfo);
}
}
}
|