@@ -4,9 +4,10 @@ import * as drpy from '../libs/drpyS.js';
44import { naturalSort , urljoin } from '../utils/utils.js'
55import { ENV } from "../utils/env.js" ;
66import { validatePwd } from "../utils/api_validate.js" ;
7+ import { getSitesMap } from "../utils/sites-map.js" ;
78
89// 工具函数:生成 JSON 数据
9- async function generateSiteJSON ( jsDir , requestHost , sub , subFilePath , pwd ) {
10+ async function generateSiteJSON ( jsDir , configDir , requestHost , sub , subFilePath , pwd ) {
1011 const files = readdirSync ( jsDir ) ;
1112 let valid_files = files . filter ( ( file ) => file . endsWith ( '.js' ) && ! file . startsWith ( '_' ) ) ; // 筛选出不是 "_" 开头的 .js 文件
1213 let sort_list = [ ] ;
@@ -39,10 +40,10 @@ async function generateSiteJSON(jsDir, requestHost, sub, subFilePath, pwd) {
3940 if ( ENV . get ( 'hide_adult' ) === '1' ) {
4041 valid_files = valid_files . filter ( it => ! ( new RegExp ( '\\[[密]\\]|密+' ) ) . test ( it ) ) ;
4142 }
43+ let SitesMap = getSitesMap ( configDir ) ;
44+ // console.log(SitesMap);
4245 for ( const file of valid_files ) {
4346 const baseName = path . basename ( file , '.js' ) ; // 去掉文件扩展名
44- let key = `drpyS_${ baseName } ` ;
45- let name = `${ baseName } (DS)` ;
4647 let api = `${ requestHost } /api/${ baseName } ` ; // 使用请求的 host 地址,避免硬编码端口
4748 if ( pwd ) {
4849 api += `?pwd=${ pwd } ` ;
@@ -58,22 +59,42 @@ async function generateSiteJSON(jsDir, requestHost, sub, subFilePath, pwd) {
5859 } catch ( e ) {
5960 console . log ( `file:${ file } error:${ e . message } ` ) ;
6061 }
62+ let fileSites = [ ] ;
6163 if ( baseName === 'push_agent' ) {
62- key = 'push_agent' ;
63- name = `${ ruleObject . title } (DS)` ;
64+ let key = 'push_agent' ;
65+ let name = `${ ruleObject . title } (DS)` ;
66+ fileSites . push ( { key, name} )
67+ } else if ( SitesMap . hasOwnProperty ( baseName ) && Array . isArray ( SitesMap [ baseName ] ) ) {
68+ SitesMap [ baseName ] . forEach ( ( it ) => {
69+ let key = `drpyS_${ it . alias } ` ;
70+ let name = `${ it . alias } (DS)` ;
71+ let ext = '' ;
72+ if ( it . queryObject . type === 'url' ) {
73+ ext = it . queryObject . params ;
74+ } else {
75+ ext = it . queryStr ;
76+ }
77+ fileSites . push ( { key : key , name : name , ext : ext } )
78+ } ) ;
79+ } else {
80+ let key = `drpyS_${ baseName } ` ;
81+ let name = `${ baseName } (DS)` ;
82+ fileSites . push ( { key, name} )
6483 }
65- const site = {
66- key,
67- name,
68- type : 4 , // 固定值
69- api,
70- searchable : ruleObject . searchable ,
71- filterable : ruleObject . filterable ,
72- quickSearch : ruleObject . quickSearch ,
73- more : ruleObject . more ,
74- ext : "" , // 固定为空字符串
75- } ;
76- sites . push ( site ) ;
84+ fileSites . forEach ( ( fileSite ) => {
85+ const site = {
86+ key : fileSite . key ,
87+ name : fileSite . name ,
88+ type : 4 , // 固定值
89+ api,
90+ searchable : ruleObject . searchable ,
91+ filterable : ruleObject . filterable ,
92+ quickSearch : ruleObject . quickSearch ,
93+ more : ruleObject . more ,
94+ ext : fileSite . ext || "" , // 固定为空字符串
95+ } ;
96+ sites . push ( site ) ;
97+ } ) ;
7798 }
7899 sites = naturalSort ( sites , 'name' , sort_list ) ;
79100 return { sites} ;
@@ -208,7 +229,7 @@ export default (fastify, options, done) => {
208229 }
209230 }
210231
211- const siteJSON = await generateSiteJSON ( options . jsDir , requestHost , sub , options . subFilePath , pwd ) ;
232+ const siteJSON = await generateSiteJSON ( options . jsDir , options . configDir , requestHost , sub , options . subFilePath , pwd ) ;
212233 const parseJSON = generateParseJSON ( options . jxDir , requestHost ) ;
213234 const livesJSON = generateLivesJSON ( requestHost ) ;
214235 const playerJSON = generatePlayerJSON ( options . configDir , requestHost ) ;
0 commit comments