summaryrefslogtreecommitdiff
path: root/sys/src/games/music/jukebox/client.c
blob: 80022965bfee3f695dda967048a78fd36f7e2279 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#include <u.h>
#include <libc.h>
#include <thread.h>
#include <bio.h>
#include "client.h"
#include "playlist.h"
#include "../debug.h"

char *srvmount = "/mnt/juke";

char*
getroot(void)
{
	return "root";
}

void
fillbrowsebot(char *onum)
{
	char *name, *p, *q;
	Biobuf *b, *d;
	int c;

	name = smprint("%s/%s/children", srvmount, onum);
	b = Bopen(name, OREAD);
	if(b == nil)
		sysfatal("getchildren: %s: %r", name);
	free(name);
	while(p = Brdline(b, '\n')){
		c = strtol(p, &q, 0);
		assert(*q == '\n');
		*q = 0;
		name = smprint("%s/%d/type", srvmount, c);
		d = Bopen(name, OREAD);
		if(d == nil)
			sysfatal("getchildren: %s: %r", name);
		free(name);
		q = Brdstr(d, '\n', 1);
		if(q == nil){
			abort();
		}
		Bterm(d);
		if(strcmp(q, "performance") == 0)
			continue;
		name = smprint("%s/%d/digest", srvmount, c);
		d = Bopen(name, OREAD);
		if(d == nil)
			sysfatal("getchildren: %s: %r", name);
		free(name);
		q = Brdstr(d, '\n', 1);
		if(q == nil){
			Bterm(d);
			continue;
		}
		addchild(strdup(p), q);
		Bterm(d);
	}
	Bterm(b);
}

void
doplay(char *onum){
	char *name, *p, *q;
	Biobuf *b;
	int m;

	name = smprint("%s/%s/files", srvmount, onum);
	b = Bopen(name, OREAD);
	if(b == nil)
abort();//		sysfatal("doplay: %s: %r", name);
	while(p = Brdline(b, '\n')){
		m = Blinelen(b);
		assert(p[m-1] == '\n');
		p[m-1] = '\0';
		q = strchr(p, '	');
		if(q == nil)
			sysfatal("doplay: %s: format", name);
		*q++ = '\0';
		sendplaylist(strdup(q), strdup(p));
	}
	free(name);
	Bterm(b);
}

void
fillbrowsetop(char *onum)
{
	char *name, *p;
	Biobuf *b;
	int m;

	name = smprint("%s/%s/parentage", srvmount, onum);
	b = Bopen(name, OREAD);
	if(b == nil)
abort();//		sysfatal("gettopwin: %s: %r", name);
	free(name);
	while(p = Brdline(b, '\n')){
		m = Blinelen(b);
		assert(p[m-1] == '\n');
		p[m-1] = '\0';
		addparent(p);
	}
	Bterm(b);
}

void
fillplaytext(char *onum)
{
	char *name, *p;
	Biobuf *b;
	int m;

	name = smprint("%s/%s/parentage", srvmount, onum);
	b = Bopen(name, OREAD);
	if(b == nil)
		sysfatal("fillplaytext: %s: %r", name);
	free(name);
	while(p = Brdline(b, '\n')){
		m = Blinelen(b);
		assert(p[m-1] == '\n');
		p[m-1] = '\0';
		addplaytext(p);
	}
	Bterm(b);
}

char *
getoneliner(char *onum)
{
	char *name, *p;
	Biobuf *b;

	name = smprint("%s/%s/miniparentage", srvmount, onum);
	b = Bopen(name, OREAD);
	if(b == nil)
		sysfatal("gettopwin: %s: %r", name);
	free(name);
	p = Brdstr(b, '\n', 1);
	Bterm(b);
	return p;
}

char *
getparent(char *onum)
{
	char *name, *p;
	Biobuf *b;

	name = smprint("%s/%s/parent", srvmount, onum);
	b = Bopen(name, OREAD);
	if(b == nil)
abort();//		sysfatal("gettopwin: %s: %r", name);
	free(name);
	p = Brdstr(b, '\n', 1);
	Bterm(b);
	return p;
}