|
1 | | -# Extension Mirror Tool |
| 1 | +# ExtensionMirror - 扩展镜像同步工具 |
2 | 2 |
|
3 | | -这是一个用于同步扩展项目的命令行工具,可以从 abc.520gxx.com 获取扩展列表并同步到目标平台。 |
| 3 | +一个用于同步和管理扩展的工具,支持40code和SharkPools两种模式。 |
| 4 | + |
| 5 | +## 项目结构 |
| 6 | + |
| 7 | +``` |
| 8 | +ExtensionMirror/ |
| 9 | +├── app.js # 统一入口文件 |
| 10 | +├── modules/ # 模块目录 |
| 11 | +│ ├── 40code/ # 40code相关模块 |
| 12 | +│ │ └── 40codeMirror.js # 40code镜像处理器 |
| 13 | +│ └── sharkpools/ # SharkPools相关模块 |
| 14 | +│ └── sharkPoolsProcessor.js # SharkPools扩展处理器 |
| 15 | +├── components/ # 共享组件 |
| 16 | +│ ├── extensionFetcher.js # 扩展获取器 |
| 17 | +│ ├── extensionSyncService.js # 扩展同步服务 |
| 18 | +│ └── zerocatApi.js # ZeroCat API客户端 |
| 19 | +├── SharkPools-Extensions/ # SharkPools扩展库 |
| 20 | +└── env.example # 环境变量示例 |
| 21 | +``` |
4 | 22 |
|
5 | 23 | ## 功能特性 |
6 | 24 |
|
7 | | -- 从 https://api.abc.520gxx.com/work/ext 获取扩展列表 |
8 | | -- 支持通过扩展ID列表指定要同步的扩展 |
9 | | -- 支持通过作者列表自动获取该作者的所有扩展 |
10 | | -- 检查目标扩展是否已存在 |
11 | | -- 自动创建新项目(如果不存在) |
12 | | -- 同步扩展代码并创建提交 |
13 | | -- 智能比较代码内容,避免重复提交 |
14 | | -- 支持批量处理多个扩展 |
| 25 | +### 40code模式 |
| 26 | +- 同步指定扩展和作者的扩展 |
| 27 | +- 支持强制模式跳过差异比较 |
| 28 | +- 自动获取作者的所有扩展 |
15 | 29 |
|
16 | | -## 安装 |
| 30 | +### SharkPools模式 |
| 31 | +- 处理SharkPools扩展库 |
| 32 | +- 自动解析扩展头信息 |
| 33 | +- 支持SVG转PNG缩略图 |
| 34 | +- 文件变化监听 |
17 | 35 |
|
18 | | -1. 进入 ExtensionMirror 目录: |
19 | | -```bash |
20 | | -cd ExtensionMirror |
21 | | -``` |
| 36 | +## 安装和配置 |
22 | 37 |
|
23 | | -2. 安装依赖: |
| 38 | +1. 安装依赖: |
24 | 39 | ```bash |
25 | 40 | npm install |
26 | 41 | ``` |
27 | 42 |
|
28 | | -## 配置 |
29 | | - |
30 | | -1. 复制环境变量示例文件: |
| 43 | +2. 复制环境变量文件: |
31 | 44 | ```bash |
32 | 45 | cp env.example .env |
33 | 46 | ``` |
34 | 47 |
|
35 | | -2. 编辑 `.env` 文件,设置你的配置: |
| 48 | +3. 配置环境变量: |
36 | 49 | ```env |
37 | | -ZEROCAT_TOKEN_40CODE=your_api_ZEROCAT_TOKEN_40CODE_here |
38 | | -ZEROCAT_BACKEND=https://your-api-host.com |
| 50 | +ZEROCAT_BACKEND=your_backend_url |
| 51 | +ZEROCAT_TOKEN_40CODE=your_40code_token |
| 52 | +ZEROCAT_TOKEN_SHARKPOOL=your_sharkpool_token |
39 | 53 | ``` |
40 | 54 |
|
41 | 55 | ## 使用方法 |
42 | 56 |
|
43 | | -### 基本使用 |
44 | | -运行同步程序: |
| 57 | +### 40code模式 |
45 | 58 | ```bash |
46 | | -npm start |
47 | | -``` |
| 59 | +# 正常模式(比较文件差异) |
| 60 | +node app.js |
48 | 61 |
|
49 | | -或者直接运行: |
50 | | -```bash |
51 | | -node mirror.js |
| 62 | +# 强制模式(跳过差异比较) |
| 63 | +node app.js --force |
52 | 64 | ``` |
53 | 65 |
|
54 | | -### 强制模式 |
55 | | -跳过差异比较,强制更新所有扩展: |
| 66 | +### SharkPools模式 |
56 | 67 | ```bash |
57 | | -node mirror.js -force |
58 | | -``` |
| 68 | +# 处理SharkPools扩展 |
| 69 | +node app.js --sharkpools |
59 | 70 |
|
60 | | -或者: |
61 | | -```bash |
62 | | -node mirror.js --force |
| 71 | +# 强制模式处理SharkPools扩展 |
| 72 | +node app.js --sharkpools --force |
63 | 73 | ``` |
64 | 74 |
|
65 | 75 | ## 配置说明 |
66 | 76 |
|
67 | | -### 目标扩展配置 |
68 | | - |
69 | | -程序支持两种方式指定要同步的扩展: |
70 | | - |
71 | | -1. **通过扩展ID列表** (`targetExtensions`): 直接指定要同步的扩展ID |
72 | | -2. **通过作者列表** (`targetAuthors`): 自动获取指定作者的所有扩展 |
73 | | - |
74 | | -在 `mirror.js` 文件中配置: |
| 77 | +### 40code配置 |
| 78 | +在 `modules/40code/40codeMirror.js` 中修改配置: |
75 | 79 |
|
76 | 80 | ```javascript |
77 | | -const config = { |
78 | | - // ... 其他配置 |
| 81 | +this.config = { |
79 | 82 | targetExtensions: [ |
80 | | - 'bitwiseoper', |
81 | | - 'strmani', |
82 | | - // ... 更多扩展ID |
| 83 | + // 在这里添加目标扩展ID |
83 | 84 | ], |
84 | 85 | targetAuthors: [ |
85 | | - '40code', // 获取 40code 作者的所有扩展 |
86 | | - 'wuyuan', // 获取 wuyuan 作者的所有扩展 |
87 | | - // ... 更多作者 |
| 86 | + "0832", |
| 87 | + "NOname", |
| 88 | + "40code", |
| 89 | + // 在这里添加目标作者列表 |
88 | 90 | ] |
89 | 91 | }; |
90 | 92 | ``` |
91 | | -= |
92 | | - |
93 | | -## 工作流程 |
94 | | - |
95 | | -1. **获取扩展列表**: 从 abc.520gxx.com 的API获取所有可用扩展 |
96 | | -2. **过滤目标扩展**: |
97 | | - - 处理 `targetExtensions` 列表中指定的扩展ID |
98 | | - - 处理 `targetAuthors` 列表中指定作者的所有扩展 |
99 | | - - 自动去重,避免重复处理同一扩展 |
100 | | -3. **检查项目存在性**: 检查 `40code/扩展名` 是否已存在 |
101 | | -4. **创建项目**: 如果不存在,创建新项目(类型为text) |
102 | | -5. **初始化项目**: 调用 `/project/initlize` 接口初始化项目 |
103 | | -6. **获取代码**: 从 abc.520gxx.com/ext/扩展名.js 获取最新代码 |
104 | | -7. **保存文件**: 调用 `/project/savefile` 接口保存文件,获取 accessFileToken |
105 | | -8. **创建提交**: 使用 accessFileToken 创建新提交 |
106 | | - |
107 | | -## 日志输出 |
108 | | - |
109 | | -程序会输出详细的日志信息: |
110 | | -- ℹ️ 信息日志 |
111 | | -- ✅ 成功日志 |
112 | | -- ❌ 错误日志 |
113 | | - |
114 | | -## 注意事项 |
115 | | - |
116 | | -- 确保你有足够的API权限来创建项目和提交 |
117 | | -- 程序会在请求之间添加1秒延迟,避免请求过快 |
118 | | -- 如果扩展代码获取失败,会跳过该扩展并继续处理其他扩展 |
119 | | -- 用户名固定为 "40code",项目名使用扩展的 extId |
| 93 | + |
| 94 | +### SharkPools配置 |
| 95 | +SharkPools扩展需要放在 `SharkPools-Extensions/extension-code/` 目录下,并包含以下头信息: |
| 96 | + |
| 97 | +```javascript |
| 98 | +// Name: 扩展名称 |
| 99 | +// ID: 扩展ID |
| 100 | +// Description: 扩展描述 |
| 101 | +// By: 作者名称 |
| 102 | +``` |
| 103 | + |
| 104 | +## 开发说明 |
| 105 | + |
| 106 | +### 模块化设计 |
| 107 | +- `app.js`: 统一入口,处理命令行参数和模式选择 |
| 108 | +- `modules/40code/`: 40code相关功能模块 |
| 109 | +- `modules/sharkpools/`: SharkPools相关功能模块 |
| 110 | +- `components/`: 共享组件,可被多个模块复用 |
| 111 | + |
| 112 | +### 扩展新功能 |
| 113 | +1. 在 `modules/` 下创建新的模块目录 |
| 114 | +2. 实现模块的主要功能类 |
| 115 | +3. 在 `app.js` 中添加新的模式支持 |
| 116 | + |
| 117 | +## 许可证 |
| 118 | + |
| 119 | +MIT License |
0 commit comments