Beispiel für PluginDescriptor WHERE_TIMEREDIT ?

  • Hi!


    Ich kämpfe gerade damit einem Plugin den PluginDescriptor WHERE_TIMEREDIT zu verpassen, hat jemand dafür ein simples Beispiel - gerne auch ein leeres Dummy wo die function nichts tun ?


    Sobald ich mit dem Descriptor eine function registriere crashed mir der Timer Edit mit:

    Code
    File "/usr/lib/enigma2/python/Screens/TimerEntry.py", line 155, in createConfig    
    if p.__call__.has_key("setupFnc"):
    AttributeError: 'function' object has no attribute 'has_key'

    LG
    gutemine

  • Anscheinend registrierst du beim PluginDescriptor als fnc eine Funktion und keine dict, weil dann würde nicht der AttributeError kommen.
    Screen ist ja von dict abgeleitet und hat also ein has_key(bla).
    Eventuell mal dem Descriptor einen Screen mitgeben der auch eine Methode setupFnc im dict hat.



    Würde ich sagen :winking_face:

  • Ja wenn man ein dictionary aus funktionen mit passenden Namen übergibt dann funktioniert es ohne crash, Danke.


    Mal sehen ob das dann so funktioniert wie ich mir das vorstelle :grinning_squinting_face:


    Weil sonst hätte ich mir deine RecordTimerEvent.py borgen müssen :thumbs_up: Ich würde nämlich lieber verwenden was DP in der RecordTimer.py eingebaut hat um bei State Changes eben ein Plugin mit dem entsprechenden Descriptor aufzurufen.

    2 Mal editiert, zuletzt von Lost in Translation ()

  • Die kannst dir ja sowieso ausborgen - solange sie wieder zurückgibst :grinning_squinting_face:


    Aber wenn das bei dir funktioniert, sag mal wie genau!
    Ich hab erst durch deinen Beitrag gesehen dass es das WHERE_TIMEREDIT gibt und hätte da für die AMS noch eine Idee.

  • Na ja im Moment mache ich einfach sowas:


    meinefunc={"setupFnc" : meinesetupFnc, "fnishedFnc" : meinefinishedFnc}


    und wenn du dann beim Plugindescriptor where=PluginDescriptor.WHERE_TIMEREDIT, func=meinefunc verwendest dann crashed der Timeredit nicht mehr weil eben dadurch das haskey funktioniert. Wobei ich erst probieren muss ob dann die func auch aufgerufen werden :grinning_squinting_face:


    SO böse ist es aber sicher nicht gedacht es zu verwenden, weswegen ein Beispiel trotzdem nicht schlecht wäre ...


    Letztendlich wird es ja trotzdem auf eine EditTimerEvent oder sowas Ähnliches als classe mit allen nötigen methoden rauslaufen müssen die man übergibt

    Einmal editiert, zuletzt von Lost in Translation ()

  • Laut TimerEdit.py braucht es noch ein "configListEntry"

    Wenn ich mal mehr zeit habe, spiel ich sicher damit herum :winking_face:

  • Hier gibts auch noch was:

    Code
    elif config.usage.setup_level.index >= 2 and cur in self.timerentry_plugins.keys():
    self.getConfigListValues()
    setupFnc = self.timerentry_plugins[cur][1]
    configentry = cur[1]
    private_data = self.timerentry_plugins[cur][2]
    print "calling setupFnc of WHERE_TIMEREDIT plugin:", cur[0], setupFnc, configentry, private_data, self.timer.name
    self.session.openWithCallback(boundFunction(self.pluginFinished, cur), setupFnc , configentry, private_data, self.timer)

    Gruss
    Dre


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