f1b993756b2876d353838f6ff8e11fbc1466ce7f
1 #ifndef MPDCLIENT_H
2 #define MPDCLIENT_H
4 #include "libmpdclient.h"
6 #include <glib.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) )
19 /****************************************************************************/
20 /* Playlist */
21 /****************************************************************************/
23 typedef struct mpdclient_playlist {
24 /* playlist id */
25 long long id;
26 /* true if the list is updated */
27 gboolean updated;
28 /* the list */
29 GArray *list;
31 } mpdclient_playlist_t;
33 typedef struct filelist_entry {
34 guint flags;
35 mpd_InfoEntity *entity;
36 } filelist_entry_t;
38 typedef struct mpdclient_filelist {
39 /* path */
40 gchar *path;
41 /* list length */
42 guint length;
43 /* true if the list is updated */
44 gboolean updated;
45 /* the list */
46 GList *list;
48 } mpdclient_filelist_t;
50 typedef struct mpdclient {
51 /* playlist */
52 mpdclient_playlist_t playlist;
54 /* Callbacks */
55 GList *error_callbacks;
56 GList *playlist_callbacks;
57 GList *browse_callbacks;
59 mpd_Connection *connection;
60 mpd_Status *status;
61 mpd_Song *song;
63 gboolean need_update;
64 } mpdclient_t;
66 /** functions ***************************************************************/
68 gint
69 mpdclient_finish_command(mpdclient_t *c);
71 mpdclient_t *mpdclient_new(void);
72 mpdclient_t *mpdclient_free(mpdclient_t *c);
73 gint mpdclient_connect(mpdclient_t *c, gchar *host, gint port,
74 gfloat timeout, gchar *password);
75 gint mpdclient_disconnect(mpdclient_t *c);
76 gint mpdclient_update(mpdclient_t *c);
79 /*** MPD Commands **********************************************************/
80 gint mpdclient_cmd_play(mpdclient_t *c, gint index);
81 gint mpdclient_cmd_pause(mpdclient_t *c, gint value);
82 gint mpdclient_cmd_stop(mpdclient_t *c);
83 gint mpdclient_cmd_next(mpdclient_t *c);
84 gint mpdclient_cmd_prev(mpdclient_t *c);
85 gint mpdclient_cmd_seek(mpdclient_t *c, gint id, gint pos);
86 gint mpdclient_cmd_shuffle(mpdclient_t *c);
87 gint mpdclient_cmd_clear(mpdclient_t *c);
88 gint mpdclient_cmd_repeat(mpdclient_t *c, gint value);
89 gint mpdclient_cmd_random(mpdclient_t *c, gint value);
90 gint mpdclient_cmd_crossfade(mpdclient_t *c, gint value);
91 gint mpdclient_cmd_db_update_utf8(mpdclient_t *c, gchar *path);
92 gint mpdclient_cmd_volume(mpdclient_t *c, gint value);
93 gint mpdclient_cmd_add_path(mpdclient_t *c, gchar *path);
94 gint mpdclient_cmd_add_path_utf8(mpdclient_t *c, gchar *path);
96 gint mpdclient_cmd_add(mpdclient_t *c, struct mpd_song *song);
97 gint mpdclient_cmd_delete(mpdclient_t *c, gint index);
98 gint mpdclient_cmd_move(mpdclient_t *c, gint old_index, gint new_index);
100 gint mpdclient_cmd_save_playlist(mpdclient_t *c, gchar *filename);
101 gint mpdclient_cmd_save_playlist_utf8(mpdclient_t *c, gchar *filename);
102 gint mpdclient_cmd_load_playlist_utf8(mpdclient_t *c, gchar *filename_utf8);
103 gint mpdclient_cmd_delete_playlist(mpdclient_t *c, gchar *filename);
104 gint mpdclient_cmd_delete_playlist_utf8(mpdclient_t *c, gchar *filename_utf8);
106 /* list functions */
107 GList *mpdclient_get_artists_utf8(mpdclient_t *c);
108 GList *mpdclient_get_albums_utf8(mpdclient_t *c, gchar *artist_utf8);
111 /*** error callbacks *****************************************************/
113 #define IS_ACK_ERROR(n) (n & MPD_ERROR_ACK)
114 #define GET_ACK_ERROR_CODE(n) ((n & 0xFF00) >> 8)
116 typedef void (*mpdc_error_cb_t) (mpdclient_t *c, gint error, const gchar *msg);
118 void mpdclient_install_error_callback(mpdclient_t *c, mpdc_error_cb_t cb);
119 void mpdclient_remove_error_callback(mpdclient_t *c, mpdc_error_cb_t cb);
121 /*** playlist functions **************************************************/
123 /* free a playlist */
124 gint mpdclient_playlist_free(mpdclient_playlist_t *playlist);
125 /* update the complete playlist */
126 gint mpdclient_playlist_update(mpdclient_t *c);
127 /* get playlist changes */
128 gint mpdclient_playlist_update_changes(mpdclient_t *c);
130 struct mpd_song *playlist_lookup_song(mpdclient_t *c, gint id);
131 struct mpd_song *playlist_get_song(mpdclient_t *c, gint index);
132 gint playlist_get_index(mpdclient_t *c, struct mpd_song *song);
133 gint playlist_get_index_from_id(mpdclient_t *c, gint id);
134 gint playlist_get_index_from_file(mpdclient_t *c, gchar *filename);
138 /*** mpdclient playlist callbacks *****************************************/
140 #define PLAYLIST_EVENT_UPDATED 0x01
141 #define PLAYLIST_EVENT_CLEAR 0x02
142 #define PLAYLIST_EVENT_DELETE 0x03
143 #define PLAYLIST_EVENT_ADD 0x04
144 #define PLAYLIST_EVENT_MOVE 0x05
147 typedef void (*mpdc_list_cb_t) (mpdclient_t *c, int event, gpointer data);
149 /* install a playlist callback function */
150 void mpdclient_install_playlist_callback(mpdclient_t *c, mpdc_list_cb_t cb);
152 /* remove a playlist callback function */
153 void mpdclient_remove_playlist_callback(mpdclient_t *c, mpdc_list_cb_t cb);
156 /* issue a playlist callback */
157 void mpdclient_playlist_callback(mpdclient_t *c, int event, gpointer data);
160 /*** filelist functions ***************************************************/
161 mpdclient_filelist_t *mpdclient_filelist_free(mpdclient_filelist_t *filelist);
162 mpdclient_filelist_t *mpdclient_filelist_get(mpdclient_t *c, const gchar *path);
163 mpdclient_filelist_t *mpdclient_filelist_search(mpdclient_t *c,
164 int exact_match,
165 int table,
166 gchar *path);
167 mpdclient_filelist_t *mpdclient_filelist_search_utf8(mpdclient_t *c,
168 int exact_match,
169 int table,
170 gchar *path);
171 mpdclient_filelist_t *mpdclient_filelist_update(mpdclient_t *c,
172 mpdclient_filelist_t *flist);
174 #define HIGHLIGHT (0x01)
175 void mpdclient_filelist_set_flags(mpdclient_filelist_t *flist,
176 struct mpd_song *song,
177 guint flags);
179 void mpdclient_filelist_clear_flags(mpdclient_filelist_t *flist);
180 void mpdclient_filelist_clear_flags(mpdclient_filelist_t *flist);
181 filelist_entry_t *mpdclient_filelist_find_song(mpdclient_filelist_t *flist,
182 struct mpd_song *song);
184 /* add all songs in filelist to the playlist */
185 int mpdclient_filelist_add_all(mpdclient_t *c, mpdclient_filelist_t *fl);
187 /*** mpdclient browse callbacks ********************************************/
189 #define BROWSE_DB_UPDATED 0x01
190 #define BROWSE_PLAYLIST_SAVED 0x02
191 #define BROWSE_PLAYLIST_DELETED 0x03
194 /* install a playlist callback function */
195 void mpdclient_install_browse_callback(mpdclient_t *c, mpdc_list_cb_t cb);
197 /* remove a playlist callback function */
198 void mpdclient_remove_browse_callback(mpdclient_t *c, mpdc_list_cb_t cb);
201 /* issue a playlist callback */
202 void mpdclient_browse_callback(mpdclient_t *c, int event, gpointer data);
204 /* sort by list-format */
205 gint compare_filelistentry_format(gconstpointer filelist_entry1, gconstpointer filelist_entry2);
207 #endif