Пример #1
0
function SERVICE_IMPORTMEDIA_filesystem($node, $root_path = false, $flags = array())
{
    global $ext_graphic, $audio_types, $video_types, $playlist_types, $default_art;
    if (!isset($playlist_types)) {
        $playlist_types = "m3u";
    }
    global $importerLevel;
    if (!isset($importerLevel)) {
        $importerLevel = 0;
    }
    $be = new jzBackend();
    if ($root_path !== false) {
        $folder = $root_path;
    } else {
        $folder = $node->getFilePath();
    }
    $bestImage = "";
    // TODO: FIX THE PARAMETER HERE FOR 3.0
    $thisPath = array_values($flags['path']);
    $parent = new jzMediaNode($thisPath);
    if (isset($flags['showstatus']) && $flags['showstatus'] && !(is_string($flags['showstatus']) && $flags['showstatus'] == "cli")) {
        if (!isset($_SESSION['jz_import_full_progress'])) {
            $_SESSION['jz_import_full_progress'] = 0;
        }
    }
    if (!($handle = opendir($folder))) {
        echo 'SERVICE_IMPORTMEDIA_filesystem: could not open ' . $folder;
        return false;
    }
    if (isset($flags['showstatus']) && is_string($flags['showstatus']) && $flags['showstatus'] == "cli") {
        echo word("Scanning: %s", $folder) . "\n";
    }
    $track_paths = array();
    $track_filenames = array();
    $track_metas = array();
    while ($file = readdir($handle)) {
        if (importSkipFile($file)) {
            continue;
        }
        $fullpath = $folder . '/' . $file;
        if (is_dir($fullpath)) {
            $entry = $be->lookupFile($fullpath);
            if ($entry === false || isset($flags['recursive']) && $flags['recursive']) {
                $flags2 = $flags;
                if (sizeof($flags2['hierarchy']) == 0) {
                    $val = 'disk';
                } else {
                    $val = array_shift($flags2['hierarchy']);
                    if ($val == 'track') {
                        $val = "disk";
                    }
                }
                $flags2['path'][$val] = $file;
                $flags2['recursive'] = true;
                $importerLevel++;
                SERVICE_IMPORTMEDIA_filesystem($node, $fullpath, $flags2);
                $importerLevel--;
            }
        } else {
            if (preg_match("/\\.({$ext_graphic})\$/i", $file) && !stristr($file, ".thumb.")) {
                // An image
                if (@preg_match("/({$default_art})/i", $file)) {
                    $bestImage = $fullpath;
                } else {
                    if ($bestImage == "") {
                        $bestImage = $fullpath;
                    }
                }
            } else {
                if (preg_match("/\\.({$playlist_types})\$/i", $file)) {
                    $ext = substr($file, strrpos($file, '.') + 1);
                    if (0 == strcasecmp($ext, 'm3u')) {
                        $m3u_lines = file($fullpath);
                        $is_local_m3u = false;
                        foreach ($m3u_lines as $line) {
                            if ($line == '#') {
                                // TODO: get metadata.
                                continue;
                            } else {
                                if (false === strpos($line, '://')) {
                                    $is_local_m3u = true;
                                    break;
                                }
                                $mediaref = $line;
                                $medianame = $mediaref;
                                while ($medianame[strlen($medianame) - 1] == '/') {
                                    $medianame = substr($medianame, 0, strlen($medianame) - 1);
                                }
                                $medianame = substr($medianame, strrpos($medianame, '/') + 1);
                                $mypath = $flags['path'];
                                $mypath['track'] = $medianame;
                                $track_paths[] = $mypath;
                                $track_filenames[] = $mediaref;
                                $track_metas[] = array();
                            }
                        }
                    }
                } else {
                    if (preg_match("/\\.({$audio_types})\$/i", $file) || preg_match("/\\.({$video_types})\$/i", $file)) {
                        $entry = $be->lookupFile($fullpath);
                        if (isset($flags['showstatus']) && !(is_string($flags['showstatus']) && $flags['showstatus'] == "cli")) {
                            if ($_SESSION['jz_import_full_progress'] % 50 == 0 or $_SESSION['jz_import_full_progress'] == 0 or $_SESSION['jz_import_full_progress'] == 1) {
                                showStatus();
                            }
                            $_SESSION['jz_import_full_progress']++;
                        }
                        if (isset($flags['force']) && $flags['force'] || !is_array($entry)) {
                            $mypath = $flags['path'];
                            $mypath['track'] = $file;
                            if (isset($flags['readtags']) && $flags['readtags']) {
                                $track =& new jzMediaTrack($fullpath);
                                $track->playpath = $fullpath;
                                $meta = $track->getMeta("file");
                            } else {
                                $meta = false;
                            }
                            $track_paths[] = $mypath;
                            $track_filenames[] = $fullpath;
                            $track_metas[] = $meta;
                        }
                    }
                }
            }
        }
    }
    $node->bulkInject($track_paths, $track_filenames, $track_metas);
    if ($bestImage != "") {
        $parent->addMainArt($bestImage);
    }
    $be->registerFile($folder, $thisPath);
    if ($parent->getFilePath() != $folder) {
        $parent->setFilePath($folder);
    }
    if ($importerLevel == 0) {
        $be->removeDeadFiles($folder, $flags['recursive']);
    }
}
Пример #2
0
function SERVICE_IMPORTMEDIA_id3tags($node, $root_path = false, $flags = array())
{
    global $ext_graphic, $default_art, $audio_types, $video_types;
    $be = new jzBackend();
    $root = new jzMediaNode();
    if (isset($flags['recursive']) && $flags['recursive'] === false || $root_path === false) {
        /*
        if ($node === false) { $node = new jzMediaNode(); }
        $tracks = $node->getSubNodes("tracks");
        foreach ($tracks as $track) {
        	$fname = $track->getFileName("host");
        	$entry = $be->lookupFile($fname);
        	if (!is_array($entry)) {
        		echo "Error in SERVICE_IMPORTMEDIA_id3tags. File added but does not exist in registry.";
        		return;
        	}
        	if ($entry['fs_sync'] && !file_exists($fname)) {
        		$be->unregisterFile($fname);
        		$root->removeMedia($track);
        	}
        	// TODO: CHECK THE ABOVE!!! CHECK UNREGISTERFILE!
        	// TODO: check modified time and move file if needed.
        }
        */
        return false;
    }
    $directory_list = array();
    $directory_list[] = $root_path;
    if (isset($flags['showstatus']) && $flags['showstatus'] && !(is_string($flags['showstatus']) && $flags['showstatus'] == "cli")) {
        $_SESSION['jz_import_full_progress'] = 0;
    }
    while (sizeof($directory_list) > 0) {
        $cur_dir = array_shift($directory_list);
        if (isset($flags['showstatus']) && is_string($flags['showstatus']) && $flags['showstatus'] == "cli") {
            echo word("Scanning: %s", $cur_dir) . "\n";
        }
        $bestImage = "";
        $albums = array();
        $track_paths = array();
        $track_filenames = array();
        $track_metas = array();
        if (!($handle = opendir($cur_dir))) {
            continue;
        }
        //die("Could not access directory $dir");
        while ($file = readdir($handle)) {
            if ($file == "." || $file == "..") {
                continue;
            }
            $fullpath = $cur_dir . "/" . $file;
            if (is_dir($fullpath)) {
                $directory_list[] = $fullpath;
            } else {
                if (preg_match("/\\.({$ext_graphic})\$/i", $file) && !stristr($file, ".thumb.")) {
                    // An image
                    if (@preg_match("/({$default_art})/i", $file)) {
                        $bestImage = $fullpath;
                    } else {
                        if ($bestImage == "") {
                            $bestImage = $fullpath;
                        }
                    }
                } else {
                    if (preg_match("/\\.({$audio_types})\$/i", $file) || preg_match("/\\.({$video_types})\$/i", $file)) {
                        $entry = $be->lookupFile($fullpath);
                        if (isset($flags['showstatus']) && $flags['showstatus'] && !(is_string($flags['showstatus']) && $flags['showstatus'] == "cli")) {
                            if ($_SESSION['jz_import_full_progress'] % 50 == 0 or $_SESSION['jz_import_full_progress'] == 0 or $_SESSION['jz_import_full_progress'] == 1) {
                                showStatus();
                            }
                            $_SESSION['jz_import_full_progress']++;
                        }
                        if (is_array($entry) && $entry['added'] < filemtime($fullpath)) {
                            // moved file
                            $track =& new jzMediaTrack($fullpath);
                            $track->playpath = $fullpath;
                            $meta = $track->getMeta("file");
                            $arr = array();
                            if (isset($meta['genre'])) {
                                $arr['genre'] = $meta['genre'];
                            }
                            if (isset($meta['subgenre'])) {
                                $arr['subgenre'] = $meta['subgenre'];
                            }
                            if (isset($meta['artist'])) {
                                $arr['artist'] = $meta['artist'];
                            }
                            if (isset($meta['album'])) {
                                $arr['album'] = $meta['album'];
                            }
                            if (isset($meta['disk'])) {
                                $arr['disk'] = $meta['disk'];
                            }
                            if (isset($meta['filename'])) {
                                $arr['track'] = $meta['filename'];
                            }
                            $old = new jzMediaTrack($entry['path']);
                            $child = $root->moveMedia($old, $arr);
                            if ($child !== false) {
                                $album = $child->getAncestor("album");
                                if ($album !== false) {
                                    $albums[$album->getPath("String")] = true;
                                }
                            }
                        } else {
                            if ($entry === false || isset($flags['force']) && $flags['force'] === true) {
                                // Set path so when getFileName is called and the filepath was not found,
                                // we get the correct path.
                                $track =& new jzMediaTrack($fullpath);
                                $track->playpath = $fullpath;
                                $meta = $track->getMeta("file");
                                $arr = array();
                                if (isset($meta['genre'])) {
                                    $arr['genre'] = $meta['genre'];
                                }
                                if (isset($meta['subgenre'])) {
                                    $arr['subgenre'] = $meta['subgenre'];
                                }
                                if (isset($meta['artist'])) {
                                    $arr['artist'] = $meta['artist'];
                                }
                                if (isset($meta['album'])) {
                                    $arr['album'] = $meta['album'];
                                }
                                if (isset($meta['disk'])) {
                                    $arr['disk'] = $meta['disk'];
                                }
                                if (isset($meta['filename'])) {
                                    $arr['track'] = $meta['filename'];
                                }
                                $track_paths[] = $arr;
                                $track_filenames[] = $fullpath;
                                $track_metas[] = $meta;
                            }
                        }
                    }
                }
            }
        }
        // while reading dir
        $art_dir = dirname(__FILE__) . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . "data" . DIRECTORY_SEPARATOR . "images" . DIRECTORY_SEPARATOR;
        if (sizeof($track_paths) > 0) {
            $results = $root->bulkInject($track_paths, $track_filenames, $track_metas);
            for ($i = 0; $i < sizeof($results); $i++) {
                if ($results[$i] !== false) {
                    $album = $results[$i]->getAncestor("album");
                    if ($album !== false) {
                        $albums[$album->getPath("String")] = true;
                        $newalbum = new jzMediaNode($album->getPath("String"));
                        // If we have album art in the tag, add it.
                        if ($track_metas[$i]['pic_data'] != "") {
                            $artloc = realpath($art_dir) . DIRECTORY_SEPARATOR . "art_" . $newalbum->getID() . ".jpg";
                            if ($artloc !== false) {
                                $filehandle = fopen($artloc, "wb");
                                fwrite($filehandle, $track_metas[$i]['pic_data']);
                                fclose($filehandle);
                                $newalbum->addMainArt("data" . DIRECTORY_SEPARATOR . "images" . DIRECTORY_SEPARATOR . "art_" . $newalbum->getID() . ".jpg");
                            }
                        }
                    }
                }
            }
        }
    }
    if (isset($flags['showstatus']) && is_string($flags['showstatus']) && $flags['showstatus'] == "cli") {
        echo word("Scanning for removed media.") . "\n";
    }
    $be->removeDeadFiles();
}