maemo.org - Talk

maemo.org - Talk (https://talk.maemo.org/index.php)
-   Multimedia (https://talk.maemo.org/forumdisplay.php?f=32)
-   -   [ANNOUNCE] MediaBox Media Center 2010.06.26 is out for N900, N800, N810 (https://talk.maemo.org/showthread.php?t=57262)

AgogData 2011-02-14 16:27

Re: [ANNOUNCE] MediaBox Media Center 2010.06.26 is out for N900, N800, N810
 
yes mase, it'd be nice if you did

mase 2011-02-14 20:08

Re: [ANNOUNCE] MediaBox Media Center 2010.06.26 is out for N900, N800, N810
 
I think, I got it!
Try this ShoutcastDirectory.py:

Code:

from storage import Device, File
from com import msgs
from io import Downloader
from utils import logging
from utils import urlquote
from theme import theme

from xml.etree import ElementTree
from cStringIO import StringIO


#_SHOUTCAST_BASE = "http://www.shoutcast.com"
_SHOUTCAST_BASE = "http://api.shoutcast.com"



class ShoutcastDirectory(Device):
    """
    Storage device for browsing the SHOUTcast internet radio directory.
    """

    CATEGORY = Device.CATEGORY_WAN
    TYPE = Device.TYPE_AUDIO


    def __init__(self):

        # genre list
        self.__genres = []
       
        self.__current_folder = None
       
   
        Device.__init__(self)
       
       
       
    def get_prefix(self):
   
        return "iradio-shoutcast://"
       
       
    def get_name(self):
   
        return "SHOUTcast Radio"


    def get_icon(self):
   
        return theme.shoutcast_folder


    def __on_add_radio(self, folder, f):
   
        self.emit_message(msgs.IRADIO_ACT_ADD_STATION, f.name, f.resource)


    def get_file_actions(self, folder, f):
   
        options = Device.get_file_actions(self, folder, f)
        options.append((None, "Add to my Internet Radios", self.__on_add_radio))

        return options


    def __make_genre(self, genre):

        f = File(self)   
        f.name = genre
        f.path = "/" + urlquote.quote(genre, "")
        f.mimetype = f.DIRECTORY
        f.icon = theme.shoutcast_folder.get_path()
        f.folder_flags = f.ITEMS_ENQUEUEABLE

        return f


    def __make_station(self, s):
   
        try:
            name, bitrate, mimetype, location, genre = self.__decode_station(s)
        except:
            logging.error("error decoding iradio path: %s\n%s",
                            path, logging.stacktrace())
            return None
       
        f = File(self)
        f.name = name
        f.info = "Bitrate: %s kb" % bitrate
        f.resource = location
        f.path = "/" + urlquote.quote(genre, "") + "/" + s
        f.mimetype = mimetype
        f.icon = theme.shoutcast_station.get_path()
       
        return f     


    def get_file(self, path):

        parts = [ p for p in path.split("/") if p ]
        len_parts = len(parts)
       
        f = None
        if (len_parts == 0):
            # root folder
            f = File(self)
            f.path = "/"
            f.mimetype = f.DIRECTORY
            f.resource = ""
            f.name = self.get_name()
            f.info = "Browse the SHOUTcast directory"
            f.icon = self.get_icon().get_path()
            f.folder_flags = f.ITEMS_ENQUEUEABLE #| f.ITEMS_COMPACT
   
        elif (len_parts == 1):
            genre = urlquote.unquote(parts[0])
            f = self.__make_genre(genre)
   
        elif (len_parts == 2):
            f = self.__make_station(parts[1])

        return f
       
       
    def get_contents(self, folder, begin_at, end_at, cb, *args):

        def list_genres():
            cnt = 0
            for name in self.__genres:
                if (cnt < begin_at): continue
                if (end_at and cnt > end_at): break

                f = self.__make_genre(name)
                cb(f, *args)
                cnt += 1
            #end for
            cb(None, *args)


        def on_load_genres(d, amount, total, data):
            if (d):
                data[0] += d

            else:
                #open("/tmp/shoutcast-genres.html", "w").write(data[0])
                self.__genres = self.__parse_genres(data[0])
                list_genres()


        def on_load_stations(d, amount, total, data, genre):
            if (d):
                data[0] += d

            else:
                #open("/tmp/shoutcast-stations.html", "w").write(data[0])
                stations = self.__parse_stations(data[0], genre)
                cnt = 0
                for station in stations:
                    if (cnt < begin_at): continue
                    if (end_at and cnt > end_at): break

                    cb(station, *args)
                    cnt += 1
                #end for
                cb(None, *args)


        path = folder.path
        self.__current_folder = folder

        if (not path.endswith("/")): path += "/"
        parts = [ p for p in path.split("/") if p ]
        len_parts = len(parts)

        if (len_parts == 0):
            # list genres
            if (not self.__genres):
                dl = Downloader(_SHOUTCAST_BASE + "/legacy/genrelist?k=fa1669MuiRPorUBw",
                                on_load_genres, [""])
            else:
                list_genres()

        elif (len_parts == 1):
            # list stations
            genre = parts[0]
            dl = Downloader(_SHOUTCAST_BASE + "/legacy/genresearch?k=fa1669MuiRPorUBw&genre=%s" % genre,
                            on_load_stations, [""], genre)
       


    def __parse_genres(self, data):
        """
        Parses the XML list of genres.
        """

        genres = []
        try:
            dtree = ElementTree.parse(StringIO(data))
            for i in dtree.getiterator():
                if i.tag == "genre":
                    for j,n in i.items():
                        if j == "name":
                            genres.append(n)
        except:
            #self.call_service(msgs.UI_ACT_SHOW_INFO,
            #                  "An error occured while loading the list of genres.\n" \
            #                  "Check your internet connection and try again.")
            self.__current_folder.message = "genre list not available"
            logging.error("SHOUTcast genre listing download failed:\n%s",
                          logging.stacktrace())
           
        genres.sort()
        return genres


    def __parse_stations(self, data, genre):
        """
        Parses the XML list of stations.
        """

        stations = []
        try:
            dtree = ElementTree.parse(StringIO(data))
            for i in dtree.getiterator():
                if i.tag == "station":
                    # build station object
                    station = File(self)
                    bitrate = "-"
                    now_playing = "-"
                   
                    for j,n in i.items():
                        if j == "name":
                            station.name = n
                        elif j == "ct":
                            now_playing = n
                        elif j == "id":
                            station.resource = "http://yp.shoutcast.com/sbin/tunein-station.pls?id=%s&k=fa1669MuiRPorUBw" % n
                        elif j == "br":
                            bitrate = n
                        elif j == "mt":
                            station.mimetype = n

                    station.path = "/" + genre + "/" + \
                                  self.__encode_station(station.name,
                                                        bitrate,
                                                        station.mimetype,
                                                        station.resource,
                                                        genre)
                    station.info = "Bitrate: %s kb\n" \
                                  "Now playing: %s" % (bitrate, now_playing)
                    station.icon = theme.shoutcast_station.get_path()
                    stations.append(station)

        except:
            #self.call_service(msgs.UI_ACT_SHOW_INFO,
            #                  "An error occured while loading the list of stations.\n" \
            #                  "Check your internet connection and try again.")
            self.__current_folder.message = "station list not available"
            logging.error("SHOUTcast station listing download failed\n%s",
                          logging.stacktrace())

        stations.sort()
        return stations



    def __encode_station(self, name, bitrate, mimetype, resource, genre):
   
        s = "\t\t\t".join([name, bitrate, mimetype, resource, genre])
        return urlquote.quote(s, "")


    def __decode_station(self, s):
   
        data = urlquote.unquote(s)
        name, bitrate, mimetype, resource, genre = data.split("\t\t\t")
        return (name, bitrate, mimetype, resource, genre)

Does this work for you?

AgogData 2011-02-14 22:21

Re: [ANNOUNCE] MediaBox Media Center 2010.06.26 is out for N900, N800, N810
 
all i saw in shoutcast_directory in /home/opt/mediabox is ShoutcastDirectory.pyo not ShoutcastDirectory.py
and after i edited it with whats written above, in internet radio there is "no media loaded"
am i missing something ?

Edit : when i typed /home/opt/mediabox/MediaBox.py
and select internet radio, just a repeated lines of :
Code:

>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 155, in discover
>  TypeError: 'set' object is unindexable
2011-02-15 02:18:17.022 - ERROR  --- error during service call: FILEINDEX_SVC_DISCOVER
>  Traceback (most recent call last):
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/com/MessageBus.py", line 105, in call_service
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 415, in handle_FILEINDEX_SVC_DISCOVER
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 155, in discover
>  TypeError: 'set' object is unindexable
2011-02-15 02:18:17.105 - ERROR  --- error during service call: FILEINDEX_SVC_DISCOVER
>  Traceback (most recent call last):
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/com/MessageBus.py", line 105, in call_service
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 415, in handle_FILEINDEX_SVC_DISCOVER
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 155, in discover
>  TypeError: 'set' object is unindexable
2011-02-15 02:18:17.123 - ERROR  --- error during service call: FILEINDEX_SVC_DISCOVER
>  Traceback (most recent call last):
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/com/MessageBus.py", line 105, in call_service
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 415, in handle_FILEINDEX_SVC_DISCOVER
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 155, in discover
>  TypeError: 'set' object is unindexable
2011-02-15 02:18:17.198 - ERROR  --- error during service call: FILEINDEX_SVC_DISCOVER
>  Traceback (most recent call last):
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/com/MessageBus.py", line 105, in call_service
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 415, in handle_FILEINDEX_SVC_DISCOVER
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 155, in discover
>  TypeError: 'set' object is unindexable
2011-02-15 02:18:17.261 - ERROR  --- error during service call: FILEINDEX_SVC_DISCOVER
>  Traceback (most recent call last):
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/com/MessageBus.py", line 105, in call_service
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 415, in handle_FILEINDEX_SVC_DISCOVER
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 155, in discover
>  TypeError: 'set' object is unindexable
2011-02-15 02:18:17.297 - ERROR  --- error during service call: FILEINDEX_SVC_DISCOVER
>  Traceback (most recent call last):
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/com/MessageBus.py", line 105, in call_service
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 415, in handle_FILEINDEX_SVC_DISCOVER
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 155, in discover
>  TypeError: 'set' object is unindexable
2011-02-15 02:18:17.376 - ERROR  --- error during service call: FILEINDEX_SVC_DISCOVER
>  Traceback (most recent call last):
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/com/MessageBus.py", line 105, in call_service
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 415, in handle_FILEINDEX_SVC_DISCOVER
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 155, in discover
>  TypeError: 'set' object is unindexable
2011-02-15 02:18:17.411 - ERROR  --- error during service call: FILEINDEX_SVC_DISCOVER
>  Traceback (most recent call last):
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/com/MessageBus.py", line 105, in call_service
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 415, in handle_FILEINDEX_SVC_DISCOVER
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 155, in discover
>  TypeError: 'set' object is unindexable
2011-02-15 02:18:17.473 - ERROR  --- error during service call: FILEINDEX_SVC_DISCOVER
>  Traceback (most recent call last):
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/com/MessageBus.py", line 105, in call_service
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 415, in handle_FILEINDEX_SVC_DISCOVER
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 155, in discover
>  TypeError: 'set' object is unindexable
2011-02-15 02:18:17.498 - ERROR  --- error during service call: FILEINDEX_SVC_DISCOVER
>  Traceback (most recent call last):
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/com/MessageBus.py", line 105, in call_service
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 415, in handle_FILEINDEX_SVC_DISCOVER
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 155, in discover
>  TypeError: 'set' object is unindexable
2011-02-15 02:18:17.555 - ERROR  --- error during service call: FILEINDEX_SVC_DISCOVER
>  Traceback (most recent call last):
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/com/MessageBus.py", line 105, in call_service
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 415, in handle_FILEINDEX_SVC_DISCOVER
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 155, in discover
>  TypeError: 'set' object is unindexable
2011-02-15 02:18:17.613 - ERROR  --- error during service call: FILEINDEX_SVC_DISCOVER
>  Traceback (most recent call last):
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/com/MessageBus.py", line 105, in call_service
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 415, in handle_FILEINDEX_SVC_DISCOVER
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 155, in discover
>  TypeError: 'set' object is unindexable
2011-02-15 02:18:17.731 - ERROR  --- error during service call: FILEINDEX_SVC_DISCOVER
>  Traceback (most recent call last):
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/com/MessageBus.py", line 105, in call_service
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 415, in handle_FILEINDEX_SVC_DISCOVER
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 155, in discover
>  TypeError: 'set' object is unindexable
2011-02-15 02:18:17.809 - ERROR  --- error during service call: FILEINDEX_SVC_DISCOVER
>  Traceback (most recent call last):
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/com/MessageBus.py", line 105, in call_service
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 415, in handle_FILEINDEX_SVC_DISCOVER
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 155, in discover
>  TypeError: 'set' object is unindexable
2011-02-15 02:18:17.894 - ERROR  --- error during service call: FILEINDEX_SVC_DISCOVER
>  Traceback (most recent call last):
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/com/MessageBus.py", line 105, in call_service
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 415, in handle_FILEINDEX_SVC_DISCOVER
>    File "/home/builder2/maemo-fremantle-armel-extras-devel/work/mediabox-2010.11.11/debian/mediabox/opt/mediabox/components/fileindex/FileIndex.py", line 155, in discover
>  TypeError: 'set' object is unindexable

~ $

mase 2011-02-15 04:19

Re: [ANNOUNCE] MediaBox Media Center 2010.06.26 is out for N900, N800, N810
 
No, edit the sourcecode.

AgogData 2011-02-15 04:45

Re: [ANNOUNCE] MediaBox Media Center 2010.06.26 is out for N900, N800, N810
 
the source code is... ?
can you upload /home/user/meidabox/shoutcast_directory/ShoutcastDirectory.pyo and the source code please so i can copy them into their directory ?

mase 2011-02-15 08:16

Re: [ANNOUNCE] MediaBox Media Center 2010.06.26 is out for N900, N800, N810
 
1 Attachment(s)
Here it is the pyo.
I don't know, if I fixed everything. Please test.

elipsoid 2011-02-15 13:22

Re: [ANNOUNCE] MediaBox Media Center 2010.06.26 is out for N900, N800, N810
 
Quote:

Originally Posted by mase (Post 946826)
Here it is the pyo.
I don't know, if I fixed everything. Please test.

That worked for me, thanks mate.

AgogData 2011-02-15 23:22

Re: [ANNOUNCE] MediaBox Media Center 2010.06.26 is out for N900, N800, N810
 
Thanks alot its working :)

mase 2011-02-20 17:15

Re: [ANNOUNCE] MediaBox Media Center 2010.06.26 is out for N900, N800, N810
 
Is there an easier way to make MB the default mediaplayer to
use out of the webbrowser and filemanagers?
I only found this one:
http://talk.maemo.org/showthread.php?t=17757

mase 2011-03-14 21:43

Re: [ANNOUNCE] MediaBox Media Center 2010.06.26 is out for N900, N800, N810
 
I noticed, that Youtube downloads don't work any more. The transfer stays at
0 bytes. Searching and playing Youtube videos work. Can anybody confirm this?


All times are GMT. The time now is 19:15.

vBulletin® Version 3.8.8