Code

make several functions return void
[ncmpc.git] / src / mpdclient.h
1 #ifndef MPDCLIENT_H
2 #define MPDCLIENT_H
4 #include "libmpdclient.h"
5 #include "playlist.h"
7 #define MPD_VERSION_EQ(c,x,y,z) (c->connection->version[0] == x && \
8                                  c->connection->version[1] == y && \
9                                  c->connection->version[2] == z )
11 #define MPD_VERSION_LT(c,x,y,z) ( c->connection->version[0]<x  || \
12  (c->connection->version[0]==x && c->connection->version[1]<y) || \
13  (c->connection->version[0]==x && c->connection->version[1]==y && \
14   c->connection->version[2]<z) )
16 typedef struct filelist_entry {
17         guint flags;
18         mpd_InfoEntity *entity;
19 } filelist_entry_t;
21 typedef struct mpdclient_filelist {
22         /* path */
23         gchar *path;
24         /* list length */
25         guint length;
26         /* true if the list is updated */
27         gboolean updated;
28         /* the list */
29         GList *list;
31 } mpdclient_filelist_t;
33 typedef struct mpdclient {
34         /* playlist */
35         mpdclient_playlist_t playlist;
37         /* Callbacks */
38         GList *error_callbacks;
39         GList *playlist_callbacks;
40         GList *browse_callbacks;
42         mpd_Connection *connection;
43         mpd_Status     *status;
44         mpd_Song       *song;
46         gboolean       need_update;
47 } mpdclient_t;
49 /** functions ***************************************************************/
51 gint
52 mpdclient_finish_command(mpdclient_t *c);
54 mpdclient_t *mpdclient_new(void);
55 void mpdclient_free(mpdclient_t *c);
56 gint mpdclient_connect(mpdclient_t *c, gchar *host, gint port,
57                        gfloat timeout, gchar *password);
58 gint mpdclient_disconnect(mpdclient_t *c);
59 gint mpdclient_update(mpdclient_t *c);
62 /*** MPD Commands  **********************************************************/
63 gint mpdclient_cmd_play(mpdclient_t *c, gint index);
64 gint mpdclient_cmd_pause(mpdclient_t *c, gint value);
65 gint mpdclient_cmd_stop(mpdclient_t *c);
66 gint mpdclient_cmd_next(mpdclient_t *c);
67 gint mpdclient_cmd_prev(mpdclient_t *c);
68 gint mpdclient_cmd_seek(mpdclient_t *c, gint id, gint pos);
69 gint mpdclient_cmd_shuffle(mpdclient_t *c);
70 gint mpdclient_cmd_clear(mpdclient_t *c);
71 gint mpdclient_cmd_repeat(mpdclient_t *c, gint value);
72 gint mpdclient_cmd_random(mpdclient_t *c, gint value);
73 gint mpdclient_cmd_crossfade(mpdclient_t *c, gint value);
74 gint mpdclient_cmd_db_update_utf8(mpdclient_t *c, gchar *path);
75 gint mpdclient_cmd_volume(mpdclient_t *c, gint value);
76 gint mpdclient_cmd_add_path(mpdclient_t *c, gchar *path);
77 gint mpdclient_cmd_add_path_utf8(mpdclient_t *c, gchar *path);
79 gint mpdclient_cmd_add(mpdclient_t *c, struct mpd_song *song);
80 gint mpdclient_cmd_delete(mpdclient_t *c, gint index);
81 gint mpdclient_cmd_move(mpdclient_t *c, gint old_index, gint new_index);
83 gint mpdclient_cmd_save_playlist(mpdclient_t *c, gchar *filename);
84 gint mpdclient_cmd_save_playlist_utf8(mpdclient_t *c, gchar *filename);
85 gint mpdclient_cmd_load_playlist_utf8(mpdclient_t *c, gchar *filename_utf8);
86 gint mpdclient_cmd_delete_playlist(mpdclient_t *c, gchar *filename);
87 gint mpdclient_cmd_delete_playlist_utf8(mpdclient_t *c, gchar *filename_utf8);
89 /* list functions */
90 GList *mpdclient_get_artists_utf8(mpdclient_t *c);
91 GList *mpdclient_get_albums_utf8(mpdclient_t *c, gchar *artist_utf8);
94 /*** error callbacks *****************************************************/ 
96 #define IS_ACK_ERROR(n)       (n & MPD_ERROR_ACK)
97 #define GET_ACK_ERROR_CODE(n) ((n & 0xFF00) >> 8)
99 typedef void (*mpdc_error_cb_t) (mpdclient_t *c, gint error, const gchar *msg);
101 void mpdclient_install_error_callback(mpdclient_t *c, mpdc_error_cb_t cb);
102 void mpdclient_remove_error_callback(mpdclient_t *c, mpdc_error_cb_t cb);
104 /*** playlist functions  **************************************************/
106 /* update the complete playlist */
107 gint mpdclient_playlist_update(struct mpdclient *c);
109 /* get playlist changes */
110 gint mpdclient_playlist_update_changes(struct mpdclient *c);
113 /*** mpdclient playlist callbacks *****************************************/
115 #define PLAYLIST_EVENT_UPDATED     0x01
116 #define PLAYLIST_EVENT_CLEAR       0x02
117 #define PLAYLIST_EVENT_DELETE      0x03
118 #define PLAYLIST_EVENT_ADD         0x04
119 #define PLAYLIST_EVENT_MOVE        0x05
122 typedef void (*mpdc_list_cb_t) (mpdclient_t *c, int event, gpointer data);
124 /* install a playlist callback function */
125 void mpdclient_install_playlist_callback(mpdclient_t *c, mpdc_list_cb_t cb);
127 /* remove a playlist callback function */
128 void mpdclient_remove_playlist_callback(mpdclient_t *c, mpdc_list_cb_t cb);
131 /* issue a playlist callback */
132 void mpdclient_playlist_callback(mpdclient_t *c, int event, gpointer data);
135 /*** filelist functions  ***************************************************/
136 void mpdclient_filelist_free(mpdclient_filelist_t *filelist);
137 mpdclient_filelist_t *mpdclient_filelist_get(mpdclient_t *c, const gchar *path);
138 mpdclient_filelist_t *mpdclient_filelist_search(mpdclient_t *c, 
139                                                 int exact_match,
140                                                 int table,
141                                                 gchar *path);
142 mpdclient_filelist_t *mpdclient_filelist_search_utf8(mpdclient_t *c, 
143                                                      int exact_match,
144                                                      int table,
145                                                      gchar *path);
146 mpdclient_filelist_t *mpdclient_filelist_update(mpdclient_t *c, 
147                                                 mpdclient_filelist_t *flist);
149 #define HIGHLIGHT  (0x01)
150 void mpdclient_filelist_set_flags(mpdclient_filelist_t *flist, 
151                                   struct mpd_song *song,
152                                   guint flags);
154 void mpdclient_filelist_clear_flags(mpdclient_filelist_t *flist);
155 void mpdclient_filelist_clear_flags(mpdclient_filelist_t *flist);
156 filelist_entry_t *mpdclient_filelist_find_song(mpdclient_filelist_t *flist,
157                                                struct mpd_song *song);
159 /* add all songs in filelist to the playlist */
160 int mpdclient_filelist_add_all(mpdclient_t *c, mpdclient_filelist_t *fl);
162 /*** mpdclient browse callbacks ********************************************/
164 #define BROWSE_DB_UPDATED          0x01
165 #define BROWSE_PLAYLIST_SAVED      0x02
166 #define BROWSE_PLAYLIST_DELETED    0x03
169 /* install a playlist callback function */
170 void mpdclient_install_browse_callback(mpdclient_t *c, mpdc_list_cb_t cb);
172 /* remove a playlist callback function */
173 void mpdclient_remove_browse_callback(mpdclient_t *c, mpdc_list_cb_t cb);
176 /* issue a playlist callback */
177 void mpdclient_browse_callback(mpdclient_t *c, int event, gpointer data);
179 /* sort by list-format */
180 gint compare_filelistentry_format(gconstpointer filelist_entry1, gconstpointer filelist_entry2);
182 #endif