11import { readdirSync , readFileSync , writeFileSync , existsSync } from 'fs' ;
22import path from 'path' ;
33import * as drpy from '../libs/drpyS.js' ;
4+ import { naturalSort } from '../utils/utils.js'
45
56// 工具函数:生成 JSON 数据
6- async function generateSiteJSON ( jsDir , requestHost , sub ) {
7+ async function generateSiteJSON ( jsDir , requestHost , sub , subFilePath ) {
78 const files = readdirSync ( jsDir ) ;
89 let valid_files = files . filter ( ( file ) => file . endsWith ( '.js' ) && ! file . startsWith ( '_' ) ) ; // 筛选出不是 "_" 开头的 .js 文件
10+ let sort_list = [ ] ;
911 if ( sub ) {
1012 if ( sub . mode === 0 ) {
1113 valid_files = valid_files . filter ( it => ( new RegExp ( sub . reg || '.*' ) ) . test ( it ) ) ;
1214 } else if ( sub . mode === 1 ) {
1315 valid_files = valid_files . filter ( it => ! ( new RegExp ( sub . reg || '.*' ) ) . test ( it ) ) ;
1416 }
17+ let sort_file = path . join ( path . dirname ( subFilePath ) , `./order_common.txt` ) ;
18+ if ( sub . sort ) {
19+ sort_file = path . join ( path . dirname ( subFilePath ) , `./${ sub . sort } .txt` ) ;
20+ }
21+ if ( existsSync ( sort_file ) ) {
22+ console . log ( 'sort_file:' , sort_file ) ;
23+ let sort_file_content = readFileSync ( sort_file , 'utf-8' ) ;
24+ // console.log(sort_file_content)
25+ sort_list = sort_file_content . split ( '\n' ) . filter ( it => it . trim ( ) ) . map ( it => it . trim ( ) ) ;
26+ // console.log(sort_list);
27+ }
1528 }
1629 let sites = [ ] ;
1730 for ( const file of valid_files ) {
@@ -26,9 +39,9 @@ async function generateSiteJSON(jsDir, requestHost, sub) {
2639 } ;
2740 try {
2841 ruleObject = await drpy . getRuleObject ( path . join ( jsDir , file ) ) ;
29- // log(file, ruleObject.title);
42+ // console. log(file, ruleObject.title);
3043 } catch ( e ) {
31- log ( `file:${ file } error:${ e . message } ` ) ;
44+ console . log ( `file:${ file } error:${ e . message } ` ) ;
3245 }
3346 const site = {
3447 key,
@@ -42,6 +55,7 @@ async function generateSiteJSON(jsDir, requestHost, sub) {
4255 } ;
4356 sites . push ( site ) ;
4457 }
58+ sites = naturalSort ( sites , 'name' , sort_list ) ;
4559 return { sites} ;
4660}
4761
@@ -91,10 +105,10 @@ function generateParseJSON(jxDir, requestHost) {
91105function getSubs ( subFilePath ) {
92106 let subs = [ ] ;
93107 try {
94- const subContent = readFileSync ( subFilePath ) ;
108+ const subContent = readFileSync ( subFilePath , 'utf-8' ) ;
95109 subs = JSON . parse ( subContent )
96110 } catch ( e ) {
97- log ( `读取订阅失败:${ e . message } ` ) ;
111+ console . log ( `读取订阅失败:${ e . message } ` ) ;
98112 }
99113 return subs
100114}
@@ -128,13 +142,13 @@ export default (fastify, options, done) => {
128142 if ( sub_code ) {
129143 let subs = getSubs ( options . subFilePath ) ;
130144 sub = subs . find ( it => it . code === sub_code ) ;
131- console . log ( 'sub:' , sub ) ;
145+ // console.log('sub:', sub);
132146 if ( sub && sub . status === 0 ) {
133147 return reply . status ( 500 ) . send ( { error : `此订阅码:【${ sub_code } 】已禁用` } ) ;
134148 }
135149 }
136150
137- const siteJSON = await generateSiteJSON ( options . jsDir , requestHost , sub ) ;
151+ const siteJSON = await generateSiteJSON ( options . jsDir , requestHost , sub , options . subFilePath ) ;
138152 const parseJSON = generateParseJSON ( options . jxDir , requestHost ) ;
139153 const configObj = { sites_count : siteJSON . sites . length , ...siteJSON , ...parseJSON } ;
140154 // console.log(configObj);
0 commit comments