1 #ifndef MPDCLIENT_H
2 #define MPDCLIENT_H
4 #include "libmpdclient.h"
5 #include "playlist.h"
6 #include "filelist.h"
8 #define MPD_VERSION_EQ(c,x,y,z) (c->connection->version[0] == x && \
9 c->connection->version[1] == y && \
10 c->connection->version[2] == z )
12 #define MPD_VERSION_LT(c,x,y,z) ( c->connection->version[0]<x || \
13 (c->connection->version[0]==x && c->connection->version[1]<y) || \
14 (c->connection->version[0]==x && c->connection->version[1]==y && \
15 c->connection->version[2]<z) )
17 typedef struct mpdclient {
18 /* playlist */
19 mpdclient_playlist_t playlist;
21 /* Callbacks */
22 GList *error_callbacks;
23 GList *playlist_callbacks;
24 GList *browse_callbacks;
26 mpd_Connection *connection;
27 mpd_Status *status;
28 mpd_Song *song;
30 gboolean need_update;
31 } mpdclient_t;
33 /** functions ***************************************************************/
35 gint
36 mpdclient_finish_command(mpdclient_t *c);
38 mpdclient_t *mpdclient_new(void);
39 void mpdclient_free(mpdclient_t *c);
40 gint mpdclient_connect(mpdclient_t *c, gchar *host, gint port,
41 gfloat timeout, gchar *password);
42 gint mpdclient_disconnect(mpdclient_t *c);
43 gint mpdclient_update(mpdclient_t *c);
46 /*** MPD Commands **********************************************************/
47 gint mpdclient_cmd_play(mpdclient_t *c, gint index);
48 gint mpdclient_cmd_pause(mpdclient_t *c, gint value);
49 gint
50 mpdclient_cmd_crop(mpdclient_t *c);
51 gint mpdclient_cmd_stop(mpdclient_t *c);
52 gint mpdclient_cmd_next(mpdclient_t *c);
53 gint mpdclient_cmd_prev(mpdclient_t *c);
54 gint mpdclient_cmd_seek(mpdclient_t *c, gint id, gint pos);
55 gint mpdclient_cmd_shuffle(mpdclient_t *c);
56 gint mpdclient_cmd_clear(mpdclient_t *c);
57 gint mpdclient_cmd_repeat(mpdclient_t *c, gint value);
58 gint mpdclient_cmd_random(mpdclient_t *c, gint value);
59 gint mpdclient_cmd_crossfade(mpdclient_t *c, gint value);
60 gint mpdclient_cmd_db_update_utf8(mpdclient_t *c, gchar *path);
61 gint mpdclient_cmd_volume(mpdclient_t *c, gint value);
62 gint mpdclient_cmd_add_path(mpdclient_t *c, gchar *path);
63 gint mpdclient_cmd_add_path_utf8(mpdclient_t *c, gchar *path);
65 gint mpdclient_cmd_add(mpdclient_t *c, struct mpd_song *song);
66 gint mpdclient_cmd_delete(mpdclient_t *c, gint index);
67 gint mpdclient_cmd_move(mpdclient_t *c, gint old_index, gint new_index);
69 gint mpdclient_cmd_save_playlist(mpdclient_t *c, gchar *filename);
70 gint mpdclient_cmd_save_playlist_utf8(mpdclient_t *c, gchar *filename);
71 gint mpdclient_cmd_load_playlist_utf8(mpdclient_t *c, gchar *filename_utf8);
72 gint mpdclient_cmd_delete_playlist(mpdclient_t *c, gchar *filename);
73 gint mpdclient_cmd_delete_playlist_utf8(mpdclient_t *c, gchar *filename_utf8);
75 /* list functions */
76 GList *mpdclient_get_artists_utf8(mpdclient_t *c);
77 GList *mpdclient_get_albums_utf8(mpdclient_t *c, gchar *artist_utf8);
80 /*** error callbacks *****************************************************/
82 #define IS_ACK_ERROR(n) (n & MPD_ERROR_ACK)
83 #define GET_ACK_ERROR_CODE(n) ((n & 0xFF00) >> 8)
85 typedef void (*mpdc_error_cb_t) (mpdclient_t *c, gint error, const gchar *msg);
87 void mpdclient_install_error_callback(mpdclient_t *c, mpdc_error_cb_t cb);
88 void mpdclient_remove_error_callback(mpdclient_t *c, mpdc_error_cb_t cb);
90 /*** playlist functions **************************************************/
92 /* update the complete playlist */
93 gint mpdclient_playlist_update(struct mpdclient *c);
95 /* get playlist changes */
96 gint mpdclient_playlist_update_changes(struct mpdclient *c);
99 /*** mpdclient playlist callbacks *****************************************/
101 #define PLAYLIST_EVENT_UPDATED 0x01
102 #define PLAYLIST_EVENT_CLEAR 0x02
103 #define PLAYLIST_EVENT_DELETE 0x03
104 #define PLAYLIST_EVENT_ADD 0x04
105 #define PLAYLIST_EVENT_MOVE 0x05
108 typedef void (*mpdc_list_cb_t) (mpdclient_t *c, int event, gpointer data);
110 /* install a playlist callback function */
111 void mpdclient_install_playlist_callback(mpdclient_t *c, mpdc_list_cb_t cb);
113 /* remove a playlist callback function */
114 void mpdclient_remove_playlist_callback(mpdclient_t *c, mpdc_list_cb_t cb);
117 /* issue a playlist callback */
118 void mpdclient_playlist_callback(mpdclient_t *c, int event, gpointer data);
121 /*** filelist functions ***************************************************/
123 mpdclient_filelist_t *mpdclient_filelist_get(mpdclient_t *c, const gchar *path);
124 mpdclient_filelist_t *mpdclient_filelist_search(mpdclient_t *c,
125 int exact_match,
126 int table,
127 gchar *path);
128 mpdclient_filelist_t *mpdclient_filelist_search_utf8(mpdclient_t *c,
129 int exact_match,
130 int table,
131 gchar *path);
132 mpdclient_filelist_t *mpdclient_filelist_update(mpdclient_t *c,
133 mpdclient_filelist_t *flist);
135 /* add all songs in filelist to the playlist */
136 int mpdclient_filelist_add_all(mpdclient_t *c, mpdclient_filelist_t *fl);
138 /*** mpdclient browse callbacks ********************************************/
140 #define BROWSE_DB_UPDATED 0x01
141 #define BROWSE_PLAYLIST_SAVED 0x02
142 #define BROWSE_PLAYLIST_DELETED 0x03
145 /* install a playlist callback function */
146 void mpdclient_install_browse_callback(mpdclient_t *c, mpdc_list_cb_t cb);
148 /* remove a playlist callback function */
149 void mpdclient_remove_browse_callback(mpdclient_t *c, mpdc_list_cb_t cb);
152 /* issue a playlist callback */
153 void mpdclient_browse_callback(mpdclient_t *c, int event, gpointer data);
155 /* sort by list-format */
156 gint compare_filelistentry_format(gconstpointer filelist_entry1, gconstpointer filelist_entry2);
158 #endif