108 lines
4.2 KiB
Python
108 lines
4.2 KiB
Python
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() |