X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/3867fa20c6fd4e319b1ab77ebfa3ed8c68cbcfa7..417ef7de00568897d331d282478d93b323574f8c:/server/server-queue.c diff --git a/server/server-queue.c b/server/server-queue.c index 779e5e1..25dae71 100644 --- a/server/server-queue.c +++ b/server/server-queue.c @@ -15,6 +15,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ +/** @file server/server-queue.c + * @brief Server-specific track queue support + */ #include "disorder-server.h" /* the head of the queue is played next, so normally we add to the tail */ @@ -47,47 +50,50 @@ void queue_fix_sofar(struct queue_entry *q) { if(q->uptopause == -1) /* Don't know how far thru. */ sofar = -1; else if(q->lastresumed) /* Has been paused and resumed. */ - sofar = q->uptopause + time(0) - q->lastresumed; + sofar = q->uptopause + xtime(0) - q->lastresumed; else /* Currently paused. */ sofar = q->uptopause; } else /* Never been paused. */ - sofar = time(0) - q->played; + sofar = xtime(0) - q->played; q->sofar = sofar; } } static void queue_read_error(const char *msg, void *u) { - fatal(0, "error parsing queue %s: %s", (const char *)u, msg); + disorder_fatal(0, "error parsing queue %s: %s", (const char *)u, msg); } static void queue_do_read(struct queue_entry *head, const char *path) { char *buffer; FILE *fp; struct queue_entry *q; - int version = 0; + int ver = 0; if(!(fp = fopen(path, "r"))) { if(errno == ENOENT) return; /* no queue */ - fatal(errno, "error opening %s", path); + disorder_fatal(errno, "error opening %s", path); } head->next = head->prev = head; while(!inputline(path, fp, &buffer, '\n')) { if(buffer[0] == '#') { /* Version indicator */ - version = atoi(buffer + 1); + ver = atoi(buffer + 1); continue; } q = xmalloc(sizeof *q); queue_unmarshall(q, buffer, queue_read_error, (void *)path); - if(version < 1) { + if(ver < 1) { /* Fix up origin field as best we can; will be wrong in some cases but * hopefully not too horribly so. */ q->origin = q->submitter ? origin_picked : origin_random; + /* Eliminated obsolete states, since they are assumed elsewhere not to be + * set. */ switch(q->state) { case playing_isscratch: q->origin = origin_scratch; + q->state = playing_unplayed; break; case playing_random: q->state = playing_unplayed; @@ -99,10 +105,11 @@ static void queue_do_read(struct queue_entry *head, const char *path) { if(head == &qhead && (!q->track || !q->when)) - fatal(0, "incomplete queue entry in %s", path); + disorder_fatal(0, "incomplete queue entry in %s", path); queue_insert_entry(head->prev, q); } - if(ferror(fp)) fatal(errno, "error reading %s", path); + if(ferror(fp)) + disorder_fatal(errno, "error reading %s", path); fclose(fp); } @@ -129,15 +136,15 @@ static void queue_do_write(const struct queue_entry *head, const char *path) { struct queue_entry *q; byte_xasprintf(&tmp, "%s.new", path); - if(!(fp = fopen(tmp, "w"))) fatal(errno, "error opening %s", tmp); + if(!(fp = fopen(tmp, "w"))) disorder_fatal(errno, "error opening %s", tmp); /* Save version indicator */ if(fprintf(fp, "#1\n") < 0) - fatal(errno, "error writing %s", tmp); + disorder_fatal(errno, "error writing %s", tmp); for(q = head->next; q != head; q = q->next) if(fprintf(fp, "%s\n", queue_marshall(q)) < 0) - fatal(errno, "error writing %s", tmp); - if(fclose(fp) < 0) fatal(errno, "error closing %s", tmp); - if(rename(tmp, path) < 0) fatal(errno, "error replacing %s", path); + disorder_fatal(errno, "error writing %s", tmp); + if(fclose(fp) < 0) disorder_fatal(errno, "error closing %s", tmp); + if(rename(tmp, path) < 0) disorder_fatal(errno, "error replacing %s", path); } void queue_write(void) {