diff options
author | eionrobb <eionrobb@8ca6c67d-4297-256d-f884-781da6d5760b> | 2014-02-24 08:19:00 +0400 |
---|---|---|
committer | eionrobb <eionrobb@8ca6c67d-4297-256d-f884-781da6d5760b> | 2014-02-24 08:19:00 +0400 |
commit | 2a115b6b0764a3c1decce9fea226f6ccf20957ea (patch) | |
tree | 5087777860d349b243ec4ecf5cdd05493378250a | |
parent | d8a1062b4b5e09d18cda523f22b2614c4551be21 (diff) |
Attempt to add 'Launch Game' and 'Join Game' options to the buddy list. Needs testing
-rw-r--r-- | steam-mobile/libsteam.c | 69 | ||||
-rw-r--r-- | steam-mobile/libsteam.h | 1 |
2 files changed, 70 insertions, 0 deletions
diff --git a/steam-mobile/libsteam.c b/steam-mobile/libsteam.c index e3e4cd2..9aeed88 100644 --- a/steam-mobile/libsteam.c +++ b/steam-mobile/libsteam.c @@ -683,6 +683,7 @@ steam_got_friend_summaries(SteamAccount *sa, JsonObject *obj, gpointer user_data 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;
+ g_free(sbuddy->gameserverip); sbuddy->gameserverip = json_object_has_member(player, "gameserverip") ? g_strdup(json_object_get_string_member(player, "gameserverip")) : NULL;
sbuddy->lastlogoff = (guint) json_object_get_int_member(player, "lastlogoff");
@@ -1331,6 +1332,7 @@ static void steam_buddy_free(PurpleBuddy *buddy) g_free(sbuddy->gameextrainfo);
g_free(sbuddy->gameserversteamid);
g_free(sbuddy->lobbysteamid);
+ g_free(sbuddy->gameserverip);
g_free(sbuddy);
}
@@ -1428,6 +1430,54 @@ static GList *steam_actions(PurplePlugin *plugin, gpointer context) }
void
+steam_blist_launch_game(PurpleBlistNode *node, gpointer data)
+{
+ PurpleBuddy *buddy;
+ SteamBuddy *sbuddy;
+ PurplePlugin *handle = purple_find_prpl(STEAM_PLUGIN_ID);
+
+ if(!PURPLE_BLIST_NODE_IS_BUDDY(node))
+ return;
+ buddy = (PurpleBuddy *) node;
+ if (!buddy)
+ return;
+ sbuddy = buddy->proto_data;
+ if (sbuddy && sbuddy->gameid)
+ {
+ gchar *runurl = g_strdup_printf("steam://rungameid/%s", sbuddy->gameid);
+ purple_notify_uri(handle, runurl);
+ g_free(runurl);
+ }
+}
+
+void
+steam_blist_join_game(PurpleBlistNode *node, gpointer data)
+{
+ PurpleBuddy *buddy;
+ SteamBuddy *sbuddy;
+ PurplePlugin *handle = purple_find_prpl(STEAM_PLUGIN_ID);
+
+ if(!PURPLE_BLIST_NODE_IS_BUDDY(node))
+ return;
+ buddy = (PurpleBuddy *) node;
+ if (!buddy)
+ return;
+ sbuddy = buddy->proto_data;
+ if (sbuddy) {
+ if (sbuddy->gameserverip && !g_str_equal(sbuddy->gameserversteamid, "1"))
+ {
+ gchar *joinurl = g_strdup_printf("steam://connect/%s", sbuddy->gameserverip);
+ purple_notify_uri(handle, joinurl);
+ g_free(joinurl);
+ } else if (sbuddy->lobbysteamid) {
+ gchar *joinurl = g_strdup_printf("steam://joinlobby/%s/%s/%s", sbuddy->gameid, sbuddy->lobbysteamid, sbuddy->steamid);
+ purple_notify_uri(handle, joinurl);
+ g_free(joinurl);
+ }
+ }
+}
+
+void
steam_blist_view_profile(PurpleBlistNode *node, gpointer data)
{
PurpleBuddy *buddy;
@@ -1455,6 +1505,7 @@ steam_node_menu(PurpleBlistNode *node) GList *m = NULL;
PurpleMenuAction *act;
PurpleBuddy *buddy;
+ SteamBuddy *sbuddy;
if(PURPLE_BLIST_NODE_IS_BUDDY(node))
{
@@ -1464,6 +1515,24 @@ steam_node_menu(PurpleBlistNode *node) PURPLE_CALLBACK(steam_blist_view_profile),
NULL, NULL);
m = g_list_append(m, act);
+
+ sbuddy = buddy->proto_data;
+ if (sbuddy->gameid)
+ {
+ act = purple_menu_action_new("Launch Game",
+ PURPLE_CALLBACK(steam_blist_launch_game),
+ NULL, NULL);
+ m = g_list_append(m, act);
+
+ if (sbuddy->lobbysteamid ||
+ (sbuddy->gameserverip && !g_str_equal(sbuddy->gameserversteamid, "1")))
+ {
+ act = purple_menu_action_new("Join Game",
+ PURPLE_CALLBACK(steam_blist_join_game),
+ NULL, NULL);
+ m = g_list_append(m, act);
+ }
+ }
}
return m;
}
diff --git a/steam-mobile/libsteam.h b/steam-mobile/libsteam.h index e2584a4..ada85d0 100644 --- a/steam-mobile/libsteam.h +++ b/steam-mobile/libsteam.h @@ -109,6 +109,7 @@ struct _SteamBuddy { gchar *gameextrainfo; gchar *gameserversteamid; gchar *lobbysteamid; + gchar *gameserverip; }; |