Files
EZProxy/child/ui/setup_dialog.py
2025-11-10 17:29:11 +08:00

85 lines
3.0 KiB
Python

from PyQt5.QtWidgets import (
QDialog, QVBoxLayout, QHBoxLayout, QLabel,
QLineEdit, QPushButton, QMessageBox
)
from PyQt5.QtCore import Qt
from urllib.parse import urlparse
class SetupDialog(QDialog):
def __init__(self, app_context, parent=None):
super().__init__(parent)
self.app_context = app_context
self.setWindowTitle("设置代理地址")
self.setMinimumWidth(500)
layout = QVBoxLayout()
# 说明标签
desc_label = QLabel("请输入您的VLESS代理地址 (格式: vless://...)")
desc_label.setWordWrap(True)
layout.addWidget(desc_label)
# 代理地址输入
self.url_input = QLineEdit()
self.url_input.setPlaceholderText("vless://uuid@server:port?type=tcp&security=reality&...")
layout.addWidget(self.url_input)
# 按钮布局
btn_layout = QHBoxLayout()
self.test_btn = QPushButton("测试连接")
self.test_btn.clicked.connect(self.test_connection)
self.save_btn = QPushButton("保存并继续")
self.save_btn.clicked.connect(self.save_and_continue)
self.cancel_btn = QPushButton("取消")
self.cancel_btn.clicked.connect(self.reject)
btn_layout.addWidget(self.test_btn)
btn_layout.addStretch()
btn_layout.addWidget(self.save_btn)
btn_layout.addWidget(self.cancel_btn)
layout.addLayout(btn_layout)
self.setLayout(layout)
def test_connection(self):
"""测试代理连接"""
url = self.url_input.text().strip()
if not url:
QMessageBox.warning(self, "输入错误", "请输入代理地址")
return
if not url.startswith('vless://'):
QMessageBox.warning(self, "格式错误", "代理地址必须以 vless:// 开头")
return
try:
parsed = urlparse(url)
if not parsed.hostname or not parsed.port:
raise ValueError("无效的服务器地址或端口")
QMessageBox.information(self, "测试成功",
f"代理地址解析成功:\n服务器: {parsed.hostname}\n端口: {parsed.port}")
except Exception as e:
QMessageBox.warning(self, "测试失败", f"代理地址格式错误: {str(e)}")
def save_and_continue(self):
"""保存配置并继续"""
url = self.url_input.text().strip()
if not url:
QMessageBox.warning(self, "输入错误", "请输入代理地址")
return
if not url.startswith('vless://'):
QMessageBox.warning(self, "格式错误", "代理地址必须以 vless:// 开头")
return
# 保存到配置
config = self.app_context.config
config['proxy_url'] = url
# 保存配置文件
if not save_config(config):
QMessageBox.critical(self, "保存失败", "无法保存配置文件")
return
self.accept()