PK
|#@ plugin.video.dreambox/PK
#@QD D plugin.video.dreambox/addon.xml
video
all
Dreambox for XBMC
A frontend for Enigma2 devices eg. Dreambox, VU+ etc.
PK
#@ Zkp p plugin.video.dreambox/default.pyimport sys, cgi, xbmc, xbmcaddon
__scriptname__ = "Dreambox for XBMC"
__credits__ = ""
__version__ = "1.0.6"
__plugin__ = "Dreambox-" + __version__
__author__ = ""
__url__ = ""
__svn_url__ = ""
__svn_revision__ = "$Revision$"
__XBMC_Revision__ = "33324"
__settings__ = xbmcaddon.Addon(id='plugin.video.dreambox')
__language__ = __settings__.getLocalizedString
if (__name__ == "__main__" ):
import Dreambox
handle = int(sys.argv[1])
webif = Dreambox.Dreambox(handle)
if not sys.argv[2]:
webif.rootmenu()
else:
data = cgi.parse_qs(sys.argv[2][1:])
mode = data["mode"][0]
if mode == "movies":
webif.readmovies()
elif mode == "tv":
webif.readtvservicelist()
elif mode == "radio":
webif.readradioservicelist()
elif mode == "readservice":
webif.readservice(data)
elif mode == "stream":
webif.stream(data)
elif mode == "ts":
webif.ts(data)
PK
#@0, , ! plugin.video.dreambox/Dreambox.py# -*- coding: utf-8 -*-
import xbmc, xbmcplugin, xbmcgui, urllib, urllib2, sys, xml.dom.minidom, os
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")
self.setstandby = self.__settings__.getSetting("setstandby")
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):
if "true" in self.setstandby:
StandbyDreambox = urllib2.urlopen("http://" + self.ipaddress + "/web/powerstate?newstate=0")
StandbyDreambox = urllib2.urlopen("http://" + self.ipaddress + "/web/powerstate?newstate=0")
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
# 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"] + ")"
if os.name == "nt":
picondir = os.getcwd() + "\\Picons\\"
else:
picondir = os.getcwd() + "/Picons/"
picon = picondir + cmd["e2servicename"].replace("/", "_") + '.png'
piconservice = cmd["e2servicereference"].replace(":", "_")
piconservice = piconservice[:-1]
piconservice = picondir + piconservice + '.png'
if os.path.isfile(picon) == True:
picon = picon
elif os.path.isfile(piconservice) == True:
picon = piconservice
else:
picon = ""
li = xbmcgui.ListItem(data["e2servicename"] + extraInfo, "", picon, picon)
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()
if os.name == "nt":
picondir = os.getcwd() + "\\Picons\\"
else:
picondir = os.getcwd() + "/Picons/"
picon = picondir + servicename.replace("/", "_") + '.png'
piconservice = servicereference.replace(":", "_")
piconservice = piconservice[:-1]
piconservice = picondir + piconservice + '.png'
if os.path.isfile(picon) == True:
picon = picon
elif os.path.isfile(piconservice) == True:
picon = piconservice
else:
picon = ""
li = xbmcgui.ListItem(servicename, "", picon, picon)
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").encode('windows-1252')
filename = data["e2filename"][0].decode("utf-8").encode('windows-1252')
servicereference = data["e2servicereference"][0].decode("utf-8").encode('windows-1252')
reference = servicereference.split(":")
mode = int(reference[2])
url = "http://" + self.ipaddress + "/file?file=" + filename.replace("/", "%2F").replace(" ", "%20").replace("", "%C3%A5").replace("", "%C3%A4").replace("", "%C3%B6").replace("", "%C3%85").replace("", "%C3%84").replace("", "%C3%96").replace("", "%C3%A9").replace("", "%C3%A8").replace("", "%C3%AA").replace("", "%C3%A0").replace("", "%C3%A1").replace("", "%C3%A2")
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)PK
}y?Q u u plugin.video.dreambox/icon.pngPNG
IHDR
# sRGB gAMA a pHYs + bKGD tIMEQ&^ IDATx^duˌ}[-fɲ,qIL| M`Bg`$vĉcؒeFYRwKj>oڭO~NWݪS^[TTG:+W=:@*hT :XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:F#PU@4V5\Ճ#P*hTi:XTAcUU=:){c>J1]Ņ(FcM]GC,YEƺ8>>|ս&hmf~ȿZǑQ3u5Q'mTχލL'oXR\}ihj.߀7Q*n+O|'[8uy8x8:6p.S(zc=JCS6qvEzIƀGh-non*u25K8f|4k֬YhiiXXXH:ٌj}}466FCCCc⡇ݻw/ystuusQrPs:SnqlE%ښۢ偦&TeN, NJQ3 ;r(1G㑽uKޯB5191}vǞ.&zpzi"'cb9: T6FVlbl 4@ufі/hGm-
8q"㏎& `s<'_8p@u]]] <%p8Nt;lveG_?oq}EWmX6+/o~ŵӦcn:6-hBHSSA 8J?t2cuQT}.Sbfa.ر1246lwjbQŅư#j,iiwZ.CEcsgVC$Xus8q$5Z 抸s|7ϱS@W0n<`gyʬAYgD-+7.rsCH0yz*V!b}_Z&Fc| :U4}kbhihDtN,R}hk] WXV#$W4+]CDhȘԆVx}ϓh+6n~o%'͉G{m4wy}{^|;No!̄>#PAr*3"В9ŧxG8zo-[܂yDi$zE7]/}eѭ`!6qo-篔!eި`2]ղzb\?_θc/Luтd,Ͻ抸xknͽcz"D;lg1px<﮸;P/-oMl-[lGH4|30#с/-IJJ,R;_Ozؤ<
-Lc_j8 Y@cmoLRy/FtChheejix
EҬASs9bqk"+,bRI5)ONL*O{q2?/F?#?jz* 'DcUeeٳu&x}x[..H`8aS?ygjEms+OLPr
WGFF#w>hoMR rbǮ]q뭷k^c>@@-K#%GUoW|s_>ŦaGGmDC5Xd
ETQ3'<7w9h1gTQ2W]iI֯ǦboiiCwGXD
j5H>i'crp(Ək/1
2Z!>Ŷx^[6ŦvG,N!-,FkSg;كȳJXڒvq
'=~৾3Əݍhy zPӇ"q4Ekﶈɚ33HLu15&}fxr{L
.DxMlvY#qYct-s5N:N{ޒ*'L6ǽG~$TI07mssssb۶m6X!6lj`<
ϔX%[PG
Ա&
Cc]W"=*P6Oyrl .hwLzɇ/)~~0ڹGk/&q,QI_K# ר _T?=@Nsc^@ʪ^06HH36vl|[{sر+ںZ翎Oh}[:cM{O,0SI*BU:/awko5e}qwlmZ:;5d!H]~=?5sxeiRܭC?]8y<>οntFhBe~ okCnv&'&bjl(n'=1? B1I<4ڄ PX
ZL>$}kY[-Z3_ߊS'aDY%'43m:ڛ磇{5~Pg\
?