}
Logger::$PATH = Conf::LOGDIR;
Logger::getLogger(Conf::AJAXLOGFILE)->log("SOURCE: " . basename(__FILE__) . " REQUEST: " . http_build_query($_REQUEST, "", " "));
if ($state = file_get_contents(Conf::SETTINGS . "/" . $channel . "-playlist.json")) {
    $error = error_get_last();
} else {
    //
}
$playlist = new FflistClass($state);
// $playlist->fromJSON(file_get_contents($channel . "-playlist.json"));
switch ($command) {
    case 'get_playlist':
        echo $playlist->toJSON();
        break;
    case 'dir':
        echo VideoDirectory::scan($parameter);
        break;
    case 'add':
        echo $playlist->add($parameter);
        break;
    case 'remove':
        echo $playlist->remove($parameter);
        break;
    case 'move':
        echo $playlist->move($parameter);
        break;
    case 'rename':
        echo $playlist->rename($parameter);
        break;
    case "renamefile":
        renamefile($parameter);
 public static function scan($dir)
 {
     $subdirs = array();
     $mp4s = array();
     if ($handle = opendir($dir)) {
         while (false !== ($entry = readdir($handle))) {
             if ($entry != "." && $entry != "..") {
                 if (is_dir($dir . "/" . $entry)) {
                     $subdirs[] = "/" . $entry;
                 } elseif (in_array(pathinfo($entry, PATHINFO_EXTENSION), array("mp4", "ffconcat"))) {
                     $mp4s[] = $entry;
                 }
             }
         }
         closedir($handle);
     }
     usort($subdirs, 'self::mb_strnatcasecmp');
     usort($mp4s, 'self::mb_strnatcasecmp');
     self::$files = array_merge((array) "/..", $subdirs, $mp4s);
     return json_encode(self::$files, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
 }