0,0 → 1,252 |
<?php |
|
/************************************************************* |
* TorrentFlux - PHP Torrent Manager |
* www.torrentflux.com |
**************************************************************/ |
/* |
This file is part of TorrentFlux. |
|
TorrentFlux is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
|
TorrentFlux is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
|
You should have received a copy of the GNU General Public License |
along with TorrentFlux; if not, write to the Free Software |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
*/ |
|
class dir |
{ |
var $name; |
var $subdirs; |
var $files; |
var $num; |
var $prio; |
|
function dir($name,$num,$prio) |
{ |
$this->name = $name; |
$this->num = $num; |
$this->prio = $prio; |
$this->files = array(); |
$this->subdirs = array(); |
} |
|
function &addFile($file) |
{ |
$this->files[] =& $file; |
return $file; |
} |
|
function &addDir($dir) |
{ |
$this->subdirs[] =& $dir; |
return $dir; |
} |
|
// code changed to support php4 |
// thx to Mistar Muffin |
function &findDir($name) |
{ |
foreach (array_keys($this->subdirs) as $v) |
{ |
$dir =& $this->subdirs[$v]; |
if($dir->name == $name) |
{ |
return $dir; |
} |
} |
return false; |
} |
|
function draw($parent) |
{ |
echo("d.add(".$this->num.",".$parent.",\"".$this->name."\",".$this->prio.",0);\n"); |
|
foreach($this->subdirs as $v) |
{ |
$v->draw($this->num); |
} |
|
foreach($this->files as $v) |
{ |
if(is_object($v)) |
{ |
echo("d.add(".$v->num.",".$this->num.",\"".$v->name."\",".$v->prio.",".$v->size.");\n"); |
} |
} |
} |
|
} |
|
class file { |
|
var $name; |
var $prio; |
var $size; |
var $num; |
|
function file($name,$num,$size,$prio) |
{ |
$this->name = $name; |
$this->num = $num; |
$this->size = $size; |
$this->prio = $prio; |
} |
} |
|
function showMetaInfo($torrent, $allowSave=false) |
{ |
global $cfg; |
|
if (empty($torrent)) |
{ |
echo _NORECORDSFOUND; |
} |
elseif ($cfg["enable_file_priority"]) |
{ |
|
$prioFileName = $cfg["torrent_file_path"].getAliasName($torrent).".prio"; |
|
require_once('BDecode.php'); |
|
echo '<link rel="StyleSheet" href="dtree.css" type="text/css" /><script type="text/javascript" src="dtree.js"></script>'; |
|
$ftorrent=$cfg["torrent_file_path"].$torrent; |
|
$fp = fopen($ftorrent, "rd"); |
$alltorrent = fread($fp, filesize($ftorrent)); |
fclose($fp); |
|
$btmeta = BDecode($alltorrent); |
$torrent_size = $btmeta["info"]["piece length"] * (strlen($btmeta["info"]["pieces"]) / 20); |
|
if (array_key_exists('files',$btmeta['info'])) |
{ |
$dirnum = count($btmeta['info']['files']); |
} |
else |
{ |
$dirnum = 0; |
} |
|
if ( is_readable($prioFileName)) |
{ |
$prio = split(',',file_get_contents($prioFileName)); |
$prio = array_splice($prio,1); |
} |
else |
{ |
$prio = array(); |
for($i=0;$i<$dirnum;$i++) |
{ |
$prio[$i] = -1; |
} |
} |
|
$tree = new dir("/",$dirnum,isset($prio[$dirnum])?$prio[$dirnum]:-1); |
|
if (array_key_exists('files',$btmeta['info'])) |
{ |
foreach( $btmeta['info']['files'] as $filenum => $file) |
{ |
|
$depth = count($file['path']); |
$branch =& $tree; |
|
for($i=0; $i < $depth; $i++) |
{ |
if ($i != $depth-1) |
{ |
$d =& $branch->findDir($file['path'][$i]); |
|
if($d) |
{ |
$branch =& $d; |
} |
else |
{ |
$dirnum++; |
$d =& $branch->addDir(new dir($file['path'][$i], $dirnum, (isset($prio[$dirnum])?$prio[$dirnum]:-1))); |
$branch =& $d; |
} |
} |
else |
{ |
$branch->addFile(new file($file['path'][$i]." (".$file['length'].")",$filenum,$file['length'],$prio[$filenum])); |
} |
|
} |
} |
} |
|
echo "<table><tr>"; |
echo "<tr><td width=\"110\">Metainfo File:</td><td>".$torrent."</td></tr>"; |
echo "<tr><td>Directory Name:</td><td>".$btmeta['info']['name']."</td></tr>"; |
echo "<tr><td>Announce URL:</td><td>".$btmeta['announce']."</td></tr>"; |
|
if(array_key_exists('comment',$btmeta)) |
{ |
echo "<tr><td valign=\"top\">Comment:</td><td>".$btmeta['comment']."</td></tr>"; |
} |
|
echo "<tr><td>Created:</td><td>".date("F j, Y, g:i a",$btmeta['creation date'])."</td></tr>"; |
echo "<tr><td>Torrent Size:</td><td>".$torrent_size." (".formatBytesToKBMGGB($torrent_size).")</td></tr>"; |
echo "<tr><td>Chunk size:</td><td>".$btmeta['info']['piece length']." (".formatBytesToKBMGGB($btmeta['info']['piece length']).")</td></tr>"; |
|
if (array_key_exists('files',$btmeta['info'])) |
{ |
|
echo "<tr><td>Selected size:</td><td id=\"sel\">0</td></tr>"; |
echo "</table><br>\n"; |
|
if ($allowSave) |
{ |
echo "<form name=\"priority\" action=\"index.php\" method=\"POST\" >"; |
echo "<input type=\"hidden\" name=\"torrent\" value=\"".$torrent."\" >"; |
echo "<input type=\"hidden\" name=\"setPriorityOnly\" value=\"true\" >"; |
} |
|
echo "<script type=\"text/javascript\">\n"; |
echo "var sel = 0;\n"; |
echo "d = new dTree('d');\n"; |
|
$tree->draw(-1); |
|
echo "document.write(d);\n"; |
echo "sel = getSizes();\n"; |
echo "drawSel();\n"; |
echo "</script>\n"; |
|
echo "<input type=\"hidden\" name=\"filecount\" value=\"".count($btmeta['info']['files'])."\">"; |
echo "<input type=\"hidden\" name=\"count\" value=\"".$dirnum."\">"; |
echo "<br>"; |
if ($allowSave) |
{ |
echo '<input type="submit" value="Save" >'; |
echo "<br>"; |
} |
echo "</form>"; |
} |
else |
{ |
echo "</table><br>"; |
echo $btmeta['info']['name'].$torrent_size." (".formatBytesToKBMGGB($torrent_size).")"; |
} |
} |
else |
{ |
$result = shell_exec("cd " . $cfg["torrent_file_path"]."; " . $cfg["pythonCmd"] . " -OO " . $cfg["btshowmetainfo"]." \"".$torrent."\""); |
echo "<pre>"; |
echo $result; |
echo "</pre>"; |
} |
} |
?> |