aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--multimedia/streamtuner/README4
-rw-r--r--multimedia/streamtuner/doinst.sh5
-rw-r--r--multimedia/streamtuner/slack-desc11
-rw-r--r--multimedia/streamtuner/streamtuner-0.99.99-live365.diff247
-rw-r--r--multimedia/streamtuner/streamtuner.SlackBuild92
-rw-r--r--multimedia/streamtuner/streamtuner.info8
6 files changed, 367 insertions, 0 deletions
diff --git a/multimedia/streamtuner/README b/multimedia/streamtuner/README
new file mode 100644
index 0000000000000..9b7e995d8101c
--- /dev/null
+++ b/multimedia/streamtuner/README
@@ -0,0 +1,4 @@
+streamtuner is a stream directory browser. Through the use of
+a plugin system, it offers an intuitive GTK+ 2.0 interface to
+Internet radio directories such as SHOUTcast and Live365.
+
diff --git a/multimedia/streamtuner/doinst.sh b/multimedia/streamtuner/doinst.sh
new file mode 100644
index 0000000000000..3412314ed0094
--- /dev/null
+++ b/multimedia/streamtuner/doinst.sh
@@ -0,0 +1,5 @@
+
+if [ -x usr/bin/update-desktop-database ]; then
+ ./usr/bin/update-desktop-database ./usr/share/applications >/dev/null 2>&1
+fi
+
diff --git a/multimedia/streamtuner/slack-desc b/multimedia/streamtuner/slack-desc
new file mode 100644
index 0000000000000..f309738e405b1
--- /dev/null
+++ b/multimedia/streamtuner/slack-desc
@@ -0,0 +1,11 @@
+streamtuner: streamtuner (Stream Directory Browser)
+streamtuner:
+streamtuner: streamtuner is a stream directory browser. Through the use of
+streamtuner: a plugin system, it offers an intuitive GTK+ 2.0 interface to
+streamtuner: Internet radio directories such as SHOUTcast and Live365.
+streamtuner:
+streamtuner: Homepage: http://www.nongnu.org/streamtuner/
+streamtuner:
+streamtuner:
+streamtuner:
+streamtuner:
diff --git a/multimedia/streamtuner/streamtuner-0.99.99-live365.diff b/multimedia/streamtuner/streamtuner-0.99.99-live365.diff
new file mode 100644
index 0000000000000..2000c3b663b0c
--- /dev/null
+++ b/multimedia/streamtuner/streamtuner-0.99.99-live365.diff
@@ -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;
diff --git a/multimedia/streamtuner/streamtuner.SlackBuild b/multimedia/streamtuner/streamtuner.SlackBuild
new file mode 100644
index 0000000000000..02217217539e0
--- /dev/null
+++ b/multimedia/streamtuner/streamtuner.SlackBuild
@@ -0,0 +1,92 @@
+#!/bin/sh
+
+# Slackware build script for streamtuner
+
+# Copyright 2007 MagicMan <MagicMan07@bluebottle.com>
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Modified by the SlackBuilds.org project
+
+if [ "$(id -u)" != "0" ]; then
+ echo "This script must be run as root!"
+ exit 1
+fi
+
+PRGNAM=streamtuner
+VERSION=0.99.99
+ARCH=${ARCH:-i486}
+BUILD=${BUILD:-1}
+TAG=${TAG:-_SBo}
+CWD=`pwd`
+TMP=${TMP:-/tmp/SBo}
+PKG=$TMP/package-$PRGNAM
+OUTPUT=${OUTPUT:-/tmp}
+
+PDOCS="AUTHORS COPYING INSTALL NEWS README TODO"
+
+if [ "$ARCH" = "i486" ]; then
+ SLKCFLAGS="-O2 -march=i486 -mtune=i686"
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+fi
+
+rm -rf $PKG
+mkdir -p $TMP $PKG $OUTPUT
+cd $TMP || exit 1
+rm -rf $PRGNAM-$VERSION
+tar -xvf $CWD/$PRGNAM-$VERSION.tar.* || exit 1
+cd $PRGNAM-$VERSION || exit 1
+
+# Apply streamtuner-0.99.99-live365.diff patch:
+cat $CWD/$PRGNAM-$VERSION-live365.diff | patch -p0 --verbose || exit 1
+
+chown -R root:root .
+chmod -R u+w,go+r-w,a-s .
+
+CFLAGS="$SLKCFLAGS" \
+CXXFLAGS="$SLKCFLAGS" \
+./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ || exit 1
+
+make || exit 1
+make install-strip DESTDIR=$PKG || exit 1
+
+mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
+cp -a $PDOCS $PKG/usr/doc/$PRGNAM-$VERSION
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+
+# Create link to html docs:
+( cd $PKG/usr/doc/$PRGNAM-$VERSION
+ ln -s ../../share/gtk-doc/html/$PRGNAM html
+)
+
+mkdir -p $PKG/install
+cat $CWD/doinst.sh > $PKG/install/doinst.sh
+cat $CWD/slack-desc > $PKG/install/slack-desc
+
+# Fix path to icon in desktop file:
+sed -i 's#^Icon=\(.\+\)$#Icon=/usr/share/pixmaps/\1#' \
+ $PKG/usr/share/applications/$PRGNAM.desktop || exit 1
+
+cd $PKG
+/sbin/makepkg -l y -c n -p $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.tgz
diff --git a/multimedia/streamtuner/streamtuner.info b/multimedia/streamtuner/streamtuner.info
new file mode 100644
index 0000000000000..bc8b3cc7aade3
--- /dev/null
+++ b/multimedia/streamtuner/streamtuner.info
@@ -0,0 +1,8 @@
+PRGNAM="streamtuner"
+VERSION="0.99.99"
+HOMEPAGE="http://www.nongnu.org/streamtuner/"
+DOWNLOAD="http://savannah.nongnu.org/download/streamtuner/streamtuner-0.99.99.tar.gz"
+MD5SUM="2027b7c34e85b594524b0b4351c14362"
+MAINTAINER="MagicMan"
+EMAIL="MagicMan07@bluebottle.com"
+APPROVED="robw810"