import sys import os 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 = os.path.basename(filepath) 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 if self.upload_thread is not None and self.upload_thread.isRunning(): self.window.status_label.setText("状态: 上传进行中,请等待") return expiry = self.window.expiry_combo.currentText() self.window.progress_bar.setVisible(True) 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.finished.connect(self.upload_thread.deleteLater) 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()