mirror of
https://github.com/owntone/owntone-server.git
synced 2025-07-16 12:21:59 -04:00
Attempt to fix #147 - long song lists hang soundbridge... need grommet to test
This commit is contained in:
parent
a533430540
commit
603ce10fae
@ -364,6 +364,7 @@ void rsp_playlist(WS_CONNINFO *pwsc, PRIVINFO *ppi) {
|
|||||||
int type;
|
int type;
|
||||||
int transcode;
|
int transcode;
|
||||||
unsigned int samplerate;
|
unsigned int samplerate;
|
||||||
|
int done = 0;
|
||||||
|
|
||||||
ppi->dq.filter = _ppi->ws_getvar(pwsc,"query");
|
ppi->dq.filter = _ppi->ws_getvar(pwsc,"query");
|
||||||
ppi->dq.filter_type = FILTER_TYPE_FIREFLY;
|
ppi->dq.filter_type = FILTER_TYPE_FIREFLY;
|
||||||
@ -418,7 +419,8 @@ void rsp_playlist(WS_CONNINFO *pwsc, PRIVINFO *ppi) {
|
|||||||
|
|
||||||
xml_push(pxml,"items");
|
xml_push(pxml,"items");
|
||||||
|
|
||||||
while((_ppi->db_enum_fetch_row(NULL,&row,&ppi->dq) == 0) && (row)) {
|
while((!done) && (_ppi->db_enum_fetch_row(NULL,&row,&ppi->dq) == 0) &&
|
||||||
|
(row)) {
|
||||||
xml_push(pxml,"item");
|
xml_push(pxml,"item");
|
||||||
rowindex=0;
|
rowindex=0;
|
||||||
transcode = 0;
|
transcode = 0;
|
||||||
@ -459,8 +461,10 @@ void rsp_playlist(WS_CONNINFO *pwsc, PRIVINFO *ppi) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
xml_output(pxml,rsp_fields[rowindex].name,"%s",
|
/* check for pushing against closed socket */
|
||||||
row[rowindex]);
|
if(xml_output(pxml,rsp_fields[rowindex].name,"%s",
|
||||||
|
row[rowindex]) == -1)
|
||||||
|
done=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -53,19 +53,24 @@ XML_STREAMBUFFER *xml_stream_open(void);
|
|||||||
int xml_stream_write(XMLSTRUCT *pxml, char *out);
|
int xml_stream_write(XMLSTRUCT *pxml, char *out);
|
||||||
int xml_stream_close(XMLSTRUCT *pxml);
|
int xml_stream_close(XMLSTRUCT *pxml);
|
||||||
|
|
||||||
void xml_write(XMLSTRUCT *pxml, char *fmt, ...) {
|
int xml_write(XMLSTRUCT *pxml, char *fmt, ...) {
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
int result=0;
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
vsnprintf(buffer, 1024, fmt, ap);
|
vsnprintf(buffer, 1024, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
if(pxml->psb) {
|
if(pxml->psb) {
|
||||||
xml_stream_write(pxml, buffer);
|
result=xml_stream_write(pxml, buffer);
|
||||||
|
if(!result)
|
||||||
|
result = -1;
|
||||||
} else {
|
} else {
|
||||||
_ppi->ws_writefd(pxml->pwsc,"%s",buffer);
|
result=_ppi->ws_writefd(pxml->pwsc,"%s",buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void xml_return_error(WS_CONNINFO *pwsc, int errno, char *errstr) {
|
void xml_return_error(WS_CONNINFO *pwsc, int errno, char *errstr) {
|
||||||
@ -283,10 +288,11 @@ void xml_pop(XMLSTRUCT *pxml) {
|
|||||||
/**
|
/**
|
||||||
* output a string
|
* output a string
|
||||||
*/
|
*/
|
||||||
void xml_output(XMLSTRUCT *pxml, char *section, char *fmt, ...) {
|
int xml_output(XMLSTRUCT *pxml, char *section, char *fmt, ...) {
|
||||||
va_list ap;
|
va_list ap;
|
||||||
char buf[256];
|
char buf[256];
|
||||||
char *output;
|
char *output;
|
||||||
|
int result=0;
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
vsnprintf(buf, sizeof(buf), fmt, ap);
|
vsnprintf(buf, sizeof(buf), fmt, ap);
|
||||||
@ -297,11 +303,13 @@ void xml_output(XMLSTRUCT *pxml, char *section, char *fmt, ...) {
|
|||||||
xml_push(pxml,section);
|
xml_push(pxml,section);
|
||||||
}
|
}
|
||||||
|
|
||||||
xml_write(pxml,"%s",output);
|
result = xml_write(pxml,"%s",output);
|
||||||
free(output);
|
free(output);
|
||||||
if(section) {
|
if(section) {
|
||||||
xml_pop(pxml);
|
xml_pop(pxml);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -14,7 +14,7 @@ typedef struct tag_ws_conninfo WS_CONNINFO;
|
|||||||
extern XMLSTRUCT *xml_init(WS_CONNINFO *pwsc, int emit_header);
|
extern XMLSTRUCT *xml_init(WS_CONNINFO *pwsc, int emit_header);
|
||||||
extern void xml_push(XMLSTRUCT *pxml, char *term);
|
extern void xml_push(XMLSTRUCT *pxml, char *term);
|
||||||
extern void xml_pop(XMLSTRUCT *pxml);
|
extern void xml_pop(XMLSTRUCT *pxml);
|
||||||
extern void xml_output(XMLSTRUCT *pxml, char *section, char *fmt, ...);
|
extern int xml_output(XMLSTRUCT *pxml, char *section, char *fmt, ...);
|
||||||
extern void xml_deinit(XMLSTRUCT *pxml);
|
extern void xml_deinit(XMLSTRUCT *pxml);
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user