102 Zeilen
4.5 KiB
Python
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) |