Extended Service Info Converter

  • Hi Leute,


    nachdem schon öfters danach gefragt wurde, warum in der InfoBar nicht die Kanalnummer angezeigt werden kann, habe ich mal einen kleinen Renderer gebaut. Die *.py liefere ich wieder mit. Kann also wieder verwendet / verbessert / kommentiert werden ;-)


    Ich lese bei diesem Renderer nur einmalig die Kanäle ein, sonst hätten wir die tollsten Zap-Eigenschaften *g* Deswegen kann es vorkommen, dass die Nummern bei Löschen / Hinzufügen / Verschieben von Sendern falsch angezeigt werden. Das machen wir aber nicht jeden Tag, oder? Wenn doch, ein E2-Start bringt wieder alles in Ordnung.


    Verwendet wird dieser natürlich in der skin.xml, Beispiel:
    [php]<widget source="session.CurrentService" render="ServiceNumber" position="90,406" size="30,24" font="Regular;20" transparent="1" />[/php]


    Die *.py kommt nach /usr/lib/enigma2/python/Components/Renderer.


    Achtung! Diese Version ist nur von mir und nur an meiner Box getestet... also, alle Fehler melden, die ihr findet ;-)


    Hoffe, euch gefällt der kleine Renderer. Viel Spass damit.




    EDIT 26.04.09: Ipk angehängt, Beispieleintrag für die skin.xml:
    [php]<widget source="session.CurrentService" render="Label" position="164,435" size="390,28" font="Regular;26" transparent="1" >
    <convert type="ExtendedServiceInfo">Config</convert>
    </widget>[/php]


    DOWNLOAD von meiner Homepage

    <b>MfG Ali</b>
    <p />
    <select OnChange="window.open(this.options[this.selectedIndex].value, 'New')">
    <option value="/wbb2">Aus meinem Labor:</option>
    <option value="/wbb2/thread.php?threadid=127480">ARD Mediathek</option>
    <option value="/wbb2/thread.php?threadid=105590">CCcam Info</option>
    <option value="/wbb2/thread.php?threadid=99943">CS-Manager</option>
    <option value="/wbb2/thread.php?threadid=117478">DVD Backup</option>
    <option value="/wbb2/thread.php?threadid=90957">Extended Service Info</option>
    <option value="/wbb2/thread.php?threadid=92153">Mosaic</option>
    <option value="/wbb2/thread.php?threadid=114726">Movie Jukebox</option>
    <option value="/wbb2/thread.php?threadid=127314">Movielist Preview</option>
    <option value="/wbb2/thread.php?threadid=107501">ORF.at</option>
    <option value="/wbb2/thread.php?threadid=99478">Permanent Clock</option>
    <option value="/wbb2/thread.php?threadid=111496">Podcast</option>
    <option value="/wbb2/thread.php?threadid=125382">Porn Center</option>
    <option value="/wbb2/thread.php?threadid=89009">RS Downloader</option>
    <option value="/wbb2/thread.php?threadid=118188">Seekbar</option>
    <option value="/wbb2/thread.php?threadid=92584">Zap-History Browser</option>
    <option value="/wbb2/thread.php?threadid=127065">Zap Statistic</option>
    <option value="/wbb2/thread.php?threadid=125298">ZDF Mediathek</option>
    </select>

    Edited 7 times, last by AliAbdul ().

  • Also das finde ich SPITZE :)


    Danke AliAbdul !



    PS. ich werde bei mir probieren es direkt in ServiceName-Renderer zu anbinden :em_austria:


    So: "4. ProSieben" (wenn in Favourites vorhanden)


    Dann brauche ich die Skins nicht ändern ;-)

    44106818

    Edited 2 times, last by vali ().

  • Dazu kannst du auch diesen Abschnitt:
    [php]
    ref = info.getInfoString(iServiceInformation.sServiceref)
    if not self.list.__contains__(ref):
    self.text = ""
    else:
    idx = 1
    for x in self.list:
    if x == ref:
    self.text = str(idx)
    break[/php]
    in diesen ändern:
    [php]
    ref = info.getInfoString(iServiceInformation.sServiceref)
    name = info.getName().replace('\xc2\x86', '').replace('\xc2\x87', '')
    if not self.list.__contains__(ref):
    self.text = name
    else:
    idx = 1
    for x in self.list:
    if x == ref:
    self.text = ("%s. %s") % (str(idx), name)
    break[/php]


    Das sollte auch funktionieren.

    <b>MfG Ali</b>
    <p />
    <select OnChange="window.open(this.options[this.selectedIndex].value, 'New')">
    <option value="/wbb2">Aus meinem Labor:</option>
    <option value="/wbb2/thread.php?threadid=127480">ARD Mediathek</option>
    <option value="/wbb2/thread.php?threadid=105590">CCcam Info</option>
    <option value="/wbb2/thread.php?threadid=99943">CS-Manager</option>
    <option value="/wbb2/thread.php?threadid=117478">DVD Backup</option>
    <option value="/wbb2/thread.php?threadid=90957">Extended Service Info</option>
    <option value="/wbb2/thread.php?threadid=92153">Mosaic</option>
    <option value="/wbb2/thread.php?threadid=114726">Movie Jukebox</option>
    <option value="/wbb2/thread.php?threadid=127314">Movielist Preview</option>
    <option value="/wbb2/thread.php?threadid=107501">ORF.at</option>
    <option value="/wbb2/thread.php?threadid=99478">Permanent Clock</option>
    <option value="/wbb2/thread.php?threadid=111496">Podcast</option>
    <option value="/wbb2/thread.php?threadid=125382">Porn Center</option>
    <option value="/wbb2/thread.php?threadid=89009">RS Downloader</option>
    <option value="/wbb2/thread.php?threadid=118188">Seekbar</option>
    <option value="/wbb2/thread.php?threadid=92584">Zap-History Browser</option>
    <option value="/wbb2/thread.php?threadid=127065">Zap Statistic</option>
    <option value="/wbb2/thread.php?threadid=125298">ZDF Mediathek</option>
    </select>

  • kurze Frage:
    Die Zeile ...


    name = info.getName().replace('\xc2\x86', '').replace('\xc2\x87', '')


    Was für Zeichen ersetzt du da? Weil ich hab derzeit auch immer wieder Charset Probleme...

    Es heißt auch nicht mehr Troll, sondern Netzbürger mit Frustrationshintergrund.
    <br>
    Leider muß ich es extra schreiben: Kein Support per PM. Privater Support hilft uns nicht weiter als Forum!

  • Eigentlich ist die Zeile aus einem CVS-Converter geklaut. Weiss nicht, was da ersetzt wird.


    Was hast du denn für Probleme? Habe letztens einen schönen Codeausschnitt gefunden:


    [php]import re, htmlentitydefs
    ...
    def decode(line):
    pat = re.compile(r'\\u(....)')
    def sub(mo):
    return unichr(fromHex(mo.group(1)))
    return pat.sub(sub, unicode(line))


    def decode2(line):
    pat = re.compile(r'&#(\d+);')
    def sub(mo):
    return unichr(int(mo.group(1)))
    return decode3(pat.sub(sub, unicode(line)))


    def decode3(line):
    dic = htmlentitydefs.name2codepoint
    for key in dic.keys():
    entity = "&" + key + ";"
    line = line.replace(entity,unichr(dic[key]))
    return line


    def fromHex(h):
    return int(h, 16)
    ...
    self.names.append(decode2(decode(name)).encode("latin-1"))[/php]


    Hiermit funktioniert die Darstellung von Sonderzeichen ganz gut, sehr feine Sache... wenn man Etliches aus dem Internet runterlädt und in Listen anzeigt. Verwende das so im kommenden ZDF-Mediathek Plugin. Das war das Einzige, wo auch ä, ü, ö usw. richtig dargestellt werden.

    <b>MfG Ali</b>
    <p />
    <select OnChange="window.open(this.options[this.selectedIndex].value, 'New')">
    <option value="/wbb2">Aus meinem Labor:</option>
    <option value="/wbb2/thread.php?threadid=127480">ARD Mediathek</option>
    <option value="/wbb2/thread.php?threadid=105590">CCcam Info</option>
    <option value="/wbb2/thread.php?threadid=99943">CS-Manager</option>
    <option value="/wbb2/thread.php?threadid=117478">DVD Backup</option>
    <option value="/wbb2/thread.php?threadid=90957">Extended Service Info</option>
    <option value="/wbb2/thread.php?threadid=92153">Mosaic</option>
    <option value="/wbb2/thread.php?threadid=114726">Movie Jukebox</option>
    <option value="/wbb2/thread.php?threadid=127314">Movielist Preview</option>
    <option value="/wbb2/thread.php?threadid=107501">ORF.at</option>
    <option value="/wbb2/thread.php?threadid=99478">Permanent Clock</option>
    <option value="/wbb2/thread.php?threadid=111496">Podcast</option>
    <option value="/wbb2/thread.php?threadid=125382">Porn Center</option>
    <option value="/wbb2/thread.php?threadid=89009">RS Downloader</option>
    <option value="/wbb2/thread.php?threadid=118188">Seekbar</option>
    <option value="/wbb2/thread.php?threadid=92584">Zap-History Browser</option>
    <option value="/wbb2/thread.php?threadid=127065">Zap Statistic</option>
    <option value="/wbb2/thread.php?threadid=125298">ZDF Mediathek</option>
    </select>



  • Unglaublich GUT !!! 8)
    Es ist nur ungewöhnlich in skin.xml die session.CurentService.Name mit
    session.CurentService.ServiceNumber zu ersetzen. :) :)


    Ich bin aber so SUPER zufrieden.
    Respect!

  • Quote

    Original von AliAbdul
    Was hast du denn für Probleme?


    Das WebIF, ich gebe E2 Daten in XML aus und verarbeite sie im browser und gebe die dann via xml wieder an die box zurück.


    und beim parsen des xml mit minidom werfen alle Umlaute und Specialchars Fehler.

    Es heißt auch nicht mehr Troll, sondern Netzbürger mit Frustrationshintergrund.
    <br>
    Leider muß ich es extra schreiben: Kein Support per PM. Privater Support hilft uns nicht weiter als Forum!

  • Ein Supergeile Plugin, den ich grad brauchte!! Der AliAbdul macht richtig gute Arbeit! :344: :314: :350:

  • YESSSS, das ist coole Sache :em_austria:


    AliAbdul:
    Weisst Du was mir einfällt?


    So ein Renderer für "SecondTitle", der die Fenster-Title auslesen tut
    und als ein widget weitergibt.
    Hat super Sinn für Kerni seine Skins in Fullscreen und MiniTV.
    Dann sieht man Userbouqets > Serien usw. , nicht nur Senderliste ;)

    44106818

    Edited 2 times, last by vali ().

  • Die ganzen Screens benötigen ein zweites "Titel-widget". Im nächsten LT ist sowas drin, da Nemesis auch gerne mit Full-Screen PiG Skins arbeitet. Das muss allerdings im Code der Screens drin sein. Das geht natürlich nicht mit einem Renderer. Im LT wird der Titel aus der Screen.skin (wenn vorhanden) oder aus der skin.xml ausgelesen und das "Titel-widget" wird damit gefüllt.

    <b>MfG Ali</b>
    <p />
    <select OnChange="window.open(this.options[this.selectedIndex].value, 'New')">
    <option value="/wbb2">Aus meinem Labor:</option>
    <option value="/wbb2/thread.php?threadid=127480">ARD Mediathek</option>
    <option value="/wbb2/thread.php?threadid=105590">CCcam Info</option>
    <option value="/wbb2/thread.php?threadid=99943">CS-Manager</option>
    <option value="/wbb2/thread.php?threadid=117478">DVD Backup</option>
    <option value="/wbb2/thread.php?threadid=90957">Extended Service Info</option>
    <option value="/wbb2/thread.php?threadid=92153">Mosaic</option>
    <option value="/wbb2/thread.php?threadid=114726">Movie Jukebox</option>
    <option value="/wbb2/thread.php?threadid=127314">Movielist Preview</option>
    <option value="/wbb2/thread.php?threadid=107501">ORF.at</option>
    <option value="/wbb2/thread.php?threadid=99478">Permanent Clock</option>
    <option value="/wbb2/thread.php?threadid=111496">Podcast</option>
    <option value="/wbb2/thread.php?threadid=125382">Porn Center</option>
    <option value="/wbb2/thread.php?threadid=89009">RS Downloader</option>
    <option value="/wbb2/thread.php?threadid=118188">Seekbar</option>
    <option value="/wbb2/thread.php?threadid=92584">Zap-History Browser</option>
    <option value="/wbb2/thread.php?threadid=127065">Zap Statistic</option>
    <option value="/wbb2/thread.php?threadid=125298">ZDF Mediathek</option>
    </select>

  • Na das kling mal gut 8)
    Das werde ich natürlich testen wenn so weit ist.

    44106818

    Edited once, last by vali ().

  • Habe mir die ServiceNumber.py runtergeladen und in das entsprechende Verzeichnis auf der Dream800 kopiert. In meiner skin.xml die Zeile <widget source="session.CurrentService" render="ServiceNumber" position="90,406" size="30,24" font="Regular;20" transparent="1" /> eingefügt.


    Nun startet die Box nicht mehr, was muss ich noch anpassen?

  • Per Telnet auf die Box.


    init 4 eingeben... 5 Sekunden warten
    enigma2 eingeben.


    Wenn der Log aufhört, Log posten... dann sehen wir mehr.

    <b>MfG Ali</b>
    <p />
    <select OnChange="window.open(this.options[this.selectedIndex].value, 'New')">
    <option value="/wbb2">Aus meinem Labor:</option>
    <option value="/wbb2/thread.php?threadid=127480">ARD Mediathek</option>
    <option value="/wbb2/thread.php?threadid=105590">CCcam Info</option>
    <option value="/wbb2/thread.php?threadid=99943">CS-Manager</option>
    <option value="/wbb2/thread.php?threadid=117478">DVD Backup</option>
    <option value="/wbb2/thread.php?threadid=90957">Extended Service Info</option>
    <option value="/wbb2/thread.php?threadid=92153">Mosaic</option>
    <option value="/wbb2/thread.php?threadid=114726">Movie Jukebox</option>
    <option value="/wbb2/thread.php?threadid=127314">Movielist Preview</option>
    <option value="/wbb2/thread.php?threadid=107501">ORF.at</option>
    <option value="/wbb2/thread.php?threadid=99478">Permanent Clock</option>
    <option value="/wbb2/thread.php?threadid=111496">Podcast</option>
    <option value="/wbb2/thread.php?threadid=125382">Porn Center</option>
    <option value="/wbb2/thread.php?threadid=89009">RS Downloader</option>
    <option value="/wbb2/thread.php?threadid=118188">Seekbar</option>
    <option value="/wbb2/thread.php?threadid=92584">Zap-History Browser</option>
    <option value="/wbb2/thread.php?threadid=127065">Zap Statistic</option>
    <option value="/wbb2/thread.php?threadid=125298">ZDF Mediathek</option>
    </select>

  • So, jetzt startet die Box durch. Nutze den "Nemesis Blueline Single" Skin. Es wird trotzdem keine Kanalnummer angezeigt.


    An welcher Stelle am Bildschirm sollte die Kanalnummer auftauchen?
    Muss die Zeile an einer bestimmten Stelle in der .xml des Skins stehen?


    Box ist eine DM800.

  • Ja, sie muss in den InfoBar-Teil. Dann am besten neben dem ServiceName Label. Musst halt die Positionen anpassen.

    <b>MfG Ali</b>
    <p />
    <select OnChange="window.open(this.options[this.selectedIndex].value, 'New')">
    <option value="/wbb2">Aus meinem Labor:</option>
    <option value="/wbb2/thread.php?threadid=127480">ARD Mediathek</option>
    <option value="/wbb2/thread.php?threadid=105590">CCcam Info</option>
    <option value="/wbb2/thread.php?threadid=99943">CS-Manager</option>
    <option value="/wbb2/thread.php?threadid=117478">DVD Backup</option>
    <option value="/wbb2/thread.php?threadid=90957">Extended Service Info</option>
    <option value="/wbb2/thread.php?threadid=92153">Mosaic</option>
    <option value="/wbb2/thread.php?threadid=114726">Movie Jukebox</option>
    <option value="/wbb2/thread.php?threadid=127314">Movielist Preview</option>
    <option value="/wbb2/thread.php?threadid=107501">ORF.at</option>
    <option value="/wbb2/thread.php?threadid=99478">Permanent Clock</option>
    <option value="/wbb2/thread.php?threadid=111496">Podcast</option>
    <option value="/wbb2/thread.php?threadid=125382">Porn Center</option>
    <option value="/wbb2/thread.php?threadid=89009">RS Downloader</option>
    <option value="/wbb2/thread.php?threadid=118188">Seekbar</option>
    <option value="/wbb2/thread.php?threadid=92584">Zap-History Browser</option>
    <option value="/wbb2/thread.php?threadid=127065">Zap Statistic</option>
    <option value="/wbb2/thread.php?threadid=125298">ZDF Mediathek</option>
    </select>

  • Ist schon klar zwecks Anpassung, aber egal welche Position ich einstelle, es erscheint nichts auf dem Bildschirm. Kannst du mal einen Screenshot von dir machen?

  • erst mal: Danke für den tollen renderer... Der funktioniert einwandfrei...


    Jetzt zu Dir Hitman:


    Du darfst nicht einfach die Zeile, die hier gepostet ist, einfach irgendwo in die Skin.xml einfügen.


    Irgendwo in Deiner Skin.xml gibt es einen Bereich "infobar" (einfach in dem Editor Deiner Wahl nach <screen name="InfoBar" suchen). Innerhalb dieses Bereiches gibt einen Teil, der so anfängt:


    <widget source="session.CurrentService"


    Um das ganze richtig anzupassen braucht man ein klein wenig XML- Kenntnisse.
    Ich nehme mal ein Beispiel aus dem Glassline- Skin:


    Da sieht das ganze so aus:
    <widget source="session.CurrentService" render="Label" Position="90,406" zPosition="4" size="315,24" font="Regular;20" valign="top" backgroundColor="#0a1517" transparent="1" >
    <convert type="ServiceName">Name</convert>
    </widget>


    Das bedeutet: Der <widget> Tag wird mit bestimmten Parametern geöffnet. Innerhalb des Widget- Tags gibt es einen weiteren <convert>- Tag, der geöffnet und wieder geschlossen wird durch </convert>
    erst dann wird der widget- Tag durch </widget> geschlossen.


    Im hier geposteten Beispiel wird der Widget- Tag aber direkt am Ende wieder geschlossen, das bedeutet der Slash vor dem schliessenden Zeichen:


    <widget source="session.CurrentService" render="ServiceNumber" position="90,406" size="30,24" font="Regular;20" transparent="1" />


    Wenn Du jetzt also nur die erste Zeile Deiner Skin.xml ersetzt, dann bekommst Du ein ungültiges XML (ein Widget- Tag wird zweimal geschlossen). Das führt zu einem Bluescreen.


    Also entweder nimmst Du den Slash am Ende der kopierten Zeile raus (das hat bei mir im Skin nicht funktionier, ich vermute, der Converter ServiceName kann mit den Daten vom neuen Renderer nix anfangen), oder Du löschst die beiden Zeilen
    <convert type="ServiceName">Name</convert>
    </widget>
    raus.


    Wie gesagt: Dieses Beispiel ist aus dem Glassline- Skin, sollte aber so auch auf andere zu übertragen sein.


    HTH
    Tode


    EDIT: ACHTUNG: Meine Ausführungen gelten nur, wenn man die Code- Änderung aus diesem Thread im Python- Code durchführt, so dass der Renderer nicht nur die Nummer, sondern zusätzlich den Sendernamen rendert... Habe das leider erst jetzt gemerkt...

    Edited once, last by Tode ().

  • Tode:


    Danke für deine Mühe ... <screen name="InfoBar" habe ich gefunden. Meine Standard-Widget Zeile sieht dann so aus:


    Code
    <widget source="session.CurrentService" render="Label" position="15,70" size="400,21" zPosition="3" foregroundColor="transpyellow" backgroundColor="Background" font="Regular;20" valign="center" shadowColor="black" shadowOffset="-2,-2" transparent="1" >
    <convert type="ServiceName">Name</convert>
    </widget>


    Sollte das nach deiner Anleitung dann so aussehen, dass funktioniert bei mir nicht ... ???


    Code
    <widget source="session.CurrentService" render="Label" position="15,70" size="400,21" zPosition="3" foregroundColor="transpyellow" backgroundColor="Background" font="Regular;20" valign="center" shadowColor="black" shadowOffset="-2,-2" transparent="1" >
    <widget source="session.CurrentService" render="ServiceNumber" position="90,406" size="30,24" font="Regular;20" transparent="1" >
    <convert type="ServiceName">Name</convert>
    </widget>


    Das geht auch nicht ...


    Code
    <widget source="session.CurrentService" render="Label" position="15,70" size="400,21" zPosition="3" foregroundColor="transpyellow" backgroundColor="Background" font="Regular;20" valign="center" shadowColor="black" shadowOffset="-2,-2" transparent="1" >
    <convert type="ServiceName">Name</convert>
    </widget>
    <widget source="session.CurrentService" render="ServiceNumber" position="90,406" size="30,24" font="Regular;20" transparent="1" >
    <convert type="ServiceName">Name</convert>
    </widget>


    Und das auch nicht ...


    Code
    <widget source="session.CurrentService" render="Label" position="15,70" size="400,21" zPosition="3" foregroundColor="transpyellow" backgroundColor="Background" font="Regular;20" valign="center" shadowColor="black" shadowOffset="-2,-2" transparent="1" >
    <convert type="ServiceName">Name</convert>
    </widget>
    <widget source="session.CurrentService" render="ServiceNumber" position="90,406" size="30,24" font="Regular;20" transparent="1" >


    Noch jemand, der mir helfen kann? Übrigends, haben alle *.py auch eine *.pyc. Wird die hier nicht benötigt?

  • wenn du die py editierst wird die pyc beim nächsten enigma2 neustart automatisch neu generiert (pyc=python compiled)