-static void act_playing(cgi_sink *output, dcgi_state *ds) {
- char r[1024];
- long refresh = config->refresh, length;
- time_t now, fin;
- int random_enabled = 0;
- int enabled = 0;
-
- lookups(ds, DC_PLAYING|DC_QUEUE);
- cgi_header(output->sink, "Content-Type", "text/html");
- disorder_random_enabled(ds->g->client, &random_enabled);
- disorder_enabled(ds->g->client, &enabled);
- if(ds->g->playing
- && ds->g->playing->state == playing_started /* i.e. not paused */
- && !disorder_length(ds->g->client, ds->g->playing->track, &length)
- && length
- && ds->g->playing->sofar >= 0) {
- /* Try to put the next refresh at the start of the next track. */
- time(&now);
- fin = now + length - ds->g->playing->sofar + config->gap;
- if(now + refresh > fin)
- refresh = fin - now;
- }
- if(ds->g->queue && ds->g->queue->state == playing_isscratch) {
- /* next track is a scratch, don't leave more than the inter-track gap */
- if(refresh > config->gap)
- refresh = config->gap;
- }
- if(!ds->g->playing && ((ds->g->queue
- && ds->g->queue->state != playing_random)
- || random_enabled) && enabled) {
- /* no track playing but playing is enabled and there is something coming
- * up, must be in a gap */
- if(refresh > config->gap)
- refresh = config->gap;
- }
- byte_snprintf(r, sizeof r, "%ld;url=%s", refresh > 0 ? refresh : 1,
- front_url());
- cgi_header(output->sink, "Refresh", r);
- header_cookie(output->sink);
- cgi_body(output->sink);
- expand(output, "playing", ds);
-}
-