diff --git a/src/httpd_dacp.c b/src/httpd_dacp.c index c7410db7..ed56fb8e 100644 --- a/src/httpd_dacp.c +++ b/src/httpd_dacp.c @@ -967,6 +967,7 @@ dacp_reply_cue_play(struct evhttp_request *req, struct evbuffer *evbuf, char **u const char *cuequery; const char *param; uint32_t id; + uint32_t item_id; uint32_t pos; int clear; struct player_history *history; @@ -1018,6 +1019,7 @@ dacp_reply_cue_play(struct evhttp_request *req, struct evbuffer *evbuf, char **u dacp_propset_shufflestate(param, NULL); id = 0; + item_id = 0; pos = 0; param = evhttp_find_header(query, "index"); if (param) @@ -1041,7 +1043,7 @@ dacp_reply_cue_play(struct evhttp_request *req, struct evbuffer *evbuf, char **u if (history->count > pos) { pos = (history->start_index + history->count - pos - 1) % MAX_HISTORY_COUNT; - id = history->id[pos]; + item_id = history->item_id[pos]; } else { @@ -1060,7 +1062,7 @@ dacp_reply_cue_play(struct evhttp_request *req, struct evbuffer *evbuf, char **u /* If playing from history queue, the pos holds the id of the item to play */ if (hist) - ret = player_playback_start_byitemid(id, &id); //TODO [queue/history] id does not hold the queueitemid but the dbmfiid + ret = player_playback_start_byitemid(item_id, &id); else ret = player_playback_start_bypos(pos, &id); diff --git a/src/mpd.c b/src/mpd.c index 9ce8d86a..dc019a2e 100644 --- a/src/mpd.c +++ b/src/mpd.c @@ -650,7 +650,7 @@ mpd_command_currentsong(struct evbuffer *evbuf, int argc, char **argv, char **er return 0; } - ret = mpd_add_mediainfo_byid(evbuf, status.id, status.queueitem_id, status.pos_pl); + ret = mpd_add_mediainfo_byid(evbuf, status.id, status.item_id, status.pos_pl); if (ret < 0) { ret = asprintf(errmsg, "Error adding media info for file with id: %d", status.id); @@ -839,11 +839,11 @@ mpd_command_status(struct evbuffer *evbuf, int argc, char **argv, char **errmsg) "nextsong: %d\n" "nextsongid: %d\n", status.pos_pl, - status.queueitem_id, + status.item_id, (status.pos_ms / 1000), (status.len_ms / 1000), (status.pos_ms / 1000.0), status.next_pos_pl, - status.next_queueitem_id); + status.next_item_id); } if (filescanner_scanning()) diff --git a/src/player.c b/src/player.c index 7daa31d5..6b5c6d7c 100644 --- a/src/player.c +++ b/src/player.c @@ -87,7 +87,7 @@ struct player_source uint32_t id; /* Item-Id of the file/item in the queue */ - uint32_t queueitem_id; + uint32_t item_id; /* Length of the file/item in milliseconds */ uint32_t len_ms; @@ -794,7 +794,7 @@ player_history_get(void) * Add the song with the given id to the list of previously played songs */ static void -history_add(uint32_t id) +history_add(uint32_t id, uint32_t item_id) { unsigned int cur_index; unsigned int next_index; @@ -813,6 +813,7 @@ history_add(uint32_t id) history->start_index = (history->start_index + 1) % MAX_HISTORY_COUNT; history->id[next_index] = id; + history->item_id[next_index] = item_id; if (history->count < MAX_HISTORY_COUNT) history->count++; @@ -1145,7 +1146,7 @@ source_new(struct queue_item *item) ps = (struct player_source *)calloc(1, sizeof(struct player_source)); ps->id = queueitem_id(item); - ps->queueitem_id = queueitem_item_id(item); + ps->item_id = queueitem_item_id(item); ps->data_kind = queueitem_data_kind(item); ps->media_kind = queueitem_media_kind(item); ps->len_ms = queueitem_len(item); @@ -1458,7 +1459,7 @@ source_check(void) #ifdef LASTFM worker_execute(scrobble_cb, &id, sizeof(int), 8); #endif - history_add(cur_playing->id); + history_add(cur_playing->id, cur_playing->item_id); /* Stop playback */ if (!cur_playing->play_next) @@ -1523,12 +1524,12 @@ source_read(uint8_t *buf, int len, uint64_t rtptime) DPRINTF(E_DBG, L_PLAYER, "New file\n"); - item = queue_next(queue, cur_streaming->queueitem_id, shuffle, repeat, 1); + item = queue_next(queue, cur_streaming->item_id, shuffle, repeat, 1); if (ret < 0) { DPRINTF(E_LOG, L_PLAYER, "Error reading source %d\n", cur_streaming->id); - queue_remove_byitemid(queue, cur_streaming->queueitem_id); + queue_remove_byitemid(queue, cur_streaming->item_id); } if (item) @@ -2185,13 +2186,13 @@ get_status(struct player_command *cmd) status->status = PLAY_PAUSED; status->id = cur_streaming->id; - status->queueitem_id = cur_streaming->queueitem_id; + status->item_id = cur_streaming->item_id; pos = last_rtptime + AIRTUNES_V2_PACKET_SAMPLES - cur_streaming->stream_start; status->pos_ms = (pos * 1000) / 44100; status->len_ms = cur_streaming->len_ms; - status->pos_pl = queue_index_byitemid(queue, cur_streaming->queueitem_id, 0); + status->pos_pl = queue_index_byitemid(queue, cur_streaming->item_id, 0); break; @@ -2231,15 +2232,15 @@ get_status(struct player_command *cmd) status->len_ms = ps->len_ms; status->id = ps->id; - status->queueitem_id = ps->queueitem_id; - status->pos_pl = queue_index_byitemid(queue, ps->queueitem_id, 0); + status->item_id = ps->item_id; + status->pos_pl = queue_index_byitemid(queue, ps->item_id, 0); - item_next = queue_next(queue, ps->queueitem_id, shuffle, repeat, 0); + item_next = queue_next(queue, ps->item_id, shuffle, repeat, 0); if (item_next) { status->next_id = queueitem_id(item_next); - status->next_queueitem_id = queueitem_item_id(item_next); - status->next_pos_pl = queue_index_byitemid(queue, status->next_queueitem_id, 0); + status->next_item_id = queueitem_item_id(item_next); + status->next_pos_pl = queue_index_byitemid(queue, status->next_item_id, 0); } else { @@ -2315,7 +2316,7 @@ playback_stop(struct player_command *cmd) ps_playing = source_now_playing(); if (ps_playing) { - history_add(ps_playing->id); + history_add(ps_playing->id, ps_playing->item_id); } source_stop(); @@ -2577,7 +2578,7 @@ playback_start_bypos(struct player_command *cmd) if (ps_playing) { - qii = queue_get_bypos(queue, ps_playing->queueitem_id, offset, shuffle); + qii = queue_get_bypos(queue, ps_playing->item_id, offset, shuffle); } else { @@ -2606,7 +2607,7 @@ playback_prev_bh(struct player_command *cmd) /* Only add to history if playback started. */ if (cur_streaming->output_start > cur_streaming->stream_start) - history_add(cur_streaming->id); + history_add(cur_streaming->id, cur_streaming->item_id); /* Compute the playing time in seconds for the current song. */ if (cur_streaming->output_start > cur_streaming->stream_start) @@ -2619,7 +2620,7 @@ playback_prev_bh(struct player_command *cmd) DPRINTF(E_DBG, L_PLAYER, "Skipping song played %d sec\n", pos_sec); if (pos_sec < 3) { - item = queue_prev(queue, cur_streaming->queueitem_id, shuffle, repeat); + item = queue_prev(queue, cur_streaming->item_id, shuffle, repeat); if (!item) { playback_abort(); @@ -2677,9 +2678,9 @@ playback_next_bh(struct player_command *cmd) /* Only add to history if playback started. */ if (cur_streaming->output_start > cur_streaming->stream_start) - history_add(cur_streaming->id); + history_add(cur_streaming->id, cur_streaming->item_id); - item = queue_next(queue, cur_streaming->queueitem_id, shuffle, repeat, 0); + item = queue_next(queue, cur_streaming->item_id, shuffle, repeat, 0); if (!item) { playback_abort(); @@ -3281,7 +3282,7 @@ shuffle_set(struct player_command *cmd) case 1: if (!shuffle) { - cur_id = cur_streaming ? cur_streaming->queueitem_id : 0; + cur_id = cur_streaming ? cur_streaming->item_id : 0; queue_shuffle(queue, cur_id); } /* FALLTHROUGH*/ @@ -3314,7 +3315,7 @@ playerqueue_get_bypos(struct player_command *cmd) item_id = 0; if (ps) { - item_id = ps->queueitem_id; + item_id = ps->item_id; } qi = queue_new_bypos(queue, item_id, count, shuffle); @@ -3352,7 +3353,7 @@ playerqueue_add(struct player_command *cmd) if (shuffle) { - cur_id = cur_streaming ? cur_streaming->queueitem_id : 0; + cur_id = cur_streaming ? cur_streaming->item_id : 0; queue_shuffle(queue, cur_id); } @@ -3374,7 +3375,7 @@ playerqueue_add_next(struct player_command *cmd) items = cmd->arg.queue_add_param.items; - cur_id = cur_streaming ? cur_streaming->queueitem_id : 0; + cur_id = cur_streaming ? cur_streaming->item_id : 0; queue_add_after(queue, items, cur_id); @@ -3407,7 +3408,7 @@ playerqueue_move_bypos(struct player_command *cmd) return -1; } - queue_move_bypos(queue, ps_playing->queueitem_id, cmd->arg.ps_pos[0], cmd->arg.ps_pos[1], shuffle); + queue_move_bypos(queue, ps_playing->item_id, cmd->arg.ps_pos[0], cmd->arg.ps_pos[1], shuffle); cur_plversion++; @@ -3438,7 +3439,7 @@ playerqueue_remove_bypos(struct player_command *cmd) } DPRINTF(E_DBG, L_PLAYER, "Removing item from position %d\n", pos); - queue_remove_bypos(queue, ps_playing->queueitem_id, pos, shuffle); + queue_remove_bypos(queue, ps_playing->item_id, pos, shuffle); return 0; } diff --git a/src/player.h b/src/player.h index cb1e7f07..b1f8e1ec 100644 --- a/src/player.h +++ b/src/player.h @@ -54,7 +54,7 @@ struct player_status { /* Id of the playing file/item in the files database */ uint32_t id; /* Item-Id of the playing file/item in the queue */ - uint32_t queueitem_id; + uint32_t item_id; /* Elapsed time in ms of playing item */ uint32_t pos_ms; /* Length in ms of playing item */ @@ -64,7 +64,7 @@ struct player_status { /* Item id of next item in playlist */ uint32_t next_id; /* Item-Id of the next file/item in the queue */ - uint32_t next_queueitem_id; + uint32_t next_item_id; /* Playlist position of next item */ int next_pos_pl; }; @@ -81,6 +81,7 @@ struct player_history /* Circular buffer of song ids previously played by forked-daapd */ uint32_t id[MAX_HISTORY_COUNT]; + uint32_t item_id[MAX_HISTORY_COUNT]; };