improved user experience for novice user(including support for standalone aria2c and ytdl binaries);support for snap installation;close #19

This commit is contained in:
huangjx
2022-02-21 15:50:42 +08:00
parent 20b3e25369
commit 8e5ebdd8e7
11 changed files with 88 additions and 18 deletions

View File

@@ -6,6 +6,8 @@ use OCA\NCDownloader\Tools\Aria2;
use OCA\NCDownloader\Tools\Counters;
use OCA\NCDownloader\Tools\DbHelper;
use OCA\NCDownloader\Tools\Helper;
use OCA\NCDownloader\Tools\Settings;
use OCA\NCDownloader\Tools\Youtube;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http\TemplateResponse;
@@ -23,7 +25,7 @@ class MainController extends Controller
private $aria2Opts;
private $l10n;
public function __construct($appName, IRequest $request, $UserId, IL10N $IL10N, Aria2 $aria2)
public function __construct($appName, IRequest $request, $UserId, IL10N $IL10N, Aria2 $aria2, Youtube $youtube)
{
parent::__construct($appName, $request);
$this->appName = $appName;
@@ -36,6 +38,9 @@ class MainController extends Controller
$this->urlGenerator = \OC::$server->getURLGenerator();
$this->dbconn = new DbHelper();
$this->counters = new Counters($aria2, $this->dbconn, $UserId);
$this->youtube = $youtube;
$this->settings = new Settings($UserId);
}
/**
* @NoAdminRequired
@@ -50,7 +55,13 @@ class MainController extends Controller
$params = array();
$params['aria2_running'] = $this->aria2->isRunning();
$params['aria2_installed'] = $this->aria2->isInstalled();
$params['youtube_installed'] = (bool) Helper::findBinaryPath('youtube-dl');
$params['aria2_bin'] = $this->aria2->getBin();
$params['aria2_executable'] = $this->aria2->isExecutable();
$params['youtube_installed'] = $this->youtube->isInstalled();
$params['youtube_bin'] = $this->youtube->getBin();
$params['youtube_executable'] = $this->youtube->isExecutable();
$params['ncd_hide_errors'] = $this->settings->get("ncd_hide_errors");
$params['counter'] = $this->counters->getCounters();
$params['settings_url'] = $this->urlGenerator->linkToRoute("settings.PersonalSettings.index", ['section' => 'ncdownloader']);
$params['admin_settings_url'] = $this->urlGenerator->linkToRoute("settings.AdminSettings.index", ['section' => 'ncdownloader']);

View File

@@ -132,5 +132,4 @@ class SettingsController extends Controller
}
return ['message' => "Saved!"];
}
}

View File

@@ -38,10 +38,10 @@ class Aria2
);
//turn keys in $options into variables
extract($options);
if (isset($binary) && @is_executable($binary)) {
if (isset($binary) && $this->isExecutable($binary)) {
$this->bin = $binary;
} else {
$this->bin = Helper::findBinaryPath('aria2c');
$this->bin = Helper::findBinaryPath('aria2c', __DIR__ . "/../../bin/aria2c");
}
$this->setDownloadDir($dir);
$this->setTorrentsDir($torrents_dir);
@@ -379,17 +379,27 @@ class Aria2
}
public function isInstalled()
{
return (bool) (isset($this->bin) && @is_executable($this->bin));
return @is_file($this->bin);
}
public function isExecutable()
{
return @is_executable($this->bin);
}
public function isRunning()
{
$resp = $this->getSessionInfo();
return (bool) $resp;
}
public function getBin()
{
return $this->bin;
}
public function stop()
{
$resp = $this->shutdown();
sleep(1);
sleep(3);
return $resp ?? null;
}
private function confTemplate()

View File

@@ -202,6 +202,7 @@ class Helper
if ($memcache->hasKey($program)) {
return $memcache->get($program);
}
$dataPath = \OC::$server->getSystemConfig()->getValue('datadirectory');
$paths = ['/usr/local/sbin', '/usr/local/bin', '/usr/sbin', '/usr/bin', '/sbin', '/bin', '/opt/bin', $dataPath . "/bin"];
$result = $default;

View File

@@ -18,6 +18,7 @@ class Youtube
private $outTpl = "%(id)s-%(title).64s.%(ext)s";
private $defaultDir = "/tmp/downloads";
private $env = [];
private $bin;
public function __construct(array $options)
{
@@ -27,7 +28,7 @@ class Youtube
public function init(array $options)
{
extract($options);
if (isset($binary) && @is_executable($binary)) {
if (isset($binary) && $this->isExecutable($binary)) {
$this->bin = $binary;
} else {
$this->bin = Helper::findBinaryPath('youtube-dl', __DIR__ . "/../../bin/youtube-dl");
@@ -157,7 +158,7 @@ class Youtube
$data = ['link' => $url];
$process->run(function ($type, $buffer) use ($data, $process) {
if (Process::ERR === $type) {
// $this->onError($buffer);
// $this->onError($buffer);
} else {
$data['pid'] = $process->getPid();
$this->onOutput($buffer, $data);
@@ -235,7 +236,16 @@ class Youtube
}
public function isInstalled()
{
return (bool) (isset($this->bin) && @is_executable($this->bin));
return @is_file($this->bin);
}
public function isExecutable()
{
return @is_executable($this->bin);
}
public function getBin()
{
return $this->bin;
}
public static function install()
{