@@ -6,6 +6,7 @@ import '../libs_drpy/jinja.js'
66import { naturalSort , urljoin , updateQueryString } from '../utils/utils.js'
77import { md5 } from "../libs_drpy/crypto-util.js" ;
88import { ENV } from "../utils/env.js" ;
9+ import FileHeaderManager from "../utils/fileHeaderManager.js" ;
910import { extractNameFromCode } from "../utils/python.js" ;
1011import { validateBasicAuth , validatePwd } from "../utils/api_validate.js" ;
1112import { getSitesMap } from "../utils/sites-map.js" ;
@@ -81,12 +82,14 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
8182
8283 let link_jar = '' ;
8384 let enableRuleName = ENV . get ( 'enable_rule_name' , '0' ) === '1' ;
85+ let isLoaded = await drpy . isLoaded ( ) ;
8486 // console.log('hide_adult:', ENV.get('hide_adult'));
8587 if ( ENV . get ( 'hide_adult' ) === '1' ) {
8688 valid_files = valid_files . filter ( it => ! ( new RegExp ( '\\[[密]\\]|密+' ) ) . test ( it ) ) ;
8789 }
8890 let SitesMap = getSitesMap ( configDir ) ;
8991 // console.log(SitesMap);
92+ log ( `开始生成ds的t4配置,jsDir:${ jsDir } ,源数量: ${ valid_files . length } ` ) ;
9093 const tasks = valid_files . map ( ( file ) => {
9194 return {
9295 func : async ( { file, jsDir, requestHost, pwd, drpy, SitesMap, jsEncoder} ) => {
@@ -100,17 +103,37 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
100103 filterable : 0 , // 固定值
101104 quickSearch : 0 , // 固定值
102105 } ;
103- try {
104- ruleObject = await drpy . getRuleObject ( path . join ( jsDir , file ) ) ;
105- } catch ( e ) {
106- throw new Error ( `Error parsing rule object for file: ${ file } , ${ e . message } ` ) ;
106+ let ruleMeta = { ...ruleObject } ;
107+ // if (baseName.includes('抖音直播弹幕')) {
108+ const filePath = path . join ( jsDir , file ) ;
109+ const header = await FileHeaderManager . readHeader ( filePath ) ;
110+ // console.log('ds header:', header);
111+ if ( ! header ) {
112+ try {
113+ ruleObject = await drpy . getRuleObject ( filePath ) ;
114+ } catch ( e ) {
115+ throw new Error ( `Error parsing rule object for file: ${ file } , ${ e . message } ` ) ;
116+ }
117+ Object . assign ( ruleMeta , {
118+ title : ruleObject . title ,
119+ searchable : ruleObject . searchable ,
120+ filterable : ruleObject . filterable ,
121+ quickSearch : ruleObject . quickSearch ,
122+ more : ruleObject . more ,
123+ logo : ruleObject . logo ,
124+ } ) ;
125+ // console.log('ds ruleMeta:', ruleMeta);
126+ await FileHeaderManager . writeHeader ( filePath , ruleMeta ) ;
127+ } else if ( ! isLoaded ) {
128+ const sizeInBytes = await FileHeaderManager . getFileSize ( filePath , { humanReadable : true } ) ;
129+ console . log ( `Loading RuleObject: ${ filePath } fileSize:${ sizeInBytes } ` ) ;
107130 }
108- ruleObject . title = enableRuleName ? ruleObject . title || baseName : baseName ;
131+ ruleMeta . title = enableRuleName ? ruleMeta . title || baseName : baseName ;
109132
110133 let fileSites = [ ] ;
111134 if ( baseName === 'push_agent' ) {
112135 let key = 'push_agent' ;
113- let name = `${ ruleObject . title } (DS)` ;
136+ let name = `${ ruleMeta . title } (DS)` ;
114137 fileSites . push ( { key, name} ) ;
115138 } else if ( SitesMap . hasOwnProperty ( baseName ) && Array . isArray ( SitesMap [ baseName ] ) ) {
116139 SitesMap [ baseName ] . forEach ( ( it ) => {
@@ -123,8 +146,8 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
123146 fileSites . push ( { key, name, ext} ) ;
124147 } ) ;
125148 } else {
126- let key = `drpyS_${ ruleObject . title } ` ;
127- let name = `${ ruleObject . title } (DS)` ;
149+ let key = `drpyS_${ ruleMeta . title } ` ;
150+ let name = `${ ruleMeta . title } (DS)` ;
128151 fileSites . push ( { key, name} ) ;
129152 }
130153
@@ -134,11 +157,7 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
134157 name : fileSite . name ,
135158 type : 4 , // 固定值
136159 api,
137- searchable : ruleObject . searchable ,
138- filterable : ruleObject . filterable ,
139- quickSearch : ruleObject . quickSearch ,
140- more : ruleObject . more ,
141- logo : ruleObject . logo ,
160+ ...ruleMeta ,
142161 ext : fileSite . ext || "" , // 固定为空字符串
143162 } ;
144163 sites . push ( site ) ;
@@ -183,18 +202,36 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
183202 filterable : 0 , // 固定值
184203 quickSearch : 0 , // 固定值
185204 } ;
186- try {
187- // console.log('file:', path.join(dr2Dir, file));
188- ruleObject = await drpy . getRuleObject ( path . join ( dr2Dir , file ) ) ;
189- } catch ( e ) {
190- throw new Error ( `Error parsing rule object for file: ${ file } , ${ e . message } ` ) ;
205+ let ruleMeta = { ...ruleObject } ;
206+ const filePath = path . join ( dr2Dir , file ) ;
207+ const header = await FileHeaderManager . readHeader ( filePath ) ;
208+ // console.log('dr2 header:', header);
209+ if ( ! header ) {
210+ try {
211+ ruleObject = await drpy . getRuleObject ( path . join ( filePath ) ) ;
212+ } catch ( e ) {
213+ throw new Error ( `Error parsing rule object for file: ${ file } , ${ e . message } ` ) ;
214+ }
215+ Object . assign ( ruleMeta , {
216+ title : ruleObject . title ,
217+ searchable : ruleObject . searchable ,
218+ filterable : ruleObject . filterable ,
219+ quickSearch : ruleObject . quickSearch ,
220+ more : ruleObject . more ,
221+ logo : ruleObject . logo ,
222+ } ) ;
223+ // console.log('dr2 ruleMeta:', ruleMeta);
224+ await FileHeaderManager . writeHeader ( filePath , ruleMeta ) ;
225+ } else if ( ! isLoaded ) {
226+ const sizeInBytes = await FileHeaderManager . getFileSize ( filePath , { humanReadable : true } ) ;
227+ console . log ( `Loading RuleObject: ${ filePath } fileSize:${ sizeInBytes } ` ) ;
191228 }
192- ruleObject . title = enableRuleName ? ruleObject . title || baseName : baseName ;
229+ ruleMeta . title = enableRuleName ? ruleMeta . title || baseName : baseName ;
193230
194231 let fileSites = [ ] ;
195232 if ( baseName === 'push_agent' ) {
196233 let key = 'push_agent' ;
197- let name = `${ ruleObject . title } (DR2)` ;
234+ let name = `${ ruleMeta . title } (DR2)` ;
198235 fileSites . push ( { key, name, ext} ) ;
199236 } else if ( SitesMap . hasOwnProperty ( baseName ) && Array . isArray ( SitesMap [ baseName ] ) ) {
200237 SitesMap [ baseName ] . forEach ( ( it ) => {
@@ -204,8 +241,8 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
204241 fileSites . push ( { key, name, ext : _ext } ) ;
205242 } ) ;
206243 } else {
207- let key = `drpy2_${ ruleObject . title } ` ;
208- let name = `${ ruleObject . title } (DR2)` ;
244+ let key = `drpy2_${ ruleMeta . title } ` ;
245+ let name = `${ ruleMeta . title } (DR2)` ;
209246 fileSites . push ( { key, name, ext} ) ;
210247 }
211248
@@ -215,11 +252,7 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
215252 name : fileSite . name ,
216253 type : 3 , // 固定值
217254 api,
218- searchable : ruleObject . searchable ,
219- filterable : ruleObject . filterable ,
220- quickSearch : ruleObject . quickSearch ,
221- more : ruleObject . more ,
222- logo : ruleObject . logo ,
255+ ...ruleMeta ,
223256 ext : fileSite . ext || "" , // 固定为空字符串
224257 } ;
225258 sites . push ( site ) ;
@@ -259,24 +292,39 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
259292 filterable : 1 , // 固定值
260293 quickSearch : 1 , // 固定值
261294 } ;
262- const fileContent = await readFile ( path . join ( pyDir , file ) , 'utf-8' ) ;
263- ruleObject . title = enableRuleName ? extractNameFromCode ( fileContent ) || baseName : baseName ;
295+ let ruleMeta = { ...ruleObject } ;
296+ const filePath = path . join ( pyDir , file ) ;
297+ const header = await FileHeaderManager . readHeader ( filePath ) ;
298+ // console.log('py header:', header);
299+ if ( ! header ) {
300+ const fileContent = await readFile ( filePath , 'utf-8' ) ;
301+ const title = extractNameFromCode ( fileContent ) || baseName ;
302+ Object . assign ( ruleMeta , {
303+ title : title ,
304+ } ) ;
305+ // console.log('py ruleMeta:', ruleMeta);
306+ await FileHeaderManager . writeHeader ( filePath , ruleMeta ) ;
307+ } else if ( ! isLoaded ) {
308+ const sizeInBytes = await FileHeaderManager . getFileSize ( filePath , { humanReadable : true } ) ;
309+ console . log ( `Loading RuleObject: ${ filePath } fileSize:${ sizeInBytes } ` ) ;
310+ }
311+ ruleMeta . title = enableRuleName ? ruleMeta . title || baseName : baseName ;
264312
265313 let fileSites = [ ] ;
266314 if ( baseName === 'push_agent' ) {
267315 let key = 'push_agent' ;
268- let name = `${ ruleObject . title } (hipy_t3 )` ;
316+ let name = `${ ruleMeta . title } (hipy )` ;
269317 fileSites . push ( { key, name, ext} ) ;
270318 } else if ( SitesMap . hasOwnProperty ( baseName ) && Array . isArray ( SitesMap [ baseName ] ) ) {
271319 SitesMap [ baseName ] . forEach ( ( it ) => {
272320 let key = `hipy_py_${ it . alias } ` ;
273- let name = `${ it . alias } (hipy_t3 )` ;
321+ let name = `${ it . alias } (hipy )` ;
274322 let _ext = updateQueryString ( ext , it . queryStr ) ;
275323 fileSites . push ( { key, name, ext : _ext } ) ;
276324 } ) ;
277325 } else {
278- let key = `hipy_py_${ ruleObject . title } ` ;
279- let name = `${ ruleObject . title } (hipy_t3 )` ;
326+ let key = `hipy_py_${ ruleMeta . title } ` ;
327+ let name = `${ ruleMeta . title } (hipy )` ;
280328 fileSites . push ( { key, name, ext} ) ;
281329 }
282330
@@ -286,11 +334,7 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
286334 name : fileSite . name ,
287335 type : 3 , // 固定值
288336 api,
289- searchable : ruleObject . searchable ,
290- filterable : ruleObject . filterable ,
291- quickSearch : ruleObject . quickSearch ,
292- more : ruleObject . more ,
293- logo : ruleObject . logo ,
337+ ...ruleMeta ,
294338 ext : fileSite . ext || "" , // 固定为空字符串
295339 } ;
296340 sites . push ( site ) ;
0 commit comments