queue_print.c 3.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
/*
 * Copyright (C) 2003-2009 The Music Player Daemon Project
 * http://www.musicpd.org
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
14 15 16 17
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 19 20 21 22 23
 */

#include "queue_print.h"
#include "queue.h"
#include "song.h"
#include "song_print.h"
24
#include "locate.h"
25 26
#include "client.h"

27 28 29 30 31 32 33 34 35
/**
 * Send detailed information about a range of songs in the queue to a
 * client.
 *
 * @param client the client which has requested information
 * @param start the index of the first song (including)
 * @param end the index of the last song (excluding)
 */
static void
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
queue_print_song_info(struct client *client, const struct queue *queue,
		      unsigned position)
{
	song_print_info(client, queue_get(queue, position));
	client_printf(client, "Pos: %u\nId: %u\n",
		      position, queue_position_to_id(queue, position));
}

void
queue_print_info(struct client *client, const struct queue *queue,
		 unsigned start, unsigned end)
{
	assert(start <= end);
	assert(end <= queue_length(queue));

	for (unsigned i = start; i < end; ++i)
		queue_print_song_info(client, queue, i);
}

void
queue_print_uris(struct client *client, const struct queue *queue,
		 unsigned start, unsigned end)
{
	assert(start <= end);
	assert(end <= queue_length(queue));

	for (unsigned i = start; i < end; ++i) {
		const struct song *song = queue_get(queue, i);
		char *uri = song_get_uri(song);

		client_printf(client, "%i:%s\n", i, uri);
		g_free(uri);
	}
}

void
queue_print_changes_info(struct client *client, const struct queue *queue,
			 uint32_t version)
{
	for (unsigned i = 0; i < queue_length(queue); i++) {
		if (queue_song_newer(queue, i, version))
			queue_print_song_info(client, queue, i);
	}
}

void
queue_print_changes_position(struct client *client, const struct queue *queue,
			     uint32_t version)
{
	for (unsigned i = 0; i < queue_length(queue); i++)
		if (queue_song_newer(queue, i, version))
			client_printf(client, "cpos: %i\nId: %i\n",
				      i, queue_position_to_id(queue, i));
}
90 91 92

void
queue_search(struct client *client, const struct queue *queue,
93
	     const struct locate_item_list *criteria)
94 95
{
	unsigned i;
96
	struct locate_item_list *new_list =
97
		locate_item_list_casefold(criteria);
98 99 100 101

	for (i = 0; i < queue_length(queue); i++) {
		const struct song *song = queue_get(queue, i);

102
		if (locate_song_search(song, new_list))
103 104 105
			queue_print_song_info(client, queue, i);
	}

106
	locate_item_list_free(new_list);
107 108 109 110
}

void
queue_find(struct client *client, const struct queue *queue,
111
	   const struct locate_item_list *criteria)
112 113 114 115
{
	for (unsigned i = 0; i < queue_length(queue); i++) {
		const struct song *song = queue_get(queue, i);

116
		if (locate_song_match(song, criteria))
117 118 119
			queue_print_song_info(client, queue, i);
	}
}