Commit Graph

3544 Commits

Author SHA1 Message Date
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
Max Kellermann 1f0dfb4407 mapper: make the music_directory optional
Without a music_directory, MPD is an excellent streaming client.
2009-01-18 16:56:07 +01:00
Max Kellermann 9933144de7 mapper: make the playlist directory optional 2009-01-18 16:15:45 +01:00
Max Kellermann c2cc3b4923 database: pass database file name to db_init()
Don't include conf.h in database.c.
2009-01-18 16:09:01 +01:00
Max Kellermann 004dfddca3 stats: use GTimer instead of time(NULL)
time(NULL) shows the wrong results when the machine's clock is
changed.
2009-01-18 15:40:53 +01:00
Max Kellermann 14ca99b224 stats: use one db_walk() to obtain stats
Don't use dbUtils.h functions.  This reduces 4 full database walks to
just one.
2009-01-18 15:40:50 +01:00
Max Kellermann 91fb2a29de stats: added num_artists, num_albums
Don't recalculate the number of artists and albums each time a client
requests statistics.  Calculate that once in stats_update().
2009-01-18 15:40:28 +01:00
Max Kellermann 0d449d8df7 stats: no CamelCase
Renamed functions and types.
2009-01-18 15:22:26 +01:00
Avuton Olrich e8c148ab02 mpd version 0.14.1 2009-01-18 14:08:42 +01:00
Max Kellermann 0b29a22c08 conf: replaced getConfigParamValue() with config_get_string()
Don't return a writable pointer.
2009-01-17 20:23:58 +01:00
Max Kellermann 7acc62366c conf: replaced getBoolBlockParam() with config_get_block_bool()
No "force" parameter, pass a default value instead.
2009-01-17 20:23:56 +01:00
Max Kellermann a1a97cc048 conf: use config_get_bool() instead of getBoolConfigParam() 2009-01-17 20:23:33 +01:00
Max Kellermann 4d472c265e conf: no CamelCase, part I
Renamed functions, types, variables.
2009-01-17 20:23:27 +01:00
Max Kellermann 2bbf378dd8 song: skip archive check for non-musicdir files
If a song is not within the music directory ("file:///..."), it has no
"parent directory".  The archive code nonetheless dereferences the
parent pointer, causing a segmentation fault.  Check parent!=NULL.
2009-01-17 19:56:36 +01:00
Max Kellermann 7f3be96efa decoder_api: always notify_wait() for free chunks
One of the previous patches made MPD consume 100% CPU in a busy wait:
when the music_pipe was full, it did not wait (with notify_wait()) for
free chunks, because a variable has a different meaning now.  Always
pass "true" as the "wait" parameter.
2009-01-17 15:23:57 +01:00
Max Kellermann 5395f5f6b3 moved fallback APE/ID3 tag loader to song.c
Some plugins used the APE or ID3 tag loader as a fallback when their
own methods of loading tags did not work.  Move this code out of all
decoder plugins, into song_file_update().
2009-01-17 13:23:42 +01:00