static int query_format(struct soap *soap, format_t format, FILE *f, struct _jpelem__QueryJobs *qj) { switch (format) { case FORMAT_XML: case FORMAT_STRIPPEDXML: return query_dump(soap, fileno(f), qj); case FORMAT_HR: query_print(f, qj); return 0; default: return EINVAL; } }
/* * dump the XML query with the example data */ static int query_example_dump(struct soap *soap, int fd) { struct _jpelem__QueryJobs qj; int retval; memset(&qj, 0, sizeof(qj)); soap_begin(soap); query_example_fill(soap, &qj); retval = query_dump(soap, fd, &qj); soap_end(soap); return retval; }
DAAP_BLOCK *daap_response_songlist(char* metaStr, char* query) { DAAP_BLOCK *root; int g=1; DAAP_BLOCK *mlcl; DAAP_BLOCK *mlit; ENUMHANDLE henum; MP3FILE *current; MetaField_t meta; query_node_t* filter = 0; int songs = 0; DPRINTF(E_DBG,L_DAAP,"enter daap_response_songlist\n"); // if the meta tag is specified, encode it, if it's not specified // we're given the latitude to select our own subset, for // simplicity we just include everything. if(0 == metaStr) meta = (MetaField_t) -1ll; else meta = encodeMetaRequest(metaStr, gSongMetaDataMap); if(0 != query) { filter = query_build(query, song_fields); DPRINTF(E_INF,L_DAAP|L_QRY,"query: %s\n", query); if(err_debuglevel >= E_INF) /* this is broken */ query_dump(stderr,filter, 0); } DPRINTF(E_DBG,L_DAAP|L_DB,"Preparing to send db items\n"); henum=db_enum_begin(); if((!henum) && (db_get_song_count())) { DPRINTF(E_DBG,L_DAAP|L_DB,"Can't get enum handle - exiting daap_response_songlist\n"); return NULL; } root=daap_add_empty(NULL,"adbs"); if(root) { g = (int)daap_add_int(root,"mstt",200); g = g && daap_add_char(root,"muty",0); g = g && daap_add_int(root,"mtco",0); g = g && daap_add_int(root,"mrco",0); mlcl=daap_add_empty(root,"mlcl"); if(mlcl) { while(g && (current=db_enum(&henum))) { if(filter == 0 || query_test(filter, current)) { DPRINTF(E_DBG,L_DAAP|L_DB,"Got entry for %s\n",current->fname); // song entry generation extracted for usage with // playlists as well g = 0 != daap_add_song_entry(mlcl, current, meta); songs++; } } } else g=0; } db_enum_end(henum); if(filter != 0) query_free(filter); if(!g) { DPRINTF(E_DBG,L_DAAP|L_DB,"Error enumerating db - exiting daap_response_songlist\n"); daap_free(root); return NULL; } DPRINTF(E_DBG,L_DAAP|L_DB,"Successfully enumerated database - %d items\n",songs); daap_set_int(root, "mtco", songs); daap_set_int(root, "mrco", songs); DPRINTF(E_DBG,L_DAAP,"Exiting daap_response_songlist\n"); return root; }