[anders gelöst] GlobalActions.py und Standby.py wenn man action in der ActionMap.py überschreibt

  • Hi !


    Eigentlich ist das kein bug, aber nachdem man es fixen kann möchte ich anfragen ob man das als Bugfix ins CVS einchecken könnte oder ob es eine bessere Möglichkeit gibt:


    Für den Mopheus Screensaver überschreibe ich mir ja die action routinen aus der ActionMap.py wie folgt:


    def morpheus_action(self, context, action):
    global morpheus_lastkey
    morpheus_lastkey=time()
    print "[MORPHEUS] key"
    print " ".join(("action -> ", context, action))
    if self.actions.has_key(action):
    res = self.actions[action]()
    if res is not None:
    return res
    return 1
    else:
    print "unknown action %s/%s! typo in keymap?" % (context, action
    return 0


    ActionMap.action=morpheus_action


    def morpheus_numberaction(self, contexts, action):
    global morpheus_lastkey
    morpheus_lastkey=time()
    print "[MORPHEUS] number key"
    numbers = ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
    if (action in numbers and self.actions.has_key(action)):
    res = self.actions[action](int(action))
    if res is not None:
    return res
    return 1
    else:
    return ActionMap.action(self, contexts, action)


    NumberActionMap.action=morpheus_numberaction


    Dadurch stehen dem screensaver immer der timestamp des letzten keyevents zur verfügung. Prinzipiell wäre es schön wenn man sich den zusammen mit dem keycode als event schicken könnten, dann müsste ich das nicht so über eine globale Variable machen, aber das ist eine andere Geschichte :smiling_face:


    Und ja ich weis das ich die jeweilige action vorher auf eine _original sichern könnte und in meiner morpheus_* dann wieder aufrufen.


    Das Problem ist aber ein anderes:


    Dadurch das in der GlobalActions.py bereits VOR dem renamen globalActionMap = ActionMap( ["GlobalActions"] ) definiert wird und obiges rename dabei ignoriert wird bekommt man wenn mit obigen umbenannten action routinen Standby auf der box macht einen wirklich (!) schönen python crash:


    action -> GlobalActions power_up
    enter standby
    FATAL: unbindAction with illegal python reference
    getResolvedKey config.plugins.crashlogautosubmit.sendAnonCrashlog failed !! (Typo??)
    getResolvedKey config.plugins.crashlogautosubmit.addNetwork failed !! (Typo??)
    getResolvedKey config.plugins.crashlogautosubmit.addWlan failed !! (Typo??)
    main thread is non-idle! display spinner!
    [EPGC] abort non avail schedule other reading
    [EPGC] abort non avail viasat reading
    [EPGC] abort non avail mhw reading
    [EPGC] nownext finished(1289765558 )
    main thread is non-idle! display spinner!
    Killed


    Dieser ist auch durch neuerliches renamen/definieren der globalActionMap NICHT wegzukrigen (input ist aber natürliuch willkommen wie man den sauber wegkriegen kann - ich habe es stundenlang probiert und war nicht erfolgreich, aber vieleicht bin ich einfach zu Blöde)


    Das EINZIGE was wirklich hilft ist statt der Zeile in der Standby.py


    from GlobalActions import globalActionMap


    folgende Zeile reinzumachen:


    globalActionMap = ActionMap( ["GlobalActions"] )


    Also einfach statt die vorher definierte globalActionMap zu importieren (die zum original der unumbenannten ActionMap refereinziert und dann den crash verursacht wenn man sie aufruft) diese neu zu definieren womit sauber auch im Standby.py die umbenannten ActionMap verwendet wird und dann auch problemlos beim Standby deaktiviert/aktiviert werden kann.


    Sonst konnte ich durch die Änderung dieser einen Zeile bis jetzt keine negativen Effekte feststellen, es wäre also nett wenn jemand entweder einen Tipp geben könnte wie man den crahs sauber loswird, oder falls ich nicht zu blöde bin diesen Workaround ins CVS einchecked damit man auch diec action Handler sauber in einem Plugin auf eigene handler umbenennen kann und ich mir es spare jedesmal die Standby.py entsprechend zu patchen.


    LG
    gutemine

    Einmal editiert, zuletzt von Lost in Translation ()

  • morpheus ist ein bildschirmschoner. plasmanutzer haben doch immer angst, das ihnen was einbrennt, wenn das bild längere zeit steht.

    mfg


    OoZooN


    Support für OoZooN Images gibt es auf forum.oozoon.de , nicht hier!


    Two Beer or not two Beer, thats the Question


    Aktuelle Nachrichten rund um OoZooN-Images gibt es auf Twitter

  • Ja, genau ich will wissen ob länger keine Taste gedrückt wird damit der Screensaver anspringt


    Im Moment mach ich einfach so wie oben gepostet in die action routine von ActionMap und NumberActionMap eine globale variable morpheus_lastkey rein die dort mit dem timestamp gesetzt wird wann der handler der action Map das letzte mal aufgerufen wurde (= letzter Tastendruck). Und im Screensaver wird dann einfach gecheckd ob der aktuelle timestamp um eine gewisse Zeit größer ist als der Wert auf dieser globalen Variable.


    Daher mach ich mir meine eigenen action rountinen für die call ActionMap und NumberActionMap und benenne die sdtandanrd action routinen so um, das die vom Screensaver Plugin verwwendet werden. Und genau das geht eben böse aus solange das globalActionMap im Standby scheinbar noch zur alten deutet.


    Wenn es eine bessere Methode gibt den Timestamp des letzten Tastendrruck aus einem Plugin zu ermitteln bitte ich um einen Hinweis wie man das besser macht, weil ich sagte doch ich bin zu blöde dafür :smiling_face:


    LG
    gutemine


    PS: Aktuellen Stand der Screensaver Entwicklung wenn jemand den ganzen Code sehen will gibt es übrigens hier:


    Morpheus Screensaver für Enigma2

    2 Mal editiert, zuletzt von Lost in Translation ()

  • nochmals hochhol :smiling_face:


    Ich wollte nur abschließend nochmals fragen wie man sich alle keyevents vom enigma2 holen lassen kann ohne sie so wie ich es jetzt mache aus den action Handlern zu fischen ?


    Weil wenn es keine bessere Möglichkeit gibt lasse ich es halt im Morpheus wie es ist. Der einzige Trade off den ich gefunde habe ist eben der Crash den es in der Standby.py verursacht den ich hier gepostet habe, aber nachdem der Workaround dieglobalActionMap in der Standby.py lokal nochmal zu definieren problemlos funktioniert kann ich damit leben.


    Allerdings ist Morpheus dadurch jetzt wie ein Virus implementiert, er patched sich in seiner autostart diesen Workaround selber in die Standby.py rein fall er durch einen Softwareupdate verloren geht - aber das wollte ich sowieso immer schon mal ausprobieren ob das funktioniert python mit python zu patchen :smiling_face:


    LG
    gutemine





  • Aber Gutemine, ich hatte mal in Dein Plugin reingeschaut, da gibt es mehr Ansatzpunkte, die Du ändern könntest... :smiling_face:

    2 Mal editiert, zuletzt von Dr.Best ()

  • Cool Danke !


    Und ja mir fallen da so einige Sachen ein die im Morpheus so wie er jetzt ist optimierenswert wären. Das Hauptproblem ist das das ganze Plugin schon aus dem Leim geht weil ich es auf Wunsch der User um eine Menge Sachen erweitert habe obwohl das gar nicht vorgesehen war.


    Wobei es eigentlich (so wie viele meiner Sachen) aus dem Ärger entstande ist das niemand sowas eigentlich simples bis jetzt gestrickt hat, weswegen ich auch wenig Lust habe es zu perfektionieren, sondern nur die gröbsten Schnitzer hätte ich gerne noch rausgemacht damit es nicht unnötig Ärger macht.


    Insofern schummle ich mich wie üblich halt damit durch es als Anregung zu betrachten es besser zu machen :smiling_face:


    Aber das mit dem direkten binden auf die eActionMap kommt sicher rein weil das spart das renamen der action handler mit dem hier genannten Folgeproblem.


    Wobei ich in der Zwischenzeit auch meine Finger nicht von der render routine des WebIF lassen konnte um auch cklick events zu bekommen - nur da war es leichter das original vorher zu renamen und dann in meine routine einzuwickeln und gleich wieder aufzurufen, weil es sonst praktisch eh nirgends verwendet wird.


    Aber ich lerne halt auch gerne was dazu, und wie heisst es so schön:


    Jeder ist zu was zu gebrauchen, und sei es als schlechtes Beispiel für Andere....


    EDIT: 5.6 vom Morpheus wo das jetzt so implementiert ist gibt es jetzt zum download. Nochmals Danke für die Tipps !



    LG
    gutemine

    2 Mal editiert, zuletzt von Lost in Translation ()