From 2f23dce4ace438b39dd9806ae6aac882326fd3d9 Mon Sep 17 00:00:00 2001 From: OpenCode Bot Date: Sun, 24 May 2026 22:56:24 +0800 Subject: [PATCH] feat: add main entry point with upload logic --- temp_file_trans_client/main.py | 108 +++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 temp_file_trans_client/main.py diff --git a/temp_file_trans_client/main.py b/temp_file_trans_client/main.py new file mode 100644 index 0000000..36bfa90 --- /dev/null +++ b/temp_file_trans_client/main.py @@ -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() \ No newline at end of file