aria2状态查询

This commit is contained in:
HFO4 2018-04-06 16:21:40 +08:00
parent 126aacca63
commit aabc32efb5
2 changed files with 103 additions and 1 deletions

View file

@ -43,7 +43,8 @@ class RemoteDownload extends Controller{
}
public function addUrl(){
if(!$this->checkPerimission(0)){
$policyData = Db::name("policy")->where("id",$this->userObj->groupData["policy_name"])->find();
if(!$this->checkPerimission(0) || $policyData["policy_type"] != "local"){
return json(['error'=>1,'message'=>'您当前的无用户无法执行此操作']);
}
$aria2Options = Option::getValues(["aria2"]);
@ -56,4 +57,16 @@ class RemoteDownload extends Controller{
}
}
public function FlushStatus(){
$aria2Options = Option::getValues(["aria2"]);
$aria2 = new Aria2($aria2Options);
if(!input("?post.id")){
return json(['error'=>1,'message'=>"信息不完整"]);
}
$policyData = Db::name("policy")->where("id",$this->userObj->groupData["policy_name"])->find();
if(!$aria2->flushStatus(input("post.id"),$this->userObj->uid,$policyData)){
return json(['error'=>1,'message'=>$aria2->reqMsg]);
}
}
}

View file

@ -14,6 +14,8 @@ class Aria2 extends Model{
public $reqMsg;
public $pathId;
public $pid;
private $uid;
private $policy;
public function __construct($options){
$this->authToken = $options["aria2_token"];
@ -44,6 +46,93 @@ class Aria2 extends Model{
}
}
public function flushStatus($id,$uid,$policy){
$this->uid = $uid;
$this->policy = $policy;
$downloadInfo = Db::name("download")->where("id",$id)->find();
if(empty($downloadInfo)){
$this->reqStatus = 0;
$this->reqMsg = "未找到下载记录";
return false;
}
if(in_array($downloadInfo["status"], ["error","complete"])){
$this->reqStatus = 1;
return true;
}
if($uid != $downloadInfo["owner"]){
$this->reqStatus = 0;
$this->reqMsg = "无权操作";
return false;
}
$reqFileds = [
"params" => ["token:".$this->authToken,$downloadInfo["pid"]],
"jsonrpc" => "2.0",
"id" => uniqid(),
"method" => "aria2.tellStatus"
];
$reqFileds = json_encode($reqFileds,JSON_OBJECT_AS_ARRAY);
$respondData = $this->sendReq($reqFileds);
if(isset($respondData["result"])){
if($this->storageCheck($respondData["result"],$downloadInfo)){
Db::name("download")->where("id",$id)
->update([
"status" => $respondData["result"]["status"],
"last_update" => date("Y-m-d h:i:s"),
"info" => json_encode([
"completedLength" => $respondData["result"]["completedLength"],
"totalLength" => $respondData["result"]["totalLength"],
"dir" => $respondData["result"]["dir"],
"downloadSpeed" => $respondData["result"]["downloadSpeed"],
"errorMessage" => $respondData["result"]["errorMessage"],
]),
]);
switch ($respondData["result"]["status"]) {
case 'complete':
$this->setComplete($respondData["result"],$downloadInfo);
break;
default:
# code...
break;
}
}else{
$this->reqStatus = 0;
$this->reqMsg = "空间容量不足";
//取消离线下载
return false;
}
}else{
$this->reqStatus = 0;
$this->reqMsg = $respondData["error"]["message"];
}
return true;
}
private function setComplete($quenInfo,$sqlData){
FileManage::storageCheckOut($this->uid,(int)$quenInfo["totalLength"]);
if($this->policy["policy_type"] != "local"){
return false;
}
$suffixTmp = explode('.', $quenInfo["dir"]);
$fileSuffix = array_pop($suffixTmp);
$allowedSuffix = explode(',', UploadHandler::getAllowedExt(json_decode($this->policy["filetype"],true)));
$sufficCheck = !in_array($fileSuffix,$allowedSuffix);
if(empty(UploadHandler::getAllowedExt(json_decode($this->policy["filetype"],true)))){
$sufficCheck = false;
}
var_dump($sufficCheck);
}
private function storageCheck($quenInfo,$sqlData){
if(!FileManage::sotrageCheck($this->uid,(int)$quenInfo["totalLength"])){
return false;
}
if(!FileManage::sotrageCheck($this->uid,(int)$quenInfo["completedLength"])){
return false;
}
return true;
}
private function sendReq($data){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $this->apiUrl."jsonrpc");