Code

mpdclient: pass const song object to mpdclient_cmd_add()
[ncmpc.git] / src / mpdclient.h
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;
32         int volume;
33         int updatingdb;
34 } mpdclient_t;
36 /** functions ***************************************************************/
38 gint
39 mpdclient_finish_command(mpdclient_t *c);
41 mpdclient_t *mpdclient_new(void);
42 void mpdclient_free(mpdclient_t *c);
43 gint mpdclient_connect(mpdclient_t *c, const gchar *host, gint port,
44                        gfloat timeout_, const gchar *password);
45 gint mpdclient_disconnect(mpdclient_t *c);
46 gint mpdclient_update(mpdclient_t *c);
49 /*** MPD Commands  **********************************************************/
50 gint mpdclient_cmd_play(mpdclient_t *c, gint index);
51 gint mpdclient_cmd_pause(mpdclient_t *c, gint value);
52 gint
53 mpdclient_cmd_crop(mpdclient_t *c);
54 gint mpdclient_cmd_stop(mpdclient_t *c);
55 gint mpdclient_cmd_next(mpdclient_t *c);
56 gint mpdclient_cmd_prev(mpdclient_t *c);
57 gint mpdclient_cmd_seek(mpdclient_t *c, gint id, gint pos);
58 gint mpdclient_cmd_shuffle(mpdclient_t *c);
59 gint mpdclient_cmd_shuffle_range(mpdclient_t *c, guint start, guint end);
60 gint mpdclient_cmd_clear(mpdclient_t *c);
61 gint mpdclient_cmd_repeat(mpdclient_t *c, gint value);
62 gint mpdclient_cmd_random(mpdclient_t *c, gint value);
63 gint mpdclient_cmd_single(mpdclient_t *c, gint value);
64 gint mpdclient_cmd_consume(mpdclient_t *c, gint value);
65 gint mpdclient_cmd_crossfade(mpdclient_t *c, gint value);
66 gint mpdclient_cmd_db_update(mpdclient_t *c, const gchar *path);
67 gint mpdclient_cmd_volume(mpdclient_t *c, gint value);
68 gint mpdclient_cmd_volume_up(struct mpdclient *c);
69 gint mpdclient_cmd_volume_down(struct mpdclient *c);
70 gint mpdclient_cmd_add_path(mpdclient_t *c, const gchar *path);
72 gint mpdclient_cmd_add(mpdclient_t *c, const struct mpd_song *song);
73 gint mpdclient_cmd_delete(mpdclient_t *c, gint index);
74 gint mpdclient_cmd_move(mpdclient_t *c, gint old_index, gint new_index);
76 gint mpdclient_cmd_save_playlist(mpdclient_t *c, const gchar *filename);
77 gint mpdclient_cmd_load_playlist(mpdclient_t *c, const gchar *filename_utf8);
78 gint mpdclient_cmd_delete_playlist(mpdclient_t *c, const gchar *filename_utf8);
80 /* list functions */
81 GList *mpdclient_get_artists(mpdclient_t *c);
82 GList *mpdclient_get_albums(mpdclient_t *c, const gchar *artist_utf8);
85 /*** error callbacks *****************************************************/
87 #define IS_ACK_ERROR(n)       (n & MPD_ERROR_ACK)
88 #define GET_ACK_ERROR_CODE(n) ((n & 0xFF00) >> 8)
90 typedef void (*mpdc_error_cb_t) (mpdclient_t *c, gint error, const gchar *msg);
92 void mpdclient_install_error_callback(mpdclient_t *c, mpdc_error_cb_t cb);
93 void mpdclient_remove_error_callback(mpdclient_t *c, mpdc_error_cb_t cb);
95 /*** playlist functions  **************************************************/
97 /* update the complete playlist */
98 gint mpdclient_playlist_update(struct mpdclient *c);
100 /* get playlist changes */
101 gint mpdclient_playlist_update_changes(struct mpdclient *c);
104 /*** mpdclient playlist callbacks *****************************************/
106 #define PLAYLIST_EVENT_UPDATED     0x01
107 #define PLAYLIST_EVENT_CLEAR       0x02
108 #define PLAYLIST_EVENT_DELETE      0x03
109 #define PLAYLIST_EVENT_ADD         0x04
110 #define PLAYLIST_EVENT_MOVE        0x05
113 typedef void (*mpdc_list_cb_t) (mpdclient_t *c, int event, gpointer data);
115 /* install a playlist callback function */
116 void mpdclient_install_playlist_callback(mpdclient_t *c, mpdc_list_cb_t cb);
118 /* remove a playlist callback function */
119 void mpdclient_remove_playlist_callback(mpdclient_t *c, mpdc_list_cb_t cb);
122 /* issue a playlist callback */
123 void mpdclient_playlist_callback(mpdclient_t *c, int event, gpointer data);
126 /*** filelist functions  ***************************************************/
128 mpdclient_filelist_t *mpdclient_filelist_get(mpdclient_t *c, const gchar *path);
129 mpdclient_filelist_t *mpdclient_filelist_search(mpdclient_t *c,
130                                                 int exact_match,
131                                                 int table,
132                                                 gchar *filter_utf8);
133 mpdclient_filelist_t *mpdclient_filelist_update(mpdclient_t *c,
134                                                 mpdclient_filelist_t *flist);
136 /* add all songs in filelist to the playlist */
137 int mpdclient_filelist_add_all(mpdclient_t *c, mpdclient_filelist_t *fl);
139 /*** mpdclient browse callbacks ********************************************/
141 #define BROWSE_DB_UPDATED          0x01
142 #define BROWSE_PLAYLIST_SAVED      0x02
143 #define BROWSE_PLAYLIST_DELETED    0x03
146 /* install a playlist callback function */
147 void mpdclient_install_browse_callback(mpdclient_t *c, mpdc_list_cb_t cb);
149 /* remove a playlist callback function */
150 void mpdclient_remove_browse_callback(mpdclient_t *c, mpdc_list_cb_t cb);
153 /* issue a playlist callback */
154 void mpdclient_browse_callback(mpdclient_t *c, int event, gpointer data);
156 /* sort by list-format */
157 gint compare_filelistentry_format(gconstpointer filelist_entry1, gconstpointer filelist_entry2);
159 #endif