shithub: zuke

ref: 940115935451666e84f3e972a4fb4a7972b57d91
dir: /plist.h/

View raw version
/* Playlist begins with "# x\n" where x is the total number of records.
 * Each record begins with "# x y\n" where x is record index, y is its size in bytes.
 * Records are sorted according to mkplist.c:/^cmpmeta function.
 * This makes it somewhat easy to just load the whole playlist into memory once,
 * map all (Meta*)->... fields to it, saving on memory allocations, and using the same
 * data to provide poor's man full text searching.
 * Encoding: mkplist.c:/^printmeta/.
 * Decoding: zuke.c:/^readplist/.
 */
enum
{
	Precord='#',

	Palbum=			'a',
	Partist=		'A',
	Pdate=			'd',
	Pduration=		'D',
	Pimage=			'i',
	Ptitle=			't',
	Ptrack=			'T',
	Ppath=			'p',
	Pfilefmt=		'f',

	/* unused */
	Pchannels=		'c',
	Psamplerate=	's',

	Maxartist=16, /* max artists for a track */
};

typedef struct Meta Meta;

struct Meta
{
	char *artist[Maxartist];
	char *album;
	char *title;
	char *date;
	char *track;
	char *path;
	char *imagefmt;
	char *filefmt;
	uvlong duration;
	int numartist;
	int imageoffset;
	int imagesize;
	int imagereader; /* non-zero if a special reader required */
};

void printmeta(Biobuf *b, Meta *m);