settings nicht erst beim Restart speichern??

  • Hallo,


    ich habe mir einen Schalter eingebaut, damit ich auswählen kann, von wo das Picon Plugin die *.png holen soll. Also ob von hdd usb oder cf.
    Grund dafür ist, dass meine HDD sehr laut ist und beim umschalten diese immer mit anlief, obwohl der picon Ordner auf dem cf liegt.
    Soweit so gut. Funktioniert auch alles. Allerdings werden die settings erst nach dem restart von Enigma gespeichert.


    Was muss ich beachten, damit die Änderungen sofort wirksam werden und auch ohne Neustart ein anderer Speicherplatz benutzt wird??

  • Wenn das Plugin die Enigma2 Konfigurationselemente benutzen würde (ich hab den Source vom Plugin gerade nicht vor mir, sorry), dann müsste das eigentlich sofort gehen.


    Wenn es allerdings irgendwelche spielereien macht (z.b. eigene config-dateien in /etc), dann wohl eher nicht.

  • Quote

    Original von tmbinc
    Wenn das Plugin die Enigma2 Konfigurationselemente benutzen würde (ich hab den Source vom Plugin gerade nicht vor mir, sorry), dann müsste das eigentlich sofort gehen.


    Wenn es allerdings irgendwelche spielereien macht (z.b. eigene config-dateien in /etc), dann wohl eher nicht.


    Nein ich mache da keine Spielereien weiter.
    Die Änderungen werden direkt in die settings geschrieben. Allerdings bisher erst nach einem Enigma Restart.


    Wenn ich nachher zu Haus bin, werde ich mal die Sachen hier posten.

    Edited once, last by simatec ().

  • Das speichern in die Datei dient doch nur dazu die Daten auch nach dem neustart noch zur Verfügung zu haben.


    Prizipiell werden config-variablen zu laufzeit im RAM gehalten.
    Wenn du also eine Variable änderst, dann wird enigma2 den neuen Wert sofort benutzen (sonst könnte man kein WebIF oder Fritz!Call ein/ausschalten ohne jedesmal die box neu zu starten).

    mfg ,
    Reichi

  • Quote

    Original von Reichi
    Das speichern in die Datei dient doch nur dazu die Daten auch nach dem neustart noch zur Verfügung zu haben.


    Prizipiell werden config-variablen zu laufzeit im RAM gehalten.
    Wenn du also eine Variable änderst, dann wird enigma2 den neuen Wert sofort benutzen (sonst könnte man kein WebIF oder Fritz!Call ein/ausschalten ohne jedesmal die box neu zu starten).


    Jup Reichi das stimmt. Allerdings wird in der Schleife beim der picon.py das aus dem RAM nicht gelesen.
    Erst nach dem Neustart, wenn der Eintrag auch in der settings geändert wurde, kann die picon.py damit arbeiten.
    Wahrscheinlich fehlt nur was in der picon.py ?(

  • So hier mal die Sachen die ich eingebaut habe.


    picon.py

    PHP
    from Components.config import config, ConfigSubsection, ConfigEnableDisable, getConfigListEntry, ConfigSelection, NoSave, ConfigNothing
    config.misc.picon = ConfigSelection(default = "hdd", choices = [("hdd", _("/hdd/picon")), ("cf", _("/cf/picon")), ("usb", _("/usb/picon"))])


    PHP
    if config.misc.picon.value == "cf":
    self.searchPaths = [ '/etc/picon/',
    '/media/cf/picon/']
    elif config.misc.picon.value == "usb":
    self.searchPaths = [ '/etc/picon/',
    '/media/usb/picon/']
    elif config.misc.picon.value == "hdd":
    self.searchPaths = [ '/etc/picon/',
    '/media/hdd/picon/']


    Wie gesagt funktioniert zwar, aber erst nach einem Restart von Enigma

  • Das muss gehen :)


    Was mir dazu nur einfällt ist dass config.misc.picon nur einmal global gesetzt werden sollte. (achja, bitte den config-pfad fixen:


    config.plugin.picon = ConfigSubSection()
    config.plugin.picon.location = ConfigSelection(....)


    wie in doc/PLUGIN (kurz) beschrieben)



    Gibts das komplette .py irgendwo? dann schau ich mal.

  • Quote

    Original von tmbinc
    Das Problem ist vermutlich, dass der config-wert nur im __init__ ausgewertet wird, und nicht z.b. im "findFile".


    hmm, das sagt mir jetzt garnichts ?(

  • Quote

    Original von tmbinc


    config.plugin.picon = ConfigSubSection()
    config.plugin.picon.location = ConfigSelection(....)


    so, ich habe das mal angepasst, allerdings ohne Erfolg.
    Der Schalter geht erst nach Neustart von Enigma

  • Was tmbinc meint, ist dass die __init__ Methode nur einmal aufgerufen wird, nämlich beim e2-Start. Also pack das ganze in eine der Methoden, die jedesmal aufgerufen werden. Am besten so:


  • Quote

    Original von dcdead
    Was tmbinc meint, ist dass die __init__ Methode nur einmal aufgerufen wird, nämlich beim e2-Start. Also pack das ganze in eine der Methoden, die jedesmal aufgerufen werden. Am besten so:



    Genau das wars. :)
    Danke an dcdead und tmbinc :D

  • Auch wenn das Thema fast 3 Jahre alt ist (oder gerade deswegen ;) ) hol ich das nochmal hoch...


    Gibt es inzwischen vielleicht doch eine Möglichkeit, mittels config erstellte Einträge der /etc/enigma2/settings auch
    ohne Enigma2-Neustart in die Datei zu speichern? Also auf "normalem" Weg, ohne mit anderen Mitteln die Datei
    zu bearbeiten oder eigene Config-Dateien zu verwenden...
    Hintergrund ist der, dass ich schon das ein oder andre Mal Einstellungen vorgenommen habe, die zwar problemlos
    funktionieren solange die Box läuft (was sie meist auch wochenlang tut), aber wenn die Box dann doch mal
    abstürzt oder der Strom ausfällt oder ähnliches verloren sind. Dies würde sich ja dadurch vermeiden lassen,
    wenn die Einstellungen direkt in der Datei landen würden und nicht nur bis zum Neustart im RAM gehalten werden
    würden...

  • Gibt es inzwischen vielleicht doch eine Möglichkeit, mittels config erstellte Einträge der /etc/enigma2/settings auch
    ohne Enigma2-Neustart in die Datei zu speichern?


    Mit "configfile.save()" wird es in der settings gespeichert.
    Hier ist ein Auszug einer etwas älteren "MovieSelection.py":


    Code
    def saveconfig(self):
    if self.saveflag == True:
    config.movielist.moviesort.save()
    config.movielist.listtype.save()
    config.movielist.description.save()
    configfile.save()
    self.saveflag = False


    Gruß Ralf

    DM 7000-S, boxman-image 1.1.0
    DM 7025-S, SerNr 6B.., CVS Image, Festplatte Seagate ST980210A