Handle roomlist requests during connection
This commit is contained in:
parent
8c19fd44b9
commit
0c9fa0b230
3 changed files with 38 additions and 15 deletions
|
@ -232,6 +232,8 @@ static void update_marked_read (struct tgl_state *TLS, int num, struct tgl_messa
|
|||
static void on_get_dialog_list_done (struct tgl_state *TLS, void *extra, int success, int size,
|
||||
tgl_peer_id_t peers[], tgl_message_id_t *last_msg_id[], int unread_count[]) {
|
||||
info ("Fetched dialogue list of size: %d", size);
|
||||
|
||||
connection_data *conn = tls_get_data(TLS);
|
||||
if (tgp_error_if_false (TLS, success, "Fetching dialogue list failed", TLS->error)) {
|
||||
return;
|
||||
}
|
||||
|
@ -255,7 +257,12 @@ static void on_get_dialog_list_done (struct tgl_state *TLS, void *extra, int suc
|
|||
}
|
||||
}
|
||||
|
||||
// now that the dialogue list is loaded, handle all pending chat joins
|
||||
// handle pending roomlist request
|
||||
if (conn->roomlist != NULL && purple_roomlist_get_in_progress (conn->roomlist)) {
|
||||
tgp_chat_roomlist_populate (TLS);
|
||||
}
|
||||
|
||||
// handle all pending chat joins
|
||||
tls_get_data (TLS)->dialogues_ready = TRUE;
|
||||
tgp_chat_join_all_pending (TLS);
|
||||
}
|
||||
|
|
43
tgp-chat.c
43
tgp-chat.c
|
@ -400,7 +400,7 @@ char *tgprpl_get_chat_name (GHashTable * data) {
|
|||
return g_strdup (g_hash_table_lookup (data, "subject"));
|
||||
}
|
||||
|
||||
static void tgp_chat_roomlist_it (tgl_peer_t *P, void *extra) {
|
||||
static void tgp_chat_roomlist_add (tgl_peer_t *P, void *extra) {
|
||||
connection_data *conn = extra;
|
||||
|
||||
if ((tgl_get_peer_type (P->id) == TGL_PEER_CHAT || tgl_get_peer_type (P->id) == TGL_PEER_CHANNEL)
|
||||
|
@ -422,6 +422,26 @@ static void tgp_chat_roomlist_it (tgl_peer_t *P, void *extra) {
|
|||
}
|
||||
}
|
||||
|
||||
void tgp_chat_roomlist_populate (struct tgl_state *TLS) {
|
||||
connection_data *conn = tls_get_data (TLS);
|
||||
g_return_if_fail(purple_roomlist_get_in_progress (conn->roomlist));
|
||||
|
||||
GList *fields = NULL;
|
||||
PurpleRoomlistField *f = purple_roomlist_field_new (PURPLE_ROOMLIST_FIELD_STRING, "", "id", TRUE);
|
||||
fields = g_list_append (fields, f);
|
||||
|
||||
f = purple_roomlist_field_new (PURPLE_ROOMLIST_FIELD_INT, _("Users in chat"), "users", FALSE);
|
||||
fields = g_list_append (fields, f);
|
||||
|
||||
f = purple_roomlist_field_new (PURPLE_ROOMLIST_FIELD_STRING, _("Type"), "type", FALSE);
|
||||
fields = g_list_append (fields, f);
|
||||
|
||||
purple_roomlist_set_fields (conn->roomlist, fields);
|
||||
tgl_peer_iterator_ex (conn->TLS, tgp_chat_roomlist_add, conn);
|
||||
|
||||
purple_roomlist_set_in_progress (conn->roomlist, FALSE);
|
||||
}
|
||||
|
||||
PurpleRoomlist *tgprpl_roomlist_get_list (PurpleConnection *gc) {
|
||||
debug ("tgprpl_roomlist_get_list()");
|
||||
connection_data *conn = gc_get_data (gc);
|
||||
|
@ -429,21 +449,16 @@ PurpleRoomlist *tgprpl_roomlist_get_list (PurpleConnection *gc) {
|
|||
if (conn->roomlist) {
|
||||
purple_roomlist_unref (conn->roomlist);
|
||||
}
|
||||
|
||||
|
||||
conn->roomlist = purple_roomlist_new (purple_connection_get_account (gc));
|
||||
|
||||
GList *fields = NULL;
|
||||
PurpleRoomlistField *f = purple_roomlist_field_new (PURPLE_ROOMLIST_FIELD_STRING, "", "id", TRUE);
|
||||
fields = g_list_append (fields, f);
|
||||
|
||||
f = purple_roomlist_field_new (PURPLE_ROOMLIST_FIELD_INT, _("Users in chat"), "users", FALSE);
|
||||
fields = g_list_append (fields, f);
|
||||
|
||||
f = purple_roomlist_field_new (PURPLE_ROOMLIST_FIELD_STRING, _("Type"), "type", FALSE);
|
||||
fields = g_list_append (fields, f);
|
||||
|
||||
purple_roomlist_set_fields (conn->roomlist, fields);
|
||||
tgl_peer_iterator_ex (conn->TLS, tgp_chat_roomlist_it, conn);
|
||||
purple_roomlist_set_in_progress (conn->roomlist, TRUE);
|
||||
|
||||
// spectrum2 calls this function when the account is still connection
|
||||
// all roomlists in progress are being initialised by tgp_on_ready
|
||||
if (conn->dialogues_ready) {
|
||||
tgp_chat_roomlist_populate (conn->TLS);
|
||||
}
|
||||
|
||||
return conn->roomlist;
|
||||
}
|
||||
|
|
|
@ -52,6 +52,7 @@ void tgprpl_chat_join (PurpleConnection *gc, GHashTable *data);
|
|||
GList *tgprpl_chat_join_info (PurpleConnection *gc);
|
||||
PurpleRoomlist *tgprpl_roomlist_get_list (PurpleConnection *gc);
|
||||
void tgprpl_roomlist_cancel (PurpleRoomlist *list);
|
||||
void tgp_chat_roomlist_populate (struct tgl_state *TLS);
|
||||
GHashTable *tgprpl_chat_info_defaults (PurpleConnection *gc, const char *chat_name);
|
||||
void tgp_chat_join_all_pending (struct tgl_state *TLS);
|
||||
void tgprpl_kick_from_chat (PurpleConnection *gc, int id, const char *who);
|
||||
|
|
Loading…
Add table
Reference in a new issue