function action_getPlaylist() { doPrint("got json playlist request"); //doPrint($_REQUEST); global $config; $data = getData(); if (isset($_REQUEST["move"]) and is_array($_REQUEST["move"])) { doPrint("reorderd playlist"); $newPlaylist = array(); foreach ($_REQUEST['move'] as $key) { $track = $data['playlist'][$key]; unset($data['playlist'][$key]); $newPlaylist[$key] = $track; } #add not moved ones to the end foreach ($data['playlist'] as $key => $track) { $newPlaylist[$key] = $track; } $data["playlist"] = $newPlaylist; storeData($data); } if (isset($_REQUEST["add"]) and is_array($_REQUEST["add"])) { if (!isset($_REQUEST["aktPath"])) { $_REQUEST["aktPath"] = ""; } $aktPath = strip_tags($_REQUEST["aktPath"]); $aktPath = stripslashes($_REQUEST["aktPath"]); foreach ($_REQUEST["add"] as $file) { $file = stripslashes($file); $file = trim($file); $allowed = getAccess($aktPath . "/" . $file); if (!$allowed) { doPrint("ip is not allowed to add " . $aktPath . "/" . $file); } elseif (file_exists($config["searchPath"] . $aktPath . "/" . $file)) { doPrint("added file " . $aktPath . "/" . $file); $data["playlist"] = playlistAdd($data["playlist"], $config["searchPath"] . $aktPath . "/" . $file); } elseif (strpos($file, "http://") === 0) { doPrint("added stream " . $file); $data["playlist"] = playlistAdd($data["playlist"], $file); } else { doPrint("action_getPlaylist(): dont know what to do with: " . $config["searchPath"] . $aktPath . "/" . $file); } } $data = recalcTotalPlaytime($data); storeData($data); } if (isset($_REQUEST["remove"]) and is_array($_REQUEST["remove"])) { foreach ($_REQUEST["remove"] as $token) { if (isset($data["playlist"][$token])) { doPrint("removed file " . $data["playlist"][$token]['title']); unset($data["playlist"][$token]); } } $data = recalcTotalPlaytime($data); storeData($data); } if (isset($_REQUEST["clear"])) { doPrint("pressed clear"); $data["playlist"] = array(); $data["totalTime"] = "0"; $data["cachedPic"] = ""; $data["playingPic"] = ""; $data["curTrack"] = ""; storeData($data); } if (isset($_REQUEST["shuffle"])) { doPrint("pressed shuffle"); shuffle($data["playlist"]); $newData = array(); foreach ($data["playlist"] as $blah) { $newData[$blah["token"]] = $blah; } $data["playlist"] = $newData; storeData($data); } if (isset($_REQUEST["sort"])) { doPrint("pressed sort"); $tmp = sortMultiArray($data["playlist"], "filename"); $newData = array(); foreach ($tmp as $blah) { $newData[$blah["token"]] = $blah; } $data["playlist"] = $newData; storeData($data); } if (isset($_REQUEST["loadPlaylist"]) and is_file($config["plDir"] . $_REQUEST["loadPlaylist"])) { doPrint("loading playlist: " . $_REQUEST["loadPlaylist"]); if (!preg_match("/\\w+ - .*\\.playlist/", $_REQUEST["loadPlaylist"])) { doPrint("invalid playlist: " . $_REQUEST["loadPlaylist"]); exit; } $files = file($config["plDir"] . $_REQUEST["loadPlaylist"]); $playlist = array(); foreach ($files as $file) { $file = trim($file); if (substr($file, 0, 8) == "STREAM::") { $playlist = playlistAdd($playlist, substr($file, 8)); } else { $playlist = playlistAdd($playlist, $config["searchPath"] . $file); } } $data["playlist"] = $playlist; storeData($data); } $playlist = array(); foreach ($data['playlist'] as $key => $entry) { if (empty($key) or !isset($entry["filename"])) { continue; } $playlist[] = array("tracknum" => $entry['tracknum'], "artist" => utf8_encode($entry['artist']), "album" => utf8_encode($entry['album']), "title" => utf8_encode($entry['title']), "length" => $entry['length'], "token" => $entry['token'], "file" => utf8_encode($entry['filename'])); } if (count($playlist) > 0) { $data = json_encode($playlist); echo '({"total":"' . count($playlist) . '","results":' . $data . '})'; } else { echo '({"total":"0", "results":""})'; } }
function playlistAdd($playlist, $toAdd) { global $config; if (strpos($toAdd, "http://") === 0) { list($artist, $album, $title, $tracknum, $playtime_string, $bitrate) = getTag($toAdd); //$display = $artist." - ".$album." - ".$title; $display = $toAdd; $title = $toAdd; $token = md5(uniqid(rand(), true)); $newFile = array("display" => $display, "filename" => $toAdd, "token" => $token, "album" => $album, "title" => $title, "artist" => $artist, "tracknum" => "", "lengths" => "1", "stream" => "1", "length" => "∞"); $playlist[$token] = $newFile; } elseif (!file_exists($toAdd)) { doPrint("playlistAdd() : '" . $toAdd . "' does not exist"); } elseif (is_file($toAdd)) { $toAdd = preg_replace("/\\/+/", "/", $toAdd); list($artist, $album, $title, $tracknum, $playtime_string, $bitrate) = getTag($toAdd); $display = $artist . " - " . $album . " - " . $tracknum . " - " . $title; if (empty($title)) { $title = basename($toAdd); $display = $title; } $playtime_seconds = 0; list($hour, $min, $sec) = explode(":", $playtime_string); if (empty($sec)) { $sec = $min; $min = $hour; $hour = 0; } $playtime_seconds = $hour * 3600 + $min * 60 + $sec; $token = md5(uniqid(rand(), true)); $newFile = array("display" => $display, "filename" => $toAdd, "token" => $token, "album" => $album, "title" => $title, "artist" => $artist, "tracknum" => $tracknum, "lengths" => floor($playtime_seconds), "length" => $playtime_string, "bitrate" => $bitrate); $playlist[$token] = $newFile; } elseif (is_dir($toAdd)) { $toAdd = preg_replace("/\\/+/", "/", $toAdd); $files = array(); $dirs = array(); if ($handle = opendir($toAdd)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { if (is_dir($toAdd . "/" . $file)) { $dirs[] = $file; } else { $tmp = explode(".", $file); $ext = "." . array_pop($tmp); if (in_array($ext, array_keys($config["ext"]))) { $files[] = $file; } } } } closedir($handle); } natcasesort($dirs); natcasesort($files); foreach ($dirs as $dir) { $playlist = playlistAdd($playlist, $toAdd . "/" . $dir); } foreach ($files as $file) { $playlist = playlistAdd($playlist, $toAdd . "/" . $file); } } else { doPrint("playlistAdd() : '" . $toAdd . "' is whether file nor dir nor stream"); } return $playlist; }