86f1b0ce810c14f09de6060c6a32420c2c962c03
1 #ifndef MPDCLIENT_H
2 #define MPDCLIENT_H
3 #include "libmpdclient.h"
5 /****************************************************************************/
6 /* Playlist */
7 /****************************************************************************/
9 typedef struct
10 {
11 /* playlist id */
12 long long id;
13 /* list length */
14 guint length;
15 /* true if the list is updated */
16 gboolean updated;
17 /* the list */
18 GList *list;
20 } mpdclient_playlist_t;
23 typedef struct
24 {
25 guint flags;
26 mpd_InfoEntity *entity;
27 } filelist_entry_t;
29 typedef struct
30 {
31 /* path */
32 gchar *path;
33 /* list length */
34 guint length;
35 /* true if the list is updated */
36 gboolean updated;
37 /* the list */
38 GList *list;
40 } mpdclient_filelist_t;
42 typedef struct
43 {
44 /* playlist */
45 mpdclient_playlist_t playlist;
47 /* Callbacks */
48 GList *error_callbacks;
49 GList *playlist_callbacks;
50 GList *browse_callbacks;
52 mpd_Connection *connection;
53 mpd_Status *status;
54 mpd_Song *song;
56 gboolean need_update;
58 } mpdclient_t;
60 /** functions ***************************************************************/
61 mpdclient_t *mpdclient_new(void);
62 mpdclient_t *mpdclient_free(mpdclient_t *c);
63 gint mpdclient_connect(mpdclient_t *c, gchar *host, gint port,
64 gfloat timeout, gchar *password);
65 gint mpdclient_disconnect(mpdclient_t *c);
66 gint mpdclient_update(mpdclient_t *c);
69 /*** MPD Commands **********************************************************/
70 gint mpdclient_cmd_play(mpdclient_t *c, gint index);
71 gint mpdclient_cmd_pause(mpdclient_t *c, gint value);
72 gint mpdclient_cmd_stop(mpdclient_t *c);
73 gint mpdclient_cmd_next(mpdclient_t *c);
74 gint mpdclient_cmd_prev(mpdclient_t *c);
75 gint mpdclient_cmd_seek(mpdclient_t *c, gint id, gint pos);
76 gint mpdclient_cmd_shuffle(mpdclient_t *c);
77 gint mpdclient_cmd_clear(mpdclient_t *c);
78 gint mpdclient_cmd_repeat(mpdclient_t *c, gint value);
79 gint mpdclient_cmd_random(mpdclient_t *c, gint value);
80 gint mpdclient_cmd_crossfade(mpdclient_t *c, gint value);
81 gint mpdclient_cmd_db_update(mpdclient_t *c);
82 gint mpdclient_cmd_volume(mpdclient_t *c, gint value);
84 gint mpdclient_cmd_add(mpdclient_t *c, mpd_Song *song);
85 gint mpdclient_cmd_delete(mpdclient_t *c, gint index);
86 gint mpdclient_cmd_move(mpdclient_t *c, gint old_index, gint new_index);
88 gint mpdclient_cmd_save_playlist(mpdclient_t *c, gchar *filename);
89 gint mpdclient_cmd_load_playlist(mpdclient_t *c, gchar *filename_utf8);
90 gint mpdclient_cmd_delete_playlist(mpdclient_t *c, gchar *filename_utf8);
93 /*** error callbacks *****************************************************/
94 typedef void (*mpdc_error_cb_t) (mpdclient_t *c, gint error, gchar *msg);
96 void mpdclient_install_error_callback(mpdclient_t *c, mpdc_error_cb_t cb);
97 void mpdclient_remove_error_callback(mpdclient_t *c, mpdc_error_cb_t cb);
99 /*** playlist functions **************************************************/
101 /* free a playlist */
102 gint mpdclient_playlist_free(mpdclient_playlist_t *playlist);
103 /* update the complete playlist */
104 gint mpdclient_playlist_update(mpdclient_t *c);
105 /* get playlist changes */
106 gint mpdclient_playlist_update_changes(mpdclient_t *c);
108 GList *playlist_lookup(mpdclient_t *c, gint id);
109 mpd_Song *playlist_lookup_song(mpdclient_t *c, gint id);
110 mpd_Song *playlist_get_song(mpdclient_t *c, gint index);
111 gint playlist_get_index(mpdclient_t *c, mpd_Song *song);
112 gint playlist_get_index_from_id(mpdclient_t *c, gint id);
113 gint playlist_get_index_from_file(mpdclient_t *c, gchar *filename);
117 /*** mpdclient playlist callbacks *****************************************/
119 #define PLAYLIST_EVENT_UPDATED 0x01
120 #define PLAYLIST_EVENT_CLEAR 0x02
121 #define PLAYLIST_EVENT_DELETE 0x03
122 #define PLAYLIST_EVENT_ADD 0x04
123 #define PLAYLIST_EVENT_MOVE 0x05
126 typedef void (*mpdc_list_cb_t) (mpdclient_t *c, int event, gpointer data);
128 /* install a playlist callback function */
129 void mpdclient_install_playlist_callback(mpdclient_t *c, mpdc_list_cb_t cb);
131 /* remove a playlist callback function */
132 void mpdclient_remove_playlist_callback(mpdclient_t *c, mpdc_list_cb_t cb);
135 /* issue a playlist callback */
136 void mpdclient_playlist_callback(mpdclient_t *c, int event, gpointer data);
139 /*** filelist functions ***************************************************/
140 mpdclient_filelist_t *mpdclient_filelist_free(mpdclient_filelist_t *filelist);
141 mpdclient_filelist_t *mpdclient_filelist_get(mpdclient_t *c, gchar *path);
142 mpdclient_filelist_t *mpdclient_filelist_update(mpdclient_t *c,
143 mpdclient_filelist_t *flist);
145 #define HIGHLIGHT (0x01)
146 void mpdclient_filelist_set_flags(mpdclient_filelist_t *flist,
147 mpd_Song *song,
148 guint flags);
150 void mpdclient_filelist_clear_flags(mpdclient_filelist_t *flist);
151 void mpdclient_filelist_clear_flags(mpdclient_filelist_t *flist);
152 filelist_entry_t *mpdclient_filelist_find_song(mpdclient_filelist_t *flist,
153 mpd_Song *song);
155 /*** mpdclient browse callbacks ********************************************/
157 #define BROWSE_DB_UPDATED 0x01
158 #define BROWSE_PLAYLIST_SAVED 0x02
159 #define BROWSE_PLAYLIST_DELETED 0x03
162 /* install a playlist callback function */
163 void mpdclient_install_browse_callback(mpdclient_t *c, mpdc_list_cb_t cb);
165 /* remove a playlist callback function */
166 void mpdclient_remove_browse_callback(mpdclient_t *c, mpdc_list_cb_t cb);
169 /* issue a playlist callback */
170 void mpdclient_browse_callback(mpdclient_t *c, int event, gpointer data);
173 #endif