aboutsummaryrefslogtreecommitdiffstats
path: root/src/playlist.c (unfollow)
Commit message (Collapse)AuthorFilesLines
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.
2009-01-23playlist: moved code to playlist_queue_song_order()Max Kellermann1-23/+20
Merged duplicate code from queueNextSongInPlaylist().
2009-01-22playlist: moved code to queue.cMax Kellermann1-347/+191
Attempt to untie the playlist.c knot: moved the playlist storage code to queue.c, struct queue.
2009-01-22playlist: corrected shuffle underflow testMax Kellermann1-2/+2
Check for current>=0, not queued>=0.
2009-01-22playlist: fix buffer underflow when getting current songMax Kellermann1-7/+10
The function moveSongInPlaylist() attempted to read the position of the current song, even if it was -1. Check that first. The same bug was in shufflePlaylist().
2009-01-21playlist: convert assertion to check in TAG event handlerMax Kellermann1-2/+3
It is possible that playlist.current is reset before the TAG event handler playlist_tag_event() is called. Convert the assertion into a run-time check.
2009-01-21command: don't restart player in the "status" commandMax Kellermann1-1/+3
Don't attempt to restart the player if it was stopped, but there were still songs left on the playlist. This looks like it has been a workaround for a bug which has been fixed long time ago.
2009-01-21playlist: use the "enum player_error" typeMax Kellermann1-1/+1
Don't assign the result of getPlayerError() to an integer.
2009-01-21playlist: free memory with g_free()Max Kellermann1-10/+5
Use g_free() consistently with g_malloc(). Don't clear the pointers after freeing them.
2009-01-21use config_get_positive() instead of manual parsingMax Kellermann1-12/+3
Simplify some code by using config_get_positive(), instead of doing manual parsing and validation each time.
2009-01-20event_pipe: added "TAG" eventMax Kellermann1-28/+18
The "TAG" event is emitted by the player thread when the current song's tag has changed. Split this event from "PLAYLIST" and make it a separate callback, which is more efficient.
2009-01-18mapper: make the playlist directory optionalMax Kellermann1-0/+3
2009-01-17conf: use config_get_bool() instead of getBoolConfigParam()Max Kellermann1-7/+3
2009-01-17conf: no CamelCase, part IMax Kellermann1-2/+2
Renamed functions, types, variables.
2009-01-16playlist: don't store getBoolConfigParam() in a boolMax Kellermann1-3/+5
getBoolConfigParam() returns an int. It is not possible to check for CONF_BOOL_UNSET after it has been assigned to a bool; use a temporary int value for that.
2009-01-14playlist: safely search the playlist for deleted songMax Kellermann1-1/+1
When a song file is deleted during database update, all pointers to it must be removed from the playlist. The "for" loop in deleteASongFromPlaylist() did not deal with multiple copies of the deleted song properly, and left instances of the (to-be-invalidated) pointer in. Fix this by reversing the loop.
2009-01-13playlist: implement Fisher-Yates shuffle properlyMax Kellermann1-2/+2
MPD's shuffling algorithm was not implemented well: it considers songs which were already swapped, making it somewhat non-random. Fix the Fisher-Yates shuffle algorithm by passing the proper bounds to the PRNG.
2009-01-10playlist: pass unsigned integers to playlistInfo()Max Kellermann1-14/+6
A song index cannot be negative. Also require the second parameter to be valid.
2009-01-10playlist: exclude end of rangeMax Kellermann1-1/+1
In a range "start:end", "end" itself should not be included. Use the same semantics as other languages implementing ranges, e.g. Python.
2009-01-10command: playlistinfo now uses a range argument rather than just a song idThomas Jansen1-1/+6
Loosely based on a patch provided by lesion in bug #1766. The playlistinfo command can now retrieve ranges of the playlist. The new argument indicates which entry is the last one that will be displayed. The number of displayed entries may be smaller than expected if the end of the playlist is reached. Previous usage: playlistinfo [start] New usage: playlistinfo [start[:end]]
2009-01-04song: allocate the result of song_get_url()Max Kellermann1-24/+28
2009-01-04playlist: log errors during loadPlaylist()Max Kellermann1-3/+2
Don't call command_error() if loading a song from the playlist fails. This may result in assertion failures, since command_error() may be called more than once.
2009-01-04playlist: use GLib loggingMax Kellermann1-21/+19