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 @@

ncDownloader admin Settings

- +
+
+ + + +
+
+ + + +
\ No newline at end of file