xmbc fixes

This commit is contained in:
Ron Pedde 2007-01-29 06:45:21 +00:00
parent 874821fbe1
commit ec9ab04b40
4 changed files with 71 additions and 33 deletions

View File

@ -1064,6 +1064,8 @@ int db_sql_update_playlists(char **pe) {
SQL_ROW row; SQL_ROW row;
char *where_clause; char *where_clause;
DPRINTF(E_LOG,L_DB,"Updating playlists\n");
/* FIXME: There is a race here for externally added playlists */ /* FIXME: There is a race here for externally added playlists */
err = db_sql_fetch_int(pe,&playlists,"select count(*) from playlists"); err = db_sql_fetch_int(pe,&playlists,"select count(*) from playlists");
@ -1088,9 +1090,9 @@ int db_sql_update_playlists(char **pe) {
(index < playlists)) (index < playlists))
{ {
/* process row */ /* process row */
pinfo[index].plid=strdup(STR(row[0])); pinfo[index].plid=strdup(STR(row[PL_ID]));
pinfo[index].type=strdup(STR(row[1])); pinfo[index].type=strdup(STR(row[PL_TYPE]));
pinfo[index].clause=strdup(STR(row[2])); pinfo[index].clause=strdup(STR(row[PL_QUERY]));
DPRINTF(E_SPAM,L_DB,"Found playlist %s: type %s, clause %s\n",pinfo[index].plid, DPRINTF(E_SPAM,L_DB,"Found playlist %s: type %s, clause %s\n",pinfo[index].plid,
pinfo[index].type,pinfo[index].clause); pinfo[index].type,pinfo[index].clause);
index++; index++;

View File

@ -346,6 +346,34 @@ int dmap_add_int(unsigned char *where, char *tag, int value) {
return 12; return 12;
} }
int dmap_add_long(unsigned char *where, char *tag, uint64_t value) {
uint32_t v_hi;
uint32_t v_lo;
/* tag */
memcpy(where,tag,4);
/* len */
where[4]=where[5]=where[6]=0;
where[7]=8;
v_hi = (value >> 32) & 0xFFFFFFFF;
v_lo = value & 0xFFFFFFFF;
/* value */
where[8] = (v_hi >> 24) & 0xFF;
where[9] = (v_hi >> 16) & 0xFF;
where[10] = (v_hi >> 8) & 0xFF;
where[11] = v_hi & 0xFF;
where[12] = (v_lo >> 24) & 0xFF;
where[13] = (v_lo >> 16) & 0xFF;
where[14] = (v_lo >> 8) & 0xFF;
where[15] = v_lo & 0xFF;
return 16;
}
/** /**
* add a string type to a dmap block (type 0x09) * add a string type to a dmap block (type 0x09)
* *
@ -522,9 +550,15 @@ int daap_get_size(PRIVINFO *pinfo, char **valarray) {
if(daap_wantsmeta(pinfo->meta, metaItemId)) if(daap_wantsmeta(pinfo->meta, metaItemId))
size += 12; /* miid */ size += 12; /* miid */
if(daap_wantsmeta(pinfo->meta, metaItunesSmartPlaylist)) { if(daap_wantsmeta(pinfo->meta, metaItunesSmartPlaylist)) {
if(valarray[PL_TYPE] && (atoi(valarray[PL_TYPE])==1)) if(valarray[PL_TYPE] && (atoi(valarray[PL_TYPE])==1) &&
(atoi(valarray[PL_ID]) != 1))
size += 9; /* aeSP */ size += 9; /* aeSP */
} }
if(atoi(valarray[PL_ID]) == 1) {
size += 9; /* abpl */
}
if(daap_wantsmeta(pinfo->meta, metaItemName)) if(daap_wantsmeta(pinfo->meta, metaItemName))
size += (8 + (int) strlen(valarray[PL_TITLE])); /* minm */ size += (8 + (int) strlen(valarray[PL_TITLE])); /* minm */
if(valarray[PL_TYPE] && (atoi(valarray[PL_TYPE])==1) && if(valarray[PL_TYPE] && (atoi(valarray[PL_TYPE])==1) &&
@ -563,8 +597,7 @@ int daap_get_size(PRIVINFO *pinfo, char **valarray) {
if(daap_wantsmeta(pinfo->meta, metaSongArtist)) if(daap_wantsmeta(pinfo->meta, metaSongArtist))
/* asar */ /* asar */
size += DMAPLEN(valarray[SG_ARTIST]); size += DMAPLEN(valarray[SG_ARTIST]);
if(valarray[SG_BPM] && atoi(valarray[SG_BPM]) && if(daap_wantsmeta(pinfo->meta, metaSongBPM))
daap_wantsmeta(pinfo->meta, metaSongBPM))
/* asbt */ /* asbt */
size += 10; size += 10;
if(daap_wantsmeta(pinfo->meta, metaSongBitRate)) { if(daap_wantsmeta(pinfo->meta, metaSongBitRate)) {
@ -600,12 +633,10 @@ int daap_get_size(PRIVINFO *pinfo, char **valarray) {
daap_wantsmeta(pinfo->meta,metaSongDateModified)) daap_wantsmeta(pinfo->meta,metaSongDateModified))
/* asdm */ /* asdm */
size += 12; size += 12;
if(valarray[SG_TOTAL_DISCS] && atoi(valarray[SG_TOTAL_DISCS]) && if(daap_wantsmeta(pinfo->meta, metaSongDiscCount))
daap_wantsmeta(pinfo->meta, metaSongDiscCount))
/* asdc */ /* asdc */
size += 10; size += 10;
if(valarray[SG_DISC] && atoi(valarray[SG_DISC]) && if(daap_wantsmeta(pinfo->meta, metaSongDiscNumber))
daap_wantsmeta(pinfo->meta, metaSongDiscNumber))
/* asdn */ /* asdn */
size += 10; size += 10;
if(daap_wantsmeta(pinfo->meta, metaSongGenre)) if(daap_wantsmeta(pinfo->meta, metaSongGenre))
@ -663,8 +694,7 @@ int daap_get_size(PRIVINFO *pinfo, char **valarray) {
daap_wantsmeta(pinfo->meta, metaSongTrackNumber)) daap_wantsmeta(pinfo->meta, metaSongTrackNumber))
/* astn */ /* astn */
size += 10; size += 10;
if(valarray[SG_RATING] && atoi(valarray[SG_RATING]) && if(daap_wantsmeta(pinfo->meta, metaSongUserRating))
daap_wantsmeta(pinfo->meta, metaSongUserRating))
/* asur */ /* asur */
size += 9; size += 9;
if(valarray[SG_YEAR] && atoi(valarray[SG_YEAR]) && if(valarray[SG_YEAR] && atoi(valarray[SG_YEAR]) &&
@ -711,9 +741,14 @@ int daap_build_dmap(PRIVINFO *pinfo, char **valarray, unsigned char *presult, in
current += dmap_add_int(current,"miid",atoi(valarray[PL_ID])); current += dmap_add_int(current,"miid",atoi(valarray[PL_ID]));
current += dmap_add_int(current,"mimc",atoi(valarray[PL_ITEMS])); current += dmap_add_int(current,"mimc",atoi(valarray[PL_ITEMS]));
if(daap_wantsmeta(pinfo->meta,metaItunesSmartPlaylist)) { if(daap_wantsmeta(pinfo->meta,metaItunesSmartPlaylist)) {
if(valarray[PL_TYPE] && (atoi(valarray[PL_TYPE]) == 1)) if(valarray[PL_TYPE] && (atoi(valarray[PL_TYPE]) == 1) &&
(atoi(valarray[PL_ID]) != 1))
current += dmap_add_char(current,"aeSP",1); current += dmap_add_char(current,"aeSP",1);
} }
if(atoi(valarray[PL_ID]) == 1) {
current += dmap_add_char(current,"abpl",1);
}
if(daap_wantsmeta(pinfo->meta,metaItemName)) if(daap_wantsmeta(pinfo->meta,metaItemName))
current += dmap_add_string(current,"minm",valarray[PL_TITLE]); current += dmap_add_string(current,"minm",valarray[PL_TITLE]);
if((valarray[PL_TYPE]) && (atoi(valarray[PL_TYPE])==1) && if((valarray[PL_TYPE]) && (atoi(valarray[PL_TYPE])==1) &&
@ -748,7 +783,7 @@ int daap_build_dmap(PRIVINFO *pinfo, char **valarray, unsigned char *presult, in
current += dmap_add_string(current,"asal",valarray[SG_ALBUM]); current += dmap_add_string(current,"asal",valarray[SG_ALBUM]);
if(EMIT(valarray[4]) && daap_wantsmeta(pinfo->meta, metaSongArtist)) if(EMIT(valarray[4]) && daap_wantsmeta(pinfo->meta, metaSongArtist))
current += dmap_add_string(current,"asar",valarray[SG_ARTIST]); current += dmap_add_string(current,"asar",valarray[SG_ARTIST]);
if(valarray[23] && atoi(valarray[23]) && daap_wantsmeta(pinfo->meta, metaSongBPM)) if(daap_wantsmeta(pinfo->meta, metaSongBPM))
current += dmap_add_short(current,"asbt", current += dmap_add_short(current,"asbt",
(short)atoi(valarray[SG_BPM])); (short)atoi(valarray[SG_BPM]));
if(valarray[SG_BITRATE] && atoi(valarray[SG_BITRATE]) && if(valarray[SG_BITRATE] && atoi(valarray[SG_BITRATE]) &&
@ -794,12 +829,10 @@ int daap_build_dmap(PRIVINFO *pinfo, char **valarray, unsigned char *presult, in
current += dmap_add_int(current,"asdm", current += dmap_add_int(current,"asdm",
(int)atoi(valarray[SG_TIME_MODIFIED])); (int)atoi(valarray[SG_TIME_MODIFIED]));
if(valarray[SG_TOTAL_DISCS] && atoi(valarray[SG_TOTAL_DISCS]) && if(daap_wantsmeta(pinfo->meta, metaSongDiscCount))
daap_wantsmeta(pinfo->meta, metaSongDiscCount))
current += dmap_add_short(current,"asdc", current += dmap_add_short(current,"asdc",
(short)atoi(valarray[SG_TOTAL_DISCS])); (short)atoi(valarray[SG_TOTAL_DISCS]));
if(valarray[SG_DISC] && atoi(valarray[SG_DISC]) && if(daap_wantsmeta(pinfo->meta, metaSongDiscNumber))
daap_wantsmeta(pinfo->meta, metaSongDiscNumber))
current += dmap_add_short(current,"asdn", current += dmap_add_short(current,"asdn",
(short)atoi(valarray[SG_DISC])); (short)atoi(valarray[SG_DISC]));
@ -864,8 +897,7 @@ int daap_build_dmap(PRIVINFO *pinfo, char **valarray, unsigned char *presult, in
current += dmap_add_short(current,"astn", current += dmap_add_short(current,"astn",
(short)atoi(valarray[SG_TRACK])); (short)atoi(valarray[SG_TRACK]));
if(valarray[SG_RATING] && atoi(valarray[SG_RATING]) && if(daap_wantsmeta(pinfo->meta, metaSongUserRating))
daap_wantsmeta(pinfo->meta, metaSongUserRating))
current += dmap_add_char(current,"asur", current += dmap_add_char(current,"asur",
(char)atoi(valarray[SG_RATING])); (char)atoi(valarray[SG_RATING]));

View File

@ -23,6 +23,7 @@ extern int daap_wantsmeta(MetaField_t meta, MetaFieldName_t fieldNo);
extern int dmap_add_char(unsigned char *where, char *tag, char value); extern int dmap_add_char(unsigned char *where, char *tag, char value);
extern int dmap_add_short(unsigned char *where, char *tag, short value); extern int dmap_add_short(unsigned char *where, char *tag, short value);
extern int dmap_add_int(unsigned char *where, char *tag, int value); extern int dmap_add_int(unsigned char *where, char *tag, int value);
extern int dmap_add_long(unsigned char *where, char *tag, uint64_t value);
extern int dmap_add_string(unsigned char *where, char *tag, char *value); extern int dmap_add_string(unsigned char *where, char *tag, char *value);
extern int dmap_add_literal(unsigned char *where, char *tag, char *value, int size); extern int dmap_add_literal(unsigned char *where, char *tag, char *value, int size);
extern int dmap_add_container(unsigned char *where, char *tag, int size); extern int dmap_add_container(unsigned char *where, char *tag, int size);

View File

@ -1301,22 +1301,23 @@ void out_daap_dbinfo(WS_CONNINFO *pwsc, PRIVINFO *ppi) {
namelen=(int) strlen(servername); namelen=(int) strlen(servername);
current += dmap_add_container(current,"avdb",105 + namelen); current += dmap_add_container(current,"avdb",121 + namelen);
current += dmap_add_int(current,"mstt",200); /* 12 */ current += dmap_add_int(current,"mstt",200); /* 12 */
current += dmap_add_char(current,"muty",0); /* 9 */ current += dmap_add_char(current,"muty",0); /* 9 */
current += dmap_add_int(current,"mtco",1); /* 12 */ current += dmap_add_int(current,"mtco",1); /* 12 */
current += dmap_add_int(current,"mrco",1); /* 12 */ current += dmap_add_int(current,"mrco",1); /* 12 */
current += dmap_add_container(current,"mlcl",52 + namelen); current += dmap_add_container(current,"mlcl",68 + namelen);
current += dmap_add_container(current,"mlit",44 + namelen); current += dmap_add_container(current,"mlit",60 + namelen);
current += dmap_add_int(current,"miid",1); /* 12 */ current += dmap_add_int(current,"miid",1); /* 12 */
current += dmap_add_long(current,"mper",1); /* 16 */
current += dmap_add_string(current,"minm",servername); /* 8 + namelen */ current += dmap_add_string(current,"minm",servername); /* 8 + namelen */
count = _ppi->db_count_items(COUNT_SONGS); count = _ppi->db_count_items(COUNT_SONGS);
current += dmap_add_int(current,"mimc",count); /* 12 */ current += dmap_add_int(current,"mimc",count); /* 12 */
count = _ppi->db_count_items(COUNT_PLAYLISTS); count = _ppi->db_count_items(COUNT_PLAYLISTS);
current += dmap_add_int(current,"mctc",count); /* 12 */ current += dmap_add_int(current,"mctc",count); /* 12 */
out_daap_output_start(pwsc,ppi,113+namelen); out_daap_output_start(pwsc,ppi,129+namelen);
out_daap_output_write(pwsc,ppi,dbinfo_response,113+namelen); out_daap_output_write(pwsc,ppi,dbinfo_response,129+namelen);
out_daap_output_end(pwsc,ppi); out_daap_output_end(pwsc,ppi);
return; return;
@ -1409,7 +1410,7 @@ void out_daap_server_info(WS_CONNINFO *pwsc, PRIVINFO *ppi) {
_ppi->server_name(servername,&size); _ppi->server_name(servername,&size);
// supports_update = conf_get_int("daap","supports_update",1); // supports_update = conf_get_int("daap","supports_update",1);
actual_length=130 + (int) strlen(servername); actual_length=139 + (int) strlen(servername);
if(!supports_update) if(!supports_update)
actual_length -= 9; actual_length -= 9;
@ -1444,6 +1445,8 @@ void out_daap_server_info(WS_CONNINFO *pwsc, PRIVINFO *ppi) {
current += dmap_add_char(current,"msix",0); /* 9 */ current += dmap_add_char(current,"msix",0); /* 9 */
current += dmap_add_char(current,"msbr",0); /* 9 */ current += dmap_add_char(current,"msbr",0); /* 9 */
current += dmap_add_char(current,"msqy",0); /* 9 */ current += dmap_add_char(current,"msqy",0); /* 9 */
current += dmap_add_char(current,"mspi",0);
current += dmap_add_int(current,"msdc",1); /* 12 */ current += dmap_add_int(current,"msdc",1); /* 12 */
if(supports_update) if(supports_update)