getCurrent Text vom enigma2

  • Hi !


    Nachdem ich immer ein offenes Ohr habe, wenn Behinderte sich was wünschen (siehe Babelezapper) bastle ich gerade an einem Prototypen eines Enigma2 Plugins das es ermöglichen soll, dass auch Blinde und Sehbehinderte die Dreambox komplett bedienen können.


    Dafür wäre es nötig das man den jeweils selektierten Text der Menus sowie aller Widgets wie ChoiceBox, MessageBox popups etc. sich als Text im python holen kann bzw. besser als Event geliefert bekommt. Im Idealfall sollte dabei der selbe Text wie bei der jeweiligen message id im enigma2.po File kommen, weil dann könnte man sogar Mehrsprachigkeit leicht implementieren indem man Native Speaker die enigma2.po als einzelne Audio Files vorlesen lässt - und das Plugin sie dann abspielt.


    In meinem Prototypen geht das indem ich die diversen python sourcen patche, aber ich würde mir wünschen wenn das über ein einziges Event ginge für das man sich mit einer Handler routine registriert, so wie bei den EPG oder FB Events.


    Vieleicht gibt es das schon und ich bin einfach zu blöde es zu finden, und wenn nicht bitte dies als ernst zu nehmenden Feature Request zu sehen (und meine Frage dorthin zu verschieben) den man evt. auch kurzfristig implementieren könnten (weil in enigma2 cpp code muss der Renderer das ja immer haben also wäre es nicht schwer das zurück zu füttern), nur im python wo es verstreut ist geht es schwer zu machen soweit ich bis jetzt gekommen bin.


    Danke im Voraus für jede Hilfe


    gutemine

    2 Mal editiert, zuletzt von Lost in Translation ()

  • Bin grad unterwegs. Deshalb nur aus dem kopf. Meines erachtens geht das mit getCurrent()[0] oder [1]. Weiss grad nicht welches.

    Gruss
    Dre


    Boxen (im Einsatz): DM920, DM900, DMOne
    Developer Project Merlin - we are OpenSource

  • Nur um schon weiter als bis zu einem Prototyp zu denken (da ich bei dreaMote auch auch Accessibility achte) - der reine Text wird nicht unbedingt helfen. Ja, es ist besser als nichts, aber Zusatzinfos wie die Taste bei den Buttons oder Enabled/Disabled bei Listeneinträgen falls verfügbar (ich denke hier z.B. an die Übersicht im AutoTimer) sind auch wichtig. Ebenfalls sollte man gegebenenfalls den Text für die Accessibility explizit setzen können - siehe z.B. den Multi-EPG, der sonst relativ unbenutzbar ist.



    Wieder näher am Gedanken "Prototyp": getCurrent wird afair nicht viel helfen - die Rückgaben sind meist für die interne Nutzung bestimmt.

    Homescreen eurer Apple-Geräte noch nicht voll genug?


    dreaMote: Fernbedienung für Dreamboxen
    Mobile WOL: Wake-on-LAN Client für iOS mit optionalem Widget
    My Home Remote: Fernkontrolle für Homematic CCU/CCU2 optimiert für mobile Benutzung

  • Danke, ich probier das mal aus.


    Wobei es wirklich im Moment primär mal um die Menus und Popups geht. Sachen wie Simple EPG Info habe ich schon testweise umgeschrieben das alles angezeigte auch vorgelesen wird - irgendwo habe ich auch schon eine EventInfo.py gepostet wie das abläuft.


    Und natürlich muss man bei Plugins diese entsprechend anpassen, aber das ganze lebt und steht eben mit der Navigation.


    Gedrückte Buttons kann ich schon vorlesen lassen, da hat mir Dr. Best ja schon vor einiger Zeit gezeigt wie man sich die FB Events schicken kann.


    Was mir für andere Screens vorschwebt ist einfach erstmal ein dummes Text vorlesen auf Info oder ähnliches, weil man kann nicht alles für ene PoC umschreiben.


    Und Sachen wie die Config Screens oder ähnliches kann man schon auch entsprechend in den jeweiligen Screens hacken um die infos zu bekommen.


    Das man oft Sachen halt blöde formatiert kriegt (wie die Menulist die text als lines ausspuckt und die aktive mit > markiert womit ich schon vorher nachher auch noch vorlesen lassen kann) ist da nicht so das Problem - Im python ist das schnell mit replace und encode soweit hergerichtet das man es dem espeak zum Fraß vorwerfen kann.


    Und ich dachte auch das es ziemlich seltsam ist - bis mir ein Betroffener erklärt hat dass ALLES besser ist als jemanden fragen zu müssen nur um einen mickrigen Timer zu programmieren.


    Ich habe auch schon ein kleines Plugin als Prototypen geschrieben das dir von der zdf und orf Homepage holt und für ALLEs was mit Audio Description gesendet wird Timer generiert. Ist eh immer noch erschreckend wenig an Stunden was da täglich gesendet wird.


    Nachem ein TV Anbieter meistens ALLE Radio Programme auf nur einem Transponder hat und z.B. der ORF diese unverschlüsselt ausstrahlt reicht dafür sogar eine Single Tuner Dreambox. Radioaufzeichnungen brauchen auch noch lächerlich wenig Festplattenplatz daher kannst du mit dem Plugin z.B: sagen das du z.B ALLES vom ORF Radio den ganzen Tag aufnehmen willst.


    Das kling nach nichts Aifregendem und ist oft nur eine Seite code es zu machen, ABER für einen Blinden ist das was ganz Tolles wenn er das gesamt aktuelel Hörfunkprogramm des Tages auf der Festplatte zum herumzappen vorfindet wen er abends nach Hause kommt. Wenn ich das noch mit dem Permanentrecording code kombiniere wird das schön nach Sendungen und Sender(n) auf der Festplatte abgelegt.


    Einen Prototypen eines DAISY Players für Hörbücher habe ich übrigens auch schon gebaut um zu sehen ob das geht - ist schließlich auch nur MP3 mit Metainfos in html files die man leicht auslesen kann.


    Mal sehen wo mich das Projekt hinführt, Spass macht es auf jeden Fall und jeder der helfen mag ist willkommen, weil da sind viele Sachen die dazu passen wie RSS vorlesen, Internet Sterams/Radios hören, e-Books vorlesen,...


    LG
    gutemine

    3 Mal editiert, zuletzt von Lost in Translation ()

  • Ich bin halt vom Konzept bei OSX / iOS verwöhnt.


    Und ich meinte nicht gedrückte Tasten vorlesen lassen, sondern die Funktion der "Navigationstasten" - sprich meisten Rot/Grün/Gelb/Blau mit der entsprechenden Funktion.
    Denn es bringt nur bedingt was den Text vorlesen zu lassen, wenn man nicht weiss was damit anzufangen ist.


    Da ist leider durch den Wechseln in den meisten Screens von der Button-Component rüber zur StaticText-Source einiges an Informationen verloren gegangen.



    Wenn es aus der Box mal was brauchbares gibt bin ich durchaus bereit meine Plugins eventuell entsprechend anzupassen, aber um effektiv an der Implementierung zu arbeiten habe ich keine Zeit - da konzentrier ich mich darauf die Bedienung der Box mit dreaMote weiter zu vereinfachen und steuere höchstens beratend Input hinzu.

    Homescreen eurer Apple-Geräte noch nicht voll genug?


    dreaMote: Fernbedienung für Dreamboxen
    Mobile WOL: Wake-on-LAN Client für iOS mit optionalem Widget
    My Home Remote: Fernkontrolle für Homematic CCU/CCU2 optimiert für mobile Benutzung

  • es steuern schon jetzt Leute die Dreambox übers WebIF mit der Sprachsteuerung Ihrer Smartphones.


    Und ich bin schon froh wenn ich die Grundfunktionen steuern kann. Ein blinder kann dir die Tasten seiner Fernbedienung oder seines DAISY Players auswendig sagen weil er sie ständig 'vor Augen hat' - kannst DU ohne nachzusehen z.B. aus dem Stand sagen wo die Audio Taste ist und mit geschlossenen Augen draufdrücken und eine andere Tonspur auswählen (um Audio Descriptions hören zu können falls die mal gesendet werden)?


    Insofern ist das kein so großes Problem wie wir glauben beim Betreten eines Plugin sagen zu lassen das man Grün drücken muss um es wieder mit speichern zu verlassen, etc....


    Das habe ich nämlich aus dem Babelzapper gelernt - eine Prothese wird nie ein Bein sein, aber sobald du damit Humpeln kannst ist es besser als eine Krücke oder im Rollstuhl zu sitzen.


    Insofern ist da mein nicht vorhandener Hang zu Perfektion (ja ich darf das sagen) durchaus auch ein Vorteil bei dem Ganzen.


    Mal sehen :smiling_face:


    LG
    gutemine

    3 Mal editiert, zuletzt von Lost in Translation ()

  • Es wäre kein Problem die Tasten als konstanten zu sehen, wenn sie es wären - aber jeder Entwickler kann sie ja frei belegen und sie sind eben nicht immer so, wie man sie erwartet.


    Die einzig relative konstante ist exit für schliessen, aber für die übrigen Tasten hab ich schon alles mögliche gesehen.




    Und wir müssen auch gar nicht auf den Tasten rumreiten (btw, ich kann meine Dream-FB "blind" benutzen - aber ich habe durchaus bei einigen Punkten dort für mich wichtige Punkte beigesteurt wie z.B. die Auswahl per Zahlentasten im Menü oder der von dir genannten AudioSelection).



    Aber OK, mach es halt alleine wenn du keine Hilfe willst - ich kümmer mich dann weiter um meinen Kram und sehe zu, dass die Dreambox dadurch bald relativ vollständig zu bedienen und einzurichten ist.

    Homescreen eurer Apple-Geräte noch nicht voll genug?


    dreaMote: Fernbedienung für Dreamboxen
    Mobile WOL: Wake-on-LAN Client für iOS mit optionalem Widget
    My Home Remote: Fernkontrolle für Homematic CCU/CCU2 optimiert für mobile Benutzung


  • Ich habe auch schon ein kleines Plugin als Prototypen geschrieben das dir von der zdf und orf Homepage holt und für ALLEs was mit Audio Description gesendet wird Timer generiert. Ist eh immer noch erschreckend wenig an Stunden was da täglich gesendet wird.


    Diese Information wird übrigens auch im EPG übertragen. Das sieht dann jeweils so:

    Code
    DVB-DescriptorTag: 80 (0x50)  [= component_descriptor]
    descriptor_length: 26 (0x1a)
    reserved: 15 (0x0f)
    stream_content: 2 (0x02)
    component_type: 72 (0x48)
        == Content&Component: (= MPEG-1 Layer 2 audio, broadcaster mix audio description)
    component_tag: 4 (0x04)
    ISO639_language_code:  deu
    component-description: "mit Audiodeskription"  -- Charset: Latin alphabet


    oder

    Code
    DVB-DescriptorTag: 80 (0x50)  [= component_descriptor]
    descriptor_length: 27 (0x1b)
    reserved: 15 (0x0f)
    stream_content: 2 (0x02)
    component_type: 3 (0x03)
        == Content&Component: (= MPEG-1 Layer 2 audio, stereo (2 channels))
    component_tag: 4 (0x04)
    ISO639_language_code:  deu
    component-description: "ohne Audiodeskription"  -- Charset: Latin alphabet
  • ritzMo


    Ich wollte Dich nicht verärgern oder deinen Input gering schätzen, aber es ist wirklich so das wir Probleme sehen die sich für den betroffenen ganz anders gestalten.


    Blinde merken sich oft extrem komplizierte Sachen, Wege, etc weil es die einzige Möglichkeit ist ans Ziel zu kommen. Da ist es kein echtes Problem zu erklären oder vorzusprechen das man in diesem oder jenem Plugin mit Grün speichert und beim anderen mit OK - natürlich wäre es fein wenn das einheitlich wäre, aber man kann nicht anfangen Randprobleme zu lösen wenn die Hauptprobleme noch nicht gelöst sind.


    Ich habe ziemlich viel Erfahrung im Problemelösen (nicht nur bei Dreamboxen) und in dem Fall muss man sich mal auf das konzentrieren was schnell geht und viel bringt um zu entscheiden ob das Gesamtproblem überhaupt lösbar ist


    Mir ist schon klar dass einem die Detail(probleme) das Genick brechen können. Mir ist schon klar das es viel schöner wäre wenn man den Audio text skinnen könnte also audio=babla.mp3 in der skin.xml, etc.und das dann gleich im C++ Teil sauber abspielt statt so wie ich es jetzt machen muss es dem espeak binary in python als Text vorzuwerfen, dann das laufende Programm zu stoppen und das wav file abzuspielen und dann das Programm weiterlaufen zu lassen.


    ABER um erstmals rauszufinden ob es geht und brauch- und sinvoll ist muss man nicht alles an Problemen auf einmal lösen.


    Und genau in der Phase bin ich halt jetzt - also bitte habt Geduld mit mir :smiling_face:


    sftg Danke, das wusste ich nicht wie das geht - muss mal sehen ob das von den Sendern in Deutschland auch brav immer mitgesendet wird, dann könnte ich einen entsprechenden EPG Filter machen das man sich wenn man im Einfach EPG z.B. Audio drückt nur mehr solche Sendungen angezeigt kriegst. Wobei die Webpage zu parsen war auch nur weniger als 1h Arbeit.


    Und ja ich weis das du solche Receiver für Blinde fertig kaufen kannst - um 1500-2000 EUR. Dagegen einen OpenSource Ansatz zu fahren wo du dir eine normale Dreambox zu nromalen Preisen kaufst ist durchaus überlegenswert und für Blinde gerade in Zeiten der Analogabschlatung durchaus eine interessante Alternative. Weil wenn ich das Selbe mit nur kleinen (und durch die Community eliminierbaren) Einbussen mit einer 500HD um 300EUR auch machen kann dann denke ich das es für einen Betroffenen sehr wohl einen Unterschied ausmacht.


    LG
    gutemine

    2 Mal editiert, zuletzt von Lost in Translation ()

  • Hi !


    Das mit dem getCurrent funktioniert zwar ist aber mühsam und ich habe auch über ritzMo's Einwand was die Faulheit/Kreativität der Pluginschreiben angeht wenn es in Richtigung Menus und Tastenbelegung geht nachgedacht.


    Die Chance das wir Audio skinnbar kriegen und es dann auch benutzt wird ist wahrscheinlich relativ gering, auch sind die nötigen MP3 selbst wenn man bei der Qualität spart nicht mehr für den Flash geeignet. Andererseits performt es besser und ist wesentlich angenehmer zum zuhören wenn man fertige MP3 mit den Menutexten abspielt als jedes e-Speak. Und das po file jemandem zum Vorlesen zu geben bis man alle MP3 hat ist etwas was die Community erledigen kann.


    Andererseits strengen sich viele bereits jetzt an am OLED möglichst sinnvolle Infos zu zeigen, und auch das jeweils ausgewählte Menu ist da ja zu sehen, oder Fragen bei Choice Box & Co.


    Insofern wäre es auch ein gangbarer Weg diese Text die vom jeweiligen Plugin (bereists mehr oder weniger geskinned/gefiltert auf minimale Bedieninfos) ans OLED geschicht werden rauszufischen und vorzulesen ?


    Aber nachdem Skinnen etwas ist was ich bis jetzt tunlichst vermieden habe bräuchte ich um das auch noch auszuprobieren einen Tipp wie man sich den Text für das OLED jeweils wenn was neues in den Renderer gejagt wird auch schicken lassen kann.


    In der skin.py und den Renderern mag ich nicht herumhacken, die Menu.py und MenuList.py waren schon schlimm genug :smiling_face:


    Irgendwer eine Idee/Tipp wie man sich den OLED Text elegant und unabhängig davon wer Ihn da gerade reinschreibt holen kann ?


    LG


    gutemine

  • Gutemine, ich hab mal eine ganz andere Frage...
    Wie genau willst Du denn das Vorlesen machen? Du müsstest ja dann das laufende TV abschalten...und nach dem Vorlesen wieder einschalten...oder wie stellst Du Dir das vor?

  • Ja, laufendes service stoppen, mp3 abspielen und dann geht es wieder weiter im programm. Die Menupunkte sind meistens eh so kurz das Spulen, etc kein Thema ist, um vorzeitig das lesen zu stopen gehst du einfach auf den nächsten Menupunkt womit das alte mp3 einfach stopped und das neue abspielt. Nur wenn du im mp3 EOF schaffst wird wieder das TV/Radio von vorher begonnen.


    Wobei das für Blinde und schlecht sehende sowieso kein Problem ist wenn TV stopped, weil du denen einen Skinn machen musst der den ganzen TV abdeckt damit du möglichst große Fonts und Symbole nehmen kannst - womit du eh kein TV Bild siehst sondern nur hörst :smiling_face:


    PIP, TV in Grafik, etc ist bei diesem Klientel ja alles kein Thema, sondern einfach noch irgendwas lesen zu können mit Himmelfahrstlettern und eben für die Blinden gleich vorzulesen.


    Mit einer Handvoll codezeilen in der Menu.py und in der MenuList.py geht das Vorlesen eigentlich schon ganz brauchbar bei mir, wenn ein MP3 mit dem Namen des Menupunktes gefunden wird dann wird dieses so abgespielt. Weil ich schaffe es im Moment einfach nicht das geCurrent von ausserhalb dieser Klassen sauber aufzurufen.


    Selbst dieser PoC wirkt übrigens schon recht edel beim Bedienen und ich bin gerade dabei mp3 in ordentlicher Sprechqualität zu organisieren - dazu hast du zuhause eh schon PM gekriegt.


    Nur wäre es denke ich schöner und einfacher wenn wir den Abspieltext nicht aus dem GUI Klassen klauen sondern vom OLED Text (dann ließe er sich nämlich auch normal skinnen und Rendern für die Sachen die man mit espeak machen muss)


    LG
    gutemine

    5 Mal editiert, zuletzt von Lost in Translation ()

  • Diese Information wird übrigens auch im EPG übertragen. Das sieht dann jeweils so:

    Code
    DVB-DescriptorTag: 80 (0x50) [= component_descriptor] 
    descriptor_length: 26 (0x1a) 
    reserved: 15 (0x0f) 
    stream_content: 2 (0x02) 
    component_type: 72 (0x48) 
    == Content&Component: (= MPEG-1 Layer 2 audio, broadcaster mix audio description) 
    component_tag: 4 (0x04) 
    ISO639_language_code: deu 
    component-description: "mit Audiodeskription" -- Charset: Latin alphabet


    oder

    Code
    DVB-DescriptorTag: 80 (0x50) [= component_descriptor] 
    descriptor_length: 27 (0x1b) 
    reserved: 15 (0x0f) 
    stream_content: 2 (0x02) 
    component_type: 3 (0x03) 
    == Content&Component: (= MPEG-1 Layer 2 audio, stereo (2 channels)) 
    component_tag: 4 (0x04) 
    ISO639_language_code: deu 
    component-description: "ohne Audiodeskription" -- Charset: Latin alphabet


    Hallo,


    ich bin über die Suchfunktion hier gelandet und hätte eine Frage zu einem, sagen wir mal, ähnlichen Thema.


    Die EPG (Event) Component Daten (sh. oben) möchte ich gern im Eventview sichtbar machen, zusätzlich also zur Short und Extended Description, damit man zus. Infos über Auflösung, zus. Audio Infos bzw. Audiodescription ja/nein auch sichtbar machen kann.
    Ich denke, dass wäre mal überfällig und macht bis jetzt kein von mir bekannter skin.


    Jetzt bin ich dabei, mir den Eventname bzw. Movieinfo Konverter anzupassen.
    Über die Abfrage get.Componentdata wird mir schon mal der Gesamtinhalt der Componentdaten aus den eit-daten der Movies als auch aus dem EPG ausgelesen.


    Allerdings eben nur in einer forlaufenden Zeile und etwas kryptisch.
    Die sieht blöd aus, habe aber keine Ahnung, wie ich die Abfragen noch gezielter setzen kann (bin leider auch phyton mäßig nicht so fit).
    Hat jemand von euch Experten eine Idee oder weiter Angaben über Quellcode etc. zur Hand, damit ich mal bißchen probieren kann.


    Vielen Dank !

    1x DM 8000 Merlin OE2.0/GP3/Zombi HD1R2.aslanMod
    2x DM 500HD Merlin OE2.0/GP3/
    Zombi HD1R2.aslanMod
    1x DM 7025 Oozoon/GP3/Zombi XD
    -------------------------
    Sky Welt/Film, HD+

  • EDIT: Hier noch zum besseren Verständnis meine ersten Versuche der
    Abfrage im Eventname Converter und den Erfolg, den es noch zu verbessern
    gilt..


    from Components.Converter.Converter import Converter
    from Components.Element import cached


    class EventNameAslan(Converter, object):
    NAME = 0
    SHORT_DESCRIPTION = 1
    EXTENDED_DESCRIPTION = 2
    Extra = 3


    def __init__(self, type):
    Converter.__init__(self, type)
    if type == "Description":
    self.type = self.SHORT_DESCRIPTION
    elif type == "ExtendedDescription":
    self.type = self.EXTENDED_DESCRIPTION
    elif type == "Extra":
    self.type = self.Extra
    else:
    self.type = self.NAME


    @cached
    def getText(self):
    event = self.source.event
    if event is None:
    return ""


    if self.type == self.NAME:
    return event.getEventName()
    elif self.type == self.SHORT_DESCRIPTION:
    return event.getShortDescription()
    elif self.type == self.EXTENDED_DESCRIPTION:
    return event.getExtendedDescription()
    elif self.type == self.Extra: return str(event.getComponentData())


    text = property(getText)

    Bilder

    1x DM 8000 Merlin OE2.0/GP3/Zombi HD1R2.aslanMod
    2x DM 500HD Merlin OE2.0/GP3/
    Zombi HD1R2.aslanMod
    1x DM 7025 Oozoon/GP3/Zombi XD
    -------------------------
    Sky Welt/Film, HD+

  • Das Umkreiste sieht wie ein strukturierter Typ in Python aus, den man als Text ausgegeben hat.
    Drei Zahlenfeldern folgend zwei Textfelder.
    event.getComponentData() gibt also einen strukturierten Typ zurueck. Du musst jetzt nur rausfinden
    welchen, dann kannst Du auch "sprachgerecht" auf die einzelnen Felder zugreifen.

    DM900 SS, DM8000SSSS
    Kein Support per PN! Nutzt das Forum zum Fragen, dann haben auch andere etwas davon.

  • Tja, und das ist leider mein Problem....
    Dafür reichen meine Kenntnisse nicht aus.

    1x DM 8000 Merlin OE2.0/GP3/Zombi HD1R2.aslanMod
    2x DM 500HD Merlin OE2.0/GP3/
    Zombi HD1R2.aslanMod
    1x DM 7025 Oozoon/GP3/Zombi XD
    -------------------------
    Sky Welt/Film, HD+

  • Ohne jetzt den von Dir geposteten code gelesen zu haben...


    Wenn ich das auf dem Screenshot richtig erkenne, ist das eine Liste (eckige Klammern) die mehrere tuples (runde Klammern) enthält.


    Auf Listen sowie tuples kannst Du z.B. über Indizes (Null-Basis) zugreifen.


    Um mit einem Index an die tuples zu kommen, kannst Du z.B. folgendes machen:


    Code
    compData = event.getComponentData()
    print compData[1]


    Ausgabe sollte sein: (2, 3, 2, 'deu', 'stereo')


    Möchtest Du z.B. auf das 5. Element des tuples zugreifen (den String 'stereo'), kannst du das über


    Code
    compData = event.getComponentData()
    einTuple = compData[1]
    gesuchterWert = einTuple[4]
    print gesuchterWert


    Ausgabe sollte sein: stereo

    Ich bin keine Hotline, daher kein Support per Mail oder PM.

  • Hallo und danke für den Denkansatz.


    ich komme aber nicht so recht weiter, da ich nicht genau weiss, wie ich das korrekt in die Abfrage:


    elif self.type == self.Extra:
    return str(event.getComponentData())


    einbauen kann, damit auch etwas angezeigt wird.
    Hab rumprobiert aber da fehlen mir wieder die Grundlagen.
    Vielleicht werde ich im nächsten Leben mal Programmierer.....

    1x DM 8000 Merlin OE2.0/GP3/Zombi HD1R2.aslanMod
    2x DM 500HD Merlin OE2.0/GP3/
    Zombi HD1R2.aslanMod
    1x DM 7025 Oozoon/GP3/Zombi XD
    -------------------------
    Sky Welt/Film, HD+

  • Soo.. ich hab´s jetzt hinbekommen.


    Allerdings fehlt noch das ich abfange, wenn ein Eintrag mal fehlt, denn sonst gibts nen Grünen.


    mit "if exits" oder so klappt es nich....

    1x DM 8000 Merlin OE2.0/GP3/Zombi HD1R2.aslanMod
    2x DM 500HD Merlin OE2.0/GP3/
    Zombi HD1R2.aslanMod
    1x DM 7025 Oozoon/GP3/Zombi XD
    -------------------------
    Sky Welt/Film, HD+

    Einmal editiert, zuletzt von aslan2006 ()