Пример #1
0
function action_default()
{
    global $config;
    $data = getData();
    if (isset($data["ppid"])) {
        $data = killChild($data);
    }
    if (isset($data["curTrack"]) and isset($data["playlist"][$data["curTrack"]])) {
        $track = $data["playlist"][$data["curTrack"]];
    } else {
        $tmp = $data["playlist"];
        $track = array_shift($tmp);
        $data["curTrack"] = $track["token"];
    }
    doPrint("playing: " . $track["filename"]);
    # clean up playlist
    if ($data['partymode'] == 1) {
        # clean everything up to 3 songs after the current one
        $x = 0;
        $num = 0;
        foreach ($data['playlist'] as $token => $tr) {
            if ($tr['token'] == $track["token"]) {
                $num = $x;
                continue;
            }
            $x++;
        }
        $num = $num - 3;
        $num = max(0, $num);
        for ($x = 0; $x < $num; $x++) {
            array_shift($data["playlist"]);
        }
    } elseif ($data['partymode'] == 2) {
        # clean everything up to the first song of the cur album
        $newPlaylist = array();
        $found = 0;
        foreach ($data['playlist'] as $token => $tr) {
            if ($tr['token'] == $track["token"] or $tr['album'] == $track['album']) {
                $found = 1;
            }
            if ($found == 1) {
                $newPlaylist[$token] = $tr;
            }
        }
        $data['playlist'] = $newPlaylist;
    }
    $data["start"] = time();
    $data["length"] = $track["lengths"];
    $data["title"] = $track["title"];
    $data["artist"] = $track["artist"];
    $data["album"] = $track["album"];
    $data["track"] = $track["tracknum"];
    $data["token"] = $track["token"];
    $data["filename"] = $track["filename"];
    if (!isset($track["bitrate"])) {
        $track["bitrate"] = "";
    }
    $data["bitrate"] = $track["bitrate"];
    $data["play"] = 1;
    $data["gmtimestart"] = gmdate("U");
    $data["playingPic"] = getPictureForPath(dirname($track["filename"]));
    if (isset($config["notifyCommand"])) {
        $tmp = $config["notifyCommand"];
        $tmpTrack = $track["tracknum"];
        $tmpArtist = $track["artist"];
        $tmpTitle = $track["title"];
        $tmpArtist = str_replace('\'', '', $tmpArtist);
        $tmpArtist = str_replace('\\"', '', $tmpArtist);
        $tmpArtist = str_replace(';', '', $tmpArtist);
        $tmpTitle = str_replace('\'', '', $tmpTitle);
        $tmpTitle = str_replace('\\"', '', $tmpTitle);
        $tmpTitle = str_replace(';', '', $tmpTitle);
        $tmpTrack = str_replace('\'', '', $tmpTrack);
        $tmpTrack = str_replace('\\"', '', $tmpTrack);
        $tmpTrack = str_replace(';', '', $tmpTrack);
        $tmp = str_replace("%#", $tmpTrack, $tmp);
        $tmp = str_replace("%T", $tmpTitle, $tmp);
        $tmp = str_replace("%A", $tmpArtist, $tmp);
        doPrint("notify: " . $tmp);
        $output = "";
        $rc = 0;
        exec($tmp, $output, $rc);
        if ($rc != 0) {
            doPrint("notify failed: " . join("\n", $output));
        }
    }
    $data["ppid"] = getmypid();
    # most played
    addFileToHitlist($track["filename"]);
    if (strpos($track["filename"], "http://") === 0) {
        doPrint("playing stream");
        $options = $config["playStrOpt"];
        $playBin = $config["streamBin"];
        if (!isset($config["streamUrlPre"])) {
            $config["streamUrlPre"] = "";
        }
        $track["filename"] = $config["streamUrlPre"] . $track["filename"];
        $data["playingStream"] = 1;
    } else {
        doPrint("playing normal file");
        $tmp = explode(".", $track["filename"]);
        $ext = "." . array_pop($tmp);
        if (isset($config["ext"][$ext])) {
            $playBin = $config["ext"][$ext]["binary"];
            $options = $config["ext"][$ext]["option"];
        } else {
            doPrint("Extension {$ext} not supported");
        }
        $data["playingStream"] = 0;
    }
    $options[] = $track["filename"];
    $data["aktBin"] = $playBin;
    storeData($data);
    #$options = array_map("myescapeshellarg", $options);
    setlocale(LC_CTYPE, "en_US.UTF-8");
    $options = array_map("escapeshellarg", $options);
    $data = brokerPlugin("pre_playing_song", $data);
    doPrint("executing: " . $playBin . " " . join(" ", $options));
    system($playBin . " " . join(" ", $options) . ' >> ' . $config["logfile"] . ' 2>&1');
    doPrint("finished playing");
    $data = getData();
    $data = brokerPlugin("post_playing_song", $data);
    unset($data["ppid"]);
    unset($data["start"]);
    unset($data["length"]);
    unset($data["title"]);
    unset($data["track"]);
    unset($data["artist"]);
    unset($data["album"]);
    unset($data["aktBin"]);
    unset($data["playingPic"]);
    $lastToken = $track["token"];
    $track = "";
    storeData($data);
    if ($data["play"]) {
        $data["play"] = 0;
        $track = getNextTrack($data["playlist"], $lastToken);
        if ($track) {
            $data["curTrack"] = $track;
            storeData($data);
            action_default();
        }
    }
}
Пример #2
0
function action_setToggle()
{
    global $config;
    if (!isset($_REQUEST['param'])) {
        print "missing parameter: param!";
        return 1;
    }
    if (!isset($_REQUEST['button'])) {
        print "missing parameter: button!";
        return 1;
    }
    doPrint("got json toggle request ('" . $_REQUEST['button'] . "', '" . $_REQUEST['param'] . "')");
    # doPrint($_REQUEST);
    $param = 1;
    if ($_REQUEST['param'] == "false") {
        $param = 0;
    }
    $data = getData();
    # Repeat
    if ($_REQUEST['button'] == "Repeat") {
        $data["repeat"] = $param;
        print "Set Repeat to: " . $param;
        storeData($data);
    }
    # Play
    if ($_REQUEST['button'] == "Play") {
        $data["play"] = 1;
        $data["pause"] = 0;
        if (isset($_REQUEST["token"])) {
            $data = brokerPlugin("user_pressed_next", $data);
            $data["curTrack"] = $_REQUEST["token"];
            $data = killChild($data);
        }
        system($config["cliPHPbinary"] . ' play.php >> ' . $config["logfile"] . ' 2>&1 &');
        # wait until play.php started up
        for ($x = 0; $x <= 30; $x++) {
            usleep(50000);
            $data = getData();
            #doPrint("check: ".$x);
            if (isset($data['aktBin'])) {
                $x = 100;
            }
        }
        action_getPlaylist();
    }
    # Stop
    if ($_REQUEST['button'] == "Stop") {
        doPrint("pressed stop");
        $data = brokerPlugin("user_pressed_stop", $data);
        killChild();
        action_getPlaylist();
    }
    # Pause
    if ($_REQUEST['button'] == "Pause") {
        doPrint("pressed pause");
        $signal = 17;
        $data["pause"] = 1;
        if ($param == "false") {
            $data["pause"] = 0;
            $signal = 19;
        }
        # get child pids
        if (isset($data["ppid"])) {
            $pids = getChildPids($data["ppid"]);
            foreach ($pids as $pid) {
                posix_kill($pid, $signal);
            }
            if ($data["pause"]) {
                $data["pauseStart"] = time();
            } else {
                $data["start"] = $data["start"] + (time() - $data["pauseStart"]);
                unset($data["pauseStart"]);
            }
        }
        storeData($data);
    }
    # Mute
    if ($_REQUEST['button'] == "Mute") {
        $data["mute"] = $param;
        $data["quiet"] = 0;
        doPrint("pressed mute");
        $data["origVolume"] = getVolume();
        $_REQUEST["vol"] = 0;
        action_setVolume();
        print "mute set to true";
        storeData($data);
    }
    if ($_REQUEST['button'] == "Unmute") {
        $data["quiet"] = 0;
        $data["mute"] = $param;
        doPrint("pressed unmute");
        $_REQUEST["vol"] = $data['origVolume'];
        unset($data["origVolume"]);
        action_setVolume();
        print "mute set to false";
        storeData($data);
    }
    # Quiet
    if ($_REQUEST['button'] == "Quiet") {
        $data["mute"] = 0;
        $data["quiet"] = $param;
        doPrint("pressed quiet");
        if ($param) {
            $data["origVolume"] = getVolume();
            $_REQUEST["vol"] = $config["quietVol"];
            action_setVolume();
        } else {
            $_REQUEST["vol"] = $data["origVolume"];
            unset($data["origVolume"]);
            action_setVolume();
        }
        print "quiet set to " . $param;
        storeData($data);
    }
    if ($_REQUEST['button'] == "partymode") {
        $data["partymode"] = $_REQUEST['param'];
        print "partymode set to " . $_REQUEST['param'];
        storeData($data);
    }
}