playlist/soundcloud: support libyajl2

[mk: backwars compatibility and autoconf check]
This commit is contained in:
Robert Vollmert 2012-03-19 21:16:48 +01:00 committed by Max Kellermann
parent d5be3cce9c
commit 281b8714ef
3 changed files with 27 additions and 8 deletions

View File

@ -889,6 +889,7 @@ libplaylist_plugins_a_SOURCES = \
src/playlist/embcue_playlist_plugin.h \ src/playlist/embcue_playlist_plugin.h \
src/playlist_list.c src/playlist_list.c
libplaylist_plugins_a_CPPFLAGS = $(AM_CPPFLAGS) \ libplaylist_plugins_a_CPPFLAGS = $(AM_CPPFLAGS) \
$(YAJL_CFLAGS) \
$(patsubst -I%/FLAC,-I%,$(FLAC_CFLAGS)) $(patsubst -I%/FLAC,-I%,$(FLAC_CFLAGS))
PLAYLIST_LIBS = \ PLAYLIST_LIBS = \

View File

@ -709,9 +709,11 @@ AM_CONDITIONAL(ENABLE_DESPOTIFY, test x$enable_despotify = xyes)
dnl --------------------------------- Soundcloud ------------------------------ dnl --------------------------------- Soundcloud ------------------------------
if test x$enable_soundcloud != xno; then if test x$enable_soundcloud != xno; then
AC_CHECK_LIB([yajl], [yajl_alloc], PKG_CHECK_MODULES([YAJL], [yajl >= 2.0],
[found_soundcloud=yes YAJL_LIBS=-lyajl], [found_soundcloud=yes],
[found_soundcloud=no]) AC_CHECK_LIB([yajl], [yajl_alloc],
[found_soundcloud=yes YAJL_CFLAGS=-DHAVE_YAJL1 YAJL_LIBS=-lyajl],
[found_soundcloud=no]))
fi fi
MPD_AUTO_RESULT([soundcloud], [soundcloud.com support], [libyajl not found]) MPD_AUTO_RESULT([soundcloud], [soundcloud.com support], [libyajl not found])
if test x$enable_soundcloud = xyes; then if test x$enable_soundcloud = xyes; then

View File

@ -110,7 +110,12 @@ struct parse_data {
GSList* songs; GSList* songs;
}; };
static int handle_integer(void *ctx, long intval) static int handle_integer(void *ctx,
long
#ifndef HAVE_YAJL1
long
#endif
intval)
{ {
struct parse_data *data = (struct parse_data *) ctx; struct parse_data *data = (struct parse_data *) ctx;
@ -269,13 +274,20 @@ soundcloud_parse_json(const char *url, yajl_handle hand, GMutex* mutex, GCond* c
} }
} }
if (done) if (done) {
#ifdef HAVE_YAJL1
stat = yajl_parse_complete(hand); stat = yajl_parse_complete(hand);
else #else
stat = yajl_complete_parse(hand);
#endif
} else
stat = yajl_parse(hand, ubuffer, nbytes); stat = yajl_parse(hand, ubuffer, nbytes);
if (stat != yajl_status_ok && if (stat != yajl_status_ok
stat != yajl_status_insufficient_data) #ifdef HAVE_YAJL1
&& stat != yajl_status_insufficient_data
#endif
)
{ {
unsigned char *str = yajl_get_error(hand, 1, ubuffer, nbytes); unsigned char *str = yajl_get_error(hand, 1, ubuffer, nbytes);
g_warning("%s", str); g_warning("%s", str);
@ -356,7 +368,11 @@ soundcloud_open_uri(const char *uri, GMutex *mutex, GCond *cond)
data.songs = NULL; data.songs = NULL;
data.title = NULL; data.title = NULL;
data.stream_url = NULL; data.stream_url = NULL;
#ifdef HAVE_YAJL1
hand = yajl_alloc(&parse_callbacks, NULL, NULL, (void *) &data); hand = yajl_alloc(&parse_callbacks, NULL, NULL, (void *) &data);
#else
hand = yajl_alloc(&parse_callbacks, NULL, (void *) &data);
#endif
int ret = soundcloud_parse_json(u, hand, mutex, cond); int ret = soundcloud_parse_json(u, hand, mutex, cond);