ref: cb474632d3f23de10fea2d70a4b4c98d8f3a3755
dir: /sys/src/games/music/jukebox/client.c/
#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; }