Code

use libmpdclient2
[ncmpc.git] / src / mpdclient.h
1 #ifndef MPDCLIENT_H
2 #define MPDCLIENT_H
4 #include "playlist.h"
5 #include "filelist.h"
7 #include <mpd/tag.h>
9 typedef struct mpdclient {
10         /* playlist */
11         mpdclient_playlist_t playlist;
13         /* Callbacks */
14         GList *error_callbacks;
15         GList *playlist_callbacks;
16         GList *browse_callbacks;
18         struct mpd_connection *connection;
19         struct mpd_status *status;
20         struct mpd_song *song;
22         gboolean       need_update;
24         int volume;
25         unsigned updatingdb;
26 } mpdclient_t;
28 /** functions ***************************************************************/
30 gint
31 mpdclient_finish_command(mpdclient_t *c);
33 mpdclient_t *mpdclient_new(void);
34 void mpdclient_free(mpdclient_t *c);
35 gint mpdclient_connect(mpdclient_t *c, const gchar *host, gint port,
36                        gfloat timeout_, const gchar *password);
37 gint mpdclient_disconnect(mpdclient_t *c);
38 gint mpdclient_update(mpdclient_t *c);
41 /*** MPD Commands  **********************************************************/
42 gint mpdclient_cmd_play(mpdclient_t *c, gint index);
43 gint mpdclient_cmd_pause(mpdclient_t *c, gint value);
44 gint
45 mpdclient_cmd_crop(mpdclient_t *c);
46 gint mpdclient_cmd_stop(mpdclient_t *c);
47 gint mpdclient_cmd_next(mpdclient_t *c);
48 gint mpdclient_cmd_prev(mpdclient_t *c);
49 gint mpdclient_cmd_seek(mpdclient_t *c, gint id, gint pos);
50 gint mpdclient_cmd_shuffle(mpdclient_t *c);
51 gint mpdclient_cmd_shuffle_range(mpdclient_t *c, guint start, guint end);
52 gint mpdclient_cmd_clear(mpdclient_t *c);
53 gint mpdclient_cmd_repeat(mpdclient_t *c, gint value);
54 gint mpdclient_cmd_random(mpdclient_t *c, gint value);
55 gint mpdclient_cmd_single(mpdclient_t *c, gint value);
56 gint mpdclient_cmd_consume(mpdclient_t *c, gint value);
57 gint mpdclient_cmd_crossfade(mpdclient_t *c, gint value);
58 gint mpdclient_cmd_db_update(mpdclient_t *c, const gchar *path);
59 gint mpdclient_cmd_volume(mpdclient_t *c, gint value);
60 gint mpdclient_cmd_volume_up(struct mpdclient *c);
61 gint mpdclient_cmd_volume_down(struct mpdclient *c);
62 gint mpdclient_cmd_add_path(mpdclient_t *c, const gchar *path);
64 gint mpdclient_cmd_add(mpdclient_t *c, const struct mpd_song *song);
65 gint mpdclient_cmd_delete(mpdclient_t *c, gint index);
66 gint mpdclient_cmd_move(mpdclient_t *c, gint old_index, gint new_index);
68 gint mpdclient_cmd_save_playlist(mpdclient_t *c, const gchar *filename);
69 gint mpdclient_cmd_load_playlist(mpdclient_t *c, const gchar *filename_utf8);
70 gint mpdclient_cmd_delete_playlist(mpdclient_t *c, const gchar *filename_utf8);
72 /* list functions */
73 GList *mpdclient_get_artists(mpdclient_t *c);
74 GList *mpdclient_get_albums(mpdclient_t *c, const gchar *artist_utf8);
77 /*** error callbacks *****************************************************/
79 #define IS_ACK_ERROR(n)       (n & MPD_ERROR_ACK)
80 #define GET_ACK_ERROR_CODE(n) ((n & 0xFF00) >> 8)
82 typedef void (*mpdc_error_cb_t) (mpdclient_t *c, gint error, const gchar *msg);
84 void mpdclient_install_error_callback(mpdclient_t *c, mpdc_error_cb_t cb);
85 void mpdclient_remove_error_callback(mpdclient_t *c, mpdc_error_cb_t cb);
87 /*** playlist functions  **************************************************/
89 /* update the complete playlist */
90 gint mpdclient_playlist_update(struct mpdclient *c);
92 /* get playlist changes */
93 gint mpdclient_playlist_update_changes(struct mpdclient *c);
96 /*** mpdclient playlist callbacks *****************************************/
98 #define PLAYLIST_EVENT_UPDATED     0x01
99 #define PLAYLIST_EVENT_CLEAR       0x02
100 #define PLAYLIST_EVENT_DELETE      0x03
101 #define PLAYLIST_EVENT_ADD         0x04
102 #define PLAYLIST_EVENT_MOVE        0x05
105 typedef void (*mpdc_list_cb_t) (mpdclient_t *c, int event, gpointer data);
107 /* install a playlist callback function */
108 void mpdclient_install_playlist_callback(mpdclient_t *c, mpdc_list_cb_t cb);
110 /* remove a playlist callback function */
111 void mpdclient_remove_playlist_callback(mpdclient_t *c, mpdc_list_cb_t cb);
114 /* issue a playlist callback */
115 void mpdclient_playlist_callback(mpdclient_t *c, int event, gpointer data);
118 /*** filelist functions  ***************************************************/
120 mpdclient_filelist_t *mpdclient_filelist_get(mpdclient_t *c, const gchar *path);
121 mpdclient_filelist_t *mpdclient_filelist_search(mpdclient_t *c,
122                                                 int exact_match,
123                                                 enum mpd_tag_type tag,
124                                                 gchar *filter_utf8);
126 /* add all songs in filelist to the playlist */
127 int mpdclient_filelist_add_all(mpdclient_t *c, mpdclient_filelist_t *fl);
129 /*** mpdclient browse callbacks ********************************************/
131 #define BROWSE_DB_UPDATED          0x01
132 #define BROWSE_PLAYLIST_SAVED      0x02
133 #define BROWSE_PLAYLIST_DELETED    0x03
136 /* install a playlist callback function */
137 void mpdclient_install_browse_callback(mpdclient_t *c, mpdc_list_cb_t cb);
139 /* remove a playlist callback function */
140 void mpdclient_remove_browse_callback(mpdclient_t *c, mpdc_list_cb_t cb);
143 /* issue a playlist callback */
144 void mpdclient_browse_callback(mpdclient_t *c, int event, gpointer data);
146 /* sort by list-format */
147 gint compare_filelistentry_format(gconstpointer filelist_entry1, gconstpointer filelist_entry2);
149 #endif