static void roomlist_disco_result_cb(JabberStream *js, xmlnode *packet, gpointer data) { xmlnode *query; xmlnode *item; const char *type; if(!js->roomlist) return; if(!(type = xmlnode_get_attrib(packet, "type")) || strcmp(type, "result")) { char *err = jabber_parse_error(js,packet); gaim_notify_error(js->gc, _("Error"), _("Error retrieving room list"), err); gaim_roomlist_set_in_progress(js->roomlist, FALSE); gaim_roomlist_unref(js->roomlist); js->roomlist = NULL; g_free(err); return; } if(!(query = xmlnode_get_child(packet, "query"))) { char *err = jabber_parse_error(js, packet); gaim_notify_error(js->gc, _("Error"), _("Error retrieving room list"), err); gaim_roomlist_set_in_progress(js->roomlist, FALSE); gaim_roomlist_unref(js->roomlist); js->roomlist = NULL; g_free(err); return; } for(item = xmlnode_get_child(query, "item"); item; item = xmlnode_get_next_twin(item)) { const char *name; GaimRoomlistRoom *room; JabberID *jid; if(!(jid = jabber_id_new(xmlnode_get_attrib(item, "jid")))) continue; name = xmlnode_get_attrib(item, "name"); room = gaim_roomlist_room_new(GAIM_ROOMLIST_ROOMTYPE_ROOM, jid->node, NULL); gaim_roomlist_room_add_field(js->roomlist, room, jid->node); gaim_roomlist_room_add_field(js->roomlist, room, jid->domain); gaim_roomlist_room_add_field(js->roomlist, room, name ? name : ""); gaim_roomlist_room_add(js->roomlist, room); jabber_id_free(jid); } gaim_roomlist_set_in_progress(js->roomlist, FALSE); gaim_roomlist_unref(js->roomlist); js->roomlist = NULL; }
static void roomlist_cancel_cb(JabberStream *js, const char *server) { if(js->roomlist) { gaim_roomlist_set_in_progress(js->roomlist, FALSE); gaim_roomlist_unref(js->roomlist); js->roomlist = NULL; } }
static void _qq_group_search_cancel_callback(GaimConnection *gc, const gchar *input) { qq_data *qd; qd = (qq_data *) gc->proto_data; gaim_roomlist_set_in_progress(qd->roomlist, FALSE); }
/* free roomlist space, I have no idea when this one is called ... */ void qq_roomlist_cancel(GaimRoomlist *list) { qq_data *qd; GaimConnection *gc; g_return_if_fail(list != NULL); gc = gaim_account_get_connection(list->account); qd = (qq_data *) gc->proto_data; gaim_roomlist_set_in_progress(list, FALSE); gaim_roomlist_unref(list); }
void jabber_roomlist_cancel(GaimRoomlist *list) { GaimConnection *gc; JabberStream *js; gc = gaim_account_get_connection(list->account); js = gc->proto_data; gaim_roomlist_set_in_progress(list, FALSE); if (js->roomlist == list) { js->roomlist = NULL; gaim_roomlist_unref(list); } }
static void irc_roomlist_cancel(GaimRoomlist *list) { GaimConnection *gc = gaim_account_get_connection(list->account); struct irc_conn *irc; if (gc == NULL) return; irc = gc->proto_data; gaim_roomlist_set_in_progress(list, FALSE); if (irc->roomlist == list) { irc->roomlist = NULL; gaim_roomlist_unref(list); } }
/* get a list of qq groups */ GaimRoomlist *qq_roomlist_get_list(GaimConnection *gc) { GList *fields; qq_data *qd; GaimRoomlist *rl; GaimRoomlistField *f; qd = (qq_data *) gc->proto_data; fields = NULL; rl = gaim_roomlist_new(gaim_connection_get_account(gc)); qd->roomlist = rl; f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, _("Group ID"), QQ_GROUP_KEY_EXTERNAL_ID, FALSE); fields = g_list_append(fields, f); f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, _("Creator"), QQ_GROUP_KEY_CREATOR_UID, FALSE); fields = g_list_append(fields, f); f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, _("Group Description"), QQ_GROUP_KEY_GROUP_DESC_UTF8, FALSE); fields = g_list_append(fields, f); f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_INTERNAL_ID, TRUE); fields = g_list_append(fields, f); f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_TYPE, TRUE); fields = g_list_append(fields, f); f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, _("Auth"), QQ_GROUP_KEY_AUTH_TYPE, TRUE); fields = g_list_append(fields, f); f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_CATEGORY, TRUE); fields = g_list_append(fields, f); f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_NAME_UTF8, TRUE); fields = g_list_append(fields, f); gaim_roomlist_set_fields(rl, fields); gaim_roomlist_set_in_progress(qd->roomlist, TRUE); gaim_request_input(gc, _("QQ Qun"), _("Please input external group ID"), _("You can only search for permanent QQ groups\n"), NULL, FALSE, FALSE, NULL, _("Search"), G_CALLBACK(_qq_group_search_callback), _("Cancel"), G_CALLBACK(_qq_group_search_cancel_callback), gc); return qd->roomlist; }
static void roomlist_ok_cb(JabberStream *js, const char *server) { JabberIq *iq; if(!js->roomlist) return; if(!server || !*server) { gaim_notify_error(js->gc, _("Invalid Server"), _("Invalid Server"), NULL); return; } gaim_roomlist_set_in_progress(js->roomlist, TRUE); iq = jabber_iq_new_query(js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#items"); xmlnode_set_attrib(iq->node, "to", server); jabber_iq_set_callback(iq, roomlist_disco_result_cb, NULL); jabber_iq_send(iq); }
static void gaym_roomlist_cancel(struct _GaimRoomlist *list) { GaimConnection *gc = gaim_account_get_connection(list->account); struct gaym_conn *gaym; if (gc == NULL) return; gaym = gc->proto_data; gaim_roomlist_set_in_progress(list, FALSE); if (gaym->roomlist == list) { g_list_free(g_list_nth_data(list->rooms, 0)); gaym->roomlist = NULL; gaim_roomlist_unref(list); } if (gaym->roomlist_filter) { g_free(gaym->roomlist_filter); gaym->roomlist_filter = NULL; } }
void gaym_roomlist_expand_category(struct _GaimRoomlist *list, struct _GaimRoomlistRoom *category) { GaimRoomlistRoom *room = NULL; gchar *altname = NULL; gchar *altchan = NULL; int i = 0; if (category->type & GAIM_ROOMLIST_ROOMTYPE_ROOM && !category->expanded_once) { category->expanded_once = TRUE; int max = gaim_prefs_get_int("/plugins/prpl/gaym/chat_room_instances"); gchar *name = category->fields->data; gchar *chan = category->fields->next->data; for (i = 1; i <= max; i++) { altname = g_strdup_printf("%.*s%d", strlen(name) - 1, name, i); altchan = g_strdup_printf("%.*s%d", strlen(chan) - 1, chan, i); room = gaim_roomlist_room_new(GAIM_ROOMLIST_ROOMTYPE_ROOM, altname, category); gaim_roomlist_room_add_field(list, room, altname); gaim_roomlist_room_add_field(list, room, altchan); gaim_roomlist_room_add(list, room); g_free(altname); g_free(altchan); } } gaim_roomlist_set_in_progress(list, FALSE); }
void build_roomlist_from_config(GaimRoomlist * roomlist, GHashTable * confighash, gchar * pattern) { gchar **roominst = NULL; gchar *altname = NULL; gchar *normalized = NULL; gchar *lowercase = NULL; gchar *found = NULL; int level = 0; int old_level = 0; int i = 0; GaimRoomlistRoom *room = NULL; GaimRoomlistRoom *parent = NULL; g_return_if_fail(roomlist != NULL); g_return_if_fail(confighash != NULL); int max = gaim_prefs_get_int("/plugins/prpl/gaym/chat_room_instances"); gchar *roomstr = g_hash_table_lookup(confighash, "roomlist"); g_return_if_fail(roomstr != NULL); gchar **roomarr = g_strsplit(roomstr, "|", -1); /** * We need to skip the first instance, because they start * with a "|", which we've just split by, leaving a blank * at the beginning of the list */ for (i = 1; roomarr[i] != NULL; i++) { if (roomarr[i][0] == '#') { /** * This is an actual room string, break it into its * component parts, determine the level and the parent, * and add this as both a room and a category */ if (pattern != NULL) { lowercase = g_utf8_strdown(roomarr[i], -1); normalized = g_utf8_normalize(lowercase, -1, G_NORMALIZE_ALL); found = g_strstr_len(normalized, -1, pattern); g_free(normalized); g_free(lowercase); } if (found != NULL || pattern == NULL) { found = NULL; roominst = g_strsplit(roomarr[i], " ", 2); level = roomlist_level_strip(roominst[1]); parent = find_parent(level, old_level, room); altname = g_strdup_printf("%s:*", roominst[1]); if (max == 0) { room = gaim_roomlist_room_new(GAIM_ROOMLIST_ROOMTYPE_ROOM, altname, parent); } else { room = gaim_roomlist_room_new (GAIM_ROOMLIST_ROOMTYPE_CATEGORY | GAIM_ROOMLIST_ROOMTYPE_ROOM, altname, parent); } gaim_roomlist_room_add_field(roomlist, room, altname); gaim_roomlist_room_add_field(roomlist, room, roominst[0]); gaim_roomlist_room_add(roomlist, room); g_free(altname); g_strfreev(roominst); old_level = level; } } else if (pattern == NULL) { /** * This is a plain category, determine the level and * the parent and add it. */ level = roomlist_level_strip(roomarr[i]); parent = find_parent(level, old_level, room); room = gaim_roomlist_room_new(GAIM_ROOMLIST_ROOMTYPE_CATEGORY, roomarr[i], parent); gaim_roomlist_room_add(roomlist, room); } old_level = level; } g_strfreev(roomarr); gaim_roomlist_set_in_progress(roomlist, FALSE); }