Example #1
0
struct mpd_directory *
mpd_recv_directory(struct mpd_connection *connection)
{
	struct mpd_pair *pair;
	struct mpd_directory *directory;

	pair = mpd_recv_pair_named(connection, "directory");
	if (pair == NULL)
		return NULL;

	directory = mpd_directory_begin(pair);
	mpd_return_pair(connection, pair);
	if (directory == NULL) {
		mpd_error_entity(&connection->error);
		return NULL;
	}

	while ((pair = mpd_recv_pair(connection)) != NULL &&
	       mpd_directory_feed(directory, pair))
		mpd_return_pair(connection, pair);

	if (mpd_error_is_defined(&connection->error)) {
		assert(pair == NULL);

		mpd_directory_free(directory);
		return NULL;
	}

	/* unread this pair for the next mpd_recv_directory() call */
	mpd_enqueue_pair(connection, pair);

	return directory;
}
Example #2
0
static int lmpddirectory_gc(lua_State *L)
{
	struct mpd_directory **dir;

	dir = luaL_checkudata(L, 1, MPD_DIRECTORY_T);

	if (*dir != NULL)
		mpd_directory_free(*dir);
	*dir = NULL;

	return 0;
}
Example #3
0
int cmd_lstab ( int argc, char ** argv, struct mpd_connection *conn )
{
	struct mpd_directory *dir;

	if (argc != 1)
		return 0;

	if (!mpd_send_list_all(conn, NULL))
		printErrorAndExit(conn);

	while ((dir = mpd_recv_directory(conn)) != NULL) {
		if (strncmp(mpd_directory_get_path(dir), argv[0],
			    strlen(argv[0])) == 0)
			printf("%s\n",
			       charset_from_utf8(mpd_directory_get_path(dir)));

		mpd_directory_free(dir);
	}

	my_finishCommand(conn);

	return 0;
}
Example #4
0
void
mpd_entity_free(struct mpd_entity *entity) {
	assert(entity != NULL);

	switch (entity->type) {
	case MPD_ENTITY_TYPE_UNKNOWN:
		/* nothing to free */
		break;

	case MPD_ENTITY_TYPE_DIRECTORY:
		mpd_directory_free(entity->info.directory);
		break;

	case MPD_ENTITY_TYPE_SONG:
		mpd_song_free(entity->info.song);
		break;

	case MPD_ENTITY_TYPE_PLAYLIST:
		mpd_playlist_free(entity->info.playlistFile);
		break;
	}

	free(entity);
}