Commit Graph

3659 Commits

Author SHA1 Message Date
Max Kellermann
3a1de741bb queue: added queue_shuffle_order()
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-23 00:08:40 +01:00
Max Kellermann
fb2ef107d1 playlist: check if repeat mode changes
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-23 00:07:20 +01:00
Max Kellermann
9cad342056 playlist: recalculate the queued song after random is toggled
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-23 00:07:10 +01:00
Max Kellermann
144a91cace playlist: moved code to playlist_queue_song_order()
Merged duplicate code from queueNextSongInPlaylist().
2009-01-23 00:06:54 +01:00
Max Kellermann
9d3c14830b playlist: documented struct members
Added several comments.
2009-01-23 00:06:53 +01:00
Max Kellermann
aa9ffcd04d queue: merged songs, songMod, positionToId into struct queue_item
Move everything which belongs together into one common struct.  This
simplifies the implementation of several queue operations.
2009-01-23 00:06:38 +01:00
Max Kellermann
f78cddb407 playlist: moved code to queue.c
Attempt to untie the playlist.c knot: moved the playlist storage code
to queue.c, struct queue.
2009-01-22 23:40:11 +01:00
Max Kellermann
d5dcd0ed66 playlist: corrected shuffle underflow test
Check for current>=0, not queued>=0.
2009-01-22 20:10:17 +01:00
Max Kellermann
1f8a1cbc08 playlist: fix buffer underflow when getting current song
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-22 16:14:34 +01:00
Max Kellermann
1e6a26b6ca locate: use const pointers
Pass const pointers where no writes are performed.
2009-01-22 16:12:34 +01:00
Max Kellermann
d47be76ce0 null: added option to disable timer synchronization
The null plugin synchronizes the playback so it will happen in real
time.  This patch adds a configuration option which disables this: the
playback will then be as fast as possible.  This can be useful to
profile MPD.
2009-01-22 16:06:47 +01:00
Max Kellermann
0122510f2c null: implemented finish() method
Free memory in the finish() method to make valgrind happy.
2009-01-22 16:06:45 +01:00
Max Kellermann
e1707c7ba3 null: no CamelCase
Renamed functions and variables.
2009-01-22 16:06:43 +01:00
Max Kellermann
eefe97bdb1 NEWS: update change log 2009-01-22 16:06:39 +01:00
Max Kellermann
8484c3708b playlist: convert assertion to check in TAG event handler
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-21 17:11:41 +01:00
Max Kellermann
1d02318d21 player_thread: emit PLAYLIST event when new song fails
Break from the loop instead of returning the function.  This calls
player_stop_decoder(), which in turn emits the PLAYLIST event.  This
allows the playlist to re-start the player.
2009-01-21 16:44:32 +01:00
Max Kellermann
a088d9f851 player_thread: check for decoder failure before seeking
The function player_seek_decoder() starts the decoder, but does not
check the return value of player_wait_for_decoder().
2009-01-21 16:36:30 +01:00
Max Kellermann
38a9ad011a player_thread: use bool instead of int
Make player_wait_for_decoder() and play_chunk() return a bool instead
of 0/-1.
2009-01-21 16:31:15 +01:00
Max Kellermann
5541015ac6 command: don't restart player in the "status" command
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-21 16:17:57 +01:00
Max Kellermann
699b31178d playlist: use the "enum player_error" type
Don't assign the result of getPlayerError() to an integer.
2009-01-21 16:17:57 +01:00
Max Kellermann
6fd8c28d2e playlist: free memory with g_free()
Use g_free() consistently with g_malloc().  Don't clear the pointers
after freeing them.
2009-01-21 16:17:57 +01:00
Max Kellermann
b14e48f930 player_thread: request next song only if new one starts playing
The player_thread loop requests the next song from the playlist as
soon as the decoder finishes the song which is currently being played.
This is superfluous, and can lead to synchronization errors and wrong
results.  The playlist already knows when the player starts playing
the next song (player_wait_for_decoder() triggers the PLAYLIST event),
and will then trigger the scheduler to provide the next song.
2009-01-21 16:17:57 +01:00
Max Kellermann
2362ee4a48 use config_get_positive() instead of manual parsing
Simplify some code by using config_get_positive(), instead of doing
manual parsing and validation each time.
2009-01-21 08:48:02 +01:00
Max Kellermann
f11eb14c8a conf: added config_get_positive()
This convenience function parses a configuration value into a positive
integer.  It aborts if parsing fails.
2009-01-21 08:46:59 +01:00
Viliam Mateicka
17222e9561 archiveapi: adding seeking support in zip archives 2009-01-21 06:44:57 +01:00
Max Kellermann
1379db379d player_thread: eliminated duplicate PLAYLIST event
player_wait_for_decoder() emits the PLAYLIST event on success, remove
the duplicate PLAYLIST event in its caller.
2009-01-20 23:11:01 +01:00
Max Kellermann
06bd9ad88f event_pipe: added "TAG" event
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-20 22:49:19 +01:00
Qball Cow
d10910cc90 Add space after sticker: to make it consistent. 2009-01-20 13:55:21 +01:00
Rasmus Steinke
dc7d70ee26 sticker: added guidelines for sticker names 2009-01-19 19:13:55 +01:00
Max Kellermann
f9c693e602 command: added "sticker" command
The "sticker" command allows clients to query or manipulate the
sticker database.  This patch implements the sub-commands "get" and
"set"; more will follow soon (enumeration), as well as extended
"lsinfo" / "playlistinfo" versions.
2009-01-19 19:09:49 +01:00
Max Kellermann
2934585d5a update: delete stickers of deleted songs
When a song is deleted from the database, remove its sticker, too.

What's still missing is some sort of garbage collector after a fresh
database create (--create-db).
2009-01-19 19:01:34 +01:00
Max Kellermann
638f95aa15 sticker: added song sticker library
This is a wrapper for the backend sticker library.  It provides
several glue functions which take a song object instead of type/uri.
2009-01-19 18:54:04 +01:00
Max Kellermann
145ab84d51 sticker: new library for storing dynamic information about songs
"Stickers" are pieces of information attached to existing MPD objects
(e.g. song files, directories, albums).  Clients can create arbitrary
name/value pairs.  MPD itself does not assume any special meaning in
them.
2009-01-19 18:51:57 +01:00
Max Kellermann
fbed96dcea flac: include config.h
The plugin queries build-time configuration variables, and should
include config.h.
2009-01-19 09:54:47 +01:00
Max Kellermann
33e44fbde8 output: don't include conf.h from output_control.h
Minimize header dependencies.
2009-01-18 19:48:31 +01:00
Max Kellermann
65f2386b39 conf: added config_get_block_unsigned()
Eliminate some more getBlockParam() invocations.
2009-01-18 19:45:51 +01:00
Max Kellermann
a531a1e650 conf: added config_get_block_string()
This replaces lots of getBlockParam() invocations.
2009-01-18 19:37:27 +01:00
Max Kellermann
73e466cfef jack: parse "ports" setting with g_strsplit()
Don't modify the configured string.
2009-01-18 19:24:14 +01:00
Max Kellermann
86f6233f46 jack: use audio_output_get_name()
Determine the audio output name with audio_output_get_name() instead
of obtaining the name from the configuration again.
2009-01-18 19:17:52 +01:00
Max Kellermann
70c6cc33f0 conf: removed parseConfigFilePath()
Use config_get_path() instead in mapper.c.
2009-01-18 18:59:10 +01:00
Max Kellermann
a0603d8897 mixer: don't check for NULL before g_free()
The g_free() function includes a NULL check.  We don't have to do it
twice.
2009-01-18 18:55:51 +01:00
Max Kellermann
5ba43e4ac2 daemon: removed unused variable "userpwd"
This causes a segmentation fault...
2009-01-18 18:42:44 +01:00
Max Kellermann
9c93249412 daemon: pass "detach" flag to daemonize()
This way, we don't have to pass the full "Options" object to
daemonize().
2009-01-18 18:29:30 +01:00
Max Kellermann
bfcaecabbd daemon: added daemonize_init(), daemonize_finish()
The constructor/destructor functions parse and free the configuration
properly.  This way, we don't have to load the pid file path more than
once.
2009-01-18 18:29:27 +01:00
Max Kellermann
0dd2dfff9d main: moved the save_state timer to state_file.c
The state_file library should manage its own regular saves.
2009-01-18 18:10:15 +01:00
Max Kellermann
84de45afba state_file: added state_file_init() and state_file_finish()
The constructor/destructor interface should hide the functions
read_state_file() and write_state_file().
2009-01-18 18:09:50 +01:00
Max Kellermann
1482b22351 state_file: include cleanup 2009-01-18 17:54:50 +01:00
Max Kellermann
9c6b2a32f5 conf: added config_get_path()
config_get_path() is an simpler interface than parseConfigFilePath().
2009-01-18 17:54:46 +01:00
Max Kellermann
a3f03f3ccd removed playerData.c
Fetch the configuration variables buffered_chunks and
buffered_before_play just when they are needed.
2009-01-18 17:32:43 +01:00
Max Kellermann
90b34f8e6f main: moved code to daemon.c
Moved changeToUser(), cleanUpPidFile(), killFromPidFile() to
daemon.c.  These are daemonization functions.
2009-01-18 17:15:34 +01:00