ref: 1f46b5b9cd0d9688cb15d60c8f1a06e9471768a4
dir: /zuke-repeatone/
diff 3351b674802d5a69ddb6d4d0354c0e034804b0c1 uncommitted --- a//sys/src/cmd/audio/zuke/zuke.c +++ b//sys/src/cmd/audio/zuke/zuke.c @@ -88,6 +88,7 @@ static char *cols = "AatD"; static int colspath; static int *shuffle; +static int repeatone; static Rectangle seekbar; static int seekmx, newseekmx = -1; static double seekoff; /* ms */ @@ -389,28 +390,32 @@ if(pcurplaying >= 0){ msec = byteswritten*1000/Bps; if(dur > 0){ - snprint(tmp, sizeof(tmp), "%s%P/%P 100%%", + snprint(tmp, sizeof(tmp), "%s%s%P/%P 100%%", + repeatone != 0 ? "¹" : "", shuffle != nil ? "∫ " : "", dur/1000, dur/1000); w = stringwidth(f, tmp); msec = MIN(msec, dur); - snprint(tmp, sizeof(tmp), "%s%P/%P %d%%", + snprint(tmp, sizeof(tmp), "%s%s%P/%P %d%%", + repeatone != 0 ? "¹" : "", shuffle != nil ? "∫ " : "", (uvlong)(newseekmx >= 0 ? seekoff : msec)/1000, dur/1000, volume); }else{ - snprint(tmp, sizeof(tmp), "%s%P %d%%", + snprint(tmp, sizeof(tmp), "%s%s%P %d%%", + repeatone != 0 ? "¹" : "", shuffle != nil ? "∫ " : "", msec/1000, 100); w = stringwidth(f, tmp); - snprint(tmp, sizeof(tmp), "%s%P %d%%", + snprint(tmp, sizeof(tmp), "%s%s%P %d%%", + repeatone != 0 ? "¹" : "", shuffle != nil ? "∫ " : "", msec/1000, volume); } }else{ - snprint(tmp, sizeof(tmp), "%s%d%%", shuffle != nil ? "∫ " : "", 100); + snprint(tmp, sizeof(tmp), "%s%s%d%%", repeatone != 0 ? "¹" : "",shuffle != nil ? "∫ " : "", 100); w = stringwidth(f, tmp); - snprint(tmp, sizeof(tmp), "%s%d%%", shuffle != nil ? "∫ " : "", volume); + snprint(tmp, sizeof(tmp), "%s%s%d%%", repeatone != 0 ? "¹" : "",shuffle != nil ? "∫ " : "", volume); } r = screen->r; right = r.max.x - w - 4; @@ -708,8 +713,14 @@ while(1){ n = ioread(io, p[1], buf, Relbufsz); - if(n <= 0) + if(n <= 0){ + if(repeatone){ + c = Cseekrel; + player->seek = -(Bps + boffset/Bps); /* make sure */ + goto again; + } break; + } thiscover = nil; if(player->img != nil && nbrecv(player->img, &thiscover) != 0){ @@ -729,6 +740,7 @@ goto stop; } if(c == Cseekrel){ +again: boffset = MAX(0, boffset + player->seek*Bps); n = 0; break; @@ -1132,7 +1144,7 @@ f = display->defaultfont; Scrollwidth = MAX(14, stringwidth(f, "#")); Scrollheight = MAX(16, f->height); - Coversz = MAX(64, stringwidth(f, "∫ 00:00:00/00:00:00 100%")); + Coversz = MAX(64, stringwidth(f, "¹∫ 00:00:00/00:00:00 100%")); unlockdisplay(display); display->locking = 1; if((mctl = initmouse(nil, screen)) == nil) @@ -1339,7 +1351,11 @@ case 's': toggleshuffle(); recenter(); - redraw(1); + redraw(playercurr == nil ? 1 : 0); + break; + case 'r': + repeatone ^= 1; + redraw(playercurr == nil ? 1 : 0); break; case 'c': case 'p':