function drawFileHierarchy(File $file, $traceFileName, $currentFileName, $level = 1)
{
    if ($level == 1 && $file instanceof Directory) {
        foreach ($file->subItems as $child) {
            drawFileHierarchy($child, $traceFileName, $currentFileName, $level + 1);
        }
    } elseif ($file instanceof Directory) {
        ?>
                <div>
                    <div>
                        <span id="<?php 
        echo fileId(new File($traceFileName), $file);
        ?>
" class="toggler store glyphicon glyphicon-plus"></span>
                        <?php 
        echo $file->getBaseName();
        ?>
                        <span class="label label-info"><?php 
        echo $file->hits;
        ?>
</span>
                    </div>
                    <div class="sub-list" style="padding-left: 15px">
                        <?php 
        foreach ($file->subItems as $child) {
            drawFileHierarchy($child, $traceFileName, $currentFileName, $level + 1);
        }
        ?>
                    </div>
                </div>
            <?php 
    } else {
        ?>
                <div>
                    <a id="<?php 
        echo fileId(new File($traceFileName), $file);
        ?>
"
                       href="<?php 
        echo '/file-trace/view/' . urlencode($traceFileName) . '/' . urlencode($file->getFullName());
        ?>
"
                       class="<?php 
        echo $currentFileName == $file->getFullName() ? 'active' : '';
        ?>
">
                        <?php 
        echo $file->getBaseName();
        ?>
</a>
                    <span class="label label-info"><?php 
        echo $file->hits;
        ?>
</span>
                </div>
            <?php 
    }
}
Example #2
0
function fileInfo()
{
    global $cfg, $db, $dirsCounter, $filesCounter, $curFilesCounter, $curDirsCounter, $prevDirsCounter, $prevFilesCounter;
    $year = NULL;
    $dr = NULL;
    // Initialize getID3
    $getID3 = new getID3();
    //initial settings for getID3:
    include 'include/getID3init.inc.php';
    /* 
    	// Force update all tracks on new getID3() or netjukebox update.php version. 
    	$new_getid3_hash = hmacmd5($getID3->version(), file_get_contents(NJB_HOME_DIR . 'update.php'));
    	if ($new_getid3_hash != $cfg['getid3_hash']) {
    		mysql_query('UPDATE track SET filemtime = 0 WHERE 1');
    		mysql_query('UPDATE server SET value = "' . mysql_real_escape_string($new_getid3_hash) . '" WHERE name = "getid3_hash" LIMIT 1');
    	}
    */
    $updated = false;
    $query = mysql_query('SELECT relative_file, filesize, filemtime, album_id FROM track WHERE updated ORDER BY relative_file');
    $filesCounter = mysql_num_rows($query);
    while ($track = mysql_fetch_assoc($query)) {
        ++$curFilesCounter;
        $file = $cfg['media_dir'] . $track['relative_file'];
        if (is_file($file) == false) {
            message(__FILE__, __LINE__, 'error', '[b]Failed to read file:[/b][br]' . $file . '[list][*]Update again[*]Check file permission[/list]');
        }
        $filemtime = filemtime($file);
        $filesize = filesize($file);
        $force_filename_update = false;
        if ($filesize != $track['filesize'] || filemtimeCompare($filemtime, $track['filemtime']) == false || $force_filename_update) {
            if ($cfg['cli_update'] == false && (microtime(true) - $cfg['timer']) * 1000 > $cfg['update_refresh_time'] && $curFilesCounter / $filesCounter > $prevFilesCounter / $filesCounter + 0.005) {
                $prevFilesCounter = $curFilesCounter;
                mysql_query('update update_progress set 
				file_info = "<div class=\'out\'><div class=\'in\' style=\'width:' . html(floor($curFilesCounter / $filesCounter * 200)) . 'px\'></div></div> ' . html(floor($curFilesCounter / $filesCounter * 100)) . '%"');
                // echo '<script type="text/javascript"> document.getElementById(\'fileinfo\').innerHTML="<div class=\'out\'><div class=\'in\' style=\'width:' . $curFilesCounter/$filesCounter * 200 . 'px\'></div></div> ' . html(floor($curFilesCounter/$filesCounter * 100)) . '%";</script>' . "\n";
                // @ob_flush();
                // flush();
                $cfg['timer'] = microtime(true);
                $updated = true;
            }
            if ($cfg['cli_update'] && $cfg['cli_silent_update'] == false) {
                echo $file . "\n";
            }
            $ThisFileInfo = $getID3->analyze($file);
            getid3_lib::CopyTagsToComments($ThisFileInfo);
            //print $ThisFileInfo['id3v1']['genre'];
            $mime_type = isset($ThisFileInfo['mime_type']) ? $ThisFileInfo['mime_type'] : 'application/octet-stream';
            $miliseconds = isset($ThisFileInfo['playtime_seconds']) ? round($ThisFileInfo['playtime_seconds'] * 1000) : 0;
            $audio_bitrate = 0;
            $audio_bits_per_sample = 0;
            $audio_sample_rate = 0;
            $audio_channels = 0;
            $audio_lossless = 0;
            $audio_compression_ratio = 0;
            $audio_dataformat = '';
            $audio_encoder = '';
            $audio_bitrate_mode = '';
            $audio_profile = '';
            $video_dataformat = '';
            $video_codec = '';
            $video_resolution_x = 0;
            $video_resolution_y = 0;
            $video_framerate = 0;
            $track_id = $track['album_id'] . '_' . fileId($file);
            $error = isset($ThisFileInfo['error']) ? implode('<br>', $ThisFileInfo['error']) : '';
            if (isset($ThisFileInfo['comments']['albumartist'][0])) {
                $artist = $ThisFileInfo['comments']['albumartist'][0];
            } elseif (isset($ThisFileInfo['comments']['band'][0])) {
                $artist = $ThisFileInfo['comments']['band'][0];
            } else {
                $artist = 'Unknown AlbumArtist';
            }
            //if (isset($ThisFileInfo['comments']['artist'][1]))
            //	$track_artist = $ThisFileInfo['comments']['artist'][1];
            if (isset($ThisFileInfo['comments']['artist'][0])) {
                $track_artist = $ThisFileInfo['comments']['artist'][0];
            } else {
                $track_artist = 'Unknown TrackArtist';
            }
            //if (isset($ThisFileInfo['comments']['title'][1]))
            //	$title = $ThisFileInfo['comments']['title'][1];
            if (isset($ThisFileInfo['comments']['title'][0])) {
                $title = $ThisFileInfo['comments']['title'][0];
            } else {
                $title = 'Unknown Title';
            }
            if (isset($ThisFileInfo['comments']['genre'][0])) {
                $genre = $ThisFileInfo['comments']['genre'][0];
            } else {
                $genre = 'Unknown Genre';
            }
            $a = array_values($ThisFileInfo['comments']['comment']);
            if (isset($a[0])) {
                $comment = $a[0];
            } else {
                $comment = '';
            }
            if (isset($ThisFileInfo['comments']['year'][0])) {
                $year = $ThisFileInfo['comments']['year'][0];
            } elseif (isset($ThisFileInfo['comments']['date'][0])) {
                $year = $ThisFileInfo['comments']['date'][0];
            }
            if (preg_match('#[1][9][0-9]{2}|[2][0-9]{3}#', $year, $match)) {
                $year = $match[0];
            }
            if (isset($ThisFileInfo['comments']['dynamic range'][0])) {
                $dr = $ThisFileInfo['comments']['dynamic range'][0];
            } elseif (isset($ThisFileInfo['tags']['id3v2']['text']['DYNAMIC RANGE'])) {
                $dr = $ThisFileInfo['tags']['id3v2']['text']['DYNAMIC RANGE'];
            }
            /* if (isset($ThisFileInfo['comments']['date'][0])) $year = $ThisFileInfo['comments']['date'][0];
            			elseif (isset($ThisFileInfo['comments']['year'][0])) $year = $ThisFileInfo['comments']['year'][0]; */
            if (isset($ThisFileInfo['audio']['dataformat'])) {
                $audio_dataformat = $ThisFileInfo['audio']['dataformat'];
                $audio_encoder = isset($ThisFileInfo['audio']['encoder']) ? $ThisFileInfo['audio']['encoder'] : 'Unknown encoder';
                if (isset($ThisFileInfo['mpc']['header']['profile'])) {
                    $audio_profile = $ThisFileInfo['mpc']['header']['profile'];
                }
                if (isset($ThisFileInfo['aac']['header']['profile_text'])) {
                    $audio_profile = $ThisFileInfo['aac']['header']['profile_text'];
                }
                if (empty($ThisFileInfo['audio']['lossless']) == false) {
                    $audio_lossless = 1;
                    if (empty($ThisFileInfo['audio']['compression_ratio']) == false) {
                        if ($ThisFileInfo['audio']['compression_ratio'] == 1) {
                            $audio_profile = 'Lossless';
                        } else {
                            $audio_profile = 'Lossless compression';
                        }
                    } else {
                        $audio_profile = 'Lossless';
                    }
                }
                if (isset($ThisFileInfo['audio']['compression_ratio'])) {
                    $audio_compression_ratio = $ThisFileInfo['audio']['compression_ratio'];
                }
                if (isset($ThisFileInfo['audio']['bitrate_mode'])) {
                    $audio_bitrate_mode = $ThisFileInfo['audio']['bitrate_mode'];
                }
                if (isset($ThisFileInfo['audio']['bitrate'])) {
                    $audio_bitrate = $ThisFileInfo['audio']['bitrate'];
                }
                if (!$audio_profile) {
                    $audio_profile = $audio_bitrate_mode . ' ' . round($audio_bitrate / 1000, 1) . '  kbps';
                }
                $audio_bits_per_sample = isset($ThisFileInfo['audio']['bits_per_sample']) ? $ThisFileInfo['audio']['bits_per_sample'] : 16;
                $audio_sample_rate = isset($ThisFileInfo['audio']['sample_rate']) ? $ThisFileInfo['audio']['sample_rate'] : 44100;
                $audio_channels = isset($ThisFileInfo['audio']['channels']) ? $ThisFileInfo['audio']['channels'] : 2;
                $audio_bitrate = round($audio_bitrate);
                // integer in database
            }
            if (isset($ThisFileInfo['video']['dataformat'])) {
                $video_dataformat = $ThisFileInfo['video']['dataformat'];
                $video_codec = isset($ThisFileInfo['video']['codec']) ? $ThisFileInfo['video']['codec'] : 'Unknown codec';
                if (isset($ThisFileInfo['video']['resolution_x'])) {
                    $video_resolution_x = $ThisFileInfo['video']['resolution_x'];
                }
                if (isset($ThisFileInfo['video']['resolution_y'])) {
                    $video_resolution_y = $ThisFileInfo['video']['resolution_y'];
                }
                if (isset($ThisFileInfo['video']['frame_rate'])) {
                    $video_framerate = $ThisFileInfo['video']['frame_rate'] . ' fps';
                }
            }
            mysql_query('UPDATE track SET
				mime_type					= "' . mysql_real_escape_string($mime_type) . '",
				filesize					= ' . (int) $filesize . ',
				filemtime					= ' . (int) $filemtime . ',
				miliseconds					= ' . (int) $miliseconds . ',
				audio_bitrate				= ' . (int) $audio_bitrate . ',
				audio_bits_per_sample		= ' . (int) $audio_bits_per_sample . ',
				audio_sample_rate			= ' . (int) $audio_sample_rate . ',
				audio_channels				= ' . (int) $audio_channels . ',
				audio_lossless				= ' . (int) $audio_lossless . ',
				audio_compression_ratio		= ' . (double) $audio_compression_ratio . ',			
				audio_dataformat			= "' . mysql_real_escape_string($audio_dataformat) . '",
				audio_encoder 				= "' . mysql_real_escape_string($audio_encoder) . '",
				audio_profile				= "' . mysql_real_escape_string($audio_profile) . '",
				video_dataformat			= "' . mysql_real_escape_string($video_dataformat) . '",
				video_codec					= "' . mysql_real_escape_string($video_codec) . '",
				video_resolution_x			= ' . (int) $video_resolution_x . ',
				video_resolution_y			= ' . (int) $video_resolution_y . ',
				video_framerate				= ' . (int) $video_framerate . ',
				error						= "' . mysql_real_escape_string($error) . '",
				track_id					= "' . mysql_real_escape_string($track_id) . '",
				genre			= "' . mysql_real_escape_string($genre) . '",
				title			= "' . mysql_real_escape_string($title) . '",
				artist			= "' . mysql_real_escape_string($track_artist) . '",
				comment			= "' . mysql_real_escape_string($comment) . '",
				track_artist			= "' . mysql_real_escape_string($track_artist) . '",
				year			= ' . (is_null($year) ? 'NULL' : (int) $year) . ',
				dr		= ' . (is_null($dr) ? 'NULL' : (int) $dr) . '
				WHERE relative_file 		= BINARY "' . mysql_real_escape_string($track['relative_file']) . '"');
        }
        if ($updated && (microtime(true) - $cfg['timer']) * 1000 > 500) {
            echo '<script type="text/javascript">document.getElementById(\'fileinfo\').innerHTML=\'<img src="' . $cfg['img'] . 'small_animated_progress.gif" alt="" class="small">\';</script>' . "\n";
            @ob_flush();
            flush();
            $updated = false;
        }
        if ($cfg['name_source'] != 'tags') {
            $result = mysql_query('SELECT genre_id FROM genre WHERE genre="' . mysql_real_escape_string($genre) . '"');
            if (mysql_num_rows($result) == 0) {
                mysql_query('INSERT INTO genre (genre_id, genre)
							VALUES ("' . mysql_real_escape_string($lastGenre_id) . '",
									"' . mysql_real_escape_string($genre) . '")');
                $aGenre_id = $lastGenre_id;
                ++$lastGenre_id;
            } else {
                $row = mysql_fetch_assoc($result);
                $genre_id = $row["genre_id"];
            }
        }
    }
    // Close getID3
    unset($getID3);
}
Example #3
0
function updateSong($currentSong, $currentDirectory, $mtimeDirectory, $mtime, $time, $artist, $title, $track, $album, $date, $genre)
{
    global $cfg, $db, $allAlbumIds, $allGenreIds;
    // phase
    if (isset($allAlbumIds[$cfg['media_dir'] . $currentDirectory]) === TRUE) {
        $album_id = $allAlbumIds[$cfg['media_dir'] . $currentDirectory];
    } else {
        // create a new album_id
        $album_id = base_convert(uniqid(), 16, 36);
        $album_add_time = $mtimeDirectory;
        mysql_query("\n\t\t\tINSERT INTO album_id(\n\t\t\t\talbum_id,\n\t\t\t\tpath,\n\t\t\t\talbum_add_time,\n\t\t\t\tupdated\n\t\t\t) VALUES ('" . mysql_real_escape_string($album_id) . "','" . mysql_real_escape_string($cfg['media_dir'] . $currentDirectory) . "','" . $album_add_time . "',\n\t\t\t\t'1'\n\t\t\t)");
        $allAlbumIds[$cfg['media_dir'] . $currentDirectory] = $album_id;
        // initial insert with album-tags based on (first) track
        # genre is currently '1(Unknown)' - it will be updated in on of the next import/update phases
        mysql_query("\n\t\t\tINSERT INTO album(\n\t\t\t\tartist,\n\t\t\t\tartist_alphabetic,\n\t\t\t\talbum,\n\t\t\t\tyear,\n\t\t\t\talbum_id,\n\t\t\t\talbum_add_time,\n\t\t\t\tgenre_id,\n\t\t\t\tdiscs,\n\t\t\t\tupdated\n\t\t\t) VALUES (\n\t\t\t\t'" . mysql_real_escape_string($artist) . "',\n\t\t\t\t'" . mysql_real_escape_string($artist) . "',\n\t\t\t\t'" . mysql_real_escape_string($album) . "',\n\t\t\t\t'" . mysql_real_escape_string($date) . "',\n\t\t\t\t'" . mysql_real_escape_string($album_id) . "',\n\t\t\t\t'" . (int) $album_add_time . "',\n\t\t\t\t'1',\n\t\t\t\t'1',\n\t\t\t\t'1'\n\t\t\t)");
    }
    // TODO: assign multiple genres to track and album based on splitchars
    $genre = genreUnifier($genre);
    $genreAz09 = az09($genre);
    // get Genre id
    $genre_id = isset($allGenreIds[$genreAz09]) === TRUE ? $allGenreIds[$genreAz09] : insertGenre($genre);
    $allGenreIds[$genreAz09] = $genre_id;
    // check if we do already have a matching track
    $res = mysql_query('SELECT track_id FROM track
		WHERE album_id		= "' . mysql_real_escape_string($album_id) . '"
		AND relative_file	= BINARY "' . mysql_real_escape_string($currentDirectory . $currentSong) . '"
		LIMIT 1');
    if (mysql_num_rows($res) == 0) {
        mysql_query('
			INSERT INTO track (
				artist,
				title,
				relative_file,
				relative_file_hash,
				number,
				album_id,
				updated,
				track_id,
				filemtime,
				genre,
				year,
				disc,
				miliseconds,
				track_artist
			)
			VALUES (
				"' . mysql_real_escape_string($artist) . '",
				"' . mysql_real_escape_string($title) . '",
				"' . mysql_real_escape_string($currentDirectory . $currentSong) . '",
				"' . pathhash($currentDirectory . $currentSong) . '",
				' . (is_numeric($track) ? (int) $track : 'NULL') . ',
				"' . mysql_real_escape_string($album_id) . '",
				1,
				\'' . $album_id . '_' . fileId($cfg['media_dir'] . $currentDirectory . $currentSong) . '\',
				' . (int) $mtime . ',
				' . (int) $genre_id . ',
				' . (int) $date . ',
				1,
				' . $time * 1000 . ',
				\'' . mysql_real_escape_string($artist) . '\'
			)');
    } else {
        $row = mysql_fetch_assoc($res);
        $track_id = $row["track_id"];
        mysql_query('UPDATE track SET
			artist				= "' . mysql_real_escape_string($artist) . '",
			title				= "' . mysql_real_escape_string($title) . '",
			number				= ' . (is_numeric($track) ? (int) $track : 'NULL') . ',
			album_id			= "' . mysql_real_escape_string($album_id) . '",
			updated				= 1
			WHERE track_id		= "' . mysql_real_escape_string($track_id) . '"
			LIMIT 1');
    }
}