ehrlich gesagt trau ich mich fast nicht fragen. Da es schon fast etwas frech ist von wegen erster Post usw.
Dennoch erlaube ich mir hier nun folgende Frage zu stellen:
Es geht um ein Script das bereits besteht und funktioniert. Leider durch schlechte Programmierung nicht sehr brauchbar ist.
Das Script saugt die Bouqets von der Dreambox und zeigt diese samt EPG in einer Liste in XBMC an. Soweit so gut, nur wird der ausgewählte
Eintrag z.B. nicht markiert. Man hat also einfach nen schwarzen Hintergrund, die auflistung in weiss und das wars...
Wenn nun jemand das so einrichten könnte das es wie folgt aussieht:
Hintergrund Weiss
Text von Sendername Schwarz
Text von EPG Grau
EPG unter dem Sender Namen und am besten nach EPG eine Leerzeile. Anschliessend nächster Sender
Sender markiert anzeigen durch einen Balken im Hintergrund
Ich weiss das es etwas viel verlangt ist. Leider schreien alle nach anpassungen in der Community aber keiner der Python kann will es machen.
Ihr würdet uns einen riesen gefallen machen.
Man kann auch über entlöhnung verhandeln.
Es hat für das Script mehrere Dateien, aber ich denke das wird das wichtige Stück Code sein:
Code: Alles auswählen
# Enigma2
import urllib2, re
import xbmc, xbmcgui
try:
Emulating = xbmcgui.Emulating
except:
Emulating = False
ACTION_PARENT_DIR = 9
ACTION_PREVIOUS_MENU = 10
BOUQUETNAMESPATTERN = re.compile('<e2servicename>(.*?)</e2servicename>')
BOUQUETIDSPATTERN = re.compile('<e2servicereference>(.*?)</e2servicereference>')
CHANNELNAMESPATTERN = re.compile('<e2eventservicename>(.*?)</e2eventservicename>')
CHANNELIDSPATTERN = re.compile('<e2eventservicereference>(.*?)</e2eventservicereference>')
EVENTNAMESPATTERN = re.compile('<e2eventtitle>(.*?)</e2eventtitle>')
STREAMURLSPATTERN = re.compile('(http://.*?)\n')
SPACECLEANER = re.compile(' ')
QUOTECLEANER = re.compile('"')
DREAMBOXURL = "http://192.168.0.55"
BOUQUETLISTURL = DREAMBOXURL+"/web/getservices"
CHANNELLISTURL = DREAMBOXURL+"/web/epgnow?bRef="
M3USTREAMURL = DREAMBOXURL+"/web/stream.m3u?ref="
CHANNELSWITCH = DREAMBOXURL+"/web/zap?sRef="
BOUQUETNAMES = []
BOUQUETNAME = ''
BOUQUETIDS = []
BOUQUETID = ''
CHANNELNAMES = []
CHANNELNAME = ''
CHANNELIDS = []
CHANNELID = ''
EVENTNAMES = []
EVENTNAME = ''
BOUQUETSLOADED = 0
CHANNELSLOADED = 0
MENULEVEL = 0
class Main(xbmcgui.Window):
def __init__(self):
if Emulating:
xbmcgui.Window.__init__(self)
self.setCoordinateResolution(4)
self.lstMain = xbmcgui.ControlList(100,100,350,350)
self.lblStatus = xbmcgui.ControlLabel(100,20,500,50,'')
self.addControl(self.lblStatus)
self.addControl(self.lstMain)
self.ShowBouquetList()
def onAction(self, action):
if action == ACTION_PREVIOUS_MENU:
self.close()
if action == ACTION_PARENT_DIR:
if MENULEVEL == 0:
self.close()
return
if MENULEVEL == 1:
self.ShowBouquetList()
return
def onControl(self, control):
global BOUQUETID, BOUQUETNAME, CHANNELID, CHANNELNAME
if control == self.lstMain:
if MENULEVEL == 0:
BOUQUETID = QUOTECLEANER.sub('%22',SPACECLEANER.sub('%20',BOUQUETIDS[self.lstMain.getSelectedPosition()]))
BOUQUETNAME = BOUQUETNAMES[self.lstMain.getSelectedPosition()]
self.ShowChannelList()
return
if MENULEVEL == 1:
CHANNELID = CHANNELIDS[self.lstMain.getSelectedPosition()]
CHANNELNAME = CHANNELNAMES[self.lstMain.getSelectedPosition()]
EVENTNAME = EVENTNAMES[self.lstMain.getSelectedPosition()]
self.PlayChannel()
return
def ShowBouquetList(self):
global BOUQUETIDS, BOUQUETNAMES, MENULEVEL, BOUQUETSLOADED, CHANNELSLOADED
MENULEVEL = 0
if BOUQUETSLOADED == 0:
progress = xbmcgui.DialogProgress()
progress.create('Enigma2','Retrieving Bouquet List')
progress.update(10)
try:
request = urllib2.Request(BOUQUETLISTURL)
socket = urllib2.urlopen(request)
progress.update(30)
xml = socket.read()
progress.update(60)
socket.close()
BOUQUETNAMES = re.findall(BOUQUETNAMESPATTERN,xml)
progress.update(70)
BOUQUETIDS = re.findall(BOUQUETIDSPATTERN,xml)
progress.update(90)
except:
dialog = xbmcgui.Dialog()
dialog.ok('Enigma2','Could not retrieve bouquet list.')
progress.close()
self.lblStatus.setLabel('Enigma2 - Bouquet List')
self.lstMain.reset()
for BOUQUETNAME in BOUQUETNAMES:
self.lstMain.addItem(BOUQUETNAME)
self.setFocus(self.lstMain)
BOUQUETSLOADED = 1
CHANNELSLOADED = 0
def ShowChannelList(self):
global MENULEVEL, CHANNELIDS, CHANNELNAMES, EVENTNAMES, CHANNELSLOADED
MENULEVEL = 1
self.lblStatus.setLabel(BOUQUETNAME)
if CHANNELSLOADED == 0:
progress = xbmcgui.DialogProgress()
progress.create('Enigma2','Retrieving Channel List')
progress.update(10)
try:
request = urllib2.Request(CHANNELLISTURL+BOUQUETID)
socket = urllib2.urlopen(request)
progress.update(30)
xml = socket.read()
progress.update(60)
socket.close()
CHANNELIDS = re.findall(CHANNELIDSPATTERN, xml)
progress.update(70)
CHANNELNAMES = re.findall(CHANNELNAMESPATTERN, xml)
progress.update(80)
EVENTNAMES = re.findall(EVENTNAMESPATTERN, xml)
progress.update(90)
except:
dialog = xbmcgui.Dialog()
dialog.ok('Enigma2','Could not retrieve Channel list.')
progress.close()
self.lstMain.reset()
i = 0
for CHANNELNAME in CHANNELNAMES:
self.lstMain.addItem(CHANNELNAME+' - '+EVENTNAMES[i])
i = i + 1
self.setFocus(self.lstMain)
CHANNELSLOADED = 1
def PlayChannel(self):
try:
request = urllib2.Request(CHANNELSWITCH+CHANNELID)
socket = urllib2.urlopen(request)
socket.close();
request = urllib2.Request(M3USTREAMURL+CHANNELID)
socket = urllib2.urlopen(request)
m3u = socket.read()
socket.close()
STREAMURLS = re.findall(STREAMURLSPATTERN,m3u)
except:
dialog = xbmcgui.Dialog()
dialog.ok('Enigma2','Could not retrieve video URL.')
return
xbmc.Player().play(STREAMURLS[0])
Display_Main = Main()
Display_Main.doModal()
del Display_Main