Пример #1
0
static void
roomlist_selection_changed(GntWidget *widget, gpointer old, gpointer current, gpointer null)
{
	GList *iter, *field;
	PurpleRoomlistRoom *room = current;
	GntTextView *tv = GNT_TEXT_VIEW(froomlist.details);
	gboolean first = TRUE;

	gnt_text_view_clear(tv);

	if (!room)
		return;

	for (iter = purple_roomlist_room_get_fields(room),
			field = purple_roomlist_get_fields(froomlist.roomlist);
			iter && field;
			iter = iter->next, field = field->next) {
		PurpleRoomlistField *f = field->data;
		char *label = NULL;

		if (purple_roomlist_field_get_hidden(f)) {
			continue;
		}

		if (!first)
			gnt_text_view_append_text_with_flags(tv, "\n", GNT_TEXT_FLAG_NORMAL);

		gnt_text_view_append_text_with_flags(tv,
				purple_roomlist_field_get_label(f), GNT_TEXT_FLAG_BOLD);
		gnt_text_view_append_text_with_flags(tv, ": ", GNT_TEXT_FLAG_BOLD);

		switch (purple_roomlist_field_get_type(f)) {
			case PURPLE_ROOMLIST_FIELD_BOOL:
				label = g_strdup(iter->data ? "True" : "False");
				break;
			case PURPLE_ROOMLIST_FIELD_INT:
				label = g_strdup_printf("%d", (int)iter->data);
				break;
			case PURPLE_ROOMLIST_FIELD_STRING:
				label = g_strdup(iter->data);
				break;
		}
		gnt_text_view_append_text_with_flags(tv, label, GNT_TEXT_FLAG_NORMAL);
		g_free(label);
		first = FALSE;
	}

	if (purple_roomlist_room_get_type(room) == PURPLE_ROOMLIST_ROOMTYPE_CATEGORY) {
		if (!first)
			gnt_text_view_append_text_with_flags(tv, "\n", GNT_TEXT_FLAG_NORMAL);
		gnt_text_view_append_text_with_flags(tv,
				_("Hit 'Enter' to find more rooms of this category."),
				GNT_TEXT_FLAG_NORMAL);
	}
}
Пример #2
0
void
campfire_join_chat_after_room_query(CampfireConn *campfire, gchar *room_name)
{
	/*alternate when not using "Room List" */
	/* @TODO: error checking may be too simple */
	GList *fields;
	GList *rooms;
	PurpleRoomlistRoom *r;
	PurpleRoomlistField *f;
	gsize i;
	gsize list_size;
	gsize id_field_index = 0;
	gboolean found = FALSE;
	gchar *id   = NULL;
	gchar *name = NULL;
	gboolean room_name_error = FALSE;

	fields = purple_roomlist_get_fields(campfire->roomlist);
	g_list_foreach(fields, campfire_print_field_name, NULL);
	list_size = g_list_length(fields);

	/* find "id" field */
	for (i = 0; i < list_size; i++) {
		f = g_list_nth_data(fields, i);
		purple_debug_info("campfire", "field name: %s\n", f->name);
		if (strcmp("id", f->name) == 0) {
			id_field_index = i;
			found = TRUE;
			break;
		}
	}
	if (!found) {
		room_name_error = TRUE;
		purple_notify_message(campfire->gc, PURPLE_NOTIFY_MSG_ERROR,
		                      "campfire error",
		                      "couldn't find 'id' field in roomlist.",
		                      NULL,
		                      NULL,
		                      NULL);
	} else {
		found = FALSE;
	}
	rooms = campfire->roomlist->rooms;
	list_size = g_list_length(rooms);
	purple_debug_info("campfire", "join debug 6\n");

	/* find typed/chosen room name in available room names */
	for (i = 0; i < list_size; i++) {
		r = (PurpleRoomlistRoom *)g_list_nth_data(rooms, i);
		if (strcmp(r->name, room_name) == 0) {
			purple_debug_info("campfire", "room found\n");
			purple_debug_info("campfire", "room desired: %s\n", room_name);
			purple_debug_info("campfire", "room found: %s\n", r->name);
			id = g_list_nth_data(r->fields, id_field_index);
			name = r->name;
			found = TRUE;
			break;
		}
	}

	if (!found) {
		room_name_error = TRUE;
		purple_notify_message(campfire->gc, PURPLE_NOTIFY_MSG_ERROR,
		                      "campfire error",
		                      "couldn't find room name in roomlist.",
		                      room_name,
		                      NULL,
		                      NULL);
	}
	if (!room_name_error) {
		purple_debug_info("campfire", "trying to JOIN CHAT room id %s\n", id);
		campfire_room_join(campfire, id, name);
	}
}