feat: add main entry point with upload logic
This commit is contained in:
108
temp_file_trans_client/main.py
Normal file
108
temp_file_trans_client/main.py
Normal file
@@ -0,0 +1,108 @@
|
||||
import sys
|
||||
from PySide6.QtWidgets import QApplication, QMessageBox, QMainWindow
|
||||
from PySide6.QtCore import QThread, Signal
|
||||
from ui import UiCreator
|
||||
from api import load_config, save_config, upload_file, get_file_info
|
||||
|
||||
class UploadThread(QThread):
|
||||
finished = Signal(dict)
|
||||
error = Signal(str)
|
||||
progress = Signal(int)
|
||||
|
||||
def __init__(self, filepath, expiry, server_url):
|
||||
super().__init__()
|
||||
self.filepath = filepath
|
||||
self.expiry = expiry
|
||||
self.server_url = server_url
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
self.progress.emit(50)
|
||||
result = upload_file(self.filepath, self.expiry, self.server_url)
|
||||
self.progress.emit(100)
|
||||
self.finished.emit(result)
|
||||
except Exception as e:
|
||||
self.error.emit(str(e))
|
||||
|
||||
class MainWindow:
|
||||
def __init__(self):
|
||||
self.app = QApplication(sys.argv)
|
||||
self.window = QMainWindow()
|
||||
|
||||
config = load_config()
|
||||
self.server_url = config.get('server_url', 'http://localhost:5000')
|
||||
self.selected_file = None
|
||||
self.upload_thread = None
|
||||
|
||||
central = UiCreator.create_main_ui(self.window)
|
||||
|
||||
self.window.server_input.setText(self.server_url)
|
||||
self.window.save_btn.clicked.connect(self.save_server_config)
|
||||
self.window.upload_btn.clicked.connect(self.start_upload)
|
||||
self.window.copy_btn.clicked.connect(self.copy_result)
|
||||
|
||||
self.window.drop_zone.file_dropped.connect(self.on_file_selected)
|
||||
|
||||
def save_server_config(self):
|
||||
self.server_url = self.window.server_input.text().strip()
|
||||
config = {"server_url": self.server_url, "default_expiry": "24h"}
|
||||
save_config(config)
|
||||
self.window.status_label.setText("状态: 配置已保存")
|
||||
|
||||
def on_file_selected(self, filepath):
|
||||
self.selected_file = filepath
|
||||
filename = filepath.split('/')[-1] if '/' in filepath else filepath.split('\\')[-1]
|
||||
self.window.drop_label.setText(f"已选择: {filename}")
|
||||
self.window.status_label.setText(f"状态: 已选择文件: {filename}")
|
||||
|
||||
def start_upload(self):
|
||||
if not self.selected_file:
|
||||
self.window.status_label.setText("状态: 请先选择文件")
|
||||
return
|
||||
|
||||
expiry = self.window.expiry_combo.currentText()
|
||||
self.window.progress_bar.setVisible(True)
|
||||
self.window.progress_bar.setValue(30)
|
||||
self.window.upload_btn.setEnabled(False)
|
||||
self.window.status_label.setText("状态: 上传中...")
|
||||
|
||||
self.upload_thread = UploadThread(self.selected_file, expiry, self.server_url)
|
||||
self.upload_thread.finished.connect(self.on_upload_success)
|
||||
self.upload_thread.error.connect(self.on_upload_error)
|
||||
self.upload_thread.progress.connect(self.window.progress_bar.setValue)
|
||||
self.upload_thread.start()
|
||||
|
||||
def on_upload_success(self, result):
|
||||
self.window.progress_bar.setVisible(False)
|
||||
self.window.upload_btn.setEnabled(True)
|
||||
|
||||
share_url = result.get('share_url', '')
|
||||
file_id = result.get('id', '')
|
||||
filename = result.get('filename', '')
|
||||
filesize = result.get('filesize', 0)
|
||||
|
||||
result_text = f"✅ 上传成功!\n\n文件: {filename}\n大小: {filesize:,} 字节\n\n分享链接:\n{share_url}\n\n文件ID: {file_id}"
|
||||
self.window.result_area.setPlainText(result_text)
|
||||
self.window.result_area.setVisible(True)
|
||||
self.window.copy_btn.setVisible(True)
|
||||
self.window.share_url = share_url
|
||||
self.window.status_label.setText("状态: 上传完成")
|
||||
|
||||
def on_upload_error(self, error_msg):
|
||||
self.window.progress_bar.setVisible(False)
|
||||
self.window.upload_btn.setEnabled(True)
|
||||
self.window.status_label.setText(f"状态: 上传失败")
|
||||
QMessageBox.critical(self.window, "上传失败", error_msg)
|
||||
|
||||
def copy_result(self):
|
||||
if hasattr(self.window, 'share_url'):
|
||||
clipboard = self.app.clipboard()
|
||||
clipboard.setText(self.window.share_url)
|
||||
self.window.status_label.setText("状态: 链接已复制到剪贴板")
|
||||
|
||||
def run(self):
|
||||
self.window.show()
|
||||
sys.exit(self.app.exec())
|
||||
|
||||
if __name__ == '__main__':
|
||||
MainWindow().run()
|
||||
Reference in New Issue
Block a user