Exemplo n.º 1
0
Arquivo: chat.c Projeto: VoxOx/VoxOx
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;
}
Exemplo n.º 2
0
Arquivo: chat.c Projeto: VoxOx/VoxOx
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;
	}
}
Exemplo n.º 3
0
Arquivo: group.c Projeto: VoxOx/VoxOx
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);
}
Exemplo n.º 4
0
Arquivo: group.c Projeto: VoxOx/VoxOx
/* 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);
}
Exemplo n.º 5
0
Arquivo: chat.c Projeto: VoxOx/VoxOx
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);
	}
}
Exemplo n.º 6
0
Arquivo: irc.c Projeto: VoxOx/VoxOx
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);
	}
}
Exemplo n.º 7
0
Arquivo: group.c Projeto: VoxOx/VoxOx
/*  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;
}
Exemplo n.º 8
0
Arquivo: chat.c Projeto: VoxOx/VoxOx
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);
}
Exemplo n.º 9
0
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;
    }
}
Exemplo n.º 10
0
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);
}
Exemplo n.º 11
0
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);
}