* Fix issues with duplicate entries in UPnPSearch results.
* Send XBox360 bad bitrate information, since it requires it.
This commit is contained in:
		
							
								
								
									
										20
									
								
								upnpsoap.c
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								upnpsoap.c
									
									
									
									
									
								
							| @@ -298,7 +298,10 @@ static int callback(void *args, int argc, char **argv, char **azColName) | ||||
| 				strcat(passed_args->resp, str_buf); | ||||
| 			} | ||||
| 			if( bitrate && (!passed_args->filter || strstr(passed_args->filter, "res@bitrate")) ) { | ||||
| 				sprintf(str_buf, "bitrate=\"%s\" ", bitrate); | ||||
| 				if( passed_args->client == EXbox ) | ||||
| 					sprintf(str_buf, "bitrate=\"%d\" ", atoi(bitrate)/1024); | ||||
| 				else | ||||
| 					sprintf(str_buf, "bitrate=\"%s\" ", bitrate); | ||||
| 				strcat(passed_args->resp, str_buf); | ||||
| 			} | ||||
| 			if( sampleFrequency && (!passed_args->filter || strstr(passed_args->filter, "res@sampleFrequency")) ) { | ||||
| @@ -536,6 +539,7 @@ SearchContentDirectory(struct upnphttp * h, const char * action) | ||||
| 	args.requested = RequestedCount; | ||||
| 	args.resp = NULL; | ||||
| 	args.filter = NULL; | ||||
| 	args.client = h->req_client; | ||||
| 	if( h->req_client == EXbox ) | ||||
| 	{ | ||||
| 		if( strcmp(ContainerID, "4") == 0 ) | ||||
| @@ -600,15 +604,15 @@ SearchContentDirectory(struct upnphttp * h, const char * action) | ||||
| 	DPRINTF(E_DEBUG, L_HTTP, "Translated SearchCriteria: %s\n", SearchCriteria); | ||||
|  | ||||
| 	args.resp = resp; | ||||
| 	sql = sqlite3_mprintf("SELECT * from OBJECTS o left join DETAILS d on (d.ID = o.DETAIL_ID)" | ||||
| 	                      " where OBJECT_ID glob '%s$*' and (%s) " | ||||
| 	sql = sqlite3_mprintf("SELECT distinct * from OBJECTS o left join DETAILS d on (d.ID = o.DETAIL_ID)" | ||||
| 	                      " where OBJECT_ID glob '%s$*' and (%s) group by DETAIL_ID " | ||||
| 			      "%z" | ||||
| 	                      " order by d.TRACK, d.TITLE, o.NAME limit %d, -1;", | ||||
| 	                      ContainerID, SearchCriteria,  | ||||
| 			      (*ContainerID == '*') ? NULL : | ||||
| 	                      sqlite3_mprintf("UNION ALL SELECT * from OBJECTS o left join DETAILS d on (d.ID = o.DETAIL_ID)" | ||||
| 	    		                      " where OBJECT_ID = '%s' and (%s) ", ContainerID, SearchCriteria), | ||||
| 		       	      StartingIndex); | ||||
| 	                      ContainerID, SearchCriteria, | ||||
| 	                      (*ContainerID == '*') ? NULL : | ||||
|                               sqlite3_mprintf("UNION ALL SELECT * from OBJECTS o left join DETAILS d on (d.ID = o.DETAIL_ID)" | ||||
| 	                                      " where OBJECT_ID = '%s' and (%s) ", ContainerID, SearchCriteria), | ||||
| 	                      StartingIndex); | ||||
| 	DPRINTF(E_DEBUG, L_HTTP, "Search SQL: %s\n", sql); | ||||
| 	ret = sqlite3_exec(db, sql, callback, (void *) &args, &zErrMsg); | ||||
| 	if( ret != SQLITE_OK ) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user