Files
ClaudeProjectManager-main/gui/handlers/project_manager.py
Claude Project Manager ec92da8a64 Initial commit
2025-07-07 22:11:38 +02:00

102 Zeilen
4.5 KiB
Python

"""
Project Manager Handler
Handles project CRUD operations and project-related UI updates
"""
from typing import Optional, TYPE_CHECKING
from utils.logger import logger
if TYPE_CHECKING:
from gui.main_window import MainWindow
from project_manager import Project
class ProjectManagerHandler:
"""Handles all project management operations for MainWindow"""
def __init__(self, main_window: 'MainWindow'):
"""Initialize with reference to main window"""
self.main_window = main_window
self.root = main_window.root
self.project_manager = main_window.project_manager
self.terminal_launcher = main_window.terminal_launcher
self.readme_generator = main_window.readme_generator
self.vps_connection = main_window.vps_connection
logger.info("ProjectManagerHandler initialized")
def add_new_project(self) -> None:
"""Add a new project with logging"""
logger.info("Add new project initiated")
return self.main_window._original_add_new_project()
def open_project(self, project: 'Project') -> None:
"""Open a project with comprehensive logging"""
logger.info(f"Opening project: {project.name} (ID: {project.id}) at {project.path}")
return self.main_window._original_open_project(project)
def delete_project(self, project: 'Project') -> None:
"""Delete a project"""
# Direct implementation
from tkinter import messagebox
logger.info(f"Attempting to delete project: {project.name}")
if messagebox.askyesno("Projekt löschen",
f"Möchten Sie das Projekt '{project.name}' wirklich aus dem Projekt-Manager entfernen?\n\n"
"Hinweis: Die Dateien werden NICHT gelöscht."):
self.project_manager.remove_project(project.id)
self.main_window.refresh_projects()
if hasattr(self.main_window, 'update_status'):
self.main_window.update_status(f"Removed: {project.name}")
logger.info(f"Project deleted: {project.name}")
def rename_project(self, project: 'Project') -> None:
"""Rename a project with logging"""
logger.info(f"Rename project initiated for: {project.name}")
return self.main_window._original_rename_project(project)
def refresh_projects(self) -> None:
"""Refresh the project display with logging"""
logger.debug("Refresh projects called")
logger.info(f"Refreshing projects - Total: {len(self.project_manager.projects)}")
return self.main_window._original_refresh_projects()
def create_project_from_repo(self, repo_data: dict, project_path: str) -> None:
"""Create a project from repository data"""
return self.main_window._original_create_project_from_repo(repo_data, project_path)
def open_vps_connection(self, project: 'Project') -> None:
"""Open VPS connection for project"""
return self.main_window._original_open_vps_connection(project)
def open_admin_panel(self, project: 'Project') -> None:
"""Open admin panel for project"""
return self.main_window._original_open_admin_panel(project)
def open_vps_docker(self, project: 'Project') -> None:
"""Open VPS Docker management"""
return self.main_window._original_open_vps_docker(project)
def open_readme(self, project: 'Project') -> None:
"""Open or generate README for project"""
return self.main_window._original_open_readme(project)
def generate_readme_background(self, project: 'Project') -> None:
"""Generate README in background"""
return self.main_window._original_generate_readme_background(project)
def open_gitea_window(self) -> None:
"""Open Gitea explorer window"""
return self.main_window._original_open_gitea_window()
def on_gitea_repo_select(self, repo_data: dict) -> None:
"""Handle Gitea repository selection"""
return self.main_window._original_on_gitea_repo_select(repo_data)
def clear_project_selection(self) -> None:
"""Clear current project selection"""
return self.main_window._original_clear_project_selection()
def on_project_select(self, project: 'Project', tile) -> None:
"""Handle project selection with logging"""
logger.info(f"Project selected: {project.name} (has Gitea repo: {bool(getattr(project, 'gitea_repo', None))})")
return self.main_window._original_on_project_select(project, tile)