X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fmpdclient.h;h=1d3b6e0b547d61f292480d6eff9da533230e4a03;hb=efae3a330fbfe9b85690b0b01a5b640e95613a6e;hp=7756710173a368116e2165f161bf346919bde78f;hpb=445a3a03d4bd0f3da0e2bc4ecc65021faf24325c;p=ncmpc.git diff --git a/src/mpdclient.h b/src/mpdclient.h index 7756710..1d3b6e0 100644 --- a/src/mpdclient.h +++ b/src/mpdclient.h @@ -1,6 +1,7 @@ #ifndef MPDCLIENT_H #define MPDCLIENT_H +#include "config.h" #include "playlist.h" #include "Compiler.h" @@ -9,20 +10,55 @@ struct filelist; struct mpdclient { +#ifdef ENABLE_ASYNC_CONNECT + /** + * These settings are used to connect to MPD asynchronously. + */ + struct mpd_settings *settings; + +#ifndef WIN32 + /** + * A second set of settings, just in case #settings did not + * work. This is only used if #settings refers to a local + * socket path, and this one is supposed to be a fallback to + * IP on the default port (6600). + */ + struct mpd_settings *settings2; +#endif + +#else + const char *host; + unsigned port; +#endif + + unsigned timeout_ms; + + const char *password; + /* playlist */ struct mpdclient_playlist playlist; +#ifdef ENABLE_ASYNC_CONNECT + struct aconnect *async_connect; +#endif + struct mpd_connection *connection; /** * Tracks idle events. It is automatically called by - * mpdclient_get_connection() and mpdclient_put_connection(). + * mpdclient_get_connection(). */ struct mpd_glib_source *source; struct mpd_status *status; const struct mpd_song *song; + /** + * The GLib source id which re-enters MPD idle mode before the + * next main loop interation. + */ + unsigned enter_idle_source_id; + /** * This attribute is incremented whenever the connection changes * (i.e. on disconnection and (re-)connection). @@ -36,6 +72,10 @@ struct mpdclient { */ enum mpd_idle events; +#if defined(ENABLE_ASYNC_CONNECT) && !defined(WIN32) + bool connecting2; +#endif + /** * This attribute is true when the connection is currently in * "idle" mode, and the #mpd_glib_source waits for an event. @@ -79,10 +119,21 @@ mpdclient_finish_command(struct mpdclient *c) } struct mpdclient * -mpdclient_new(void); +mpdclient_new(const gchar *host, unsigned port, + unsigned timeout_ms, const gchar *password); void mpdclient_free(struct mpdclient *c); +/** + * Determine a human-readable "name" of the settings currently used to + * connect to MPD. + * + * @return an allocated string that needs to be freed (with g_free()) + * by the caller + */ +char * +mpdclient_settings_name(const struct mpdclient *c); + gcc_pure static inline bool mpdclient_is_connected(const struct mpdclient *c) @@ -90,6 +141,21 @@ mpdclient_is_connected(const struct mpdclient *c) return c->connection != NULL; } +/** + * Is this object "dead"? i.e. not connected and not currently doing + * anything to connect. + */ +gcc_pure +static inline bool +mpdclient_is_dead(const struct mpdclient *c) +{ + return c->connection == NULL +#ifdef ENABLE_ASYNC_CONNECT + && c->async_connect == NULL +#endif + ; +} + gcc_pure static inline bool mpdclient_is_playing(const struct mpdclient *c) @@ -108,9 +174,8 @@ mpdclient_get_current_song(const struct mpdclient *c) : NULL; } -bool -mpdclient_connect(struct mpdclient *c, const gchar *host, gint port, - unsigned timeout_ms, const gchar *password); +void +mpdclient_connect(struct mpdclient *c); void mpdclient_disconnect(struct mpdclient *c); @@ -121,9 +186,6 @@ mpdclient_update(struct mpdclient *c); struct mpd_connection * mpdclient_get_connection(struct mpdclient *c); -void -mpdclient_put_connection(struct mpdclient *c); - /*** MPD Commands **********************************************************/ bool