Skip to content

Commit 8216307

Browse files
committed
[add] 支持配置代理
1 parent 58590e8 commit 8216307

7 files changed

Lines changed: 534 additions & 3 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
## 更新记录
2525

26+
* 2025.8.24 - v1.7.0 支持自动检查更新,登录界面支持配置github代理
2627
* 2025.8.24 - v1.6.4 mpv配置管理抽为单独仓库,支持Anime4K着色器预设方案
2728
* 2025.8.23 - v1.6.3 优化mpv启动参数,固定启动时的初始窗口大小
2829
* 2025.8.22 - v1.6.2 修改部分快捷键为potplayer常用键位,mpv播放器改为无边框

docs/download-proxy.md

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
# 下载代理功能说明
2+
3+
## 功能概述
4+
为更新检查的文件下载添加了可配置的代理功能,采用小巧美观的UI设计,用于解决GitHub下载速度慢的问题。
5+
6+
## 功能特点
7+
- ✅ 仅用于文件下载,不影响API请求
8+
- ✅ 美观的齿轮按钮设计,位于右上角
9+
- ✅ 弹出式设置面板,简洁易用
10+
- ✅ 支持启用/禁用代理切换开关
11+
- ✅ 代理URL可配置,支持多种代理服务
12+
- ✅ 默认开启代理,开箱即用
13+
- ✅ 配置持久化保存
14+
- ✅ 点击外部自动关闭面板
15+
16+
## 使用方法
17+
18+
### 1. 打开代理设置
19+
1. 点击登录页面右上角的齿轮图标⚙️
20+
2. 弹出代理设置面板
21+
22+
### 2. 配置代理
23+
1. **启用开关**:控制是否使用代理(默认开启)
24+
2. **代理地址**:输入代理URL(默认:`https://ghfast.top`
25+
3. 点击"保存"按钮确认设置
26+
27+
### 3. 支持的代理服务
28+
- **ghfast.top** - `https://ghfast.top` (推荐,默认)
29+
- **gh.api.99988866.xyz** - `https://gh.api.99988866.xyz`
30+
- **github.moeyy.xyz** - `https://github.moeyy.xyz`
31+
- **hub.fastgit.xyz** - `https://hub.fastgit.xyz`
32+
- 或其他GitHub代理服务
33+
34+
## UI设计特点
35+
36+
### 齿轮按钮
37+
- 位置:登录页面右上角
38+
- 样式:半透明圆形按钮,毛玻璃效果
39+
- 交互:悬停时旋转90度,优雅动画
40+
41+
### 设置面板
42+
- 位置:齿轮按钮下方
43+
- 样式:现代化卡片设计,毛玻璃背景
44+
- 动画:淡入淡出 + 滑动效果
45+
- 功能:点击外部自动关闭
46+
47+
### 开关控件
48+
- 类型:iOS风格滑动开关
49+
- 状态:蓝色激活,灰色禁用
50+
- 默认:开启状态
51+
52+
## 配置存储
53+
54+
### 数据结构
55+
```json
56+
{
57+
"downloadProxyEnabled": true,
58+
"downloadProxy": "https://ghfast.top",
59+
"account": "...",
60+
"domain": "...",
61+
...
62+
}
63+
```
64+
65+
### 默认值
66+
- `downloadProxyEnabled`: `true` (默认开启)
67+
- `downloadProxy`: `"https://ghfast.top"`
68+
69+
## 技术实现
70+
71+
### 前端界面
72+
- **CSS**:现代化设计,毛玻璃效果,平滑动画
73+
- **JavaScript**:面板切换,事件处理,IPC通信
74+
- **交互**:点击外部关闭,键盘友好
75+
76+
### 后端逻辑
77+
- **配置管理**:支持enabled和proxyUrl两个字段
78+
- **代理应用**:只在enabled=true时应用代理
79+
- **错误处理**:配置失败时自动回退
80+
81+
### API接口
82+
```javascript
83+
// 获取配置
84+
getDownloadProxyConfig() // 返回 {enabled, proxyUrl}
85+
86+
// 设置配置
87+
setDownloadProxyConfig({enabled, proxyUrl})
88+
89+
// IPC事件
90+
'get-download-proxy' -> 'download-proxy-info'
91+
'set-download-proxy' -> 'download-proxy-set'
92+
```
93+
94+
## 代理工作原理
95+
96+
### 启用代理时
97+
```
98+
原始: https://github.com/owner/repo/releases/download/v1.0.0/app.exe
99+
代理: https://ghfast.top/https://github.com/owner/repo/releases/download/v1.0.0/app.exe
100+
```
101+
102+
### 禁用代理时
103+
```
104+
使用原始链接,不经过代理
105+
```
106+
107+
## 日志输出
108+
109+
### 启用代理
110+
```
111+
使用代理下载链接: https://ghfast.top/https://github.com/...
112+
```
113+
114+
### 禁用代理
115+
```
116+
使用原始下载链接: https://github.com/...
117+
```
118+
119+
### 配置变更
120+
```
121+
代理设置保存成功
122+
```
123+
124+
## 注意事项
125+
126+
1. **默认开启**:首次使用会自动启用代理
127+
2. **GitHub专用**:只对GitHub域名应用代理
128+
3. **网络要求**:需要代理服务正常工作
129+
4. **配置验证**:URL格式需要正确
130+
5. **向后兼容**:保持旧版本配置兼容性
131+
132+
## 故障排除
133+
134+
### 代理不生效
135+
1. 检查开关是否开启
136+
2. 验证代理URL格式
137+
3. 尝试其他代理服务
138+
4. 查看控制台日志
139+
140+
### 面板显示异常
141+
1. 刷新页面重试
142+
2. 检查浏览器兼容性
143+
3. 清除缓存重启应用
144+
145+
### 保存失败
146+
1. 检查配置文件权限
147+
2. 确认磁盘空间充足
148+
3. 查看错误日志详情

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "fntv",
3-
"version": "1.6.3",
3+
"version": "1.7.0",
44
"description": "A fntv app built with Electron",
55
"main": "src/main/main.js",
66
"scripts": {

src/main/eventHandlers.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,28 @@ function handleGetVersion() {
331331
});
332332
}
333333

334+
// 处理下载代理设置
335+
function handleDownloadProxy() {
336+
// 获取当前代理设置
337+
ipcMain.on('get-download-proxy', (event) => {
338+
const proxyConfig = fnConfig.getDownloadProxyConfig();
339+
event.reply('download-proxy-info', proxyConfig);
340+
});
341+
342+
// 设置代理配置
343+
ipcMain.on('set-download-proxy', (event, { enabled, proxyUrl }) => {
344+
try {
345+
fnConfig.setDownloadProxyConfig({
346+
enabled: enabled !== false,
347+
proxyUrl: proxyUrl || 'https://ghfast.top'
348+
});
349+
event.reply('download-proxy-set', { success: true });
350+
} catch (error) {
351+
event.reply('download-proxy-set', { success: false, error: error.message });
352+
}
353+
});
354+
}
355+
334356
// 注册所有IPC处理器的聚合函数
335357
function registerIpcHandlers() {
336358
handleLogin();
@@ -341,6 +363,7 @@ function registerIpcHandlers() {
341363
handleCheckUpdate();
342364
handleAutoCheckUpdate();
343365
handleGetVersion();
366+
handleDownloadProxy();
344367
}
345368

346369
module.exports = {

src/modules/fn_config/config.js

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,42 @@ function deleteHistoryItem({ domain, account }) {
115115
return false;
116116
}
117117

118+
// 获取下载代理配置
119+
function getDownloadProxyConfig() {
120+
const config = readConfig() || {};
121+
return {
122+
enabled: config.downloadProxyEnabled !== false, // 默认开启
123+
proxyUrl: config.downloadProxy || 'https://ghfast.top'
124+
};
125+
}
126+
127+
// 设置下载代理配置
128+
function setDownloadProxyConfig({ enabled = true, proxyUrl = 'https://ghfast.top' }) {
129+
const config = readConfig() || {};
130+
config.downloadProxyEnabled = enabled;
131+
config.downloadProxy = proxyUrl;
132+
fs.writeFileSync(getConfigPath(), JSON.stringify(config, null, 2));
133+
}
134+
135+
// 向后兼容的函数
136+
function getDownloadProxyUrl() {
137+
return getDownloadProxyConfig().proxyUrl;
138+
}
139+
140+
function setDownloadProxyUrl(proxyUrl) {
141+
const current = getDownloadProxyConfig();
142+
setDownloadProxyConfig({ enabled: current.enabled, proxyUrl });
143+
}
144+
118145
module.exports = {
119146
saveConfig,
120147
readConfig,
121148
addHistory,
122149
getHistory,
123150
clearHistory,
124-
deleteHistoryItem
151+
deleteHistoryItem,
152+
getDownloadProxyUrl,
153+
setDownloadProxyUrl,
154+
getDownloadProxyConfig,
155+
setDownloadProxyConfig
125156
};

src/modules/updater/updateChecker.js

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const axios = require('axios');
22
const { dialog, shell } = require('electron');
3+
const { getDownloadProxyConfig } = require('../fn_config/config');
34

45
// 尝试获取app模块,在非Electron环境中可能失败
56
let app;
@@ -124,7 +125,30 @@ class UpdateChecker {
124125
}
125126

126127
const asset = assets.find(asset => pattern.test(asset.name));
127-
return asset ? asset.browser_download_url : null;
128+
if (!asset) {
129+
return null;
130+
}
131+
132+
// 获取原始下载链接
133+
const originalUrl = asset.browser_download_url;
134+
135+
// 尝试获取代理配置并应用到下载链接
136+
try {
137+
const proxyConfig = getDownloadProxyConfig();
138+
if (proxyConfig.enabled && proxyConfig.proxyUrl && proxyConfig.proxyUrl.trim() !== '') {
139+
// 如果原始URL包含github.com,则使用代理
140+
if (originalUrl.includes('github.com')) {
141+
const proxiedUrl = `${proxyConfig.proxyUrl.replace(/\/$/, '')}/${originalUrl}`;
142+
console.log(`使用代理下载链接: ${proxiedUrl}`);
143+
return proxiedUrl;
144+
}
145+
}
146+
} catch (error) {
147+
console.log('获取代理配置失败,使用原始下载链接:', error.message);
148+
}
149+
150+
console.log(`使用原始下载链接: ${originalUrl}`);
151+
return originalUrl;
128152
}
129153

130154
/**

0 commit comments

Comments
 (0)