Wunsch

Ich würde mir wünschen, wenn ich ein Script lösche, das man mich fragt ob ich auch die Datei (php datei am Filesystem) löschen möchte oder nur die „Verknüpfung“ in der Konsole. Ansonsten sammeln sich bei „Test“ Scripten viele alte Daten an, die man jetzt mit der ID im Namen auch nicht so ohneweiters unterscheiden kann.

Dem kann ich nur zustimmen.

Eventuell kann ja auch ein PHP-Guru aus dem Forum ein Skript bereitstellen das die vorhandenen Skripte mit den Einträgen aus der settings.xml vergleicht und mit Nachfrage dann löscht.

Das Delphi SDK bietet sich hierzu gradezu an. Wenn paresy in dieser Richtung nicht vor hat etwas zu realisieren, könnte ich anbieten das in die Tonitools mit aufzunehmen.

So langsam hab ich den Dreh mit dem SDK raus :wink:

Toni

Moin Toni,

na das ist doch mal ein Wort. :slight_smile:

Hallo Toni,

ich haette lieber ein PHP Script, kannste das auch mit machen?

In PHP bist du wesendlich fitter als ich :smiley:

Aber was hälste denn von der Idee, dass die Tonitools - falls es denn dazu kommt - die wesendlichen funktionen zur verfügung stellen, die es dir ermöglichen mit einem 5-Zeiler dein Script selbst zu schreiben?

Lass uns mal abwarten was paresy dazu sagt. Es gibt nämlich schon einiges an Script-relevante Funktionen. Das löschen von Scripten, das finden von Dateinamen anhand des Scriptnamens, die Eventliste eines Scripts und so weiter…

Toni

Hallo Toni,

dann solltest Du Dich vielleicht mal fitter machen? :slight_smile:

Aber was hälste denn von der Idee, dass die Tonitools - falls es denn dazu kommt - die wesendlichen funktionen zur verfügung stellen, die es dir ermöglichen mit einem 5-Zeiler dein Script selbst zu schreiben?

genau das ist ja der Punkt, fuer mich ist jedes zusaetzliche Programm ueberfluessig, weil man das ganze auch direkt in PHP realisieren kann. Es muss halt nur mal gemacht werden.

Lass uns mal abwarten was paresy dazu sagt. Es gibt nämlich schon einiges an Script-relevante Funktionen. Das löschen von Scripten, das finden von Dateinamen anhand des Scriptnamens, die Eventliste eines Scripts und so weiter…

Toni

schauen wir mal.

Ich werde die Abfrage einbinden.

Hier das Skript:


if ($handle = opendir(IPS_GetKernelDir().'scripts')) {
   while (false !== ($file = readdir($handle))) {
      if(!is_dir(IPS_GetKernelDir().'scripts/'.$file)) {
         $files[]=$file;
      }
   }
   closedir($handle);
}
$scriptids=IPS_GetScriptList();
foreach($scriptids as $scriptid)
{
   $script=IPS_GetScript($scriptid);
   $scriptfiles[]=$script['ScriptFile'];
}

foreach($files as $file)
{
   if(!in_array($file, $scriptfiles))
   {
      echo $file."
";
      //Auskommentieren wer löschen will
      //unlink(IPS_GetKernelDir().'scripts/'.$file);
   }
}

Aber Vorsicht: Wenn ihr includes in das Skript Verzeichniss kopiert habt, werden diese gelöscht! -> Sichert Sie vorher!

paresy

Hallo paresy,

Vielen Dank für das Skript.

Gleich eine Frage dazu. Funktioniert diese Skript wie es hier abgebildet ist auch in der V1?

Hallo Werner,

ich habe das Script gerade mal in V1 getestet, damit läuft es nicht. Die Funktion: IPS_GetScriptList() gibt es wohl nicht in V1.

Ich wünsche einen schönen Abend.

Christoph.

Hallo christoph,

Vielen dank für deine Mühe

In der Konsole?
Finde das Script zwar gut für einen Workaround, aber wie du selbst ja sagst, würde es alle nicht eingetragenen Dateien löschen. Daher mein Vorschlag, beim Löschen in der Konsole, den Benutzer fragen.

Hi,

da bin ich nochmal. Ich habe einfach mal das Script von Paresy für V1 angepasst:

if ($handle = opendir(IPS_GetKernelDir().'scripts')) {
   while (false !== ($file = readdir($handle))) {
      if(!is_dir(IPS_GetKernelDir().'scripts/'.$file)) {
         $files[]=$file;
      }
   }
   closedir($handle);
}
$scriptids=IPS_GetScripts();
foreach($scriptids as $scriptid)
{
   $scriptfiles[]=IPS_GetScriptFile($scriptid);
}


foreach($files as $file)
{
   if(!in_array($file, $scriptfiles))
   {
      echo $file."
";
      //Auskommentieren wer löschen will
      //unlink(IPS_GetKernelDir().'scripts/'.$file);
   }
}

Die Variablennamen sind jetzt zwar nicht so ganz passend, aber es funktioniert. Einfach ein neues Script anlegen und den Inhalt einfügen und direkt im Scripteditor oben rechts den Executebutton anklicken.

Im Outputwindow werden dann die nicht verknüpften Scripte angezeigt (die wahrscheinlich gelöscht werden können).

Ich wünsche einen schönen Abend.

Christoph.

Noch ein kleine Ergänzung für die Freunde der Bricks, diese würden bei mir auch gelöscht zumindestens in der Version für die V1.

Hallo Werner,

Guter Einwand.
Der Grund: Die Bricks werden zwar nicht gelöscht, aber die Brick-Variablendefinitionen werden nicht in den Settings gespeichert, sondern getrennt in einer XML Datei.

Lösung hierzu:

<?
if ($handle = opendir(IPS_GetKernelDir().'scripts')) {
   while (false !== ($file = readdir($handle))) {
      //echo substr($file,-3);
      if(!is_dir(IPS_GetKernelDir().'scripts/'.$file) && (substr($file,-3)!='brx')) {
         $files[]=$file;
      }
   }
   closedir($handle);
}
$scriptids=IPS_GetScripts();
foreach($scriptids as $scriptid)
{
   $scriptfiles[]=IPS_GetScriptFile($scriptid);
}

foreach($files as $file)
{
   if(!in_array($file, $scriptfiles))
   {
      echo $file."
";
      //Auskommentieren wer löschen will
      //unlink(IPS_GetKernelDir().'scripts/'.$file);
   }
}
?>

Allerdings VORSICHT:
Zusätzliche Skripte die in den Bricks verwendet werden, sind im Bricksordner enthalten und sollten nicht gelöscht werden. (= wie auch bei den eFHT-Bricks).
Aber da sich hier die Programmierung der Bricks unterscheiden kann, kann man dazu keine allgemeine Aussage treffen.

Aber darauf hat auch schon paresy hingewiesen:

Gruß
Günter.

Hallo Günter,

vielen Dank für die Ergänzung des Skriptes.

      if(!is_dir(IPS_GetKernelDir().'scripts/'.$file) && (substr($file,-3)!='brx'))

Diesen Ansatz hatte ich auch schon verfolgt da ich aber noch am Anfang stehe was die PHP-Programmierung betrifft warst Du, wie immer, schneller :smiley:

Ich werde das Skript auch nicht für das automatische löschen nutzen sondern nur die Ausgabe verwenden um die Dateien per Hand zu löschen.

Vielen Dank an alle die sich dem Skript angenommen haben.

In der aktuellen Version werden die Dateien von „gelöschten“ Skripten in den „scripts\deleted“ Ordner verschoben.

paresy