From 412541a5402b66f9e9bff3d469b1ade5c690af1a Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Wed, 18 Apr 2018 20:31:24 +0800 Subject: [PATCH] add list for completed remote download and fix storage check before starting downloading --- .../index/controller/RemoteDownload.php | 34 +++++ application/index/model/Aria2.php | 8 +- application/index/view/home/Download.html | 127 +++++++++++------- static/css/material.css | 14 ++ static/js/remoteDownload.js | 82 ++++++++++- 5 files changed, 207 insertions(+), 58 deletions(-) diff --git a/application/index/controller/RemoteDownload.php b/application/index/controller/RemoteDownload.php index b9076321..d09d0f77 100644 --- a/application/index/controller/RemoteDownload.php +++ b/application/index/controller/RemoteDownload.php @@ -41,6 +41,7 @@ class RemoteDownload extends Controller{ "source" =>$url, "file_index" => 0, "is_single" => 1, + "total_size" => 0, ]); } @@ -65,6 +66,15 @@ class RemoteDownload extends Controller{ 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); @@ -141,5 +151,29 @@ class RemoteDownload extends Controller{ 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"])->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); + } + } \ No newline at end of file diff --git a/application/index/model/Aria2.php b/application/index/model/Aria2.php index 4798a612..4fa1745b 100644 --- a/application/index/model/Aria2.php +++ b/application/index/model/Aria2.php @@ -119,6 +119,7 @@ class Aria2 extends Model{ "errorMessage" => isset($respondData["result"]["errorMessage"]) ? $respondData["result"]["errorMessage"] : "", ]), "msg" => isset($respondData["result"]["errorMessage"]) ? $respondData["result"]["errorMessage"] : "", + "total_size" => $respondData["result"]["files"][$downloadInfo["file_index"]]["length"], ]); switch ($respondData["result"]["status"]) { case 'complete': @@ -191,6 +192,7 @@ class Aria2 extends Model{ "source" =>$sqlData["source"], "file_index" => $key, "is_single" => 0, + "total_size" => 0, ]); } Db::name("download")->where("id",$sqlData["id"])->delete(); @@ -239,7 +241,7 @@ class Aria2 extends Model{ $this->setError($quenInfo,$sqlData,$addAction[1]); return false; } - FileManage::storageCheckOut($this->uid,(int)$quenInfo["files"][$sqlData["file_index"]]["length"]); + FileManage::storageCheckOut($this->uid,$quenInfo["files"][$sqlData["file_index"]]["length"]); } private function setError($quenInfo,$sqlData,$msg,$status="error",$delete=true){ @@ -303,10 +305,10 @@ class Aria2 extends Model{ } private function storageCheck($quenInfo,$sqlData){ - if(!FileManage::sotrageCheck($this->uid,(int)$quenInfo["totalLength"])){ + if(!FileManage::sotrageCheck($this->uid,$quenInfo["totalLength"])){ return false; } - if(!FileManage::sotrageCheck($this->uid,(int)$quenInfo["completedLength"])){ + if(!FileManage::sotrageCheck($this->uid,$quenInfo["completedLength"])){ return false; } return true; diff --git a/application/index/view/home/Download.html b/application/index/view/home/Download.html index 1bcdd4b3..02d58c0d 100644 --- a/application/index/view/home/Download.html +++ b/application/index/view/home/Download.html @@ -1,60 +1,83 @@ {extend name="header_home" /} {block name="title"}离线下载管理- {$options.siteName}{/block} {block name="content"} - - - - -
- {include file="navbar_home" /} + + + + +
+ {include file="navbar_home" /} + +
+

离线下载管理

+
+
-
-

离线下载管理

-
-
- - -
-
-
-
正在进行中
-
- 更新状态数据中... -
- + +
+
+
+
正在进行中
+
+ 更新状态数据中... +
+
-
-
+
+
+
已完成
+
+ + + + + + + + + + + + + +
#文件名大小储存位置状态操作
+
+
+ +
- - - - {$options.js_code} - - {/block} \ No newline at end of file +
+ +
+
+
+ + + + {$options.js_code} + +{/block} \ No newline at end of file diff --git a/static/css/material.css b/static/css/material.css index 8f01348d..0fd61a47 100644 --- a/static/css/material.css +++ b/static/css/material.css @@ -6,4 +6,18 @@ body{background-color:#EEE}body.inverse{background:#333}body.inverse,body.invers .tr-bar { background-image: -webkit-gradient(linear, left top, right top, from(#ecefff), to(white), color-stop(0.5, #ecefff), color-stop(0.5, white)); background-image: -moz-linear-gradient(0, #ecefff 0%, #ecefff 50%, white 50%, white 100%); + } + .download-error{ + color: #F44336; + font-weight: 700; + } + .td-error{ + background-color:#ffebea; + } + .download-success{ + color:#009688; + font-weight: 700; + } + .td-success{ + background-color:#edffee; } \ No newline at end of file diff --git a/static/js/remoteDownload.js b/static/js/remoteDownload.js index 29b97003..d8e7643b 100644 --- a/static/js/remoteDownload.js +++ b/static/js/remoteDownload.js @@ -1,17 +1,83 @@ +function getMemory() { + $.get("/Member/Memory", function(data) { + var dataObj = eval("(" + data + ")"); + if (dataObj.rate >= 100) { + $("#memory_bar").css("width", "100%"); + $("#memory_bar").addClass("progress-bar-warning"); + toastr["error"]("您的已用容量已超过容量配额,请尽快删除多余文件或购买容量"); + + } else { + $("#memory_bar").css("width", dataObj.rate + "%"); + } + $("#used").html(dataObj.used); + $("#total").html(dataObj.total); + }); +} + +page = 1; +window.onload = function() { + $.material.init(); + + getMemory(); +} +$(function() { + $("#loadFinished").click(function(){ + $.getJSON("/RemoteDownload/ListFinished?page="+page, function(data) { + if(data.length == 0){ + $("#loadFinished").html("已加载全部"); + $("#loadFinished").attr("disabled","true"); + }else{ + $("#loadFinished").html("继续加载"); + } + data.forEach(function(e) { + $("#completeItemContent").append(function() { + var row = '' + e["id"] + '' + e["fileName"] + ''; + row = row + '' + bytesToSize(e["totalLength"]) + ''; + row = row + '' + e["save_dir"] + ''; + switch(e["status"]){ + case "error": + row = row +'失败' + break; + case "canceled": + row = row +'取消' + break; + case "canceled": + row = row +'取消' + break; + case "complete": + row = row +'完成' + break; + } + row = row + '删除记录' + return row + ""; + }); + switch(e["status"]){ + case "error": + $("#i-" + e["id"]).addClass("td-error"); + $('[data-toggle="tooltip"]').tooltip() + break; + case "complete": + $("#i-" + e["id"]).addClass("td-success"); + break; + } + }); + page++; + }) + }) +}) $.get("/RemoteDownload/FlushUser", function() { $("#loadStatus").html("加载下载列表中..."); loadDownloadingList(); }) - function loadDownloadingList() { + $("#itemContent").html(""); $.getJSON("/RemoteDownload/ListDownloading", function(data) { - $("#itemContent").html(); if(data.length == 0){ $("#loadStatus").html("下载列表为空"); } data.forEach(function(e) { $("#itemContent").append(function() { - var row = '' + e["id"] + '' + e["fileName"] + ''; + var row = '' + e["id"] + '' + e["fileName"] + ''; row = row + '' + bytesToSize(e["totalLength"]) + ''; row = row + '' + e["save_dir"] + ''; if (e["downloadSpeed"] == "0") { @@ -57,7 +123,17 @@ function loadDownloadingList() { if(data.error){ toastr["warning"](data.message); }else{ + var pid = $("#i-"+id).attr("data-pid"); + $("[data-pid='"+pid+"'").remove(); toastr["success"](data.message); + } }) + } + + function refresh(){ + $.get("/RemoteDownload/FlushUser?i="+Math.random(), function() { + $("#loadStatus").html("加载下载列表中..."); + loadDownloadingList(); + }) } \ No newline at end of file