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>2014-02-24 08:19:00 +0400
committereionrobb <eionrobb@8ca6c67d-4297-256d-f884-781da6d5760b>2014-02-24 08:19:00 +0400
commit2a115b6b0764a3c1decce9fea226f6ccf20957ea (patch)
tree5087777860d349b243ec4ecf5cdd05493378250a
parentd8a1062b4b5e09d18cda523f22b2614c4551be21 (diff)
Attempt to add 'Launch Game' and 'Join Game' options to the buddy list. Needs testing
-rw-r--r--steam-mobile/libsteam.c69
-rw-r--r--steam-mobile/libsteam.h1
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;
};