diff options
author | jylefort <jylefort@FreeBSD.org> | 2005-05-11 09:59:38 +0800 |
---|---|---|
committer | jylefort <jylefort@FreeBSD.org> | 2005-05-11 09:59:38 +0800 |
commit | a1e3116da924a046dde6a0670d0031a7ac3511b8 (patch) | |
tree | 5fdbec9ac0481618a4bcdc1f3f0d430e37a14784 /audio/streamtuner | |
parent | b84187700a41124d5cc05b4dba78eb604a08a80d (diff) | |
download | freebsd-ports-gnome-a1e3116da924a046dde6a0670d0031a7ac3511b8.tar.gz freebsd-ports-gnome-a1e3116da924a046dde6a0670d0031a7ac3511b8.tar.zst freebsd-ports-gnome-a1e3116da924a046dde6a0670d0031a7ac3511b8.zip |
Fix Live365 support.
Diffstat (limited to 'audio/streamtuner')
-rw-r--r-- | audio/streamtuner/Makefile | 2 | ||||
-rw-r--r-- | audio/streamtuner/files/patch-src_plugins_live365_live365.c | 247 |
2 files changed, 248 insertions, 1 deletions
diff --git a/audio/streamtuner/Makefile b/audio/streamtuner/Makefile index d80d7873587e..ebd41f6e79d3 100644 --- a/audio/streamtuner/Makefile +++ b/audio/streamtuner/Makefile @@ -7,7 +7,7 @@ PORTNAME= streamtuner PORTVERSION= 0.99.99 -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= audio www MASTER_SITES= ${MASTER_SITE_SAVANNAH} MASTER_SITE_SUBDIR= ${PORTNAME} diff --git a/audio/streamtuner/files/patch-src_plugins_live365_live365.c b/audio/streamtuner/files/patch-src_plugins_live365_live365.c new file mode 100644 index 000000000000..2000c3b663b0 --- /dev/null +++ b/audio/streamtuner/files/patch-src_plugins_live365_live365.c @@ -0,0 +1,247 @@ +--- src/plugins/live365/live365.c.orig Wed May 11 03:49:30 2005 ++++ src/plugins/live365/live365.c Wed May 11 03:51:11 2005 +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 2002, 2003, 2004 Jean-Yves Lefort ++ * Copyright (C) 2002-2005 Jean-Yves Lefort + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without +@@ -59,7 +59,9 @@ + { + ACCESS_ALL, + ACCESS_VIP, +- ACCESS_SUBSCRIPTION ++ ACCESS_SUBSCRIPTION, ++ ACCESS_SOLD_OUT, ++ ACCESS_UNKNOWN + } Access; + + typedef struct +@@ -94,7 +96,8 @@ + { + GList **streams; + Live365Stream *stream; +- Live365Stream *finished_stream; ++ gboolean first_page; ++ gboolean looped; + gboolean has_next_page; + } ReloadStreamsInfo; + +@@ -263,13 +266,16 @@ + + case FIELD_ACCESS_STRING: + { +- const char *str = NULL; ++ const char *str; + + switch (stream->access) + { + case ACCESS_ALL: str = _("All"); break; + case ACCESS_VIP: str = _("VIP"); break; + case ACCESS_SUBSCRIPTION: str = _("Subscription"); break; ++ case ACCESS_SOLD_OUT: str = _("Sold out"); break; ++ case ACCESS_UNKNOWN: str = _("Unknown"); break; ++ default: str = NULL; break; + } + + g_value_set_string(value, str); +@@ -707,14 +713,16 @@ + char *s1, *s2, *s3, *s4, *s5; + + if ((s1 = st_strstr_span(line, "<a href=\"/cgi-bin/directory")) +- && (s2 = st_strstr_span(s1, "&genre=")) ++ && (s2 = st_strstr_span(s1, "genre=")) + && (s3 = strchr(s2, '"')) + && (s4 = st_strchr_span(s3, '>')) + && (s5 = strstr(s4, "</a>"))) + { + category = st_category_new(); + category->name = g_strndup(s2, s3 - s2); +- category->label = st_sgml_ref_expand_len(s4, s5 - s4); ++ category->label = ! strcmp(category->name, "Recommendations") ++ ? g_strdup(_("Recommendations")) ++ : st_sgml_ref_expand_len(s4, s5 - s4); + category->url_postfix = g_strconcat(DIRECTORY_PREFIX, category->name, NULL); + } + else if ((s1 = st_strstr_span(line, "<a href=\"/genres/")) +@@ -755,6 +763,8 @@ + + *streams = NULL; + info.streams = streams; ++ info.first_page = TRUE; ++ info.looped = FALSE; + + session = st_transfer_session_new(); + +@@ -802,9 +812,11 @@ + if (status) /* only display warning if the transfer was otherwise correct */ + PARSE_ERROR; + } ++ ++ info.first_page = FALSE; + } +- while (status && info.has_next_page +- && (stream_limit == -1 || received_streams < stream_limit)); ++ while (status && info.has_next_page && ! info.looped ++ && (stream_limit == -1 || received_streams < stream_limit)); + + st_transfer_session_free(session); + +@@ -818,6 +830,10 @@ + char *s1, *s2, *s3, *s4, *s5, *s6, *s7; + char *word1, *word2, *word3; + ++ /* if we have detected a loop, we just ignore the page */ ++ if (info->looped) ++ return; ++ + if ((s1 = st_str_has_prefix_span(line, "<TD CLASS=\"icon\"")) + && (s2 = st_strstr_span(s1, "DrawPlayIcon"))) + { +@@ -834,15 +850,18 @@ + info->stream->access = ACCESS_VIP; + else if (strstr(s2, "'SUBSCRIPTION'")) + info->stream->access = ACCESS_SUBSCRIPTION; ++ else if (strstr(s2, "'SOLD_OUT'")) ++ info->stream->access = ACCESS_SOLD_OUT; + else +- PARSE_ERROR; +- +- info->finished_stream = NULL; ++ { ++ PARSE_ERROR; ++ info->stream->access = ACCESS_UNKNOWN; ++ } + } + else if ((s1 = st_str_has_prefix_span(line, "<TD CLASS=\"title")) +- && (s2 = st_strstr_span(s1, "href='")) +- && (s3 = strstr(s2, "'>")) +- && (s4 = strstr(s3, "</a>"))) ++ && (s2 = st_strstr_span(s1, "href='")) ++ && (s3 = strstr(s2, "'>")) ++ && (s4 = strstr(s3, "</a>"))) + { + if (info->stream) + { +@@ -865,12 +884,19 @@ + else + PARSE_ERROR; + } +- else if ((s1 = st_strstr_span(line, "&station_id=")) +- && (s2 = strchr(s1, '&'))) ++ else if ((s1 = st_str_has_prefix_span(line, "<TD CLASS=\"handle\"")) ++ && (s2 = st_strstr_span(s1, "ReadCookie(")) ++ && (s3 = st_strstr_span(s2, ", '")) ++ && (s4 = strchr(s3, '\'')) ++ && (s5 = st_strstr_span(s4, "&station_id=")) ++ && (s6 = strchr(s5, '&'))) + { + if (info->stream) + { +- word1 = g_strndup(s1, s2 - s1); ++ g_free(info->stream->broadcaster); ++ info->stream->broadcaster = st_sgml_ref_expand_len(s3, s4 - s3); ++ ++ word1 = g_strndup(s5, s6 - s5); + if (st_str_like(word1, ST_NUMERIC)) + info->stream->station_id = atoi(word1); + g_free(word1); +@@ -878,34 +904,23 @@ + else + PARSE_ERROR; + } +- else if ((s1 = st_strstr_span(line, "alt=\"More broadcaster info")) +- && (s2 = st_strchr_span(s1, '>')) +- && (s3 = strstr(s2, "</a>"))) +- { +- if (info->stream) +- { +- g_free(info->stream->broadcaster); +- info->stream->broadcaster = st_sgml_ref_expand_len(s2, s3 - s2); +- } +- else +- PARSE_ERROR; +- } + else if ((s1 = st_str_has_prefix_span(line, "<TD CLASS=\"connection\"")) + && (s2 = st_strchr_span(s1, '>')) +- && (s3 = strstr(s2, "<br>")) +- && ((s4 = strstr(s3, "<img src='/images/mp3pro")) +- || (s4 = strstr(s3, "</TD>")))) ++ && (s3 = strchr(s2, '<'))) + { + if (info->stream) + { + word1 = st_sgml_ref_expand_len(s2, s3 - s2); +- s3 += 4; word2 = st_sgml_ref_expand_len(s3, s4 - s3); +- ++ + g_free(info->stream->audio); +- info->stream->audio = g_strdup_printf(g_str_has_prefix(s4, "</TD>") ? "%s %s" : "%s %s, MP3Pro", word2, word1); + +- g_free(word1); +- g_free(word2); ++ if (strstr(s3, "<img src='/images/mp3pro")) ++ { ++ info->stream->audio = g_strdup_printf("%s, MP3Pro", word1); ++ g_free(word1); ++ } ++ else ++ info->stream->audio = word1; + } + else + PARSE_ERROR; +@@ -947,12 +962,17 @@ + else + PARSE_ERROR; + } +- else if (strstr(line, "TD CLASS=\"tabledesc2\"")) ++ else if ((s1 = st_strstr_span(line, "<TD CLASS=\"desc\""))) + { + if (info->stream) + { + if (info->stream->station_id) + { ++ if ((s2 = st_strstr_span(s1, "<a class='desc-link' href='")) ++ && (s3 = st_strchr_span(s2, '>')) ++ && (s4 = strstr(s3, "<BR>"))) ++ info->stream->description = st_sgml_ref_expand_len(s3, s4 - s3); ++ + ((STStream *) info->stream)->name = g_strdup_printf("%i", info->stream->station_id); + *(info->streams) = g_list_append(*(info->streams), info->stream); + } +@@ -962,23 +982,23 @@ + stream_free_cb(info->stream, NULL); + } + +- info->finished_stream = info->stream; + info->stream = NULL; + } + else + PARSE_ERROR; + } +- else if ((s1 = st_strstr_span(line, "<a class='desc-link' href='")) +- && (s2 = st_strchr_span(s1, '>')) +- && (s3 = strstr(s2, "<BR>"))) +- { +- if (info->finished_stream) +- { +- info->finished_stream->description = st_sgml_ref_expand_len(s2, s3 - s2); +- info->finished_stream = NULL; ++ else if ((s1 = st_strstr_span(line, "<TD class=\"pagination\"")) ++ && (s2 = st_strstr_span(s1, ">Showing ")) ++ && (s3 = strchr(s2, '-'))) ++ { ++ word1 = g_strndup(s2, s3 - s2); ++ if (st_str_like(word1, ST_NUMERIC)) ++ { ++ int n = atoi(word1); ++ if (n == 1 && ! info->first_page) ++ info->looped = TRUE; + } +- else +- PARSE_ERROR; ++ g_free(word1); + } + else if (strstr(line, "Next</A>")) + info->has_next_page = TRUE; |