Mp3-Ordneranzeige im Webfront und auf dem edip

Hallo,

ich habe eine große mp3 Sammlung welche nach dem Alphabet geordnet ist. Also bspw.
E:\Music\A\A Fine Frenzy\Bomb in a Birdcage…mp3
E:\Music\A\A Fine Frenzy\One Cell In The Sea…mp3
E:\Music\A\Alanis Morissette\Flavors Of Entanglement…mp3
usw.

Ich würde gerne das Skript so umbauen, dass ich wie im Explorer das Directory durchklicken kann. Die erste Ebene habe ich ja schon wenn ich E:\Music angebe im Skript. Welchen Befehl muss ich verwenden, damit bei einem Klick auf Ordner A alle Unterordner angezeigt und auch wieder so im Webfront aufgebaut werden?
Das ganze solange bis ich bei den gewünschten mp3 files ankomme.

Kann da jemand helfen oder hat schon sowas per Skript gelöst?

Danke und Gruss
R0bert

Mich würde das auch sehr interessieren. Es wäre recht gut, wenn man auch Unterordner auswählen könnte.

jetzt habe ich eine weile aus dem forum genommen, nun möchte ich was zurück geben : ) vielleicht kanns ja jemand brauchen.
habt nachsicht mit mir, php ist für mich eine NEUE sprache.

ich musste div. anpassungen vornehmen, liegt wohl an der aktuellen ips-version:

  • IPS_SetVariableProfileAssociation($profil.‚2‘,$i+1,$files2[$i],"", 0xFF0000);
  • Association´s leider jetzt auf 30 begrenzt SEHR SCHADE (alternative?)

  • … ausserdem können jetzt auch umlaute in den ordnernamen gelesen werden
  • da meine mp3´s auf einem server liegen muss ich leider einen umweg über ein synch-batch gehen, hab schon im forum gesucht, es gab div. tipps mit /// \\ etc… hat aber nichts funktioniert, scheint eine php-krankheit zu sein

Kennt einer DIE lösung?

Mp3-Play:

<?
$dir   =  'E:/myMusic/';
$dir    = '\\K1NG-SERVER\Musik';
$dir    = 'D:/_MP3/';
$dir_le = strlen($dir);
$Mp3ordner = GetValueString(46281 /*[IPSAMP\MP3String]*/);
$temp_array = wddx_deserialize($Mp3ordner);
$id_sound = 20686 /*[IPSAMP\Media Player]*/;

////////////////////////////////////////////////////////////////////////////////
if( ! ( $dh = @opendir( $dir ) ) ) //löschen
{
  // Fehler handeln...
}

while( ( $dirent = readdir( $dh ) ) !== false )
{
  $abs_dirent = $dir.$dirent;
  if( $dirent != '.' && $dirent != '..' && is_dir( $abs_dirent ) )
  {
    $files[] = $abs_dirent;
  }
}

closedir( $dh );
////////////////////////////////////////////////////////////////////////////////
$i=0;
foreach ($files as $i => $val) {
$files2[$i] = substr($val,$dir_le);
}
////////////////////////////////////////////////////////////////////////////////
$data = array("0" => "ResetDisplayWebfront");
$files = array();
$i=0;
$j=0;
foreach ($files2 as $files2[$i]) {
//if(($files[$i] <> ".") AND ($files[$i] <> ".."))
       array_push ( $files, utf8_encode($files2[$i]) );
   //    array_push ( $files, utf8_decode($files2[$i]) );
       $j++;
}

////////////////////////////////////////////////////////////////////////////////






WAC_PlayDir($id_sound,$dir.$temp_array[$ordn]);

function WAC_PlayDir($id, $dir)
{
 function ReadRecursive($dir, $subdir = "") {
  $result = Array();
  $files = scandir($dir."/".$subdir);
  foreach($files as $file)
  {
   if(($file != ".") && ($file != "..")){
    if(is_dir($dir."/".$subdir."/".$file)) {
     $res = ReadRecursive($dir, $subdir."/".$file);
     $result = array_merge($res, $result);
    } else {
     $filedir = $subdir."/".$file;
     $filedir = substr($filedir, 1, strlen($filedir));
     $result[] = $filedir;
    }
   }
  }
  return $result;
 }

 $allowed = Array("mp3", "wma");
 $files = ReadRecursive($dir);

//Den Zufallsgenerator von PHP verwenden
//shuffle($files);

 WAC_ClearPlaylist($id);
 foreach($files as $file)
 {
  $ext = pathinfo($dir."/".$file, PATHINFO_EXTENSION);
  if(in_array(strtolower($ext), $allowed))
  {
   WAC_AddFile($id, $dir."/".$file);
  }
 }
 WAC_Play($id);
}

//print_r($temp_array);
//print_r($files);

?>

Folder-Read:

<?

$dir   =  'E:/myMusic/';
$dir    = '\\K1NG-SERVER\Musik';
$dir    = 'D:/_MP3/';
//$dir    = '192.168.178.20/music/';
//\\\\MEIN_SERVER\\FREIGABE\\
//$dir    =  '\\\\K1NG-SERVER\\Musik\\)';
$dir_le = strlen($dir);
$files  = array();
$profil = "Musikordner";

////////////////////////////////////////////////////////////////////////////////
if( ! ( $dh = @opendir( $dir ) ) ) //löschen
{
 // print_r($dir);
}
while( ( $dirent = readdir( $dh ) ) !== false )
{
  $abs_dirent = $dir.$dirent;
  if( $dirent != '.' && $dirent != '..' && is_dir( $abs_dirent ) )
  {
    $files[] = $abs_dirent;
  }
}

closedir( $dh );
////////////////////////////////////////////////////////////////////////////////
$many   = count($files);
$anz_arr= round(($many/30)+0.499);
////////////////////////////////////////////////////////////////////////////////
$i=0;
foreach ($files as $i => $val) {
$files2[$i] = substr($val,$dir_le);
}
////////////////////////////////////////////////////////////////////////////////
      IPS_DeleteVariableProfile($profil);
      IPS_CreateVariableProfile($profil,1);
      IPS_SetVariableCustomProfile(19877 /*[IPSAMP\MP3]*/,$profil);//41184
for ($i=0;$i < ($many);$i++)
if ($i <= 30)
   IPS_SetVariableProfileAssociation($profil,$i+1,$files2[$i],"", 0xFF0000);

if (($anz_arr > 1) AND ($anz_arr <> 1) AND ($i > 30))
      IPS_DeleteVariableProfile($profil.'2');
      IPS_CreateVariableProfile($profil.'2',1);
      IPS_SetVariableCustomProfile(17845 /*[IPSAMP\MP3II]*/,$profil.'2');//41184
for ($i=0;$i < $many;$i++)
if ($i > 30)
      IPS_SetVariableProfileAssociation($profil.'2',$i+1,$files2[$i],"", 0xFF0000);


////////////////////////////////////////////////////////////////////////////////
$data = array("0" => "ResetDisplayWebfront");
$i=0;
$j=0;
foreach ($files2 as $files2[$i]) {
//if(($files[$i] <> ".") AND ($files[$i] <> ".."))
       array_push ( $data, utf8_encode($files2[$i]) );
       $j++;
}

////////////////////////////////////////////////////////////////////////////////
SetValueString(46281 /*[IPSAMP\MP3String]*/, wddx_serialize_value($data));
//print_r($j);
//print_r($many);
print_r($anz_arr);
print_r($files);

?>

SetFolderWebfront:

<?
if ($IPS_VALUE <= 30) {
setvalue(17845 /*[IPSAMP\MP3II]*/,0);
setvalue(19877 /*[IPSAMP\MP3]*/,$IPS_VALUE);
}
if ($IPS_VALUE > 30) {
setvalue(19877 /*[IPSAMP\MP3]*/,0);
setvalue(17845 /*[IPSAMP\MP3II]*/,$IPS_VALUE);
}
IPS_RunScriptEx(55414 /*[IPSAMP\Mp3Play]*/,Array("ordn" => $IPS_VALUE));

?>

Hallo Arcalix,

besten Dank für die Anpassung - ich wollte mich gerade bei machen, dass auf die Begrenzung von 32 Accosiations ab Version 2.4 anzupassen, da habe ich Deine Anpassungen entdeckt.

in diesem Sinne - wieder „etwas“ Arbeit gesparrt :slight_smile:

Tilo

Hallo Arcalix,

ich versuche gerade Dein Script zum laufen zu bringen.
Leider nur bedingt von Erfolg gekrönt.:frowning:

Vielleicht kannst Du mir hier weiterhelfen.

Ich habe folgende Variablen angelegt und entsprechend in den Scripten angepasst:

Mp3 -> Integer ->Profil Musikordner
Mp3II -> Integer -> Profil Musikordner2
Mp3String -> String

Muss ich die Variablen noch mit den Scripten verknüpfen oder habe ich sonst was übersehen?
Bin mit IPS und PHP leider noch ganz am Anfang und lerne mich gerade ein.:rolleyes:
Ich hoffe auf Rücksicht von Euch und vor allem auf ein klein wenig Hilfe die mich weiterbringt.:smiley:

Vielen Dank.

Darklord

Hallo,

hat sich erledigt.

Nachdem ich die Variablen Mp3 und Mp3II
mit dem Script „SetFolderWebfront“ verknüpft habe funktioniert es nun.

Machmal sieht man den Wald vor Bäumen nicht.:stuck_out_tongue:

Mein Dank gilt auf jeden Fall den Autoren, die ihre Arbeit allen zur Verfügung stellen.:smiley:

Vielen Dank.:slight_smile:

@Arcalix:

Was zum Henker macht dein Code? :confused:

Zu aller erst wird die Variable $dir zweimal durch die darunterstehenden Werte überschrieben -> ergo könnte man sich die oberen zwei Zeilen schenken.

$dir   =  'E:/myMusic/';
$dir    = '\\K1NG-SERVER\Musik';
$dir    = 'D:/_MP3/';

Dann wird das Array $files mit den Ordnern des $dir etwas umständlich gefüllt… OK!

if( ! ( $dh = @opendir( $dir ) ) ) //löschen
{
  // Fehler handeln...
}

while( ( $dirent = readdir( $dh ) ) !== false )
{
  $abs_dirent = $dir.$dirent;
  if( $dirent != '.' && $dirent != '..' && is_dir( $abs_dirent ) )
  {
    $files[] = $abs_dirent;
  }
}

closedir( $dh );

Oder einfacher:

$adf=@scandir($dir);
$files=array();
foreach($adf as $df) {if($df!='.' and $df!='..' and is_dir($dir.$df)) {$files[]=$dir.$df;}}

Dann wird $files in $files2 umgeschrieben, nur um einen Teil des Pfades zu extrahieren :eek: Schon mal von pathinfo() und basename() gehört? :rolleyes: Das könnte man ohne weiteres in die erste Schleife einbauen!
Und dann wird nochmal $files bemüht, um wieder die Werte von $files2 - nur diesmal utf8_encoded - zu erhalten?! :eek:

Z.B. so:

$adf=@scandir($dir);
$files=array();
foreach($adf as $df) {if($df!='.' and $df!='..' and is_dir($dir.$df)) {$files[]=utf8_encode($df);}}

(Warum das Array, welches nur Ordner enthält, „files“ heisst, ist mir auch etwas unklar)
Und den Rest bis WAC_PlayDir() könnte man sich schenken. Bitte korrigiere mich, wenn ich falsch liege! :slight_smile:

Und dann kommt die Funktion WAC_PlayDir(), welche erst das ganze Verzeichnis rekursiv auslesen kann… :confused:

Also ich check das nicht ganz - sorry!! Aber klär mich auf! :wink:

LG,
florida

Habe dies jetzt ein paar Monate im Gebrauch, hat immer gut funktioniert, seit gestern sind die Ordner weg und beim einlesen erhalte ich folgende Fehlermeldung:

Warning: Wrong parameter count for ips_setvariableprofileassociation() in C:\IP-Symcon\scripts\52454.ips.php on line 16

Zeile 16 ist „IPS_SetVariableProfileAssociation…“

    {
       $verzeichniss=substr($files[$i],0,40);
     IPS_SetVariableProfileAssociation($profil,$j,$verzeichniss,"");     // Dem Profil Musikordner einen neuen Wert zuordnen
    $temp_array[$j]=$i;
    $j++;

    }

Der Befehl hat sich zur 2.4 geändert:
IPS_SetVariableProfileAssociation: IP-Symcon :: Automatisierungssoftware

paresy

na das kann ja nicht sein: er hat nichts von Releasewechsel geschrieben, es ist „einfach so“ passiert (User zum Supporter: ich hab nichts gemacht!):smiley:

die Ordner sind wieder da, aber nun kommt moch folgende Meldung

Warning: wfc_reload: Instance #36257 does not implement this function!

Lösch die Zeile… brauchst du bestimmt eh nicht mehr.

paresy

Hallo seit gestern versuche ich das auch zu ändern aber ohne erfolg,wie muss das aussehen?

$verzeichniss=substr($files[$i],0,40);
IPS_SetVariableProfileAssociation("$profil,$j,$verzeichniss", 1, „“, „“, 0xFFFFFF);
$temp_array[$j]=$i;
$j++;

Für die Nachwelt (wir hatten per PM Kontakt), die Lösung ist die Anpassung zu:

IPS_SetVariableProfileAssociation($profil,$j,$verzeichniss, "",-1);