2021-03-16 21:12:27 +08:00
< ? php
namespace Nexus\Torrent ;
use Nexus\Database\DB ;
class Torrent
{
/**
2021-03-17 01:21:35 +08:00
* get torrent seeding or leeching status , download progress of someone
2021-03-16 21:12:27 +08:00
*
* @ param int $uid
* @ param array $torrentIdArr
* @ return array
* @ throws \Nexus\Database\DatabaseException
*/
public function listLeechingSeedingStatus ( int $uid , array $torrentIdArr )
{
$torrentIdStr = implode ( ',' , $torrentIdArr );
//seeding or leeching, from peers
$whereStr = sprintf ( " userid = %s and torrent in (%s) " , sqlesc ( $uid ), $torrentIdStr );
$peerList = DB :: getAll ( 'peers' , $whereStr , 'torrent, to_go' );
$peerList = array_column ( $peerList , 'to_go' , 'torrent' );
//download progress, from snatched
$sql = sprintf (
2021-03-17 01:21:35 +08:00
" select snatched.to_go, snatched.torrentid, torrents.size from snatched inner join torrents on snatched.torrentid = torrents.id where snatched.userid = %s and snatched.torrentid in (%s) " ,
2021-03-16 21:12:27 +08:00
sqlesc ( $uid ), $torrentIdStr
);
$snatchedList = [];
$res = sql_query ( $sql );
while ( $row = mysql_fetch_assoc ( $res )) {
$id = $row [ 'torrentid' ];
2021-03-17 01:21:35 +08:00
$activeStatus = 'inactivity' ;
2021-03-16 21:12:27 +08:00
if ( isset ( $peerList [ $id ])) {
if ( $peerList [ $id ][ 'to_go' ] == 0 ) {
$activeStatus = 'seeding' ;
} else {
$activeStatus = 'leeching' ;
}
}
$realDownloaded = $row [ 'size' ] - $row [ 'to_go' ];
$progress = sprintf ( '%.4f' , $realDownloaded / $row [ 'size' ]);
$snatchedList [ $id ] = [
'finished' => $row [ 'to_go' ] == 0 ? 'yes' : 'no' ,
'progress' => $progress ,
'active_status' => $activeStatus ,
];
}
return $snatchedList ;
}
2021-03-17 01:21:35 +08:00
public function renderProgressBar ( $activeStatus , $progress )
{
$color = '#aaa' ;
$title = $activeStatus ;
if ( $activeStatus == 'seeding' ) {
$color = 'green' ;
} elseif ( $activeStatus == 'leeching' ) {
$color = 'red' ;
}
$progress = ( $progress * 100 ) . '%' ;
$result = sprintf (
'<div style="padding: 1px;margin-top: 2px;border: 1px solid #838383" title="%s"><div style="width: %s;background-color: %s;height: 2px"></div></div>' ,
$title . " $progress " , $progress , $color
);
return $result ;
}
2021-03-16 21:12:27 +08:00
}