diff options
Diffstat (limited to 'src/mpdclient.h')
-rw-r--r-- | src/mpdclient.h | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/src/mpdclient.h b/src/mpdclient.h new file mode 100644 index 000000000..86f1b0ce8 --- /dev/null +++ b/src/mpdclient.h @@ -0,0 +1,173 @@ +#ifndef MPDCLIENT_H +#define MPDCLIENT_H +#include "libmpdclient.h" + +/****************************************************************************/ +/* Playlist */ +/****************************************************************************/ + +typedef struct +{ + /* playlist id */ + long long id; + /* list length */ + guint length; + /* true if the list is updated */ + gboolean updated; + /* the list */ + GList *list; + +} mpdclient_playlist_t; + + +typedef struct +{ + guint flags; + mpd_InfoEntity *entity; +} filelist_entry_t; + +typedef struct +{ + /* path */ + gchar *path; + /* list length */ + guint length; + /* true if the list is updated */ + gboolean updated; + /* the list */ + GList *list; + +} mpdclient_filelist_t; + +typedef struct +{ + /* playlist */ + mpdclient_playlist_t playlist; + + /* Callbacks */ + GList *error_callbacks; + GList *playlist_callbacks; + GList *browse_callbacks; + + mpd_Connection *connection; + mpd_Status *status; + mpd_Song *song; + + gboolean need_update; + +} mpdclient_t; + +/** functions ***************************************************************/ +mpdclient_t *mpdclient_new(void); +mpdclient_t *mpdclient_free(mpdclient_t *c); +gint mpdclient_connect(mpdclient_t *c, gchar *host, gint port, + gfloat timeout, gchar *password); +gint mpdclient_disconnect(mpdclient_t *c); +gint mpdclient_update(mpdclient_t *c); + + +/*** MPD Commands **********************************************************/ +gint mpdclient_cmd_play(mpdclient_t *c, gint index); +gint mpdclient_cmd_pause(mpdclient_t *c, gint value); +gint mpdclient_cmd_stop(mpdclient_t *c); +gint mpdclient_cmd_next(mpdclient_t *c); +gint mpdclient_cmd_prev(mpdclient_t *c); +gint mpdclient_cmd_seek(mpdclient_t *c, gint id, gint pos); +gint mpdclient_cmd_shuffle(mpdclient_t *c); +gint mpdclient_cmd_clear(mpdclient_t *c); +gint mpdclient_cmd_repeat(mpdclient_t *c, gint value); +gint mpdclient_cmd_random(mpdclient_t *c, gint value); +gint mpdclient_cmd_crossfade(mpdclient_t *c, gint value); +gint mpdclient_cmd_db_update(mpdclient_t *c); +gint mpdclient_cmd_volume(mpdclient_t *c, gint value); + +gint mpdclient_cmd_add(mpdclient_t *c, mpd_Song *song); +gint mpdclient_cmd_delete(mpdclient_t *c, gint index); +gint mpdclient_cmd_move(mpdclient_t *c, gint old_index, gint new_index); + +gint mpdclient_cmd_save_playlist(mpdclient_t *c, gchar *filename); +gint mpdclient_cmd_load_playlist(mpdclient_t *c, gchar *filename_utf8); +gint mpdclient_cmd_delete_playlist(mpdclient_t *c, gchar *filename_utf8); + + +/*** error callbacks *****************************************************/ +typedef void (*mpdc_error_cb_t) (mpdclient_t *c, gint error, gchar *msg); + +void mpdclient_install_error_callback(mpdclient_t *c, mpdc_error_cb_t cb); +void mpdclient_remove_error_callback(mpdclient_t *c, mpdc_error_cb_t cb); + +/*** playlist functions **************************************************/ + +/* free a playlist */ +gint mpdclient_playlist_free(mpdclient_playlist_t *playlist); +/* update the complete playlist */ +gint mpdclient_playlist_update(mpdclient_t *c); +/* get playlist changes */ +gint mpdclient_playlist_update_changes(mpdclient_t *c); + +GList *playlist_lookup(mpdclient_t *c, gint id); +mpd_Song *playlist_lookup_song(mpdclient_t *c, gint id); +mpd_Song *playlist_get_song(mpdclient_t *c, gint index); +gint playlist_get_index(mpdclient_t *c, mpd_Song *song); +gint playlist_get_index_from_id(mpdclient_t *c, gint id); +gint playlist_get_index_from_file(mpdclient_t *c, gchar *filename); + + + +/*** mpdclient playlist callbacks *****************************************/ + +#define PLAYLIST_EVENT_UPDATED 0x01 +#define PLAYLIST_EVENT_CLEAR 0x02 +#define PLAYLIST_EVENT_DELETE 0x03 +#define PLAYLIST_EVENT_ADD 0x04 +#define PLAYLIST_EVENT_MOVE 0x05 + + +typedef void (*mpdc_list_cb_t) (mpdclient_t *c, int event, gpointer data); + +/* install a playlist callback function */ +void mpdclient_install_playlist_callback(mpdclient_t *c, mpdc_list_cb_t cb); + +/* remove a playlist callback function */ +void mpdclient_remove_playlist_callback(mpdclient_t *c, mpdc_list_cb_t cb); + + +/* issue a playlist callback */ +void mpdclient_playlist_callback(mpdclient_t *c, int event, gpointer data); + + +/*** filelist functions ***************************************************/ +mpdclient_filelist_t *mpdclient_filelist_free(mpdclient_filelist_t *filelist); +mpdclient_filelist_t *mpdclient_filelist_get(mpdclient_t *c, gchar *path); +mpdclient_filelist_t *mpdclient_filelist_update(mpdclient_t *c, + mpdclient_filelist_t *flist); + +#define HIGHLIGHT (0x01) +void mpdclient_filelist_set_flags(mpdclient_filelist_t *flist, + mpd_Song *song, + guint flags); + +void mpdclient_filelist_clear_flags(mpdclient_filelist_t *flist); +void mpdclient_filelist_clear_flags(mpdclient_filelist_t *flist); +filelist_entry_t *mpdclient_filelist_find_song(mpdclient_filelist_t *flist, + mpd_Song *song); + +/*** mpdclient browse callbacks ********************************************/ + +#define BROWSE_DB_UPDATED 0x01 +#define BROWSE_PLAYLIST_SAVED 0x02 +#define BROWSE_PLAYLIST_DELETED 0x03 + + +/* install a playlist callback function */ +void mpdclient_install_browse_callback(mpdclient_t *c, mpdc_list_cb_t cb); + +/* remove a playlist callback function */ +void mpdclient_remove_browse_callback(mpdclient_t *c, mpdc_list_cb_t cb); + + +/* issue a playlist callback */ +void mpdclient_browse_callback(mpdclient_t *c, int event, gpointer data); + + +#endif |