1
1
import { readdirSync , readFileSync , writeFileSync , existsSync } from 'fs' ;
2
2
import path from 'path' ;
3
3
import * as drpy from '../libs/drpyS.js' ;
4
+ import { naturalSort } from '../utils/utils.js'
4
5
5
6
// 工具函数:生成 JSON 数据
6
- async function generateSiteJSON ( jsDir , requestHost , sub ) {
7
+ async function generateSiteJSON ( jsDir , requestHost , sub , subFilePath ) {
7
8
const files = readdirSync ( jsDir ) ;
8
9
let valid_files = files . filter ( ( file ) => file . endsWith ( '.js' ) && ! file . startsWith ( '_' ) ) ; // 筛选出不是 "_" 开头的 .js 文件
10
+ let sort_list = [ ] ;
9
11
if ( sub ) {
10
12
if ( sub . mode === 0 ) {
11
13
valid_files = valid_files . filter ( it => ( new RegExp ( sub . reg || '.*' ) ) . test ( it ) ) ;
12
14
} else if ( sub . mode === 1 ) {
13
15
valid_files = valid_files . filter ( it => ! ( new RegExp ( sub . reg || '.*' ) ) . test ( it ) ) ;
14
16
}
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
+ }
15
28
}
16
29
let sites = [ ] ;
17
30
for ( const file of valid_files ) {
@@ -26,9 +39,9 @@ async function generateSiteJSON(jsDir, requestHost, sub) {
26
39
} ;
27
40
try {
28
41
ruleObject = await drpy . getRuleObject ( path . join ( jsDir , file ) ) ;
29
- // log(file, ruleObject.title);
42
+ // console. log(file, ruleObject.title);
30
43
} catch ( e ) {
31
- log ( `file:${ file } error:${ e . message } ` ) ;
44
+ console . log ( `file:${ file } error:${ e . message } ` ) ;
32
45
}
33
46
const site = {
34
47
key,
@@ -42,6 +55,7 @@ async function generateSiteJSON(jsDir, requestHost, sub) {
42
55
} ;
43
56
sites . push ( site ) ;
44
57
}
58
+ sites = naturalSort ( sites , 'name' , sort_list ) ;
45
59
return { sites} ;
46
60
}
47
61
@@ -91,10 +105,10 @@ function generateParseJSON(jxDir, requestHost) {
91
105
function getSubs ( subFilePath ) {
92
106
let subs = [ ] ;
93
107
try {
94
- const subContent = readFileSync ( subFilePath ) ;
108
+ const subContent = readFileSync ( subFilePath , 'utf-8' ) ;
95
109
subs = JSON . parse ( subContent )
96
110
} catch ( e ) {
97
- log ( `读取订阅失败:${ e . message } ` ) ;
111
+ console . log ( `读取订阅失败:${ e . message } ` ) ;
98
112
}
99
113
return subs
100
114
}
@@ -128,13 +142,13 @@ export default (fastify, options, done) => {
128
142
if ( sub_code ) {
129
143
let subs = getSubs ( options . subFilePath ) ;
130
144
sub = subs . find ( it => it . code === sub_code ) ;
131
- console . log ( 'sub:' , sub ) ;
145
+ // console.log('sub:', sub);
132
146
if ( sub && sub . status === 0 ) {
133
147
return reply . status ( 500 ) . send ( { error : `此订阅码:【${ sub_code } 】已禁用` } ) ;
134
148
}
135
149
}
136
150
137
- const siteJSON = await generateSiteJSON ( options . jsDir , requestHost , sub ) ;
151
+ const siteJSON = await generateSiteJSON ( options . jsDir , requestHost , sub , options . subFilePath ) ;
138
152
const parseJSON = generateParseJSON ( options . jxDir , requestHost ) ;
139
153
const configObj = { sites_count : siteJSON . sites . length , ...siteJSON , ...parseJSON } ;
140
154
// console.log(configObj);
0 commit comments