aboutsummaryrefslogtreecommitdiffstats
path: root/src/playlist.c (unfollow)
Commit message (Collapse)AuthorFilesLines
2010-03-07playlist: fix single+repeat in random modeMax Kellermann1-1/+2
With single+repeat enabled, it is expected that MPD repeats the current song over andd over. With random mode also enabled, this didn't work, because the song order was shuffled internally. This patch adds a special check for this case.
2009-04-25playlist_control: use GTimer in previousSongInPlaylist()Max Kellermann1-0/+4
To determine whether to rewind the current song or to go to the previous song, use a GTimer instead of manually diffing time(NULL).
2009-03-30implemented the 'consume' modeRomain Bignon1-0/+19
Consume mode removes each song played
2009-03-27renamed smartstop to single and changed behaviorRomain Bignon1-7/+16
When single mode is enabled, after current song it stops playback, or it replay same song if repeat mode is activated.
2009-03-27implements the smartstop featureRomain Bignon1-0/+20
The smartstop feature is a way to tell mpd to stop playing after current song. This patche provides: - 'state' command returns 'smartstop' state (1 or 0) - 'smartstop' can activate or not the smartstop state - when song is terminated, mpd stops playing and smartstop is set to 0
2009-03-13all: Update copyright header.Avuton Olrich1-6/+7
This updates the copyright header to all be the same, which is pretty much an update of where to mail request for a copy of the GPL and the years of the MPD project. This also puts all committers under 'The Music Player Project' umbrella. These entries should go individually in the AUTHORS file, for consistancy.
2009-02-11playlist: don't preserve "current" song after "random" toggleMax Kellermann1-2/+4
When MPD is not playing, it may still remember which is the "current" song. When you switch to "random" mode, MPD will always start playing exactly this song. This defies the goal of "random" mode a little. Clear the "current" song when MPD is not playing during the "random" mode switch.
2009-02-09playlist: fixed "next song" checkVladimir S Eremin1-3/+2
Check if the "current+1" position is actually valid.
2009-02-09playlist: provide information about "next song"Vladimir S Eremin1-0/+15
In random mode, this patch allows clients to see the "next song" in the queue.
2009-02-04playlist: added G_LOG_DOMAINMax Kellermann1-3/+5
Removed the explicit "playlist:" prefix from all log messages.
2009-02-04playlist: pass const playlist pointersMax Kellermann1-6/+6
Pass constant playlist objects to functions which do not modify it.
2009-02-04playlist: moved code to playlist_edit.cMax Kellermann1-369/+0
Moved functions for playlist editing (append, delete, shuffle, move) to playlist_edit.c.
2009-02-04playlist: moved code to playlist_control.cMax Kellermann1-241/+4
Moved handlers for control commands (play, stop, next, prev) to playlist_control.c.
2009-02-04playlist: call syncPlaylistWithQueue() only in the event handlerMax Kellermann1-4/+0
Don't call syncPlaylistWithQueue() in nextSongInPlaylist() and previousSongInPlaylist(). This is a relic from the time when there was no event, and was a workaround to the timing problem.
2009-02-04playlist: renamed global "playlist" variable to "g_playlist"Max Kellermann1-306/+310
Export the "g_playlist" variable, and pass it to all playlist functions. This way, we can split playlist.c easier into separate parts. The code which initializes the singleton variable is moved to playlist_global.c.
2009-02-04playlist: moved code to playlist_state.cMax Kellermann1-134/+3
Moved everything related to saving or loading the playlist from/to the state file to playlist_state.c.
2009-02-04playlist: simplified playlist.queued updatesMax Kellermann1-117/+111
Before every operation which modifies the playlist, remember a pointer to the song struct. After the modification, determine the "next song" again, and if it differs, dequeue and queue the new song. This removes a lot of complexity from the playlist update code, and makes it more robust.
2009-01-30playlist: clear playlist.playing when deleting current songMax Kellermann1-0/+1
This fixes an assertion failure: when the last song in the playlist was playing, and you deleted it, MPD aborted.
2009-01-25playlist: moved is_valid_playlist_name() to stored_playlist.cMax Kellermann1-16/+0
2009-01-25playlist: moved savePlaylist() and loadPlaylsit() to playlist_save.cMax Kellermann1-61/+0
2009-01-25playlist: removed g_rand, PLAYLIST_HASH_MULTMax Kellermann1-10/+0
Both are unused.
2009-01-25queue: added queue_shuffle_order_last()Max Kellermann1-6/+3
This function shuffles the last song of a range. This is used by addSongToPlaylist().
2009-01-25stored_playlist: moved configuration variables from playlist.cMax Kellermann1-14/+3
Don't declare and export variables specific to stored playlists in playlist.c/playlist.h.
2009-01-24playlist: removed locate functions to queue_print.cMax Kellermann1-33/+0
Now playlist.c does not contain any protocol specific code anymore.
2009-01-24locate: renamed LocateTagItem to "struct locate_item"Max Kellermann1-4/+5
No CamelCase and no typedefs.
2009-01-24command: use queue_print_*()Max Kellermann1-48/+0
Replaced several wrapper functions from playlist.c, and make command.c use the queue print functions directly.
2009-01-24playlist: added playlist_get_queue()Max Kellermann1-0/+6
To allow code outside playlist.c to access the "queue" object, provide a function which returns a const pointer.
2009-01-24playlist: renamed the Playlist typedef to "struct playlist"Max Kellermann1-1/+1
No typedefs.
2009-01-24playlist: moved stopOnError and errorCount into struct playlistMax Kellermann1-11/+9
Moved the 2 remaining global variables into the playlist struct.
2009-01-23playlist: restore random mode after playlist is loadedMax Kellermann1-8/+6
When the playlist was loaded from the state file, the order numbers were the same as the positions. In random mode, we need to shuffle the queue order. To accomplish that, call setPlaylistRandomStatus() at the end of readPlaylistState(), and do a fresh shuffle.
2009-01-23playlist: removed song_id_to_position()Max Kellermann1-12/+7
song_id_to_position() is only a wrapper for queue_id_to_position().
2009-01-23playlist: fix "clear" crash in random modeMax Kellermann1-0/+5
When MPD is not playing while in random mode, and the client issues the "clear" command, MPD crashes in stopPlaylist(), or more exactly, in queue_order_to_position(-1). Exit from stopPlaylist() if MPD isn't playing.
2009-01-23playlist: moved saving/loading code to queue_save.cMax Kellermann1-26/+4
Create a new library which saves/loads the queue to/from the state file.
2009-01-23playlist: moved PlaylistInfo() to playlist_print.cMax Kellermann1-30/+0
PlaylistInfo() (notice the capital 'P') sends a stored playlist to the client. Move it to a separate library, where all the code which glues the playlist and the MPD protocol together will live.
2009-01-23playlist: moved some printing code to queue_print.cMax Kellermann1-32/+9
Moved protocol printing functions which operate on the queue to queue_print.c.
2009-01-23playlist: pass const pointers to search functionsMax Kellermann1-15/+11
The LocateTagItem objects are not modified.
2009-01-23playlist: removed swapSongs()Max Kellermann1-8/+4
swapSongs() is only a wrapper for queue_swap().
2009-01-23playlist: don't unpause on deleteMax Kellermann1-1/+3
When you delete a song from the playlist which was paused, MPD forgot that it was paused and started playing the next song.
2009-01-23playlist: added source commentsMax Kellermann1-4/+143
The playlist.c source is currently quite hard to understand. I have managed to wrap my head around it, and this patch attempts to explain it to the next guy.
2009-01-23playlist: assert in playPlaylistIfPlayerStopped()Max Kellermann1-15/+15
The function playPlaylistIfPlayerStopped() is only called when the player thread is stopped. Converted that runtime check into an assertion, and remove one indent level.
2009-01-23playlist: don't shuffle if not in random modeMax Kellermann1-1/+1
One of the previous patches removed the "random" mode check from nextSongInPlaylist(), which caused a shuffle whenever MPD wrapped to the first song in "repeat" mode. Re-add that "random" check.
2009-01-23playlist: removed unreachable "playing" checkMax Kellermann1-11/+7
In playPlaylist(), the second "song==-1 && playing" check can never be reached, because at this point, the function has already returned (after unpausing).
2009-01-23playlist: removed stopOnError flag from playPlaylist()Max Kellermann1-6/+6
All callers pass false. Don't bother to collect that parameter.
2009-01-23playlist: restart playing in deleteFromPlaylist()Max Kellermann1-22/+9
When a song is deleted, start playing the next song immediately, within deleteFromPlaylist(). This allows us to remove the ugly playlist_noGoToNext flag, and the currentSongInPlaylist() function.
2009-01-23playlist: calculate next song before deleting the current oneMax Kellermann1-11/+5
By calling queue_next_order() before playlist.current is invalidated (by the deletion of a song), we get more robust results, and the code becomes a little bit easier. incrPlaylistCurrent() is unused now, and can be removed.
2009-01-23playlist: return early from shufflePlaylist()Max Kellermann1-23/+24
Remove one indent level by returning diretly after the check. This makes the function more readable.
2009-01-23playlist: replaced playlist_state with flag playlist.playingMax Kellermann1-33/+26
There were only two possible states: STOP and PLAY. The code looks a lot easier if we use a bool instead. Move the variable into the playlist struct.
2009-01-23queue: added queue_shuffle_order()Max Kellermann1-35/+35
The function shuffles the virtual order of songs, but does not move them physically. This is used in random mode. The new function replaces playlist.c's randomizeOrder() function, which was aware of playlist.current and playlist.queued. The latter is always -1 anyway, and the former as preserved by the caller, by converting playlist.current to a position, and then back to an order number.
2009-01-23playlist: check if repeat mode changesMax Kellermann1-1/+4
Add a "changed" check to setPlaylistRepeatStatus(): when the new repeat mode is the same as the old one, don't do anything at all. No more checks, no "idle" event.
2009-01-23playlist: recalculate the queued song after random is toggledMax Kellermann1-0/+3
When the random mode is toggled, MPD did not clear the queue. Because of this, MPD continued with the next (random or non-random) song according to the previous mode. Clear the queued song to fix that.