Kodi Community Forum
XBMC Tuxbox Enigma Stream Client (Enigma / Enigma2 Based Dreambox & Dbox2) - Printable Version

+- Kodi Community Forum (https://forum.kodi.tv)
+-- Forum: Development (https://forum.kodi.tv/forumdisplay.php?fid=32)
+--- Forum: Kodi Application (https://forum.kodi.tv/forumdisplay.php?fid=93)
+--- Thread: XBMC Tuxbox Enigma Stream Client (Enigma / Enigma2 Based Dreambox & Dbox2) (/showthread.php?tid=23834)

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47


- Vultures - 2011-10-20

dutchmatrix Wrote:Could someone of you test it.
It works! (Pre-eden @ windows)


- Vultures - 2011-10-20

It would be nice to see percentage of time elapsed for events, and (the holy grail of all tuxbox plugins) switching between channelsJ


program info in channellist beside program name - dutchmatrix - 2011-10-20

Vultures Wrote:It works! (Pre-eden @ windows)

Thanx, i already added some program info in the channel list behind the I button.
Next step is channel switch.

New code (dreambox.py)
Code:
import xbmc, xbmcplugin, xbmcgui, urllib, urllib2, sys, xml.dom.minidom

def getText(nodelist):
    rc = []
    for node in nodelist:
        if node.nodeType == node.TEXT_NODE:
            rc.append(node.data)
    return ''.join(rc)

class Dreambox(object):
    __settings__ = sys.modules[ "__main__" ].__settings__
    __language__ = sys.modules[ "__main__" ].__language__
    __plugin__ = sys.modules[ "__main__" ].__plugin__

    def __init__(self, handle):
        self.handle = handle
        self.ipaddress = self.__settings__.getSetting("ipaddress")
        self.username = self.__settings__.getSetting("username")
        self.password = self.__settings__.getSetting("password")
        
        password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
        dreambox_url = "http://" + self.ipaddress
        password_mgr.add_password(None, dreambox_url, self.username, self.password)
        handler = urllib2.HTTPBasicAuthHandler(password_mgr)
        opener = urllib2.build_opener(handler)
        urllib2.install_opener(opener)

    def rootmenu(self):
        menu = [
            { "name":self.__language__( 1 ), "mode": "tv" },
            { "name":self.__language__( 2 ), "mode": "radio" },
            { "name":self.__language__( 3 ), "mode": "movies" },
        ]

        for item in menu:
            li = xbmcgui.ListItem(item["name"])
            url = sys.argv[0] + '?' + urllib.urlencode({"mode":item["mode"]})
            xbmcplugin.addDirectoryItem(handle=self.handle, url=url, listitem=li, isFolder=True, totalItems=len(menu) )

        xbmcplugin.endOfDirectory(handle=self.handle, succeeded=True)

    def readradioservicelist(self):
        # Get Bouquet list
        data = urllib2.urlopen("http://" + self.ipaddress + "/web/getservices?" + urllib.urlencode({"sRef": '1:7:2:0:0:0:0:0:0:0:(type == 2)FROM BOUQUET "bouquets.radio" ORDER BY bouquet'}))
        e2servicelist = xml.dom.minidom.parse(data)
        data.close()

        servicelist = e2servicelist.getElementsByTagName("e2service")
        for service in servicelist:
            data = {}
            for element in service.childNodes:
                data[element.localName] = getText(element.childNodes)

            cmd = {}
            cmd["mode"] ="readservice"
            cmd["e2servicename"] = data["e2servicename"].encode("utf-8")
            cmd["e2servicereference"] = data["e2servicereference"].encode("utf-8")

            li = xbmcgui.ListItem(data["e2servicename"])
            url = sys.argv[0] + '?' + urllib.urlencode(cmd)
            xbmcplugin.addDirectoryItem(handle=self.handle, url=url, listitem=li, isFolder=True, totalItems=len(servicelist))

        # Get provider list
        data = {
            "mode":"readservice",
            "e2servicename":"Provider",
            "e2servicereference":"1:7:2:0:0:0:0:0:0:0:(type == 2) FROM PROVIDERS ORDER BY name"
        }
        li = xbmcgui.ListItem(data["e2servicename"])
        url = sys.argv[0] + '?' + urllib.urlencode(data)
        xbmcplugin.addDirectoryItem(handle=self.handle, url=url, listitem=li, isFolder=True, totalItems=len(servicelist))

        xbmcplugin.endOfDirectory(handle=self.handle, succeeded=True)

    def readtvservicelist(self):
        # Get Bouquet list
        data = urllib2.urlopen("http://" + self.ipaddress + "/web/getservices?" + urllib.urlencode({"sRef": '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25)FROM BOUQUET "bouquets.tv" ORDER BY bouquet'}))
        e2servicelist = xml.dom.minidom.parse(data)
        data.close()

        servicelist = e2servicelist.getElementsByTagName("e2service")
        for service in servicelist:
            data = {}
            for element in service.childNodes:
                data[element.localName] = getText(element.childNodes)

            cmd = {}
            cmd["mode"] ="readservice"
            cmd["e2servicename"] = data["e2servicename"].encode("utf-8")
            cmd["e2servicereference"] = data["e2servicereference"].encode("utf-8")

            li = xbmcgui.ListItem(data["e2servicename"])
            url = sys.argv[0] + '?' + urllib.urlencode(cmd)
            xbmcplugin.addDirectoryItem(handle=self.handle, url=url, listitem=li, isFolder=True, totalItems=len(servicelist))

        # Get provider list
        data = {
            "mode":"readservice",
            "e2servicename":"Provider",
            "e2servicereference":"1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25) FROM PROVIDERS ORDER BY name"
        }
        li = xbmcgui.ListItem(data["e2servicename"])
        url = sys.argv[0] + '?' + urllib.urlencode(data)
        xbmcplugin.addDirectoryItem(handle=self.handle, url=url, listitem=li, isFolder=True, totalItems=len(servicelist))

        # Get satellite list
        data = {
            "mode":"readservice",
            "e2servicename":"Satellite",
            "e2servicereference":"1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25) FROM SATELLITES ORDER BY name"
        }
        li = xbmcgui.ListItem(data["e2servicename"])
        url = sys.argv[0] + '?' + urllib.urlencode(data)
        xbmcplugin.addDirectoryItem(handle=self.handle, url=url, listitem=li, isFolder=True, totalItems=len(servicelist))

        xbmcplugin.endOfDirectory(handle=self.handle, succeeded=True)

    def readservice(self, data):
        servicereference = data["e2servicereference"][0].decode("utf-8")
        data = urllib2.urlopen("http://" + self.ipaddress + "/web/getservices?" + urllib.urlencode({"sRef": servicereference.encode("utf-8")}))
        e2servicelist = xml.dom.minidom.parse(data)
        data.close()
        currentEvent1 = "http://" + self.ipaddress + "/web/epgnow?" + urllib.urlencode({"bRef": servicereference})
        dataEpg = urllib2.urlopen("http://" + self.ipaddress + "/web/epgnow?" + urllib.urlencode({"bRef": servicereference.encode("utf-8")}))
        e2epglist = xml.dom.minidom.parse(dataEpg)
        dataEpg.close()
        servicelist = e2servicelist.getElementsByTagName("e2service")
        epglist = e2epglist.getElementsByTagName("e2event")
        epgArray = {}
        for epg in epglist:
            tempData = {}
            for element in epg.childNodes:
                tempData[element.localName] = getText(element.childNodes)
            if tempData["e2eventservicename"]:
                epgArray[tempData["e2eventservicename"]] = tempData
        for service in servicelist:
            data = {}
            for element in service.childNodes:
                data[element.localName] = getText(element.childNodes)
            servicereference = data["e2servicereference"].split(":")
            attr = int(servicereference[1])
            mode = int(servicereference[2])
            cmd = {}
            if attr & 4:
                cmd["mode"] ="readservice"
                isFolder = True
            else:
                cmd["mode"] ="stream"
                isFolder = False
                
            cmd["e2servicename"] = data["e2servicename"].encode("utf-8")
            cmd["e2servicereference"] = data["e2servicereference"].encode("utf-8")
            extraInfo = " (" + epgArray[data["e2servicename"]]["e2eventtitle"]  + ")"
            li = xbmcgui.ListItem(data["e2servicename"] + extraInfo)
            mediatype = ""
            if mode == 1:
                mediatype = "video"
            elif mode == 2:
                mediatype = "music"
            if mediatype:
                labels = {
                   "plot":epgArray[data["e2servicename"]]["e2eventdescription"] + "\r\n" + epgArray[data["e2servicename"]]["e2eventdescriptionextended"],
                   "title":data["e2servicename"] + extraInfo
                }
                li.setInfo("video", labels)
                #li.setInfo(mediatype, {'Title': data["e2servicename"] })
            url = sys.argv[0] + '?' + urllib.urlencode(cmd)
            xbmcplugin.addDirectoryItem(handle=self.handle, url=url, listitem=li, isFolder=isFolder, totalItems=len(servicelist))
        xbmcplugin.endOfDirectory(handle=self.handle, succeeded=True)

    def readmovies(self):
        data = urllib2.urlopen("http://" + self.ipaddress + "/web/movielist")
        e2movielist = xml.dom.minidom.parse(data)
        data.close()

        movieList = e2movielist.getElementsByTagName("e2movie")
        for movie in movieList:
            data = {}
            for element in movie.childNodes:
                data[element.localName] = getText(element.childNodes)

            li = xbmcgui.ListItem(data["e2title"], data["e2description"])
            labels = {
                "size":int(data["e2filesize"]),
                "plot":data["e2description"],
                "title":data["e2title"]
            }
            li.setInfo("video", labels)
            url = sys.argv[0] + '?' + urllib.urlencode({"mode":"ts", "e2servicename":data["e2title"].encode("utf-8"), "e2filename":data["e2filename"].encode("utf-8"), "e2servicereference":data["e2servicereference"].encode("utf-8")})
            xbmcplugin.addDirectoryItem(handle=self.handle, url=url, listitem=li, isFolder=False, totalItems=len(movieList))
        xbmcplugin.endOfDirectory(handle=self.handle, succeeded=True)

    def stream(self, data):
        servicename = data["e2servicename"][0].decode("utf-8")
        servicereference = data["e2servicereference"][0].decode("utf-8")
        reference = servicereference.split(":")
        mode = int(reference[2])

        data = urllib2.urlopen("http://" + self.ipaddress + "/web/stream.m3u?" + urllib.urlencode({"ref": servicereference.encode("utf-8")}))
        playlist = data.readlines()
        playlist[-1] = playlist[-1].replace(" ", "%20")
        data.close()

        li = xbmcgui.ListItem(servicename)
        mediatype = ""
        if mode == 1:
            mediatype = "video"
        elif mode == 2:
            mediatype = "music"
        if mediatype:
            li.setInfo(mediatype, {'Title': servicename })
        xbmc.Player().play(playlist[-1], li)
        
    def ts(self, data):
        servicename = data["e2servicename"][0].decode("utf-8")
        filename = data["e2filename"][0].decode("utf-8")
        servicereference = data["e2servicereference"][0].decode("utf-8")
        reference = servicereference.split(":")
        mode = int(reference[2])
        
        url = "http://" + self.ipaddress + "/file?file=" + filename.replace("/", "%2F").replace(" ", "%20")

        li = xbmcgui.ListItem(servicename)
        mediatype = ""
        if mode == 1:
            mediatype = "video"
        elif mode == 2:
            mediatype = "music"
        if mediatype:
            li.setInfo(mediatype, {'Title': servicename })
            
        xbmc.Player().play(url, li)



- Vultures - 2011-10-20

Works in the list, but not in OSD


- dutchmatrix - 2011-10-20

Vultures Wrote:Works in the list, but not in OSD

I know didn't add that yet.
Trying to get the channel switch working first.


- xayide - 2011-11-01

where is the script? (url)


- Candlemass - 2011-11-02

I might be missing something, but I can't enable deinterlacing when streaming from my dreambox to xbmc, whatsoever.

What I mean is that, in the video options of the stream (see pic below)
Image
nothing happens when I press on the arrows (or enter) in order to change the options (to enable deinterlacing).They stay the same without change!
I have tried setting the "post-processing" to "always enabled" from the general video options with no luck.
Any ideas what I'm doing wrong?


- Noplace - 2011-11-03

Slain, thanks for the awesome plugin, works nicely though I think when I try to play a channel from a different satellite it does not work, like first I tried playing the same channel that was playing on my DM800 and it worked, then tried some random channels but it failed to open, then another which I think was on the same satellite and it played while the original channel on the DM800 was still playing( didn't know it could do that, dual tuner? )

so hoping someone can shed light on the matter on how I can play any channel flawlessly.

and still didn't try dutchmatrix's modification but will do soon.

hope you guys continue developing this awesomeness, what's the github link?


- LAW-Mastermind - 2011-11-03

Your DM800 has to be in Standby, no dual Tuner there.


- xayide - 2011-11-04

Where is it?

Could someone post a working script with all fixes...


- rehnmark - 2011-11-05

Great work with the channel info! Works perfectSmile

The only issue i have with this addon is when my dm800 is not in standby, this script is not able to start the stream.
So i edited the script to check if the box is in standby or not. If its not, it will set the dreambox in standby before switching channel. This means that you will never need to manually switch off your box before running this addon.
People with dual tuners may not want this feature though...

This is what i have added:
Code:
StandbyChecker = urllib2.urlopen("http://" + self.ipaddress + "/web/powerstate?")
        StandbyStatus = StandbyChecker.read()
        StandbyChecker.close
        if "false" in StandbyStatus:
            StandbyDreambox = urllib2.urlopen("http://" + self.ipaddress + "/web/powerstate?newstate=0")
            StandbyDreambox.close



- rehnmark - 2011-11-06

And dutchmatrix's dreambox.py edited with the above code:
Code:
import xbmc, xbmcplugin, xbmcgui, urllib, urllib2, sys, xml.dom.minidom

def getText(nodelist):
    rc = []
    for node in nodelist:
        if node.nodeType == node.TEXT_NODE:
            rc.append(node.data)
    return ''.join(rc)

class Dreambox(object):
    __settings__ = sys.modules[ "__main__" ].__settings__
    __language__ = sys.modules[ "__main__" ].__language__
    __plugin__ = sys.modules[ "__main__" ].__plugin__

    def __init__(self, handle):
        self.handle = handle
        self.ipaddress = self.__settings__.getSetting("ipaddress")
        self.username = self.__settings__.getSetting("username")
        self.password = self.__settings__.getSetting("password")
        
        PowerOffDreamBoxOnZap = "true"
        password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
        dreambox_url = "http://" + self.ipaddress
        password_mgr.add_password(None, dreambox_url, self.username, self.password)
        handler = urllib2.HTTPBasicAuthHandler(password_mgr)
        opener = urllib2.build_opener(handler)
        urllib2.install_opener(opener)

    def rootmenu(self):
        menu = [
            { "name":self.__language__( 1 ), "mode": "tv" },
            { "name":self.__language__( 2 ), "mode": "radio" },
            { "name":self.__language__( 3 ), "mode": "movies" },
        ]

        for item in menu:
            li = xbmcgui.ListItem(item["name"])
            url = sys.argv[0] + '?' + urllib.urlencode({"mode":item["mode"]})
            xbmcplugin.addDirectoryItem(handle=self.handle, url=url, listitem=li, isFolder=True, totalItems=len(menu) )

        xbmcplugin.endOfDirectory(handle=self.handle, succeeded=True)

    def readradioservicelist(self):
        # Get Bouquet list
        data = urllib2.urlopen("http://" + self.ipaddress + "/web/getservices?" + urllib.urlencode({"sRef": '1:7:2:0:0:0:0:0:0:0:(type == 2)FROM BOUQUET "bouquets.radio" ORDER BY bouquet'}))
        e2servicelist = xml.dom.minidom.parse(data)
        data.close()

        servicelist = e2servicelist.getElementsByTagName("e2service")
        for service in servicelist:
            data = {}
            for element in service.childNodes:
                data[element.localName] = getText(element.childNodes)

            cmd = {}
            cmd["mode"] ="readservice"
            cmd["e2servicename"] = data["e2servicename"].encode("utf-8")
            cmd["e2servicereference"] = data["e2servicereference"].encode("utf-8")

            li = xbmcgui.ListItem(data["e2servicename"])
            url = sys.argv[0] + '?' + urllib.urlencode(cmd)
            xbmcplugin.addDirectoryItem(handle=self.handle, url=url, listitem=li, isFolder=True, totalItems=len(servicelist))

        # Get provider list
        data = {
            "mode":"readservice",
            "e2servicename":"Provider",
            "e2servicereference":"1:7:2:0:0:0:0:0:0:0:(type == 2) FROM PROVIDERS ORDER BY name"
        }
        li = xbmcgui.ListItem(data["e2servicename"])
        url = sys.argv[0] + '?' + urllib.urlencode(data)
        xbmcplugin.addDirectoryItem(handle=self.handle, url=url, listitem=li, isFolder=True, totalItems=len(servicelist))

        xbmcplugin.endOfDirectory(handle=self.handle, succeeded=True)

    def readtvservicelist(self):
        # Get Bouquet list
        data = urllib2.urlopen("http://" + self.ipaddress + "/web/getservices?" + urllib.urlencode({"sRef": '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25)FROM BOUQUET "bouquets.tv" ORDER BY bouquet'}))
        e2servicelist = xml.dom.minidom.parse(data)
        data.close()

        servicelist = e2servicelist.getElementsByTagName("e2service")
        for service in servicelist:
            data = {}
            for element in service.childNodes:
                data[element.localName] = getText(element.childNodes)

            cmd = {}
            cmd["mode"] ="readservice"
            cmd["e2servicename"] = data["e2servicename"].encode("utf-8")
            cmd["e2servicereference"] = data["e2servicereference"].encode("utf-8")

            li = xbmcgui.ListItem(data["e2servicename"])
            url = sys.argv[0] + '?' + urllib.urlencode(cmd)
            xbmcplugin.addDirectoryItem(handle=self.handle, url=url, listitem=li, isFolder=True, totalItems=len(servicelist))

        # Get provider list
        data = {
            "mode":"readservice",
            "e2servicename":"Provider",
            "e2servicereference":"1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25) FROM PROVIDERS ORDER BY name"
        }
        li = xbmcgui.ListItem(data["e2servicename"])
        url = sys.argv[0] + '?' + urllib.urlencode(data)
        xbmcplugin.addDirectoryItem(handle=self.handle, url=url, listitem=li, isFolder=True, totalItems=len(servicelist))

        # Get satellite list
        data = {
            "mode":"readservice",
            "e2servicename":"Satellite",
            "e2servicereference":"1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25) FROM SATELLITES ORDER BY name"
        }
        li = xbmcgui.ListItem(data["e2servicename"])
        url = sys.argv[0] + '?' + urllib.urlencode(data)
        xbmcplugin.addDirectoryItem(handle=self.handle, url=url, listitem=li, isFolder=True, totalItems=len(servicelist))

        xbmcplugin.endOfDirectory(handle=self.handle, succeeded=True)

    def readservice(self, data):
        servicereference = data["e2servicereference"][0].decode("utf-8")
        data = urllib2.urlopen("http://" + self.ipaddress + "/web/getservices?" + urllib.urlencode({"sRef": servicereference.encode("utf-8")}))
        e2servicelist = xml.dom.minidom.parse(data)
        data.close()
        currentEvent1 = "http://" + self.ipaddress + "/web/epgnow?" + urllib.urlencode({"bRef": servicereference})
        dataEpg = urllib2.urlopen("http://" + self.ipaddress + "/web/epgnow?" + urllib.urlencode({"bRef": servicereference.encode("utf-8")}))
        e2epglist = xml.dom.minidom.parse(dataEpg)
        dataEpg.close()
        servicelist = e2servicelist.getElementsByTagName("e2service")
        epglist = e2epglist.getElementsByTagName("e2event")
        epgArray = {}
        for epg in epglist:
            tempData = {}
            for element in epg.childNodes:
                tempData[element.localName] = getText(element.childNodes)
            if tempData["e2eventservicename"]:
                epgArray[tempData["e2eventservicename"]] = tempData
        for service in servicelist:
            data = {}
            for element in service.childNodes:
                data[element.localName] = getText(element.childNodes)
            servicereference = data["e2servicereference"].split(":")
            attr = int(servicereference[1])
            mode = int(servicereference[2])
            cmd = {}
            if attr & 4:
                cmd["mode"] ="readservice"
                isFolder = True
            else:
                cmd["mode"] ="stream"
                isFolder = False
                
            cmd["e2servicename"] = data["e2servicename"].encode("utf-8")
            cmd["e2servicereference"] = data["e2servicereference"].encode("utf-8")
            extraInfo = " (" + epgArray[data["e2servicename"]]["e2eventtitle"]  + ")"
            li = xbmcgui.ListItem(data["e2servicename"] + extraInfo)
            mediatype = ""
            if mode == 1:
                mediatype = "video"
            elif mode == 2:
                mediatype = "music"
            if mediatype:
                labels = {
                   "plot":epgArray[data["e2servicename"]]["e2eventdescription"] + "\r\n" + epgArray[data["e2servicename"]]["e2eventdescriptionextended"],
                   "title":data["e2servicename"] + extraInfo
                }
                li.setInfo("video", labels)
                #li.setInfo(mediatype, {'Title': data["e2servicename"] })
            url = sys.argv[0] + '?' + urllib.urlencode(cmd)
            xbmcplugin.addDirectoryItem(handle=self.handle, url=url, listitem=li, isFolder=isFolder, totalItems=len(servicelist))
        xbmcplugin.endOfDirectory(handle=self.handle, succeeded=True)

    def readmovies(self):
        data = urllib2.urlopen("http://" + self.ipaddress + "/web/movielist")
        e2movielist = xml.dom.minidom.parse(data)
        data.close()

        movieList = e2movielist.getElementsByTagName("e2movie")
        for movie in movieList:
            data = {}
            for element in movie.childNodes:
                data[element.localName] = getText(element.childNodes)

            li = xbmcgui.ListItem(data["e2title"], data["e2description"])
            labels = {
                "size":int(data["e2filesize"]),
                "plot":data["e2description"],
                "title":data["e2title"]
            }
            li.setInfo("video", labels)
            url = sys.argv[0] + '?' + urllib.urlencode({"mode":"ts", "e2servicename":data["e2title"].encode("utf-8"), "e2filename":data["e2filename"].encode("utf-8"), "e2servicereference":data["e2servicereference"].encode("utf-8")})
            xbmcplugin.addDirectoryItem(handle=self.handle, url=url, listitem=li, isFolder=False, totalItems=len(movieList))
        xbmcplugin.endOfDirectory(handle=self.handle, succeeded=True)

    def stream(self, data):
        servicename = data["e2servicename"][0].decode("utf-8")
        servicereference = data["e2servicereference"][0].decode("utf-8")
        reference = servicereference.split(":")
        mode = int(reference[2])
        
        data = urllib2.urlopen("http://" + self.ipaddress + "/web/stream.m3u?" + urllib.urlencode({"ref": servicereference.encode("utf-8")}))
        playlist = data.readlines()
        playlist[-1] = playlist[-1].replace(" ", "%20")
        data.close()

        li = xbmcgui.ListItem(servicename)
        mediatype = ""
        if mode == 1:
            mediatype = "video"
        elif mode == 2:
            mediatype = "music"
        if mediatype:
            li.setInfo(mediatype, {'Title': servicename })
        StandbyChecker = urllib2.urlopen("http://" + self.ipaddress + "/web/powerstate?")
        StandbyStatus = StandbyChecker.read()
        StandbyChecker.close
        if "false" in StandbyStatus:
            StandbyDreambox = urllib2.urlopen("http://" + self.ipaddress + "/web/powerstate?newstate=0")
            StandbyDreambox.close
        xbmc.Player().play(playlist[-1], li)
        
    def ts(self, data):
        servicename = data["e2servicename"][0].decode("utf-8")
        filename = data["e2filename"][0].decode("utf-8")
        servicereference = data["e2servicereference"][0].decode("utf-8")
        reference = servicereference.split(":")
        mode = int(reference[2])
        
        url = "http://" + self.ipaddress + "/file?file=" + filename.replace("/", "%2F").replace(" ", "%20")

        li = xbmcgui.ListItem(servicename)
        mediatype = ""
        if mode == 1:
            mediatype = "video"
        elif mode == 2:
            mediatype = "music"
        if mediatype:
            li.setInfo(mediatype, {'Title': servicename })
            
        xbmc.Player().play(url, li)



- xayide - 2011-11-06

Ok got it running. What about Multichannel EPG?
The one from mythbox can possible be "borrowed" or maybe the one from xml-tv guide.


- LAW-Mastermind - 2011-11-07

CanĀ“t install in pre-Eden, always says the zip has the wrong structure


- rehnmark - 2011-11-08

Here's the latest version(works with current nightly builds):
DreamboxPlugin-2011-11-08.zip