Code

f1b993756b2876d353838f6ff8e11fbc1466ce7f
[ncmpc.git] / src / mpdclient.h
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