jav-manager 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +188 -0
- package/README.ko.md +188 -0
- package/README.md +173 -0
- package/README.zh-CN.md +188 -0
- package/bin/jav-manager.js +3 -0
- package/dist/cli.js +774 -0
- package/dist/config.js +324 -0
- package/dist/context.js +2 -0
- package/dist/data/cache.js +201 -0
- package/dist/data/curlImpersonateFetcher.js +499 -0
- package/dist/data/everything.js +130 -0
- package/dist/data/javdb.js +646 -0
- package/dist/data/qbittorrent.js +214 -0
- package/dist/gui.js +417 -0
- package/dist/index.js +81 -0
- package/dist/interfaces.js +2 -0
- package/dist/localization.js +114 -0
- package/dist/models.js +15 -0
- package/dist/services.js +526 -0
- package/dist/utils/appInfo.js +24 -0
- package/dist/utils/appPaths.js +31 -0
- package/dist/utils/cliDisplay.js +551 -0
- package/dist/utils/curlBinaryResolver.js +154 -0
- package/dist/utils/httpHelper.js +78 -0
- package/dist/utils/platformShell.js +18 -0
- package/dist/utils/sizeParser.js +48 -0
- package/dist/utils/telemetryEndpoints.js +44 -0
- package/dist/utils/torrentNameParser.js +44 -0
- package/dist/utils/weightCalculator.js +38 -0
- package/package.json +41 -0
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
# JavManager
|
|
2
|
+
|
|
3
|
+
一个轻量级的 GUI + CLI 工具,用于自动化 JAV 内容管理,具有快速重复搜索、种子搜索和可选的 qBittorrent 集成功能。
|
|
4
|
+
|
|
5
|
+
[中文](README.zh-CN.md) | [日本語](README.ja.md) | [한국어](README.ko.md)
|
|
6
|
+
|
|
7
|
+
> **注意:** Everything(本地搜索)和 qBittorrent(下载)都是可选的集成功能。JavManager 可以在没有它们的情况下工作(它仍然可以搜索 JavDB 并输出磁力链接)。如果您需要支持其他具有 HTTP API 的工具(例如其他搜索引擎或下载客户端),请[创建 issue](../../issues/new)。
|
|
8
|
+
|
|
9
|
+
## 功能特性
|
|
10
|
+
|
|
11
|
+
- GUI (Avalonia) 和控制台模式 (Spectre.Console)
|
|
12
|
+
- 多语言 GUI(英语、中文、日语、韩语)
|
|
13
|
+
- 从 JavDB 搜索 JAV 元数据和种子/磁力链接
|
|
14
|
+
- 通过 Everything 搜索引擎检查本地文件
|
|
15
|
+
- 通过 qBittorrent WebUI API 下载
|
|
16
|
+
- 本地 JSON 缓存用于重复搜索
|
|
17
|
+
- 智能种子选择,基于权重的排名(标记 + 权重)
|
|
18
|
+
|
|
19
|
+
## 工作流程
|
|
20
|
+
|
|
21
|
+
```mermaid
|
|
22
|
+
flowchart TD
|
|
23
|
+
A[输入 JAV ID] --> B{数据可用?}
|
|
24
|
+
B -->|是| C[使用现有元数据]
|
|
25
|
+
B -->|否| D[从 JavDB 获取]
|
|
26
|
+
C --> E[排名种子]
|
|
27
|
+
D --> E
|
|
28
|
+
E --> F{本地文件存在?}
|
|
29
|
+
F -->|是| G[显示选项]
|
|
30
|
+
F -->|否| H[添加到下载器]
|
|
31
|
+
G --> H
|
|
32
|
+
H --> I[完成]
|
|
33
|
+
|
|
34
|
+
classDef primary fill:#2563eb,stroke:#1d4ed8,color:#ffffff;
|
|
35
|
+
classDef decision fill:#f59e0b,stroke:#d97706,color:#111827;
|
|
36
|
+
classDef neutral fill:#ffffff,stroke:#e5e7eb,color:#1f2937;
|
|
37
|
+
|
|
38
|
+
class A,H,I primary;
|
|
39
|
+
class B,F decision;
|
|
40
|
+
class C,D,E,G neutral;
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 外部依赖
|
|
44
|
+
|
|
45
|
+
| 服务 | 必需 | 用途 | 链接 |
|
|
46
|
+
|---------|----------|---------|------|
|
|
47
|
+
| JavDB | 是 | 元数据和磁力链接 | [javdb.com](https://javdb.com/) |
|
|
48
|
+
| Everything | 否(可选) | 本地文件搜索 | [voidtools.com](https://www.voidtools.com/everything-1.5a/) ([HTTP 插件](https://www.voidtools.com/forum/viewtopic.php?f=12&t=9799)) |
|
|
49
|
+
| qBittorrent | 否(可选) | 种子下载 | [qBittorrent](https://github.com/qbittorrent/qBittorrent) |
|
|
50
|
+
|
|
51
|
+
### Cloudflare 403 问题
|
|
52
|
+
|
|
53
|
+
如果 JavDB 返回 HTTP 403,很可能是由于 Cloudflare 挑战。JavManager 默认使用 **curl-impersonate 来模拟真实浏览器的 TLS/HTTP2 指纹(无浏览器自动化)。** 如果您仍然看到 403,请尝试不同的镜像 URL 或检查您的 IP 是否被阻止(参见 `doc/CloudflareBypass.md`)。
|
|
54
|
+
|
|
55
|
+
### JavDB 域名 API
|
|
56
|
+
|
|
57
|
+
Cloudflare Worker 提供了一个 API 端点,用于从官方网站获取最新的 JavDB 域名:
|
|
58
|
+
|
|
59
|
+
**端点:** `GET /api/javdb-domain`
|
|
60
|
+
|
|
61
|
+
**示例请求:**
|
|
62
|
+
```bash
|
|
63
|
+
curl https://your-worker-url/api/javdb-domain
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**示例响应:**
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"success": true,
|
|
70
|
+
"domains": ["javdb565.com"]
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**错误响应:**
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"success": false,
|
|
78
|
+
"error": "Failed to fetch domain from javdb.com",
|
|
79
|
+
"message": "Could not extract latest domain from javdb.com"
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
此 API 实时从 `https://javdb.com/` 获取最新的 JavDB 域名。API 包含 10 秒超时和适当的错误处理。
|
|
84
|
+
|
|
85
|
+
### 遥测 + "Jav 趋势"(可选)
|
|
86
|
+
|
|
87
|
+
如果 `Telemetry:Enabled` 为 true,JavManager 可以发送:
|
|
88
|
+
|
|
89
|
+
- 启动事件到 `POST /api/telemetry`
|
|
90
|
+
- JAV 元数据到 `POST /api/javinfo`(由 worker UI 使用;重复报告会递增每个 ID 的搜索计数器)
|
|
91
|
+
|
|
92
|
+
worker 还提供了一个小型 UI:
|
|
93
|
+
|
|
94
|
+
- `/` 概览
|
|
95
|
+
- `/jav` "Jav 趋势"(最近的 JavInfo 记录 + 搜索计数)
|
|
96
|
+
|
|
97
|
+
## 配置
|
|
98
|
+
|
|
99
|
+
设置通过 `appsettings.json`(和可选的 `appsettings.Development.json`)配置。
|
|
100
|
+
|
|
101
|
+
- 开发环境:编辑 `JavManager/appsettings.json`(它会被复制到 `bin/Debug/net10.0/appsettings.json`)。
|
|
102
|
+
- 发布/单文件:应用程序在首次运行时会读取(如果不存在则创建)与可执行文件相邻的 `appsettings.json`。
|
|
103
|
+
|
|
104
|
+
配置参考:
|
|
105
|
+
|
|
106
|
+
| 章节 | 键 | 必需 | 默认值 | 描述 |
|
|
107
|
+
|---------|-----|----------|---------|-------------|
|
|
108
|
+
| Everything | `BaseUrl` | 否(可选) | _(空)_ | Everything HTTP 服务器基础 URL(包含协议和主机)。如果不可用,本地去重将被跳过。 |
|
|
109
|
+
| Everything | `UserName` | 否(可选) | _(空)_ | 基本认证用户名。 |
|
|
110
|
+
| Everything | `Password` | 否(可选) | _(空)_ | 基本认证密码。 |
|
|
111
|
+
| QBittorrent | `BaseUrl` | 否(可选) | _(空)_ | qBittorrent WebUI 基础 URL(如果需要包含端口)。如果不可用/认证失败,JavManager 会打印磁力链接而不添加到下载队列。 |
|
|
112
|
+
| QBittorrent | `UserName` | 否(可选) | _(空)_ | WebUI 用户名。 |
|
|
113
|
+
| QBittorrent | `Password` | 否(可选) | _(空)_ | WebUI 密码。 |
|
|
114
|
+
| JavDb | `BaseUrl` | 是 | `https://javdb.com` | 主要 JavDB 基础 URL。 |
|
|
115
|
+
| JavDb | `MirrorUrls` | 否(可选) | `[]` | 其他镜像 URL(数组)。 |
|
|
116
|
+
| JavDb | `RequestTimeout` | 否(可选) | `30000` | 请求超时(毫秒)。 |
|
|
117
|
+
| JavDb | `UserAgent` | 否(可选) | _(空)_ | 自定义 User-Agent 字符串(仅在 HttpClient 回退模式下使用)。 |
|
|
118
|
+
| JavDb | `CurlImpersonate:Enabled` | 否(可选) | `true` | 为 JavDB 请求启用 curl-impersonate(推荐)。 |
|
|
119
|
+
| JavDb | `CurlImpersonate:Target` | 否(可选) | `chrome116` | `curl_easy_impersonate()` 的模拟目标名称(例如 `chrome116`)。 |
|
|
120
|
+
| JavDb | `CurlImpersonate:LibraryPath` | 否(可选) | _(空)_ | `libcurl.dll` 的可选显式路径(否则自动检测)。 |
|
|
121
|
+
| JavDb | `CurlImpersonate:CaBundlePath` | 否(可选) | _(空)_ | `cacert.pem` 的可选路径(否则自动检测)。 |
|
|
122
|
+
| JavDb | `CurlImpersonate:DefaultHeaders` | 否(可选) | `true` | 使用 curl-impersonate 内置的默认 HTTP 头。 |
|
|
123
|
+
| Download | `DefaultSavePath` | 否(可选) | _(空)_ | 将种子添加到 qBittorrent 时的默认下载路径。 |
|
|
124
|
+
| Download | `DefaultCategory` | 否(可选) | `jav` | qBittorrent 中的默认类别。 |
|
|
125
|
+
| Download | `DefaultTags` | 否(可选) | `jav-manager` | 创建的下载的默认标签。 |
|
|
126
|
+
| LocalCache | `Enabled` | 否(可选) | `true` | 启用或禁用本地缓存存储。 |
|
|
127
|
+
| LocalCache | `DatabasePath` | 否(可选) | _(空)_ | JSON 缓存文件路径(留空则使用与可执行文件相邻的默认 `jav_cache.json`)。 |
|
|
128
|
+
| LocalCache | `CacheExpirationDays` | 否(可选) | `0` | 缓存 TTL(天)(0 表示禁用过期)。 |
|
|
129
|
+
| Console | `Language` | 否(可选) | `en` | UI 语言(`en`、`zh` 或 `auto`)。 |
|
|
130
|
+
| Console | `HideOtherTorrents` | 否(可选) | `true` | 在列表中隐藏不匹配的种子。 |
|
|
131
|
+
| Telemetry | `Enabled` | 否(可选) | `true` | 启用或禁用匿名遥测。 |
|
|
132
|
+
| Telemetry | `Endpoint` | 否(可选) | `https://jav-manager.techfetch.dev` | 基础端点(应用程序会发送到 `/api/telemetry` 和 `/api/javinfo`)。 |
|
|
133
|
+
| Update | `Enabled` | 否(可选) | `true` | 启用或禁用更新检查。 |
|
|
134
|
+
| Update | `AutoCheckOnStartup` | 否(可选) | `true` | 在启动时自动检查更新(GUI)。 |
|
|
135
|
+
| Update | `GitHubRepo` | 否(可选) | `jqknono/jav-manager` | 用于更新检查的 GitHub 仓库。 |
|
|
136
|
+
|
|
137
|
+
注意:
|
|
138
|
+
- `JavInfoSync:*` 是一个旧的章节名称;新版本使用 `Telemetry:*`(应用程序仍然读取旧键以保持向后兼容)。
|
|
139
|
+
- 高级:配置也支持带有 `JAVMANAGER_` 前缀的环境变量(嵌套键使用 `__),但基于文件的配置是主要支持的方法。
|
|
140
|
+
|
|
141
|
+
## 使用
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
# GUI(无参数时默认)
|
|
145
|
+
dotnet run --project JavManager/JavManager.csproj
|
|
146
|
+
|
|
147
|
+
# 控制台(交互式)
|
|
148
|
+
dotnet run --project JavManager/JavManager.csproj -- --no-gui
|
|
149
|
+
|
|
150
|
+
# 控制台(非交互式)
|
|
151
|
+
dotnet run --project JavManager/JavManager.csproj -- STARS-001
|
|
152
|
+
|
|
153
|
+
# 显示帮助
|
|
154
|
+
dotnet run --project JavManager/JavManager.csproj -- help
|
|
155
|
+
|
|
156
|
+
# 显示版本
|
|
157
|
+
dotnet run --project JavManager/JavManager.csproj -- version
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
对于控制台命令,运行 `dotnet run --project JavManager/JavManager.csproj -- help`。
|
|
161
|
+
|
|
162
|
+
## 构建和打包
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
# 构建
|
|
166
|
+
dotnet build JavManager/JavManager.csproj
|
|
167
|
+
|
|
168
|
+
# 运行测试
|
|
169
|
+
dotnet test JavManager.Tests/JavManager.Tests.csproj
|
|
170
|
+
|
|
171
|
+
# 发布(多 RID,自包含,输出到 artifacts/publish/<rid>/)
|
|
172
|
+
pwsh scripts/publish.ps1
|
|
173
|
+
|
|
174
|
+
# 安装到 PATH(Windows)
|
|
175
|
+
pwsh scripts/install-windows.ps1 -AddToPath
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Android(实验性)
|
|
179
|
+
|
|
180
|
+
Android 构建是可选的(这样桌面构建就不要求 Android 工作负载)。
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
# 安装工作负载(一次)
|
|
184
|
+
dotnet workload install android
|
|
185
|
+
|
|
186
|
+
# 构建 Android 目标(需要配置 Android SDK/JDK)
|
|
187
|
+
dotnet build JavManager/JavManager.csproj -c Debug -f net10.0-android -p:EnableAndroid=true
|
|
188
|
+
```
|