fix:RSS运行时配置解析

This commit is contained in:
david 2021-03-16 08:11:56 +08:00
parent 8a649c377d
commit 14e975a490
6 changed files with 120 additions and 18 deletions

View File

@ -4,7 +4,9 @@ namespace app\controller;
use support\Request;
use support\Response;
use app\domain\Crontab;
use app\domain\Move as domainMove;
use app\domain\Reseed as domainReseed;
use app\domain\Rss as domainRss;
/**
* Class Task
@ -13,9 +15,21 @@ use app\domain\Reseed as domainReseed;
*/
class Task extends BaseController
{
/**
* 根据参数,解析转移任务配置
* @param Request $request
* @return Response
*/
public function moveConfig(Request $request): Response
{
$rs = self::RS;
$uuid = $request->get('uuid');
$rs['data'] = domainMove::configParser($uuid);
return json($rs);
}
/**
* 根据参数,解析辅种的站点和下载器
* 根据参数,解析辅种任务配置
* @param Request $request
* @return Response
*/
@ -27,6 +41,19 @@ class Task extends BaseController
return json($rs);
}
/**
* 根据参数解析RSS下载任务配置
* @param Request $request
* @return Response
*/
public function rssConfig(Request $request): Response
{
$rs = self::RS;
$uuid = $request->get('uuid');
$rs['data'] = domainRss::configParser($uuid);
return json($rs);
}
/**
* 开启|关闭,计划任务
* @param Request $request
@ -42,7 +69,7 @@ class Task extends BaseController
}
/**
* 执行计划任务
* 手动执行计划任务
* @param Request $request
* @return Response
*/

View File

@ -216,6 +216,25 @@ class Config
return Conf::get(self::filename['sites'], Constant::config_format, []);
}
/**
* 过滤器
* @return array
*/
public static function getFilter():array
{
return Conf::get(self::filename['filter'], Constant::config_format, []);
}
/**
* 根据uuid获取计划任务配置
* @param string $uuid
* @return array
*/
public static function getCronByUUID(string $uuid = ''):array
{
$cron = self::getCrontab();
return array_key_exists($uuid, $cron) ? $cron[$uuid] : [];
}
/**
* 禁用用户已经配置过的站点
* @param array $sites

View File

@ -0,0 +1,12 @@
<?php
namespace app\domain;
/**
* 配置解析接口
* Interface ConfigParserInterface
* @package app\domain
*/
interface ConfigParserInterface
{
public static function configParser(array $param):array;
}

View File

@ -1,10 +1,7 @@
<?php
namespace app\domain;
use app\common\Config as Conf;
use app\common\Constant;
class Move
class Move implements ConfigParserInterface
{
/**
* 路径分隔符
@ -32,9 +29,7 @@ class Move
if (empty($uuid)) {
return $rs;
}
$cronFilename = Config::filename['crontab'];
$cron = Conf::get($cronFilename, Constant::config_format, []);
$cron = array_key_exists($uuid, $cron) ? $cron[$uuid] : [];
$cron = Config::getCronByUUID($uuid);
//检查使能
if (isset($cron['switch']) && $cron['switch'] === 'on') {
//IYUU密钥

View File

@ -11,7 +11,7 @@ use IYUU\Library\IFile;
* @access private 常驻内存运行,禁止执行器调用
* @package app\domain
*/
class Reseed
class Reseed implements ConfigParserInterface
{
/**
* 根据参数,解析辅种的站点和下载器
@ -27,9 +27,7 @@ class Reseed
if (empty($uuid)) {
return $rs;
}
$cronFilename = Config::filename['crontab'];
$cron = Conf::get($cronFilename, Constant::config_format, []);
$cron = array_key_exists($uuid, $cron) ? $cron[$uuid] : [];
$cron = Config::getCronByUUID($uuid);
//检查使能
if (isset($cron['switch']) && $cron['switch'] === 'on') {
//IYUU密钥

View File

@ -1,10 +1,7 @@
<?php
namespace app\domain;
use app\common\Config as Conf;
use app\common\Constant;
use IYUU\Rss\AbstractRss;
class Rss
class Rss implements ConfigParserInterface
{
/**
* 根据参数解析RSS下载的运行时配置
@ -13,11 +10,65 @@ class Rss
*/
public static function configParser($uuid = ''):array
{
return [];
$rs = [
'site' => [],
'sites' => [],
'clients' => [],
'filter' => [],
'urladdress' => '',
];
if (empty($uuid)) {
return $rs;
}
$cron = Config::getCronByUUID($uuid);
//检查使能
if (isset($cron['switch']) && $cron['switch'] === 'on') {
//IYUU密钥
$iyuu = Config::getIyuu();
$rs['iyuu.cn'] = $iyuu['iyuu.cn'];
//默认
$default = Config::getDefault();
$rs['default'] = $default;
//解析用户的站点配置
$site = 'site';
$userSites = Config::getUserSites();
if (!empty($cron[$site]) && !empty($userSites)) {
$key = $cron[$site];
$rs['site'] = array_key_exists($key, $userSites) ? $userSites[$key] : [];
}
//解析站点域名
$sites = Config::getSites();
if (!empty($cron[$site]) && !empty($sites)) {
$key = $cron[$site];
$rs['sites'] = array_key_exists($key, $sites) ? $sites[$key] : [];
}
//解析下载器
$clients = Config::getClients();
if (!empty($cron['clients']) && !empty($clients)) {
$key = $cron['clients'];
$rs['clients'] = array_key_exists($key, $clients) ? $clients[$key] : [];
}
//解析筛选规则的过滤器
$filter = Config::getFilter();
if (!empty($cron['filter']) && !empty($filter)) {
$key = $cron['filter'];
$rs['filter'] = array_key_exists($key, $filter) ? $filter[$key] : [];
}
//解析URL地址
$rs['urladdress'] = empty($cron['urladdress']) ? '' : $cron['urladdress'];
}
return $rs;
}
/**
* 获取所有RSS支持的站点名称
* @descr 步骤1.获取Rss目录下的全部类文件名 2.实例化类为对象; 3.获取对象的成员变量site
* @return array
*/
public static function getAllRssClass():array