Skip to content

Commit 14ca69e

Browse files
committed
update:发布1.1.4版本
1 parent b6caaa9 commit 14ca69e

20 files changed

+752
-472
lines changed

Diff for: README.md

+25-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# drpyS(drpy-node)
22

33
nodejs作为服务端的drpy实现。全面升级异步写法
4-
积极开发中,每日一更,当前进度 `29%`
4+
积极开发中,每日一更,当前进度 `30%`
55

66
* [本地配置接口-动态本地](/config?pwd=)
77
* [本地配置接口-动态外网/局域网](/config/1?pwd=)
@@ -16,12 +16,13 @@ nodejs作为服务端的drpy实现。全面升级异步写法
1616

1717
## 更新记录
1818

19-
### 20250107
19+
### 20250108
2020

21-
更新至V1.1.3
21+
更新至V1.1.4
2222

23-
1. req系列函数修复
24-
2. 增加新源,优化推送
23+
1. 更新文档
24+
2. 修复bug
25+
3. 增加 `batchExecute`
2526

2627
[点此查看完整更新记录](docs/updateRecord.md)
2728

@@ -112,3 +113,22 @@ pm2 restart drpys
112113
* [代理转发ds](/req/https://github.com/hjdhnx/drpy-node)
113114
* [代理转发百度](/req/https://www.baidu.com)
114115
* [代理转发范冰冰直播源](/req/https://live.fanmingming.com/tv/m3u/ipv6.m3u)
116+
117+
## 友链(白嫖接口服务)
118+
119+
* [猫影视git文件加速](https://github.catvod.com/)
120+
* [猫影视多功能主页](https://catvod.com/)
121+
122+
## 版权
123+
124+
本项目主体框架由道长开发,项目内相关源收集于互联网,可供学习交流测试使用,禁止商用或者直接转卖代码,转载代码请带上出处。
125+
126+
## 免责声明
127+
128+
1. 此程序仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
129+
2. 由于此程序仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
130+
3. 请勿将此程序用于任何商业或非法目的,若违反规定请自行对此负责。
131+
4. 此程序涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
132+
5. 本人对任何程序引发的问题概不负责,包括但不限于由程序错误引起的任何损失和损害。
133+
6. 如果任何单位或个人认为此程序可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此程序。
134+
7. 所有直接或间接使用、查看此程序的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此程序,即视为您已接受此免责声明。

Diff for: controllers/api.js

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export default (fastify, options, done) => {
2525
// 根据请求方法选择参数来源
2626
const query = method === 'GET' ? request.query : request.body;
2727
const moduleExt = query.extend || '';
28+
// console.log('moduleExt:', typeof moduleExt, moduleExt);
2829
const protocol = request.protocol;
2930
const hostname = request.hostname;
3031
// const proxyUrl = `${protocol}://${hostname}${request.url}`.split('?')[0].replace('/api/', '/proxy/') + '/?do=js';

Diff for: controllers/config.js

+70-57
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {naturalSort, urljoin} from '../utils/utils.js'
55
import {ENV} from "../utils/env.js";
66
import {validatePwd} from "../utils/api_validate.js";
77
import {getSitesMap} from "../utils/sites-map.js";
8+
import batchExecute from '../libs_drpy/batchExecute.js';
89

910
const {jsEncoder} = drpy;
1011

@@ -44,66 +45,78 @@ async function generateSiteJSON(jsDir, configDir, requestHost, sub, subFilePath,
4445
}
4546
let SitesMap = getSitesMap(configDir);
4647
// console.log(SitesMap);
47-
// 使用 Promise.all 并发执行文件的处理
48-
const filePromises = valid_files.map(async (file) => {
49-
const baseName = path.basename(file, '.js'); // 去掉文件扩展名
50-
let api = `${requestHost}/api/${baseName}`; // 使用请求的 host 地址,避免硬编码端口
51-
if (pwd) {
52-
api += `?pwd=${pwd}`;
53-
}
54-
let ruleObject = {
55-
searchable: 0, // 固定值
56-
filterable: 0, // 固定值
57-
quickSearch: 0, // 固定值
58-
};
59-
try {
60-
ruleObject = await drpy.getRuleObject(path.join(jsDir, file));
61-
// console.log(file, ruleObject.title);
62-
} catch (e) {
63-
console.log(`file:${file} error:${e.message}`);
64-
}
65-
let fileSites = [];
66-
if (baseName === 'push_agent') {
67-
let key = 'push_agent';
68-
let name = `${ruleObject.title}(DS)`;
69-
fileSites.push({key, name})
70-
} else if (SitesMap.hasOwnProperty(baseName) && Array.isArray(SitesMap[baseName])) {
71-
SitesMap[baseName].forEach((it) => {
72-
let key = `drpyS_${it.alias}`;
73-
let name = `${it.alias}(DS)`;
74-
let ext = '';
75-
if (it.queryObject.type === 'url') {
76-
ext = it.queryObject.params;
77-
} else {
78-
ext = it.queryStr;
48+
const tasks = valid_files.map((file) => {
49+
return {
50+
func: async ({file, jsDir, requestHost, pwd, drpy, SitesMap, jsEncoder}) => {
51+
const baseName = path.basename(file, '.js'); // 去掉文件扩展名
52+
let api = `${requestHost}/api/${baseName}`; // 使用请求的 host 地址,避免硬编码端口
53+
if (pwd) {
54+
api += `?pwd=${pwd}`;
7955
}
80-
if (ext) {
81-
ext = jsEncoder.gzip(ext);
56+
let ruleObject = {
57+
searchable: 0, // 固定值
58+
filterable: 0, // 固定值
59+
quickSearch: 0, // 固定值
60+
};
61+
try {
62+
ruleObject = await drpy.getRuleObject(path.join(jsDir, file));
63+
} catch (e) {
64+
throw new Error(`Error parsing rule object for file: ${file}, ${e.message}`);
8265
}
83-
fileSites.push({key: key, name: name, ext: ext})
84-
});
85-
} else {
86-
let key = `drpyS_${baseName}`;
87-
let name = `${baseName}(DS)`;
88-
fileSites.push({key, name})
89-
}
90-
fileSites.forEach((fileSite) => {
91-
const site = {
92-
key: fileSite.key,
93-
name: fileSite.name,
94-
type: 4, // 固定值
95-
api,
96-
searchable: ruleObject.searchable,
97-
filterable: ruleObject.filterable,
98-
quickSearch: ruleObject.quickSearch,
99-
more: ruleObject.more,
100-
ext: fileSite.ext || "", // 固定为空字符串
101-
};
102-
sites.push(site);
103-
});
66+
67+
let fileSites = [];
68+
if (baseName === 'push_agent') {
69+
let key = 'push_agent';
70+
let name = `${ruleObject.title}(DS)`;
71+
fileSites.push({key, name});
72+
} else if (SitesMap.hasOwnProperty(baseName) && Array.isArray(SitesMap[baseName])) {
73+
SitesMap[baseName].forEach((it) => {
74+
let key = `drpyS_${it.alias}`;
75+
let name = `${it.alias}(DS)`;
76+
let ext = it.queryObject.type === 'url' ? it.queryObject.params : it.queryStr;
77+
if (ext) {
78+
ext = jsEncoder.gzip(ext);
79+
}
80+
fileSites.push({key, name, ext});
81+
});
82+
} else {
83+
let key = `drpyS_${baseName}`;
84+
let name = `${baseName}(DS)`;
85+
fileSites.push({key, name});
86+
}
87+
88+
fileSites.forEach((fileSite) => {
89+
const site = {
90+
key: fileSite.key,
91+
name: fileSite.name,
92+
type: 4, // 固定值
93+
api,
94+
searchable: ruleObject.searchable,
95+
filterable: ruleObject.filterable,
96+
quickSearch: ruleObject.quickSearch,
97+
more: ruleObject.more,
98+
ext: fileSite.ext || "", // 固定为空字符串
99+
};
100+
sites.push(site);
101+
});
102+
},
103+
param: {file, jsDir, requestHost, pwd, drpy, SitesMap, jsEncoder},
104+
id: file,
105+
};
104106
});
105-
// 等待所有的文件处理完成
106-
await Promise.all(filePromises);
107+
108+
const listener = {
109+
func: (param, id, error, result) => {
110+
if (error) {
111+
console.error(`Error processing file ${id}:`, error.message);
112+
} else {
113+
// console.log(`Successfully processed file ${id}:`, result);
114+
}
115+
},
116+
param: {}, // 外部参数可以在这里传入
117+
};
118+
119+
await batchExecute(tasks, listener);
107120
// 订阅再次处理别名的情况
108121
if (sub) {
109122
if (sub.mode === 0) {

0 commit comments

Comments
 (0)