userObj = new User(cookie('user_id'),cookie('login_key')); if(!$this->userObj->loginStatus){ echo "Bad request"; exit(); } } private function checkPerimission($permissionId){ $permissionData = $this->userObj->groupData["aria2"]; if(explode(",",$permissionData)[$permissionId] != "1"){ return false; } return true; } private function insertRecord($aria2,$url,$path){ Db::name("download")->insert([ "pid" => $aria2->pid, "path_id" => $aria2->pathId, "owner" => $this->userObj->uid, "save_dir" => $path, "status" => "ready", "msg" => "", "info"=>"", "source" =>$url, "file_index" => 0, "is_single" => 1, "total_size" => 0, ]); } public function addUrl(){ $policyData = Db::name("policy")->where("id",$this->userObj->groupData["policy_name"])->find(); if(!$this->checkPerimission(0) || ($policyData["policy_type"] != "local" && $policyData["policy_type"] != "onedrive")){ return json(["result"=>['success'=>false,'error'=>"您当前的无用户无法执行此操作"]]); } $aria2Options = Option::getValues(["aria2"]); $aria2 = new Aria2($aria2Options); $downloadStart = $aria2->addUrl(input("post.url")); if($aria2->reqStatus){ $this->insertRecord($aria2,input("post.url"),input("post.path")); return json(["result"=>['success'=>true,'error'=>null]]); }else{ return json(["result"=>['success'=>false,'error'=>$aria2->reqMsg]]); } } public function AddTorrent(){ $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'=>'您当前的无用户无法执行此操作']); } $downloadingLength = Db::name("download") ->where("owner",$this->userObj->uid) ->where("status","<>","complete") ->where("status","<>","error") ->where("status","<>","canceled") ->sum("total_size"); if(!\app\index\model\FileManage::sotrageCheck($this->userObj->uid,$downloadingLength)){ return json(["result"=>['success'=>false,'error'=>"容量不足"]]); } $aria2Options = Option::getValues(["aria2"]); $aria2 = new Aria2($aria2Options); $torrentObj = new \app\index\model\FileManage(input("post.id"),$this->userObj->uid,true); $downloadStart = $aria2->addTorrent($torrentObj->signTmpUrl()); if($aria2->reqStatus){ $this->insertRecord($aria2,input("post.id"),input("post.savePath")); return json(["result"=>['success'=>true,'error'=>null]]); }else{ return json(["result"=>['success'=>false,'error'=>$aria2->reqMsg]]); } } 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]); } } public function FlushUser(){ $aria2Options = Option::getValues(["aria2"]); $aria2 = new Aria2($aria2Options); $toBeFlushed = Db::name("download") ->where("owner",$this->userObj->uid) ->where("status","<>","complete") ->where("status","<>","error") ->where("status","<>","canceled") //取消的 ->select(); foreach ($toBeFlushed as $key => $value) { $aria2->flushStatus($value["id"],$this->userObj->uid,$this->userObj->getPolicy()); } } public function Cancel(){ $aria2Options = Option::getValues(["aria2"]); $aria2 = new Aria2($aria2Options); $downloadItem = Db::name("download")->where("owner",$this->userObj->uid)->where("id",input("post.id"))->find(); if(empty($downloadItem)){ return json(['error'=>1,'message'=>"未找到下载记录"]); } if($aria2->Remove($downloadItem["pid"],"")){ return json(['error'=>0,'message'=>"下载已取消"]); }else{ return json(['error'=>1,'message'=>"取消失败"]); } } public function ListDownloading(){ $downloadItems = Db::name("download")->where("owner",$this->userObj->uid)->where("status","in",["active","ready","waiting"])->order('id desc')->select(); foreach ($downloadItems as $key => $value) { $connectInfo = json_decode($value["info"],true); if(isset($connectInfo["dir"])){ $downloadItems[$key]["fileName"] = basename($connectInfo["dir"]); $downloadItems[$key]["completedLength"] = $connectInfo["completedLength"]; $downloadItems[$key]["totalLength"] = $connectInfo["totalLength"]; $downloadItems[$key]["downloadSpeed"] = $connectInfo["downloadSpeed"]; }else{ if(floor($value["source"])==$value["source"]){ $downloadItems[$key]["fileName"] = Db::name("files")->where("id",$value["source"])->column("orign_name"); }else{ $downloadItems[$key]["fileName"] = $value["source"]; } $downloadItems[$key]["completedLength"] = 0; $downloadItems[$key]["totalLength"] = 0; $downloadItems[$key]["downloadSpeed"] = 0; } } return json($downloadItems); } public function ListFinished(){ $page = input("get.page"); $downloadItems = Db::name("download")->where("owner",$this->userObj->uid)->where("status","not in",["active","ready","waiting"])->order('id desc')->page($page.',10')->select(); foreach ($downloadItems as $key => $value) { $connectInfo = json_decode($value["info"],true); if(isset($connectInfo["dir"])){ $downloadItems[$key]["fileName"] = basename($connectInfo["dir"]); $downloadItems[$key]["completedLength"] = $connectInfo["completedLength"]; $downloadItems[$key]["totalLength"] = $connectInfo["totalLength"]; $downloadItems[$key]["downloadSpeed"] = $connectInfo["downloadSpeed"]; }else{ if(floor($value["source"])==$value["source"]){ $downloadItems[$key]["fileName"] = Db::name("files")->where("id",$value["source"])->column("orign_name"); }else{ $downloadItems[$key]["fileName"] = $value["source"]; } $downloadItems[$key]["completedLength"] = 0; $downloadItems[$key]["totalLength"] = 0; $downloadItems[$key]["downloadSpeed"] = 0; } } return json($downloadItems); } }