diff --git a/appinfo/routes.php b/appinfo/routes.php index af218f1..65d187d 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -10,6 +10,7 @@ return [ ['name' => 'Youtube#Index', 'url' => '/youtube/get', 'verb' => 'POST'], ['name' => 'Youtube#Download', 'url' => '/youtube/new', 'verb' => 'POST'], ['name' => 'Youtube#Delete', 'url' => '/youtube/delete', 'verb' => 'POST'], + ['name' => 'Youtube#Redownload', 'url' => '/youtube/redownload', 'verb' => 'POST'], ['name' => 'Search#Execute', 'url' => '/search', 'verb' => 'POST'], // AdminSettings ['name' => 'Settings#Admin', 'url' => '/admin/save', 'verb' => 'POST'], diff --git a/css/style.css b/css/style.css index 3bcb3bd..9d2ff7d 100644 --- a/css/style.css +++ b/css/style.css @@ -65,6 +65,9 @@ div .number { .icon-unpause { background-image: url('../img/play.svg'); } +.icon-refresh { + background-image: url('../img/refresh.svg'); +} #ncdownloader-action-links-container { position: relative; diff --git a/lib/Controller/YoutubeController.php b/lib/Controller/YoutubeController.php index a9f6db2..a5c1857 100644 --- a/lib/Controller/YoutubeController.php +++ b/lib/Controller/YoutubeController.php @@ -59,7 +59,8 @@ class YoutubeController extends Controller $path = $this->urlGenerator->linkToRoute('ncdownloader.Youtube.Delete'); $tmp['actions'][] = ['name' => 'delete', 'path' => $path]; } else { - $tmp['actions'][] = ['name' => 'disabled', 'path' => '#']; + $path = $this->urlGenerator->linkToRoute('ncdownloader.Youtube.Redownload'); + $tmp['actions'][] = ['name' => 'refresh', 'path' => $path]; } $tmp['data_gid'] = $value['gid'] ?? 0; array_push($resp['row'], $tmp); @@ -69,7 +70,7 @@ class YoutubeController extends Controller $resp['counter'] = ['youtube-dl' => count($data)]; return new JSONResponse($resp); } - /** + /** * @NoAdminRequired * @NoCSRFRequired */ @@ -99,7 +100,7 @@ class YoutubeController extends Controller return ['error' => $this->l10n->t("failed to get any url!")]; } } - /** + /** * @NoAdminRequired * @NoCSRFRequired */ @@ -115,6 +116,25 @@ class YoutubeController extends Controller } } + /** + * @NoAdminRequired + * @NoCSRFRequired + */ + public function Redownload() + { + $gid = $this->request->getParam('gid'); + if (!$gid) { + return new JSONResponse(['error' => "no gid value is received!"]); + } + $row = $this->dbconn->getByGid($gid); + $data = unserialize($row['data']); + if (!empty($data['link'])) { + $resp = $this->youtube->forceIPV4()->download($data['link']); + folderScan::sync(); + return new JSONResponse($resp); + } + return new JSONResponse(['error' => "no link"]); + } private function _download($url, $filename = null) { diff --git a/lib/Tools/Youtube.php b/lib/Tools/Youtube.php index 0baff4a..207f8e7 100644 --- a/lib/Tools/Youtube.php +++ b/lib/Tools/Youtube.php @@ -14,7 +14,7 @@ class Youtube private $format = 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'; private $options = []; private $downloadDir; - private $timeout = 60 * 60 * 3; //3 hours + private $timeout = 60 * 60 * 10; //10 hours private $outTpl = "/%(id)s-%(title)s.%(ext)s"; private $defaultDir = "/tmp/downloads"; private $env = []; diff --git a/src/helper.js b/src/helper.js index 3b348b9..783eafe 100644 --- a/src/helper.js +++ b/src/helper.js @@ -47,7 +47,7 @@ const helper = { return magnetURI.test(url.trim()); }, - message: function (message,duration = 5000) { + message: function (message,duration = 3000) { Toastify({ text: message, duration:duration, diff --git a/src/inputAction.js b/src/inputAction.js index 560ea4f..95e04c6 100644 --- a/src/inputAction.js +++ b/src/inputAction.js @@ -72,7 +72,6 @@ const inputHandler = (event) => { let inputData = helper.getData('form-input-wrapper'); let inputValue = inputData.form_input_text; - if (inputData.type !== 'search' && !helper.isURL(inputValue) && !helper.isMagnetURI(inputValue)) { helper.message(t("ncdownloader", "Invalid url")); return; diff --git a/src/ncTable.js b/src/ncTable.js index c511861..da27773 100644 --- a/src/ncTable.js +++ b/src/ncTable.js @@ -92,7 +92,8 @@ class ncTable { if (!value.name) { return; } - container.appendChild(this.createActionButton(value.name, value.path)); + let data = value.data || ''; + container.appendChild(this.createActionButton(value.name, value.path,data)); }) rowItem.appendChild(container); row.appendChild(rowItem); @@ -126,10 +127,11 @@ class ncTable { } - createActionButton(name, path) { + createActionButton(name, path, data) { let button = document.createElement("button"); button.classList.add("icon-" + name); button.setAttribute("path", path); + button.setAttribute("data", data); return button; }