Code

Major cleanup of the mpd client code (mpc->mpdclient)
[ncmpc.git] / src / mpdclient.h
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