diff --git a/application/index/controller/RemoteDownload.php b/application/index/controller/RemoteDownload.php index 72d9eae5..04201747 100644 --- a/application/index/controller/RemoteDownload.php +++ b/application/index/controller/RemoteDownload.php @@ -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]); + } + } + } \ No newline at end of file diff --git a/application/index/model/Aria2.php b/application/index/model/Aria2.php index c3e5d435..ebaf3429 100644 --- a/application/index/model/Aria2.php +++ b/application/index/model/Aria2.php @@ -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");