';
$retVal .= '';
} else {
$retVal .= '';
$retVal .= '';
}
$retVal .= '';
$ftorrent = $cfg["transfer_file_path"].$transfer;
$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);
$dirnum = (array_key_exists('files',$btmeta['info'])) ? count($btmeta['info']['files']) : 0;
if (@is_readable($prioFileName)) {
$prio = explode(',', @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]));
}
}
}
}
$retVal .= "
";
$retVal .= "
| Metainfo File: | ".$transfer." |
";
$retVal .= "| Directory Name: | ".$btmeta['info']['name']." |
";
$retVal .= "| Announce URL: | ".$btmeta['announce']." |
";
if (array_key_exists('comment',$btmeta))
$retVal .= "| Comment: | ".tfb_htmlencode($btmeta['comment'])." |
";
$retVal .= "| Created: | ".date("F j, Y, g:i a",$btmeta['creation date'])." |
";
$retVal .= "| Torrent Size: | ".$torrent_size." (".@formatBytesTokBMBGBTB($torrent_size).") |
";
$retVal .= "| Chunk size: | ".$btmeta['info']['piece length']." (".@formatBytesTokBMBGBTB($btmeta['info']['piece length']).") |
";
if (array_key_exists('files',$btmeta['info'])) {
$retVal .= "| Selected size: | 0 |
";
$retVal .= "
\n";
if ($withForm) {
$retVal .= "";
}
} else {
$retVal .= "
";
$retVal .= $btmeta['info']['name'].$torrent_size." (".@formatBytesTokBMBGBTB($torrent_size).")";
}
// return
return $retVal;
}
// =============================================================================
// classes
// =============================================================================
/**
* dir
*/
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;
}
$retVal = false;
return $retVal;
}
function draw($parent) {
$draw = ("d.add(".$this->num.",".$parent.",\"".$this->name."\",".$this->prio.",0);\n");
foreach($this->subdirs as $v)
$draw .= $v->draw($this->num);
foreach($this->files as $v) {
if(is_object($v))
$draw .= ("d.add(".$v->num.",".$this->num.",\"".$v->name."\",".$v->prio.",".$v->size.");\n");
}
return $draw;
}
}
/**
* file
*/
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;
}
}
?>