#ifndef MPDCLIENT_H #define MPDCLIENT_H #include "libmpdclient.h" #define MPD_VERSION(c,x,y,z) (c->connection->version[0]*10000+c->connection->version[1]*100+c->connection->version[2] >= \ x*10000+y*100+z) /****************************************************************************/ /* 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_utf8(mpdclient_t *c, gchar *path); gint mpdclient_cmd_volume(mpdclient_t *c, gint value); gint mpdclient_cmd_add_path(mpdclient_t *c, gchar *path); gint mpdclient_cmd_add_path_utf8(mpdclient_t *c, gchar *path); 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_save_playlist_utf8(mpdclient_t *c, gchar *filename); gint mpdclient_cmd_load_playlist_utf8(mpdclient_t *c, gchar *filename_utf8); gint mpdclient_cmd_delete_playlist_utf8(mpdclient_t *c, gchar *filename_utf8); /*** error callbacks *****************************************************/ #define IS_ACK_ERROR(n) (n & MPD_ERROR_ACK) #define GET_ACK_ERROR_CODE(n) ((n & 0xFF00) >> 8) 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