--- a/hangouts_conversation.c Wed May 25 09:08:41 2016 +1200
+++ b/hangouts_conversation.c Wed May 25 18:13:38 2016 +1200
@@ -1814,5 +1814,91 @@
+hangouts_roomlist_got_list(HangoutsAccount *ha, SyncRecentConversationsResponse *response, gpointer user_data) + PurpleRoomlist *roomlist = user_data; + for (i = 0; i < response->n_conversation_state; i++) { + ConversationState *conversation_state = response->conversation_state[i]; + Conversation *conversation = conversation_state->conversation; + if (conversation->type == CONVERSATION_TYPE__CONVERSATION_TYPE_GROUP) { + gchar **users_set = g_new0(gchar *, conversation->n_participant_data + 1); + gchar *name = conversation->name; + PurpleRoomlistRoom *room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM, conversation->conversation_id->id, NULL); + purple_roomlist_room_add_field(roomlist, room, conversation->conversation_id->id); + for (j = 0; j < conversation->n_participant_data; j++) { + gchar *p_name = conversation->participant_data[j]->fallback_name; + users_set[j] = _("Unknown"); + users = g_strjoinv(", ", users_set); + purple_roomlist_room_add_field(roomlist, room, users); + purple_roomlist_room_add_field(roomlist, room, name); + purple_roomlist_room_add(roomlist, room); + purple_roomlist_set_in_progress(roomlist, FALSE); +hangouts_roomlist_get_list(PurpleConnection *pc) + HangoutsAccount *ha = purple_connection_get_protocol_data(pc); + PurpleRoomlist *roomlist; + PurpleRoomlistField *f; + roomlist = purple_roomlist_new(ha->account); + f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("ID"), "chatname", TRUE); + fields = g_list_append(fields, f); + f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Users"), "users", FALSE); + fields = g_list_append(fields, f); + f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Name"), "name", FALSE); + fields = g_list_append(fields, f); + purple_roomlist_set_fields(roomlist, fields); + purple_roomlist_set_in_progress(roomlist, TRUE); + //Stolen from hangouts_get_conversation_list() + SyncRecentConversationsRequest request; + SyncFilter sync_filter[1]; + sync_recent_conversations_request__init(&request); + request.request_header = hangouts_get_request_header(ha); + request.has_max_conversations = TRUE; + request.max_conversations = 100; + request.has_max_events_per_conversation = TRUE; + request.max_events_per_conversation = 1; + sync_filter[0] = SYNC_FILTER__SYNC_FILTER_INBOX; + request.sync_filter = sync_filter; + request.n_sync_filter = 1; // Back streets back, alright! + hangouts_pblite_sync_recent_conversations(ha, &request, hangouts_roomlist_got_list, roomlist); + hangouts_request_header_free(request.request_header); --- a/hangouts_conversation.h Wed May 25 09:08:41 2016 +1200
+++ b/hangouts_conversation.h Wed May 25 18:13:38 2016 +1200
@@ -78,4 +78,6 @@
void hangouts_block_user(PurpleConnection *pc, const char *who);
void hangouts_unblock_user(PurpleConnection *pc, const char *who);
+PurpleRoomlist *hangouts_roomlist_get_list(PurpleConnection *pc); #endif /*_HANGOUTS_CONVERSATION_H_*/
--- a/libhangouts.c Wed May 25 09:08:41 2016 +1200
+++ b/libhangouts.c Wed May 25 18:13:38 2016 +1200
@@ -491,6 +491,12 @@
prpl_info->initiate_session = hangouts_initiate_media;
+hangouts_protocol_roomlist_iface_init(PurpleProtocolRoomlistIface *prpl_info) + prpl_info->get_list = hangouts_roomlist_get_list; static PurpleProtocol *hangouts_protocol;
PURPLE_DEFINE_TYPE_EXTENDED(
@@ -513,6 +519,9 @@
PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_MEDIA_IFACE,
hangouts_protocol_media_iface_init)
+ PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_ROOMLIST_IFACE, + hangouts_protocol_roomlist_iface_init) @@ -669,6 +678,8 @@
prpl_info->add_deny = hangouts_block_user;
prpl_info->rem_deny = hangouts_unblock_user;
+ prpl_info->roomlist_get_list = hangouts_roomlist_get_list; info->extra_info = prpl_info;
#if PURPLE_MINOR_VERSION >= 5
prpl_info->struct_size = sizeof(PurplePluginProtocolInfo);