279 lines
9.6 KiB
Python
279 lines
9.6 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
测试待删除项目功能
|
||
"""
|
||
|
||
import sys
|
||
import os
|
||
import tempfile
|
||
import shutil
|
||
from datetime import datetime
|
||
|
||
# 添加MetaCore目录到Python路径
|
||
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||
metacore_dir = os.path.join(current_dir, '..', 'MetaCore')
|
||
sys.path.insert(0, metacore_dir)
|
||
|
||
from PyQt5.QtWidgets import *
|
||
from PyQt5.QtCore import *
|
||
from PyQt5.QtGui import *
|
||
|
||
from data.project_manager import ProjectManager, Project
|
||
from ui.project_card import ProjectCard
|
||
from ui.styles import StyleSheet
|
||
|
||
|
||
class PendingDeleteTestWindow(QMainWindow):
|
||
"""待删除功能测试窗口"""
|
||
|
||
def __init__(self):
|
||
super().__init__()
|
||
self.setWindowTitle("待删除项目功能测试")
|
||
self.setGeometry(100, 100, 1000, 700)
|
||
|
||
# 应用深色主题样式
|
||
self.setStyleSheet(StyleSheet.get_main_style())
|
||
|
||
# 创建临时目录用于测试
|
||
self.temp_dir = tempfile.mkdtemp(prefix="metacore_test_")
|
||
|
||
# 创建测试项目
|
||
self.create_test_projects()
|
||
|
||
# 设置UI
|
||
self.setup_ui()
|
||
|
||
def create_test_projects(self):
|
||
"""创建测试项目"""
|
||
self.project_manager = ProjectManager()
|
||
|
||
# 创建一个真实的项目目录
|
||
self.test_project_dir = os.path.join(self.temp_dir, "测试项目")
|
||
os.makedirs(self.test_project_dir, exist_ok=True)
|
||
|
||
# 创建一些测试文件
|
||
with open(os.path.join(self.test_project_dir, "README.md"), 'w', encoding='utf-8') as f:
|
||
f.write("# 测试项目\n这是一个用于测试待删除功能的项目。")
|
||
|
||
# 创建测试项目
|
||
test_project = Project(
|
||
id=999,
|
||
title="测试项目",
|
||
date=datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
||
type="test",
|
||
image="🧪",
|
||
path=self.temp_dir,
|
||
project_dir=self.test_project_dir,
|
||
description="用于测试待删除功能的项目",
|
||
status="normal"
|
||
)
|
||
|
||
self.project_manager.projects.append(test_project)
|
||
self.test_project = test_project
|
||
|
||
def setup_ui(self):
|
||
"""设置用户界面"""
|
||
central_widget = QWidget()
|
||
self.setCentralWidget(central_widget)
|
||
|
||
# 主布局
|
||
main_layout = QVBoxLayout(central_widget)
|
||
main_layout.setContentsMargins(20, 20, 20, 20)
|
||
main_layout.setSpacing(20)
|
||
|
||
# 标题
|
||
title_label = QLabel("待删除项目功能测试")
|
||
title_label.setStyleSheet("""
|
||
font-size: 24px;
|
||
font-weight: bold;
|
||
color: #ffffff;
|
||
margin-bottom: 10px;
|
||
""")
|
||
main_layout.addWidget(title_label)
|
||
|
||
# 说明文字
|
||
desc_label = QLabel(
|
||
"测试流程:\n"
|
||
"1. 点击「删除项目目录」按钮模拟项目目录被删除\n"
|
||
"2. 等待5秒,系统会检测到项目目录不存在\n"
|
||
"3. 在弹出的对话框中点击「No」保留项目\n"
|
||
"4. 观察项目卡片变浅,菜单按钮变成叉号\n"
|
||
"5. 重要:系统不会再次弹窗提示(已修复)\n"
|
||
"6. 点击「恢复项目目录」按钮恢复项目目录\n"
|
||
"7. 🆕 系统会自动检测并恢复项目(无需点击)\n"
|
||
"8. 或者点击叉号按钮永久删除项目"
|
||
)
|
||
desc_label.setStyleSheet("""
|
||
font-size: 14px;
|
||
color: #cccccc;
|
||
margin-bottom: 20px;
|
||
padding: 15px;
|
||
background-color: rgba(60, 60, 60, 0.5);
|
||
border-radius: 8px;
|
||
""")
|
||
main_layout.addWidget(desc_label)
|
||
|
||
# 控制按钮
|
||
button_layout = QHBoxLayout()
|
||
|
||
self.delete_dir_btn = QPushButton("删除项目目录")
|
||
self.delete_dir_btn.setStyleSheet("""
|
||
QPushButton {
|
||
background-color: #ff6b6b;
|
||
color: white;
|
||
border: none;
|
||
padding: 10px 20px;
|
||
border-radius: 6px;
|
||
font-size: 14px;
|
||
font-weight: bold;
|
||
}
|
||
QPushButton:hover {
|
||
background-color: #ff5252;
|
||
}
|
||
""")
|
||
self.delete_dir_btn.clicked.connect(self.delete_project_directory)
|
||
button_layout.addWidget(self.delete_dir_btn)
|
||
|
||
self.restore_dir_btn = QPushButton("恢复项目目录")
|
||
self.restore_dir_btn.setStyleSheet("""
|
||
QPushButton {
|
||
background-color: #4caf50;
|
||
color: white;
|
||
border: none;
|
||
padding: 10px 20px;
|
||
border-radius: 6px;
|
||
font-size: 14px;
|
||
font-weight: bold;
|
||
}
|
||
QPushButton:hover {
|
||
background-color: #45a049;
|
||
}
|
||
""")
|
||
self.restore_dir_btn.clicked.connect(self.restore_project_directory)
|
||
self.restore_dir_btn.setEnabled(False)
|
||
button_layout.addWidget(self.restore_dir_btn)
|
||
|
||
button_layout.addStretch()
|
||
main_layout.addLayout(button_layout)
|
||
|
||
# 项目卡片容器
|
||
card_container = QWidget()
|
||
card_layout = QHBoxLayout(card_container)
|
||
card_layout.setContentsMargins(10, 10, 10, 10)
|
||
|
||
# 创建项目卡片
|
||
self.project_card = ProjectCard(self.test_project, self.project_manager, "grid")
|
||
card_layout.addWidget(self.project_card)
|
||
card_layout.addStretch()
|
||
|
||
main_layout.addWidget(card_container)
|
||
main_layout.addStretch()
|
||
|
||
# 状态显示
|
||
self.status_label = QLabel("状态:项目目录存在,项目状态正常")
|
||
self.status_label.setStyleSheet("""
|
||
font-size: 12px;
|
||
color: #4caf50;
|
||
padding: 10px;
|
||
background-color: rgba(76, 175, 80, 0.1);
|
||
border-radius: 6px;
|
||
border: 1px solid #4caf50;
|
||
""")
|
||
main_layout.addWidget(self.status_label)
|
||
|
||
# 连接项目管理器信号
|
||
self.project_manager.project_updated.connect(self.on_project_updated)
|
||
|
||
def delete_project_directory(self):
|
||
"""删除项目目录"""
|
||
if os.path.exists(self.test_project_dir):
|
||
shutil.rmtree(self.test_project_dir)
|
||
self.delete_dir_btn.setEnabled(False)
|
||
self.restore_dir_btn.setEnabled(True)
|
||
self.status_label.setText("状态:项目目录已删除,等待系统检测...")
|
||
self.status_label.setStyleSheet("""
|
||
font-size: 12px;
|
||
color: #ff9800;
|
||
padding: 10px;
|
||
background-color: rgba(255, 152, 0, 0.1);
|
||
border-radius: 6px;
|
||
border: 1px solid #ff9800;
|
||
""")
|
||
|
||
def restore_project_directory(self):
|
||
"""恢复项目目录"""
|
||
if not os.path.exists(self.test_project_dir):
|
||
os.makedirs(self.test_project_dir, exist_ok=True)
|
||
|
||
# 重新创建测试文件
|
||
with open(os.path.join(self.test_project_dir, "README.md"), 'w', encoding='utf-8') as f:
|
||
f.write("# 测试项目\n这是一个用于测试待删除功能的项目。\n\n项目目录已恢复!")
|
||
|
||
self.delete_dir_btn.setEnabled(True)
|
||
self.restore_dir_btn.setEnabled(False)
|
||
self.status_label.setText("状态:项目目录已恢复,等待系统自动检测恢复...")
|
||
self.status_label.setStyleSheet("""
|
||
font-size: 12px;
|
||
color: #4caf50;
|
||
padding: 10px;
|
||
background-color: rgba(76, 175, 80, 0.1);
|
||
border-radius: 6px;
|
||
border: 1px solid #4caf50;
|
||
""")
|
||
|
||
def on_project_updated(self, project: Project):
|
||
"""项目更新事件"""
|
||
if project.id == self.test_project.id:
|
||
self.test_project = project
|
||
self.project_card.project = project
|
||
self.project_card.update_display()
|
||
|
||
if project.status == 'pending_delete':
|
||
self.status_label.setText("状态:项目处于待删除状态(卡片变浅,显示叉号)")
|
||
self.status_label.setStyleSheet("""
|
||
font-size: 12px;
|
||
color: #f44336;
|
||
padding: 10px;
|
||
background-color: rgba(244, 67, 54, 0.1);
|
||
border-radius: 6px;
|
||
border: 1px solid #f44336;
|
||
""")
|
||
elif project.status == 'normal':
|
||
self.status_label.setText("状态:项目已恢复正常状态")
|
||
self.status_label.setStyleSheet("""
|
||
font-size: 12px;
|
||
color: #4caf50;
|
||
padding: 10px;
|
||
background-color: rgba(76, 175, 80, 0.1);
|
||
border-radius: 6px;
|
||
border: 1px solid #4caf50;
|
||
""")
|
||
|
||
def closeEvent(self, event):
|
||
"""窗口关闭事件"""
|
||
# 清理临时目录
|
||
if os.path.exists(self.temp_dir):
|
||
shutil.rmtree(self.temp_dir)
|
||
event.accept()
|
||
|
||
|
||
def main():
|
||
"""主函数"""
|
||
app = QApplication(sys.argv)
|
||
|
||
# 设置应用程序信息
|
||
app.setApplicationName("待删除功能测试")
|
||
app.setApplicationVersion("1.0.0")
|
||
|
||
# 创建并显示测试窗口
|
||
window = PendingDeleteTestWindow()
|
||
window.show()
|
||
|
||
# 运行应用程序
|
||
sys.exit(app.exec_())
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|