fixed #15;added support for downloading via bittorrent files;added new class for getting download statistics
This commit is contained in:
@@ -30,6 +30,7 @@ class Aria2
|
||||
'host' => '127.0.0.1',
|
||||
'port' => 6800,
|
||||
'dir' => '/tmp/Downloads',
|
||||
'torrents_dir' => '/tmp/Torrents',
|
||||
'token' => null,
|
||||
'conf_dir' => '/tmp/aria2',
|
||||
'completeHook' => $_SERVER['DOCUMENT_ROOT'] . "/apps/ncdownloader/hooks/completeHook.sh",
|
||||
@@ -43,6 +44,7 @@ class Aria2
|
||||
$this->bin = Helper::findBinaryPath('aria2c');
|
||||
}
|
||||
$this->setDownloadDir($dir);
|
||||
$this->setTorrentsDir($torrents_dir);
|
||||
if (!empty($settings)) {
|
||||
foreach ($settings as $key => $value) {
|
||||
$this->setOption($key, $value);
|
||||
@@ -114,6 +116,18 @@ class Aria2
|
||||
{
|
||||
return $this->options;
|
||||
}
|
||||
public function setTorrentsDir($dir)
|
||||
{
|
||||
$this->torrentsDir = $dir;
|
||||
if (!is_dir($dir)) {
|
||||
mkdir($dir, 0755, true);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
public function getTorrentsDir()
|
||||
{
|
||||
return $this->torrentsDir;
|
||||
}
|
||||
public function setDownloadDir($dir)
|
||||
{
|
||||
$this->setOption('dir', $dir);
|
||||
@@ -185,12 +199,14 @@ class Aria2
|
||||
public function __call($name, $args)
|
||||
{
|
||||
$this->methodName = $name;
|
||||
|
||||
$data = array();
|
||||
if (isset($args[0]) && is_array($args[0]) && count($args) == 1 && strtolower($name) !== "adduri") {
|
||||
$args = reset($args);
|
||||
}
|
||||
switch ($name) {
|
||||
case "addUri":
|
||||
case "addTorrent":
|
||||
array_push($args, $this->options);
|
||||
break;
|
||||
case "tellActive":
|
||||
@@ -286,6 +302,26 @@ class Aria2
|
||||
return false;
|
||||
}
|
||||
|
||||
public function btDownload($file)
|
||||
{
|
||||
if ($data = file_get_contents($file)) {
|
||||
$filename = Helper::getBasicFilename($file);
|
||||
$torrent = base64_encode($data);
|
||||
$resp = $this->addTorrent($torrent, []);
|
||||
}else{
|
||||
return ['error' => "no valid torrents file!"];
|
||||
}
|
||||
if (isset($resp['error'])) {
|
||||
return $resp;
|
||||
}
|
||||
|
||||
if (isset($resp['result']) && is_string($gid = $resp['result'])) {
|
||||
return ['gid' => $gid, 'filename' => $filename];
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDefaults()
|
||||
{
|
||||
return [
|
||||
|
||||
65
lib/Tools/Counters.php
Normal file
65
lib/Tools/Counters.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace OCA\NCDownloader\Tools;
|
||||
|
||||
use OCA\NCDownloader\Tools\Aria2;
|
||||
use OCA\NCDownloader\Tools\DBConn;
|
||||
|
||||
class Counters
|
||||
{
|
||||
private $minmax = [0, 999];
|
||||
|
||||
public function __construct(Aria2 $aria2, DBConn $dbconn, $uid)
|
||||
{
|
||||
$this->aria2 = $aria2;
|
||||
$this->dbconn = $dbconn;
|
||||
$this->uid = $uid;
|
||||
}
|
||||
public function getCounters()
|
||||
{
|
||||
return [
|
||||
'active' => $this->getCounter(),
|
||||
'waiting' => $this->getCounter('tellWaiting'),
|
||||
'complete' => $this->getCounter('tellStopped'),
|
||||
'fail' => $this->getCounter('tellFail'),
|
||||
'youtube-dl' => $this->getCounter('youtube-dl'),
|
||||
];
|
||||
}
|
||||
private function getCounter($action = 'tellActive')
|
||||
{
|
||||
if ($action === 'youtube-dl') {
|
||||
$data = $this->dbconn->getYoutubeByUid($this->uid);
|
||||
} else if ($action === 'tellActive') {
|
||||
$data = $this->aria2->{$action}([]);
|
||||
} else {
|
||||
$data = $this->aria2->{$action}($this->minmax);
|
||||
}
|
||||
|
||||
if (!is_array($data) && count($data) < 1) {
|
||||
return 0;
|
||||
}
|
||||
if ($action !== 'youtube-dl') {
|
||||
$data = $this->filterData($data);
|
||||
}
|
||||
return count($data);
|
||||
}
|
||||
|
||||
private function filterData($resp)
|
||||
{
|
||||
|
||||
$data = [];
|
||||
if (empty($resp)) {
|
||||
return $data;
|
||||
}
|
||||
if (isset($resp['error'])) {
|
||||
return $resp;
|
||||
}
|
||||
|
||||
$data = array_filter($resp, function ($value) {
|
||||
$gid = $value['following'] ?? $value['gid'];
|
||||
return (bool) ($this->dbconn->getUidByGid($gid) === $this->uid);
|
||||
});
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -124,7 +124,7 @@ class Helper
|
||||
'/[’‘‹›‚]/u' => '', // Literally a single quote
|
||||
'/[“”«»„]/u' => '', // Double quote
|
||||
'/ /' => '_', // nonbreaking space(equiv. to 0x160)
|
||||
'/[^a-z0-9_\s.-]/i' => '_',
|
||||
// '/[^a-z0-9_\s.-]/i' => '_',
|
||||
);
|
||||
return preg_replace(array_keys($replace), array_values($replace), $string);
|
||||
}
|
||||
@@ -286,5 +286,9 @@ class Helper
|
||||
{
|
||||
return (bool) self::findBinaryPath('ffmpeg');
|
||||
}
|
||||
// filename without extension
|
||||
public static function getBasicFilename($path){
|
||||
return pathinfo($path, PATHINFO_FILENAME);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user