Files

113 lines
4.4 KiB
Python
Raw Permalink Normal View History

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()