Initial commit
Dieser Commit ist enthalten in:
102
gui/handlers/project_manager.py
Normale Datei
102
gui/handlers/project_manager.py
Normale Datei
@ -0,0 +1,102 @@
|
||||
"""
|
||||
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)
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren