| 1 |
|
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 |
|
|---|
| 5 |
|
|---|
| 6 |
|
|---|
| 7 |
|
|---|
| 8 |
|
|---|
| 9 |
|
|---|
| 10 |
|
|---|
| 11 |
|
|---|
| 12 |
|
|---|
| 13 |
|
|---|
| 14 |
|
|---|
| 15 |
|
|---|
| 16 |
|
|---|
| 17 |
|
|---|
| 18 |
|
|---|
| 19 |
|
|---|
| 20 |
|
|---|
| 21 |
|
|---|
| 22 |
|
|---|
| 23 |
|
|---|
| 24 |
|
|---|
| 25 |
|
|---|
| 26 |
|
|---|
| 27 |
|
|---|
| 28 |
|
|---|
| 29 |
#define FREE(v) free(v);v=NULL; |
|---|
| 30 |
#define FREE_NAME() free(psz_name);psz_name=NULL; |
|---|
| 31 |
#define FREE_VALUE() free(psz_value);psz_value=NULL; |
|---|
| 32 |
#define FREE_KEY() free(psz_key);psz_key=NULL; |
|---|
| 33 |
#define FREE_ATT() FREE_NAME();FREE_VALUE() |
|---|
| 34 |
#define FREE_ATT_KEY() FREE_NAME();FREE_VALUE();FREE_KEY() |
|---|
| 35 |
|
|---|
| 36 |
#define UNKNOWN_CONTENT 0 |
|---|
| 37 |
#define SIMPLE_CONTENT 1 |
|---|
| 38 |
#define COMPLEX_CONTENT 2 |
|---|
| 39 |
|
|---|
| 40 |
#define SIMPLE_INTERFACE (track_elem_t *p_track,\ |
|---|
| 41 |
const char *psz_name,\ |
|---|
| 42 |
char *psz_value) |
|---|
| 43 |
#define COMPLEX_INTERFACE (demux_t *p_demux,\ |
|---|
| 44 |
input_item_t *p_input_item,\ |
|---|
| 45 |
track_elem_t *p_track,\ |
|---|
| 46 |
xml_reader_t *p_xml_reader,\ |
|---|
| 47 |
const char *psz_element,\ |
|---|
| 48 |
struct xml_elem_hnd *p_handlers) |
|---|
| 49 |
|
|---|
| 50 |
|
|---|
| 51 |
typedef struct |
|---|
| 52 |
{ |
|---|
| 53 |
char *name, *artist, *album, *genre, *trackNum, *location; |
|---|
| 54 |
mtime_t duration; |
|---|
| 55 |
} track_elem_t; |
|---|
| 56 |
|
|---|
| 57 |
struct xml_elem_hnd |
|---|
| 58 |
{ |
|---|
| 59 |
const char *name; |
|---|
| 60 |
int type; |
|---|
| 61 |
union |
|---|
| 62 |
{ |
|---|
| 63 |
bool (*smpl) SIMPLE_INTERFACE; |
|---|
| 64 |
bool (*cmplx) COMPLEX_INTERFACE; |
|---|
| 65 |
} pf_handler; |
|---|
| 66 |
}; |
|---|
| 67 |
typedef struct xml_elem_hnd xml_elem_hnd_t; |
|---|
| 68 |
|
|---|
| 69 |
|
|---|
| 70 |
static bool parse_plist_node COMPLEX_INTERFACE; |
|---|
| 71 |
static bool skip_element COMPLEX_INTERFACE; |
|---|
| 72 |
static bool parse_dict COMPLEX_INTERFACE; |
|---|
| 73 |
static bool parse_plist_dict COMPLEX_INTERFACE; |
|---|
| 74 |
static bool parse_tracks_dict COMPLEX_INTERFACE; |
|---|
| 75 |
static bool parse_track_dict COMPLEX_INTERFACE; |
|---|
| 76 |
static bool save_data SIMPLE_INTERFACE; |
|---|
| 77 |
static bool add_meta( input_item_t*, track_elem_t* ); |
|---|
| 78 |
static track_elem_t *new_track( void ); |
|---|
| 79 |
static void free_track( track_elem_t* ); |
|---|
| 80 |
|
|---|