00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00028
00029 #ifdef __cplusplus
00030 extern "C" {
00031 #endif
00032
00033 #ifndef __MPD_LIB__
00034 #define __MPD_LIB__
00035 #ifdef WIN32
00036 #define __REGEX_IMPORT__ 1
00037 #define __W32API_USE_DLLIMPORT__ 1
00038 #endif
00039
00040 #include "libmpdclient.h"
00041
00042 #ifndef TRUE
00043
00044 #define TRUE 1
00045 #endif
00046
00047 #ifndef FALSE
00048
00049 #define FALSE 0
00050 #endif
00051 #include "libmpd-version.h"
00052 extern char *libmpd_version;
00053
00058 typedef enum {
00060 MPD_OK = 0,
00062 MPD_ARGS_ERROR = -5,
00064 MPD_NOT_CONNECTED = -10,
00066 MPD_STATUS_FAILED = -20,
00068 MPD_LOCK_FAILED = -30,
00070 MPD_STATS_FAILED = -40,
00072 MPD_SERVER_ERROR = -50,
00074 MPD_SERVER_NOT_SUPPORTED = -51,
00075
00077 MPD_DATABASE_PLAYLIST_EXIST = -60,
00079 MPD_PLAYLIST_EMPTY = -70,
00081 MPD_PLAYLIST_QUEUE_EMPTY = -75,
00083 MPD_PLAYER_NOT_PLAYING = -80,
00084
00086 MPD_TAG_NOT_FOUND = -90,
00087
00089 MPD_FATAL_ERROR = -1000
00090 }MpdError;
00091
00092
00093
00097 typedef struct _MpdObj MpdObj;
00098
00103 typedef enum {
00104 MPD_SERVER_COMMAND_ALLOWED = TRUE,
00105 MPD_SERVER_COMMAND_NOT_ALLOWED = FALSE,
00106 MPD_SERVER_COMMAND_NOT_SUPPORTED = -1,
00107 MPD_SERVER_COMMAND_ERROR = -2
00108 } MpdServerCommand;
00109
00110
00118 typedef enum {
00120 MPD_DATA_TYPE_NONE,
00122 MPD_DATA_TYPE_TAG,
00124 MPD_DATA_TYPE_DIRECTORY,
00126 MPD_DATA_TYPE_SONG,
00128 MPD_DATA_TYPE_PLAYLIST,
00130 MPD_DATA_TYPE_OUTPUT_DEV
00131 } MpdDataType;
00132
00137 typedef struct _MpdData {
00139 MpdDataType type;
00140 union {
00141 struct {
00143 int tag_type;
00145 char *tag;
00146 };
00148 char *directory;
00150 mpd_PlaylistFile *playlist;
00152 mpd_Song *song;
00154 mpd_OutputEntity *output_dev;
00155 };
00156
00157 void *userdata;
00158 void (*freefunc)(void *userdata);
00159 } MpdData;
00160
00161
00162 #include "libmpd-player.h"
00163 #include "libmpd-status.h"
00164 #include "libmpd-database.h"
00165 #include "libmpd-playlist.h"
00166 #include "libmpd-strfsong.h"
00167 #include "libmpd-sticker.h"
00168
00169
00170
00185 MpdObj *mpd_new_default();
00186
00187
00188
00199 MpdObj *mpd_new(char *hostname, int port, char *password);
00200
00201
00202
00211 int mpd_set_hostname(MpdObj * mi, char *hostname);
00212
00220 const char * mpd_get_hostname(MpdObj *mi);
00221
00230 int mpd_set_password(MpdObj * mi,const char *password);
00231
00232
00242 int mpd_set_port(MpdObj * mi, int port);
00243
00244
00245
00246
00256 int mpd_set_connection_timeout(MpdObj * mi, float timeout);
00257
00258
00259 int mpd_connect_real(MpdObj *mi,mpd_Connection *connection);
00268 int mpd_connect(MpdObj * mi);
00269
00270
00277 int mpd_disconnect(MpdObj * mi);
00278
00279
00280
00287 int mpd_check_connected(MpdObj * mi);
00288
00289
00290
00297 int mpd_check_error(MpdObj * mi);
00298
00299
00300
00306 void mpd_free(MpdObj * mi);
00307
00308
00309
00319 int mpd_send_password(MpdObj * mi);
00320
00321
00322
00323
00324
00325
00326
00346 typedef enum {
00348 MPD_CST_PLAYLIST = 0x0001,
00350 MPD_CST_SONGPOS = 0x0002,
00352 MPD_CST_SONGID = 0x0004,
00354 MPD_CST_DATABASE = 0x0008,
00356 MPD_CST_UPDATING = 0x0010,
00358 MPD_CST_VOLUME = 0x0020,
00360 MPD_CST_TOTAL_TIME = 0x0040,
00362 MPD_CST_ELAPSED_TIME = 0x0080,
00364 MPD_CST_CROSSFADE = 0x0100,
00366 MPD_CST_RANDOM = 0x0200,
00368 MPD_CST_REPEAT = 0x0400,
00370 MPD_CST_AUDIO = 0x0800,
00372 MPD_CST_STATE = 0x1000,
00374 MPD_CST_PERMISSION = 0x2000,
00376 MPD_CST_BITRATE = 0x4000,
00378 MPD_CST_AUDIOFORMAT = 0x8000,
00380 MPD_CST_STORED_PLAYLIST = 0x20000,
00382 MPD_CST_SERVER_ERROR = 0x40000,
00384 MPD_CST_OUTPUT = 0x80000,
00386 MPD_CST_STICKER = 0x100000,
00388 MPD_CST_NEXTSONG = 0x200000,
00390 MPD_CST_SINGLE_MODE = 0x400000,
00392 MPD_CST_CONSUME_MODE = 0x800000
00393 } ChangedStatusType;
00394
00395
00396
00404 typedef void (*StatusChangedCallback) (MpdObj * mi, ChangedStatusType what, void *userdata);
00405
00406
00407
00408
00418 typedef int (*ErrorCallback) (MpdObj * mi, int id, char *msg, void *userdata);
00419
00420
00421
00429 typedef void (*ConnectionChangedCallback) (MpdObj * mi, int connect, void *userdata);
00430
00431
00432
00433
00439 void mpd_signal_connect_status_changed(MpdObj * mi, StatusChangedCallback status_changed,
00440 void *userdata);
00441
00442
00443
00449 void mpd_signal_connect_error(MpdObj * mi, ErrorCallback error, void *userdata);
00450
00451
00452
00458 void mpd_signal_connect_connection_changed(MpdObj * mi,
00459 ConnectionChangedCallback connection_changed,
00460 void *userdata);
00461
00471
00478 int mpd_data_is_last(MpdData const *data);
00479
00480
00486 void mpd_data_free(MpdData * data);
00487
00488
00489
00505 MpdData *mpd_data_get_next(MpdData * data);
00506
00507
00508
00509
00517 MpdData *mpd_data_get_first(MpdData const *data);
00518
00519
00520
00528 MpdData *mpd_data_delete_item(MpdData * data);
00529
00530
00531
00539
00540
00548 MpdData *mpd_server_get_output_devices(MpdObj * mi);
00549
00550
00551
00561 int mpd_server_set_output_device(MpdObj * mi, int device_id, int state);
00562
00563
00564
00572 long unsigned mpd_server_get_database_update_time(MpdObj * mi);
00573
00574
00575
00586 int mpd_server_check_version(MpdObj * mi, int major, int minor, int micro);
00587
00594 char *mpd_server_get_version(MpdObj *mi);
00603 int mpd_server_check_command_allowed(MpdObj * mi, const char *command);
00604
00605
00606
00612 char ** mpd_server_get_url_handlers(MpdObj *mi);
00613
00620 char ** mpd_server_get_tag_types(MpdObj *mi);
00627
00635 int mpd_misc_get_tag_by_name(char *name);
00636
00646 int mpd_server_has_idle(MpdObj *mi);
00647
00656 int mpd_server_tag_supported(MpdObj *mi, int tag);
00657
00658 #endif
00659
00660 #ifdef __cplusplus
00661 }
00662 #endif