eion/purple-hangouts

Parents 73a1f6648a46
Children 0eb0d30b9b5c
Poll the server to update the online status of the buddy list every 120s
--- a/hangouts_auth.c Wed Oct 04 09:17:31 2017 +1300
+++ b/hangouts_auth.c Mon Oct 23 22:16:50 2017 +1300
@@ -264,9 +264,11 @@
// SOUND THE TRUMPETS
hangouts_fetch_channel_sid(ha);
purple_connection_set_state(ha->pc, PURPLE_CONNECTION_CONNECTED);
+
//TODO trigger event instead
hangouts_get_self_info(ha);
hangouts_get_conversation_list(ha);
+ ha->poll_buddy_status_timeout = g_timeout_add_seconds(120, hangouts_poll_buddy_status, ha);
g_free(sapisid_cookie);
}
--- a/hangouts_conversation.c Wed Oct 04 09:17:31 2017 +1300
+++ b/hangouts_conversation.c Mon Oct 23 22:16:50 2017 +1300
@@ -236,6 +236,31 @@
g_free(request.field_mask);
}
+gboolean
+hangouts_poll_buddy_status(gpointer userdata)
+{
+ HangoutsAccount *ha = userdata;
+ GSList *buddies, *i;
+ GList *user_list = NULL;
+
+ if (!PURPLE_CONNECTION_IS_CONNECTED(ha->pc)) {
+ return FALSE;
+ }
+
+ buddies = purple_blist_find_buddies(ha->account, NULL);
+ for(i = buddies; i; i = i->next) {
+ PurpleBuddy *buddy = i->data;
+ user_list = g_list_prepend(user_list, (gpointer) purple_buddy_get_name(buddy));
+ }
+
+ hangouts_get_users_presence(ha, user_list);
+
+ g_slist_free(buddies);
+ g_list_free(user_list);
+
+ return TRUE;
+}
+
static void hangouts_got_buddy_photo(PurpleHttpConnection *connection, PurpleHttpResponse *response, gpointer user_data);
static void
--- a/hangouts_conversation.h Wed Oct 04 09:17:31 2017 +1300
+++ b/hangouts_conversation.h Mon Oct 23 22:16:50 2017 +1300
@@ -64,6 +64,7 @@
void hangouts_get_users_presence(HangoutsAccount *ha, GList *user_ids);
void hangouts_get_users_information(HangoutsAccount *ha, GList *user_ids);
void hangouts_get_info(PurpleConnection *pc, const gchar *who);
+gboolean hangouts_poll_buddy_status(gpointer ha_pointer);
void hangouts_chat_leave_by_conv_id(PurpleConnection *pc, const gchar *conv_id, const gchar *who);
void hangouts_chat_leave(PurpleConnection *pc, int id);
--- a/libhangouts.c Wed Oct 04 09:17:31 2017 +1300
+++ b/libhangouts.c Mon Oct 23 22:16:50 2017 +1300
@@ -375,6 +375,7 @@
g_source_remove(ha->active_client_timeout);
g_source_remove(ha->channel_watchdog);
+ g_source_remove(ha->poll_buddy_status_timeout);
purple_http_conn_cancel_all(pc);
--- a/libhangouts.h Wed Oct 04 09:17:31 2017 +1300
+++ b/libhangouts.h Mon Oct 23 22:16:50 2017 +1300
@@ -84,6 +84,7 @@
ActiveClientState active_client_state;
gint64 last_event_timestamp;
PurpleConversation *last_conversation_focused;
+ guint poll_buddy_status_timeout;
GByteArray *channel_buffer;
guint channel_watchdog;
--- a/purplecompat.h Wed Oct 04 09:17:31 2017 +1300
+++ b/purplecompat.h Mon Oct 23 22:16:50 2017 +1300
@@ -30,6 +30,7 @@
#include "connection.h"
#define purple_blist_find_buddy purple_find_buddy
+#define purple_blist_find_buddies purple_find_buddies
#define purple_blist_find_group purple_find_group
#define PURPLE_IS_BUDDY PURPLE_BLIST_NODE_IS_BUDDY
#define PURPLE_IS_CHAT PURPLE_BLIST_NODE_IS_CHAT