diff --git a/appinfo/application.php b/appinfo/application.php
index 1541c44..8b20479 100644
--- a/appinfo/application.php
+++ b/appinfo/application.php
@@ -36,7 +36,11 @@ class Application extends App
});
$container->registerService('Youtube', function (IContainer $container) {
- return new Youtube(['downloadDir' => $this->getRealDownloadDir()]);
+ $config = [
+ 'binary' => $this->settings->setType(Settings::TYPE['SYSTEM'])->get("ncd_yt_binary"),
+ 'downloadDir' => $this->getRealDownloadDir(),
+ ];
+ return new Youtube($config);
});
$container->registerService('Settings', function (IContainer $container) {
@@ -112,8 +116,14 @@ class Application extends App
if (is_array($customSettings = $this->settings->getAria2())) {
$settings = array_merge($customSettings, $settings);
}
- $token = $this->settings->setType(1)->get('ncd_rpctoken');
- $config = ['dir' => $realDownloadDir, 'conf_dir' => $aria2_dir, 'token' => $token, 'settings' => $settings];
+ $token = $this->settings->setType(Settings::TYPE['SYSTEM'])->get('ncd_rpctoken');
+ $config = [
+ 'dir' => $realDownloadDir,
+ 'conf_dir' => $aria2_dir,
+ 'token' => $token,
+ 'settings' => $settings,
+ 'binary' => $this->settings->setType(Settings::TYPE['SYSTEM'])->get('ncd_aria2_binary'),
+ ];
return $config;
}
diff --git a/appinfo/info.xml b/appinfo/info.xml
index e7f0cae..a7972a4 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -5,7 +5,7 @@
Aria2 and youtube-dl web gui for nextcloud
built-in torrent search;Start and stop Aria2 process, manage Aria2 from the web;
Download videos from youtube, twitter and other sites;
- 0.1.2
+ 0.1.3
agpl
jiaxinhuang
NCDownloader
diff --git a/lib/Controller/SettingsController.php b/lib/Controller/SettingsController.php
index bd4d277..ff01cb3 100644
--- a/lib/Controller/SettingsController.php
+++ b/lib/Controller/SettingsController.php
@@ -48,7 +48,7 @@ class SettingsController extends Controller
public function admin()
{
- $this->settings->setType($this->settings::SYSTEM);
+ $this->settings->setType($this->settings::TYPE['SYSTEM']);
$params = $this->request->getParams();
foreach ($params as $key => $value) {
if (substr($key, 0, 1) == '_') {
diff --git a/lib/Settings/Admin.php b/lib/Settings/Admin.php
index 677d466..fc2f234 100644
--- a/lib/Settings/Admin.php
+++ b/lib/Settings/Admin.php
@@ -32,7 +32,7 @@ class Admin implements ISettings {
* @return TemplateResponse
*/
public function getForm() {
- $this->settings->setType($this->settings::SYSTEM);
+ $this->settings->setType($this->settings::TYPE['SYSTEM']);
$parameters = [
"path" => "/apps/ncdownloader/admin/save",
"ncd_yt_binary" => $this->settings->get("ncd_yt_binary"),
diff --git a/lib/Tools/Aria2.php b/lib/Tools/Aria2.php
index 26bfc75..ebaccbc 100644
--- a/lib/Tools/Aria2.php
+++ b/lib/Tools/Aria2.php
@@ -340,7 +340,7 @@ class Aria2
}
public function isInstalled()
{
- return (bool) isset($this->bin);
+ return (bool) (isset($this->bin) && @is_executable($this->bin));
}
public function isRunning()
{
diff --git a/lib/Tools/Helper.php b/lib/Tools/Helper.php
index 2e8e5b2..22ce44f 100644
--- a/lib/Tools/Helper.php
+++ b/lib/Tools/Helper.php
@@ -9,6 +9,7 @@ class Helper
{
public const DOWNLOADTYPE = ['ARIA2' => 1, 'YOUTUBE-DL' => 2, 'OTHERS' => 3];
public const STATUS = ['ACTIVE' => 1, 'PAUSED' => 2, 'COMPLETE' => 3, 'ERROR' => 4];
+
public static function isUrl($URL)
{
$URLPattern = '%^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@|\d{1,3}(?:\.\d{1,3}){3}|(?:(?:[a-z\d\x{00a1}-\x{ffff}'
diff --git a/lib/Tools/Settings.php b/lib/Tools/Settings.php
index 9bc196c..e4357b0 100644
--- a/lib/Tools/Settings.php
+++ b/lib/Tools/Settings.php
@@ -17,15 +17,13 @@ class Settings extends AllConfig
//type of settings (system = 1 or app =2)
private $type;
- const SYSTEM = 0x001;
- const USER = 0x010;
- const APP = 0x100;
+ public const TYPE = ['SYSTEM' => 0x001, 'USER' => 0x010, 'APP' => 0x100];
public function __construct($user = null)
{
$this->appConfig = \OC::$server->getAppConfig();
$this->sysConfig = \OC::$server->getSystemConfig();
$this->appName = 'ncdownloader';
- $this->type = self::USER;
+ $this->type = self::TYPE['USER'];
$this->user = $user;
$this->allConfig = new AllConfig($this->sysConfig);
//$this->connAdapter = \OC::$server->getDatabaseConnection();
@@ -38,9 +36,9 @@ class Settings extends AllConfig
}
public function get($key, $default = null)
{
- if ($this->type == self::USER && isset($this->user)) {
+ if ($this->type == self::TYPE['USER'] && isset($this->user)) {
return $this->allConfig->getUserValue($this->user, $this->appName, $key, $default);
- } else if ($this->type == self::SYSTEM) {
+ } else if ($this->type == self::TYPE['SYSTEM']) {
return $this->allConfig->getSystemValue($key, $default);
} else {
return $this->allConfig->getAppValue($this->appName, $key, $default);
@@ -53,7 +51,7 @@ class Settings extends AllConfig
}
public function getAll()
{
- if ($this->type === self::APP) {
+ if ($this->type === self::TYPE['APP']) {
return $this->getAllAppValues();
} else {
$data = $this->getAllUserSettings();
@@ -63,9 +61,9 @@ class Settings extends AllConfig
}
public function save($key, $value)
{
- if ($this->type == self::USER && isset($this->user)) {
+ if ($this->type == self::TYPE['USER'] && isset($this->user)) {
return $this->allConfig->setUserValue($this->user, $this->appName, $key, $value);
- } else if ($this->type == self::SYSTEM) {
+ } else if ($this->type == self::TYPE['SYSTEM']) {
return $this->allConfig->setSystemValue($key, $value);
} else {
return $this->allConfig->setAppValue($this->appName, $key, $value);
diff --git a/lib/Tools/Youtube.php b/lib/Tools/Youtube.php
index f0693cf..56e6b9f 100644
--- a/lib/Tools/Youtube.php
+++ b/lib/Tools/Youtube.php
@@ -21,7 +21,7 @@ class Youtube
public function __construct($config)
{
$config += ['downloadDir' => '/tmp/downloads'];
- $this->bin = Helper::findBinaryPath('youtube-dl');
+ $this->bin = $config['binary'] ?? Helper::findBinaryPath('youtube-dl');
$this->init();
$this->setDownloadDir($config['downloadDir']);
}
@@ -183,7 +183,7 @@ class Youtube
}
public function isInstalled()
{
- return (bool) isset($this->bin);
+ return (bool) (isset($this->bin) && @is_executable($this->bin));
}
public static function install()
{
diff --git a/src/settings.js b/src/settings.js
index da10ec9..0306294 100644
--- a/src/settings.js
+++ b/src/settings.js
@@ -13,9 +13,10 @@ import helper from './helper';
window.addEventListener('DOMContentLoaded', function () {
eventHandler.add('click', '.ncdownloader-admin-settings', 'input[type="button"]', function (event) {
- e.stopPropagation();
+ event.stopPropagation();
OC_msg.startSaving('#ncdownloader-message-banner');
const target = this.getAttribute("data-rel");
+ let inputData = helper.getData(target);
const path = inputData.url || "/apps/ncdownloader/admin/save";
let url = generateUrl(path);
Http.getInstance(url).setData(helper.getData(target)).setHandler(function () {
diff --git a/templates/settings/Admin.php b/templates/settings/Admin.php
index 6ffc842..dee6921 100644
--- a/templates/settings/Admin.php
+++ b/templates/settings/Admin.php
@@ -1,11 +1,12 @@
\ No newline at end of file