Abuse-Schutz fertig

Dieser Commit ist enthalten in:
Claude Project Manager
2025-11-10 03:09:35 +01:00
Ursprung 52dc7b262a
Commit 14eefa18f6
13 geänderte Dateien mit 553 neuen und 33 gelöschten Zeilen

Datei anzeigen

@ -34,20 +34,75 @@ class AccountCard(QFrame):
self.email_copy_timer.timeout.connect(self._restore_email_copy_icon)
self.password_copy_timer = QTimer()
self.password_copy_timer.timeout.connect(self._restore_password_copy_icon)
# Feature 5: Timer für periodische Guard-Status-Prüfung
self.guard_check_timer = QTimer()
self.guard_check_timer.timeout.connect(self.update_login_button_state)
self.guard_check_timer.start(2000) # Alle 2 Sekunden prüfen
# Original Icons speichern
self.copy_icon = None
self.check_icon = None
self.init_ui()
if self.language_manager:
self.language_manager.language_changed.connect(self.update_texts)
self.update_texts()
# Feature 5: Initiale Button-Status-Prüfung
self.update_login_button_state()
def _on_login_clicked(self):
"""Handler für Login-Button"""
# Feature 5: Prüfe Guard-Status vor Login
from utils.process_guard import get_guard
guard = get_guard()
platform = self.account_data.get("platform", "Unknown")
can_start, error_msg = guard.can_start("Account-Login", platform)
if not can_start:
# Zeige benutzerfreundliche Fehlermeldung
from views.widgets.modern_message_box import show_error
show_error(self, "Login blockiert", error_msg)
return
self.login_requested.emit(self.account_data)
def _on_export_clicked(self):
"""Handler für Export-Button"""
# Feature 5: Prüfe Guard-Status vor Export
from utils.process_guard import get_guard
guard = get_guard()
platform = self.account_data.get("platform", "Unknown")
can_start, error_msg = guard.can_start("Profil-Export", platform)
if not can_start:
# Zeige benutzerfreundliche Fehlermeldung
from views.widgets.modern_message_box import show_error
show_error(self, "Export blockiert", error_msg)
return
self.export_requested.emit(self.account_data)
def _on_delete_clicked(self):
"""Handler für Delete-Button"""
# Feature 5: Prüfe Guard-Status vor Löschen
from utils.process_guard import get_guard
guard = get_guard()
platform = self.account_data.get("platform", "Unknown")
can_start, error_msg = guard.can_start("Account-Löschen", platform)
if not can_start:
# Zeige benutzerfreundliche Fehlermeldung
from views.widgets.modern_message_box import show_error
show_error(self, "Löschen blockiert", error_msg)
return
self.delete_requested.emit(self.account_data)
def init_ui(self):
"""Initialisiert die UI nach Styleguide"""
@ -191,7 +246,7 @@ class AccountCard(QFrame):
self.export_btn = QPushButton("Profil\nexportieren")
self.export_btn.setCursor(Qt.PointingHandCursor)
self.export_btn.setObjectName("account_export_btn") # For QSS targeting
self.export_btn.clicked.connect(lambda: self.export_requested.emit(self.account_data))
self.export_btn.clicked.connect(self._on_export_clicked)
actions_layout.addWidget(self.export_btn)
actions_layout.addStretch()
@ -200,7 +255,7 @@ class AccountCard(QFrame):
self.delete_btn = QPushButton("Löschen")
self.delete_btn.setCursor(Qt.PointingHandCursor)
self.delete_btn.setObjectName("account_delete_btn") # For QSS targeting
self.delete_btn.clicked.connect(lambda: self.delete_requested.emit(self.account_data))
self.delete_btn.clicked.connect(self._on_delete_clicked)
actions_layout.addWidget(self.delete_btn)
layout.addLayout(actions_layout)
@ -239,7 +294,37 @@ class AccountCard(QFrame):
# Timer starten um nach 2 Sekunden zurückzuwechseln
self.email_copy_timer.stop()
self.email_copy_timer.start(2000)
def update_login_button_state(self):
"""
Feature 5: Aktualisiert ALLE Button-Status basierend auf Process Guard.
Deaktiviert Login, Export und Delete wenn Guard locked ist oder Pause aktiv ist.
"""
from utils.process_guard import get_guard
guard = get_guard()
# Prüfe ob blockiert
is_locked = guard.is_locked()
is_paused = guard.is_paused()
is_blocked = is_locked or is_paused
# Alle Buttons entsprechend setzen
self.login_btn.setEnabled(not is_blocked)
self.export_btn.setEnabled(not is_blocked)
self.delete_btn.setEnabled(not is_blocked)
# Tooltips setzen
if is_blocked:
status_msg = guard.get_status_message()
self.login_btn.setToolTip(f"{status_msg}")
self.export_btn.setToolTip(f"{status_msg}")
self.delete_btn.setToolTip(f"{status_msg}")
else:
# Reset Tooltips
self.login_btn.setToolTip("Login durchführen")
self.export_btn.setToolTip("Profil exportieren")
self.delete_btn.setToolTip("Account löschen")
def update_texts(self):
"""Aktualisiert die Texte gemäß der aktuellen Sprache"""
if not self.language_manager: