/** * @NoAdminRequired * @NoCSRFRequired */ public function add() { \OCP\JSON::setContentTypeHeader('application/json'); if (isset($_POST['FILE']) && strlen(trim($_POST['FILE'])) > 0 && (Tools::CheckURL($_POST['FILE']) || Tools::CheckFilepath($this->TorrentsFolder . '/' . $_POST['FILE'])) && isset($_POST['OPTIONS'])) { try { if (Tools::EndsWith($_POST['FILE'], '.torrent')) { $Target = substr($_POST['FILE'], 0, strrpos($_POST['FILE'], '.torrent')); } $Target = Tools::CleanString($_POST['FILE']); // If target file exists, create a new one if (\OC\Files\Filesystem::is_dir($this->DownloadsFolder . '/' . $Target)) { $Target = time() . '_' . $Target; } // Create the target file \OC\Files\Filesystem::mkdir($this->DownloadsFolder . '/' . $Target); $OPTIONS = array('dir' => $this->AbsoluteDownloadsFolder . $Target); if (!$this->ProxyOnlyWithYTDL && !is_null($this->ProxyAddress) && $this->ProxyPort > 0 && $this->ProxyPort <= 65536) { $OPTIONS['all-proxy'] = rtrim($this->ProxyAddress, '/') . ':' . $this->ProxyPort; if (!is_null($this->ProxyUser) && !is_null($this->ProxyPasswd)) { $OPTIONS['all-proxy-user'] = $this->ProxyUser; $OPTIONS['all-proxy-passwd'] = $this->ProxyPasswd; } } $AddTorrent = Aria2::AddTorrent(base64_encode(file_get_contents($this->AbsoluteTorrentsFolder . '/' . $_POST['FILE'])), array(), $OPTIONS); if (isset($AddTorrent['result']) && !is_null($AddTorrent['result'])) { $SQL = 'INSERT INTO `*PREFIX*ocdownloader_queue` (`UID`, `GID`, `FILENAME`, `PROTOCOL`, `STATUS`, `TIMESTAMP`) VALUES (?, ?, ?, ?, ?, ?)'; if ($this->DbType == 1) { $SQL = 'INSERT INTO *PREFIX*ocdownloader_queue ("UID", "GID", "FILENAME", "PROTOCOL", "STATUS", "TIMESTAMP") VALUES (?, ?, ?, ?, ?, ?)'; } $Query = \OCP\DB::prepare($SQL); $Result = $Query->execute(array($this->CurrentUID, $AddTorrent['result'], $Target, 'BitTorrent', 1, time())); if (isset($_POST['OPTIONS']['BTRMTorrent']) && strcmp($_POST['OPTIONS']['BTRMTorrent'], "true") == 0) { \OC\Files\Filesystem::unlink($this->TorrentsFolder . '/' . $_POST['FILE']); } sleep(1); $Status = Aria2::TellStatus($AddTorrent['result']); $Progress = $Status['result']['completedLength'] / $Status['result']['totalLength']; return new JSONResponse(array('ERROR' => false, 'MESSAGE' => (string) $this->L10N->t('Download started'), 'GID' => $AddTorrent['result'], 'PROGRESSVAL' => round($Progress * 100, 2) . '%', 'PROGRESS' => Tools::GetProgressString($Status['result']['completedLength'], $Status['result']['totalLength'], $Progress) . ' - ' . $this->L10N->t('Seeders') . ': ' . $Status['result']['numSeeders'], 'STATUS' => isset($Status['result']['status']) ? (string) $this->L10N->t(ucfirst($Status['result']['status'])) : (string) $this->L10N->t('N/A'), 'STATUSID' => Tools::GetDownloadStatusID($Status['result']['status']), 'SPEED' => isset($Status['result']['downloadSpeed']) ? Tools::FormatSizeUnits($Status['result']['downloadSpeed']) . '/s' : (string) $this->L10N->t('N/A'), 'FILENAME' => strlen($Target) > 40 ? substr($Target, 0, 40) . '...' : $Target, 'PROTO' => 'BitTorrent', 'ISTORRENT' => true)); } else { return new JSONResponse(array('ERROR' => true, 'MESSAGE' => (string) $this->L10N->t('Returned GID is null ! Is Aria2c running as a daemon ?'))); } } catch (Exception $E) { return new JSONResponse(array('ERROR' => true, 'MESSAGE' => $E->getMessage())); } } else { return new JSONResponse(array('ERROR' => true, 'MESSAGE' => (string) $this->L10N->t('Please check the URL or filepath you\'ve just provided'))); } }