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;
}
|