Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/EionRobb/pidgin-opensteamworks.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreionrobb <eionrobb@8ca6c67d-4297-256d-f884-781da6d5760b>2013-12-13 06:41:26 +0400
committereionrobb <eionrobb@8ca6c67d-4297-256d-f884-781da6d5760b>2013-12-13 06:41:26 +0400
commit76335118230704dc594bea4bdb2df6d564781ba3 (patch)
treeb79d868697f3ed23bd8ad543577d6add7fcc82c9
parentf3dd24bed37f8fc8370c64981c0df2319eacecc5 (diff)
Updates for latest version of Steam Mobile client: display mobile/big picture status, display Steam Nicknames, minor fix for in-game statuses for non-Steam games
-rw-r--r--steam-mobile/libsteam.c56
-rw-r--r--steam-mobile/libsteam.h1
2 files changed, 51 insertions, 6 deletions
diff --git a/steam-mobile/libsteam.c b/steam-mobile/libsteam.c
index 316ffce..a54591c 100644
--- a/steam-mobile/libsteam.c
+++ b/steam-mobile/libsteam.c
@@ -633,6 +633,8 @@ 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");
+
// 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"));
@@ -679,6 +681,23 @@ steam_get_friend_summaries(SteamAccount *sa, const gchar *who)
}
static void
+steam_get_nickname_list_cb(SteamAccount *sa, JsonObject *obj, gpointer user_data)
+{
+ JsonObject *response = json_object_get_object_member(obj, "response");
+ JsonArray *nicknames = json_object_get_array_member(obj, "nicknames");
+ guint index;
+
+ 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");
+ const gchar *nickname = json_object_get_string_member(friend, "nickname");
+
+ purple_serv_got_private_alias(sa->pc, accountid, nickname);
+ }
+}
+
+static void
steam_get_friend_list_cb(SteamAccount *sa, JsonObject *obj, gpointer user_data)
{
JsonArray *friends = json_object_get_array_member(obj, "friends");
@@ -737,7 +756,12 @@ steam_get_friend_list(SteamAccount *sa)
steam_post_or_get(sa, STEAM_METHOD_GET | STEAM_METHOD_SSL, NULL, url->str, NULL, steam_get_friend_list_cb, NULL, TRUE);
g_string_free(url, TRUE);
-
+
+ // Grab user nicknames
+ url = g_string_new("/IPlayerService/GetNicknameList/v0001?");
+ g_string_append_printf(url, "access_token=%s&", purple_url_encode(steam_account_get_access_token(sa)));
+ steam_post_or_get(sa, STEAM_METHOD_GET | STEAM_METHOD_SSL, NULL, url->str, NULL, steam_get_nickname_list_cb, NULL, TRUE);
+ g_string_free(url, TRUE);
}
/******************************************************************************/
@@ -754,7 +778,10 @@ static gchar *steam_status_text(PurpleBuddy *buddy)
SteamBuddy *sbuddy = buddy->proto_data;
if (sbuddy && sbuddy->gameextrainfo)
- return g_markup_printf_escaped("In game %s", sbuddy->gameextrainfo);
+ if (sbuddy->gameid)
+ return g_markup_printf_escaped("In game %s", sbuddy->gameextrainfo);
+ else
+ return g_markup_printf_escaped("In non-Steam game %s", sbuddy->gameextrainfo);
return NULL;
}
@@ -769,7 +796,10 @@ steam_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, gboolean
purple_notify_user_info_add_pair_html(user_info, "Name", sbuddy->personaname);
purple_notify_user_info_add_pair_html(user_info, "Real Name", sbuddy->realname);
if (sbuddy->gameextrainfo)
- purple_notify_user_info_add_pair_html(user_info, "In game", sbuddy->gameextrainfo);
+ if (sbuddy->gameid)
+ purple_notify_user_info_add_pair_html(user_info, "In game %s", sbuddy->gameextrainfo);
+ else
+ purple_notify_user_info_add_pair_html(user_info, "In non-Steam game %s", sbuddy->gameextrainfo);
}
}
@@ -778,11 +808,24 @@ steam_list_emblem(PurpleBuddy *buddy)
{
SteamBuddy *sbuddy = buddy->proto_data;
- if (sbuddy && sbuddy->gameid)
+ if (sbuddy)
{
- return "game";
+ if (sbuddy->gameextrainfo)
+ {
+ return "game";
+ }
+ if (sbuddy->personastateflags == 512)
+ {
+ //Steam mobile, also Pidgin
+ return "mobile";
+ }
+ if (sbuddy->personastateflags == 1024)
+ {
+ //Big Picture mode
+ return "hiptop";
+ }
}
-
+
return NULL;
}
@@ -863,6 +906,7 @@ steam_login_with_access_token(SteamAccount *sa)
gchar *postdata;
postdata = g_strdup_printf("access_token=%s", purple_url_encode(steam_account_get_access_token(sa)));
+ //TODO, handle a 401 response from the server - trash the steamguard and access_token
steam_post_or_get(sa, STEAM_METHOD_POST | STEAM_METHOD_SSL, NULL, "/ISteamWebUserPresenceOAuth/Logon/v0001", postdata, steam_login_access_token_cb, NULL, TRUE);
g_free(postdata);
}
diff --git a/steam-mobile/libsteam.h b/steam-mobile/libsteam.h
index a10b061..ee826df 100644
--- a/steam-mobile/libsteam.h
+++ b/steam-mobile/libsteam.h
@@ -103,6 +103,7 @@ struct _SteamBuddy {
gchar *profileurl;
guint lastlogoff;
gchar *avatar;
+ guint personastateflags;
gchar *gameid;
gchar *gameextrainfo;