Wenn ich das "return" im Handler für den Discover entferne (also den
hier:
https://github.com/chincheta0815/HueLightning/blob/master/Settings.pm#L37),
steht immer nach dem Drücken des Buttons "Änderungen wurden
gespeichert.". In den prefs wird dann aus "huebridges = []" ein

Dein Handler basiert auf Slim::Web::Settings - was am Ende mit $class->SUPER::handler() auch aufgerufen wird. Da drin geschieht noch einmal die volle Ladung Magie: die Prefs, die in "sub prefs" definiert sind, werden abgespeichert.

"huebridges = ~" und ich erhalte die Fehlermeldung:
"Slim::Networking::IO::Select::__ANON__ (131) Error: Select task failed
calling Slim::Networking::Async::HTTP::_http_read_body: Can't use an
undefined value as an ARRAY reference at
/opt/lms-7.9.0/Plugins/HueLightning/Hue.pm line 138." (im Code:
https://github.com/chincheta0815/HueLightning/blob/master/Hue.pm#L138).

Da in prefs "huebridges" definiert ist, wird der Handler diese Variable speichern. Da sie jedoch von der Seite nicht gesetzt wird, wird ein "undefined" Wert gespeichert. Du solltest also zumindest in deinem Code dafür sorgen, dass sie als leer Liste gespeichert wird, falls sie nicht definiert ist.

Irgendwie verzweifele ich langsam wirklich...

Nur ruhig. Du hast etwas viel Energie mit Firlefanz verschwendet. Aber das legt sich alles, sobald du mal die Basics verstanden hast :-). Schau dir unbedingt den Handler in der Basis-Klasse an (https://github.com/Logitech/slimserver/blob/public/7.9/Slim/Web/Settings.pm#L150). Da siehst du dann auch, dass der Wert als pref_huebridges erwartet wird (um Namenskonflikte zu vermeiden) etc.

Ist es grundsätzlich immer notwendig, dass Änderungen gespeichert
werden?

Nein. Wiederum im obigen Code wirst du sehen, dass dies nur passiert, wenn $paramRef->{'saveSettings'} gesetzt ist - was aktuell automatisch passiert, wenn du einen Submit Button drückst. Entfernst du diesen Wert in deinem Code (nur dann, wenn du nicht speichern willst, sondern nur Scannen!), dann sollte nichts gespeichert werden.

Aonsonsten: Wieso wird der loop.index 1 nicht getriggered?

Immer die schwierigste Frage gut versteckt zum Schluss ;-). Ich vermute mal, weil du über connectHueBridge loopst. Das ist aber der Name des Knopfes, den du drückst. Und der wird nur übergeben, wenn du ihn eben drückst. Folglich wird immer nur einer dieser Werte übergeben, da du ja nur einen Submit Button drücken kannst. Du musst den Loop also über eine Variable steuern, die immer übergeben wird. Baue also noch einen <input name="wasauchimmer[% loop.index %]"... ein, den du dann für den Loop im Handler verwendest.

--

Michael
_______________________________________________
slimserver-de mailing list
slimserver-de@lists.slimdevices.com
http://lists.slimdevices.com/mailman/listinfo/slimserver-de

Antwort per Email an