Beispiel #1
0
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":""})';
    }
}
Beispiel #2
0
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;
}